PHP代码规范检测 - SVN服务端配置

代码质量的检测插件有很多,这里只拿最基本的PSR做介绍。
长期以来,我们一直再做自己的代码规范,对新入职的员工进行培训。然而,效果却不是特别好。

代码规范不能顺利执行的主要原因有以下几点:

  • 1:技术行业人员流动性太大
  • 2:培训后,没有后续的监督,因此执行情况不乐观
  • 3:有些有争议的点,内部制定的规范很难做出让人信服的标准(比如是用tab还是4个空格,真是一件值得干一架的事)

PSR规范的优势:

  • 1:PSR由一批行业的知名人士制定,基本能使大多数人信服(解决以上第3个问题)
  • 2:PSR规范自带了规范检测程序。代码只需要经过检测程序,就可以知道代码是否符合规范。(解决以上第2个问题)
  • 3:规范检测程序可以安装在svn/git服务端,就算开发人员离职。新的开发人员只需要按照PSR规范来执行即可(解决以上第1个问题)

** PSR还自带了自动修复程序,可以自动修复代码中不规范的地方。以后再介绍在sublime中配置代码的自动检测、修复。以下介绍在svn服务端安装规范检测。安装之后,不符合规范的代码将不再允许提交。**

PSR检测程序在SVN服务端的配置(Linux为例):

  • 1:PSR检测程序“PHP_CodeSniffer”的安装:
    github地址:https://github.com/squizlabs/PHP_CodeSniffer

    • 安装方式一(如果linux服务端已经安装了php的工具pear):

      pear install PHP_CodeSniffer
      

    安装之后 php/bin目录会多3个可执行文件: phpcbf、phpcs、scripts/phpcs-svn-pre-commit。svn服务端主要使用的是:scripts/phpcs-svn-pre-commit*

    • 安装方式二(如果linux服务端已经安装了composer)
      composer global require "squizlabs/php_codesniffer=*"

会安装到目录: ~/.composer/vendor/bin/ 。
但是phpcs-svn-pre-commit不在这个目录,而是在目录 ~/.composer/vendor/squizlabs/php_codesniffer/scripts/。下面使用时要注意目录路径

  • 2:svn服务端配置hooks

      vim /svndir/projectDir/hooks/pre-commit
    
    #!/bin/bash
    REPOS="$1"
    TXN="$2"

    SVNLOOK="/usr/bin/svnlook"
    PHP="/usr/bin/php"

    LOG=$($SVNLOOK log -t "$TXN" "$REPOS")

    if [ "$LOG" = "" ]; then
          echo "Please input log" 1>&2
          exit 1
    fi

    FILES=$($SVNLOOK changed -t "$TXN" "$REPOS" | awk '/^[AU]/ {print $NF}')

    for FILE in $FILES; do
        CONTENT=$($SVNLOOK cat -t "$TXN" "$REPOS" "$FILE")

        if echo "$CONTENT" | grep -q $'\xEF\xBB\xBF'; then
            echo "Please remove BOM from $FILE" 1>&2
            exit 1
        fi

        if [[ "$FILE" =~ \.(php|html)$ ]]; then
            MESSAGE=$(echo "$CONTENT" | $PHP -l 2>&1)

            if [ $? -ne 0 ]; then
                echo "$MESSAGE" | sed "s/ -/ $FILE/g" 1>&2
                exit 1
            fi
        fi
    done

    /path/to/PHP_CodeSniffer/scripts/phpcs-svn-pre-commit "$REPOS" -t "$TXN" 1>&2 || exit 1

    exit 0

3:特别重要:一定要给pre-commit加可执行权限

    chmod +x /path/pre-commit

4:安装之后,写一个不符合PSR规范的代码,执行svn commit试一下,svn服务端会返回不规范代码所在行号及代码的错误

你可能感兴趣的:(PHP代码规范检测 - SVN服务端配置)