代码质量的检测插件有很多,这里只拿最基本的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服务端会返回不规范代码所在行号及代码的错误