代碼質量的檢測插件有很多,這里只拿最基本的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服務端會返回不規范代碼所在行號及代碼的錯誤