美文网首页
2019-11-06 Windows系统下使用PHPCS+PHP

2019-11-06 Windows系统下使用PHPCS+PHP

作者: 赵旻峰 | 来源:发表于2019-11-06 15:42 被阅读0次

    前言

    使用PHPCS+GIT钩子保障团队开发中代码风格一致性实践
    使用PHPMD提高代码质量与可读性
    
    

    0.介绍

    • PHP_CodeSniffer php代码嗅探器
      • 是一个代码风格检测工具,着重代码规范
      • 它包含两类脚本,phpcs 和 phpcbf
        • 包含phpcs(php code standard 代码标准)
        • phpcbf(php code beautify fix 代码美化修复)

    1.安装

    composer global require "squizlabs/php_codesniffer=*"
    

    2.验证是否安装成功并查看帮助

    phpcs --help
    
    image.png

    3.使用

    phpcs path/file.php
    
    image.png

    4.集成到git
    4.1 新增钩子文件
    在 .git\hooks\目录下执行下面的命令

    cp pre-commit.sample  pre-commit
    

    修改其中内容为

    #!/bin/bash
    
    #
    
    # check PHP code syntax error and standard with phpcs
    
    # author : star[github.com/star1989]
    
    # date : 2017-02-24
    
    PROJECT=$(git rev-parse --show-toplevel)
    
    cd $PROJECT
    
    SFILES=$(git diff --cached --name-only --diff-filter=ACMR HEAD | grep \\.php)
    
    TMP_DIR=$PROJECT."/tmp"
    
    # Determine if a file list is passed
    
    if [ "$#" -ne 0 ]
    
    then
    
        exit 0
    
    fi
    
    echo "Checking PHP Lint..."
    
    for FILE in $SFILES
    
    do
    
    #    echo "php -l -d display_errors=0 ${FILE}"
    
    #  echo "git show :$FILE > $TMP_DIR/$FILE"
    
        php -l -d display_errors=0 $FILE
    
        if [ $? != 0  ]
    
        then
    
            echo "Fix the error before commit."
    
            exit 1
    
        fi
    
        FILES="$FILES $PROJECT/$FILE"
    
    done
    
    if [ "$FILES" != "" ]
    
    then
    
        echo "Running Code Sniffer..."
    
        TMP_DIR=/tmp/$(uuidgen)
    
        mkdir -p $TMP_DIR
    
        for FILE in $SFILES
    
        do
    
            mkdir -p $TMP_DIR/$(dirname $FILE)
    
            git show :$FILE > $TMP_DIR/$FILE
    
        done
    
        phpcs --standard=PSR2 --encoding=utf-8 -n $TMP_DIR
    
        PHPCS_ERROR=$?
    
        rm -rf $TMP_DIR
    
        if [ $PHPCS_ERROR != 0 ]
    
        then
    
            echo "Fix the error before commit."
    
            exit 1
    
        fi
    
    fi
    
    exit $?
    
    

    5.在git下使用(git触发检测)

    执行git commit 后会自动检测待提交代码的格式

    image.png

    6.自定义phpcs规则

    有些情况我们需要忽略一些规则或者添加一些自定义的规则,比如有些类不需要命名空间(迁移类),不希望在检测代码时抛出该类型错误

    image

    6.1 添加标准

    
    $ phpcs --config-set installed_paths ruleset.xml
    
    

    6.2 编辑规则内容

    将ruleset.xml放置在项目根目录下,并写入具体规则

    
    <?xml version="1.0"?>
    
    <ruleset name="CustomStandard">
    
      <!-- 代码标准为PSR2 -->
    
    <rule ref="PSR2">
    
        <exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace"/>
    
    </rule>
    
    </ruleset>
    
    

    6.3 修改pre-commit检测方式

    将其中的

    
    phpcs --standard=PSR2 --encoding=utf-8 -n $TMP_DIR
    
    

    改为

    
    phpcs --standard=ruleset.xml -s --encoding=utf-8 -n $TMP_DIR
    
    

    这样就可以跳过命名空间的检测了!快去试试吧

    7.常用命令

    检查单个文件:phpcs /path/to/code
    检查目录下的文件:phpcs /path/to/code/
    查看已经安装的标准:phpcs -i
    设置默认检查标准:phpcs --config-set default_standard /path/to/standard_file
    查看配置:phpcs --config-show
    指定报告格式:phpcs --report=summary /path/to/code ;可用的报告格式有full, xml, checkstyle, csv, json, emacs, source, summary, diff, svnblame, gitblame, hgblame, notifysend,默认为full
    查看帮助:phpcs -h
    自动修复:phpcbf /path/to/code

    8.phpmd 介绍

    • PHP Mess Detector PHP混乱探测器

      • 是一个代码质量检测工具,着重代码质量

    9.安装

    composer global require phpmd/phpmd
    

    10.使用

    $phpmd path\code text codesize,unusedcode,naming,design
    
    参数说明
    # phpmd 源代码路径 报告的格式 规则列表
    # 源代码路径 支持
       一个文件 /path/to/file
       一个目录 /path/to/source 
    # 报告的格式 支持 
        xml:以XML格式输出;
        text:简单的文本格式;
        html:输出到单个的html;
    # 规则列表 支持
        phpmd_ruleset.xml 文件格式
        codesize,unusedcode,naming 单个命令集合
    # 附加参数
      --exclude - 忽略的目录,以逗号分隔多个目录。
    # 例子
    phpmd /path/to/source html ./phpmd_ruleset.xml
    

    11.添加到git钩子

    done
        phpcs --standard=ruleset.xml -s --encoding=utf-8 -n $TMP_DIR
        phpmd $TMP_DIR text codesize,unusedcode,naming,design
    

    相关文章

      网友评论

          本文标题:2019-11-06 Windows系统下使用PHPCS+PHP

          本文链接:https://www.haomeiwen.com/subject/unbubctx.html