Slevomat PHP_CodeSniffer 程式碼標準提供的嗅探分為三類:
= 自動錯誤修復
= 可以在本地抑制嗅探檢查
安裝 Slevomat Coding Standard 的建議方法是透過 Composer。
{
"require-dev" : {
"slevomat/coding-standard" : " ~8.0 "
}
}
也建議安裝 php-parallel-lint/php-parallel-lint,它可以檢查原始程式碼中的語法錯誤。嗅探依賴處理後的程式碼在語法上有效(沒有解析錯誤),否則它們可能會出現意外行為。建議在運行PHP_CodeSniffer
之前在建置工具中執行PHP-Parallel-Lint
,並在PHP-Parallel-Lint
失敗時儘早退出建置過程。
您可以選擇以下兩種方法之一來僅執行程式碼庫標準中選定的嗅探:
建議的方法是透過僅引用選定的嗅探來編寫您自己的ruleset.xml。這是一個範例ruleset.xml:
<? xml version = " 1.0 " ?>
< ruleset name = " AcmeProject " >
< config name = " installed_paths " value = " ../../slevomat/coding-standard " /> <!-- relative path from PHPCS source location -->
< rule ref = " SlevomatCodingStandard.Arrays.TrailingArrayComma " />
<!-- other sniffs to include -->
</ ruleset >
然後以通常的方式運行phpcs
可執行檔:
vendor/bin/phpcs --standard=ruleset.xml --extensions=php --tab-width=4 -sp src tests
您也可以在專案的ruleset.xml
中提及Slevomat Coding Standard並僅排除一些嗅聞:
<? xml version = " 1.0 " ?>
< ruleset name = " AcmeProject " >
< rule ref = " vendor/slevomat/coding-standard/SlevomatCodingStandard/ruleset.xml " > <!-- relative path to your ruleset.xml -->
<!-- sniffs to exclude -->
</ rule >
</ ruleset >
然而,這不是使用 Slevomat Coding Standard 的建議方法,因為在標準的次要版本之間移動時,您的構建可能會中斷(如果您在composer.json
中使用^
或~
版本約束,則可能會發生這種情況)。即使在次要版本中,我們也會定期添加新的嗅探,這意味著您的程式碼很可能不符合軟體包的新次要版本。
本標準中由 符號標記的嗅探支援自動修復編碼標準違規行為。若要自動修復程式碼,請執行 phpcbf 而不是 phpcs:
vendor/bin/phpcbf --standard=ruleset.xml --extensions=php --tab-width=4 -sp src tests
始終記住在執行自動修復之前備份程式碼並親眼檢查結果,因為自動修復程式有時會產生不必要的結果。
可以使用註解對特定碼段抑製本標準中由 符號標記的選定嗅探。考慮以下範例:
/**
* @param int $max
*/
public function createProgressBar ( $ max = 0 ): ProgressBar
{
}
參數$max
可以具有本機int
標量類型提示。但是因為父類別中的方法沒有這個typehint,所以這個也不能有。 PHP_CodeSniffer 顯示下列錯誤:
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
67 | ERROR | [x] Method ErrorsConsoleStyle::createProgressBar()
| | does not have native type hint for its parameter $max
| | but it should be possible to add it based on @param
| | annotation "int".
| | (SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint)
如果我們想抑制這個錯誤而不是修復它,我們可以取得錯誤程式碼( SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
)並將其與@phpcsSuppress
註解一起使用,如下所示:
/**
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
* @param int $max
*/
public function createProgressBar ( $ max = 0 ): ProgressBar
{
}
要使此存儲庫在您的電腦上工作,請克隆它並在存儲庫的根目錄中運行這兩個命令:
composer install
bin/phing
編寫一些程式碼並編輯或新增單元測試後,再次執行 phing 以檢查一切是否正常:
bin/phing
我們始終期待您的錯誤報告、功能請求和拉取請求。謝謝。
該項目遵守貢獻者行為準則。透過參與此項目及其社區,您應該遵守此準則。