PHPMD 是 PHP Depend 的衍生項目,旨在成為著名的 Java 工具 PMD 的 PHP 等價物。 PHPMD 可以被視為一個用戶友好的前端應用程序,用於由 PHP Depend 測量的原始指標流。
https://phpmd.org
請參閱 https://phpmd.org/download/index.html
輸入phpmd [filename|directory[,filename|directory[,...]]] [report format] [ruleset file]
,即:
mapi@arwen ~ $ phpmd php/PDepend/DbusUI/ xml 規則集.xml
雖然rulesets.xml
規則集文件可能如下所示:
<? xml version = " 1.0 " ?>
< ruleset name = " My first PHPMD rule set "
xmlns = " https://phpmd.org/xml/ruleset/1.0.0 "
xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : schemaLocation = " https://phpmd.org/xml/ruleset/1.0.0
http://phpmd.org/xml/ruleset_xml_schema_1.0.0.xsd "
xsi : noNamespaceSchemaLocation = "
http://phpmd.org/xml/ruleset_xml_schema_1.0.0.xsd " >
< description >
My custom rule set that checks my code...
</ description >
< rule ref = " rulesets/codesize.xml " />
< rule ref = " rulesets/cleancode.xml " />
< rule ref = " rulesets/controversial.xml " />
< rule ref = " rulesets/design.xml " />
< rule ref = " rulesets/naming.xml " />
< rule ref = " rulesets/unusedcode.xml " />
</ ruleset >
xml 報告如下所示:
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
< pmd version = " 0.0.1 " timestamp = " 2009-12-19T22:17:18+01:00 " >
< file name = " /projects/pdepend/PHP/Depend/DbusUI/ResultPrinter.php " >
< violation beginline = " 81 "
endline = " 81 "
rule = " UnusedFormalParameter "
ruleset = " Unused Code Rules "
externalInfoUrl = " https://phpmd.org/rules/unusedcode.html#unusedformalparameter "
priority = " 3 " >
Avoid unused parameters such as '$builder'.
</ violation >
</ file >
</ pmd >
您可以將包含 PHP 原始程式碼的檔案名稱清單或目錄名稱的逗號分隔字串傳遞給 PHPMD。
PHPMD Phar 發行版在其檔案中包含規則集文件,即使上面的「rulesets/codesize.xml」參數看起來像是檔案系統參考。
請注意,預設輸出採用 XML 格式,因此您可以將其重定向到檔案並對其進行 XSLT 或其他任何形式
您也可以使用縮寫名稱來引用內建規則集,如下所示:
phpmd PHP/Depend/DbusUI/ xml 程式碼大小
命令列介面也接受以下可選參數:
--verbose, -v, -vv, -vvv
- 輸出詳細等級。將列印正在處理或快取的更多資訊。將傳送至STDERR
以不干擾報告輸出。每個錯誤下的text
輸出還會有一個指向規則文件的鏈接,並以大多數 IDE 會轉換為鏈接的方式格式化位置,單擊該鏈接即可在錯誤行打開文件。--minimumpriority
- 規則優先權閾值;優先順序低於它們的規則將不會被使用。--reportfile
- 將報告輸出傳送到指定文件,而不是預設輸出目標STDOUT
。--suffixes
- 有效原始碼檔案副檔名的逗號分隔字串,例如 php、phtml。--exclude
- 用於忽略目錄的以逗號分隔的模式字串。使用星號按模式排除。例如*src/foo/*.php
或*src/foo/*
--strict
- 也使用 @SuppressWarnings 註解報告這些節點。--ignore-errors-on-exit
- 即使發生錯誤,也會以零代碼退出。--ignore-violations-on-exit
- 即使發現任何違規,也會以零代碼退出。--cache
- 將啟用結果快取。預設為目前工作目錄中的.phpmd.result-cache.php
。--cache-file
- 與--cache
配合會將.phpmd.result-cache.php
的預設結果快取檔案路徑覆寫為給定的檔案路徑。--cache-strategy
- 設定快取策略以確定檔案是否仍然新鮮。要么是基於文件內容的內容,要么是基於文件修改時間戳的時間戳。--generate-baseline
- 將為規則集定義檔旁的現有違規產生phpmd.baseline.xml
。違規的檔案路徑將相對於目前工作目錄。--update-baseline
- 將刪除現有phpmd.baseline.xml
中不再存在的所有違規行為。將不會新增新的違規行為。違規的檔案路徑將相對於目前工作目錄。--baseline-file
- 自訂基線 xml 檔案的檔案路徑。如果不存在將預設為phpmd.baseline.xml
--color
- 在輸出中啟用顏色,例如文字渲染器將以黃色顯示規則名稱,以紅色顯示錯誤描述。--extra-line-in-excerpt
- 指定在 html 格式的程式碼片段中新增多少額外行命令列範例:
phpmd PHP/Depend/DbusUI xml 程式碼大小 --reportfile "phpmd.xml" --suffixes "php,phtml"
選項可以位於參數之前或之後。可以使用空格或等號 ( =
) 將它們與其值分隔開。因此,以下語法與前一個語法等效:
phpmd --reportfile="phpmd.xml" --suffixes="php,phtml" PHP/Depend/DbusUI xml 程式碼大小
以-
開頭的字串將被識別為選項名稱。如果參數以-
開頭,請先設定選項,然後使用--
標記明確開始或參數清單:
phpmd --reportfile "phpmd.xml" --suffixes "php,phtml" -- -foo/Folder xml 程式碼大小
PHPMD 使用所謂的規則集來配置/定義一組將應用於被測來源的規則。 PHPMD 的預設發行版已經附帶了一些預設集,可以開箱即用。您可以使用集合名稱呼叫 PHPMD 的 cli 工具來套用此設定:
~ $ phpmd /path/to/原始文字程式碼大小
但是,如果您想對來源套用多個規則集怎麼辦?您也可以將規則集名稱清單(以逗號分隔)傳遞給 PHPMD 的 cli 工具:
~ $ phpmd /path/to/原始文字程式碼大小,未使用的程式碼,命名
您也可以將自訂規則集檔案與內建規則集混合使用:
~ $ phpmd /path/to/原始文字程式碼大小,/my/rules.xml
就是這樣。透過此行為,您可以指定自己的規則集組合來檢查原始程式碼。
PHPMD 還允許您指定多個來源目錄,以防您想要為程式碼的某些部分建立一個輸出
~ $ phpmd /path/to/code,index.php,/another/place/with/code 文字 codesize
或使用 glob 模式:
~ $ phpmd src/main/php/*/*/*{Renderer,Node}.php 文字 my/rules.xml
PHPMD 也可以讀出標準輸入 stdin:
〜 $ cat src/MyService.php | phpmd - 文字 my/rules.xml
因此,要掃描的PHP代碼可能是由其他程式產生的,不一定儲存在檔案中。
PHPMD 的命令列工具目前定義了四種不同的退出程式碼。
--ignore-violations-on-exit
標誌來防止此行為,即使發現任何違規,該標誌也會導致0 。目前 PHPMD 隨附以下渲染器:
對於現有項目,可以產生違規基線。在此基線中的所有違規行為都將在進一步檢查中被忽略。
建議的方法是在專案根目錄中加入phpmd.xml
。要產生旁邊的phpmd.baseline.xml
:
~ $ phpmd /path/to/來源文字 phpmd.xml --generate-baseline
若要指定匯出的自訂基準檔案路徑:
~ $ phpmd /path/to/來源文字 phpmd.xml --generate-baseline --baseline-file /path/to/source/phpmd.baseline.xml
預設情況下,PHPMD 會在phpmd.xml
旁邊尋找phpmd.baseline.xml
。若要覆寫此行為:
~ $ phpmd /path/to/來源文字 phpmd.xml --baseline-file /path/to/source/phpmd.baseline.xml
要清理現有基準文件並僅刪除不再存在的違規行為:
~ $ phpmd /path/to/來源文字 phpmd.xml --update-baseline
作為 Tidelift 訂閱的一部分提供。
PHPMD
和數千個其他軟體包的維護者正在與 Tidelift 合作,為您用於建立應用程式的開源依賴項提供商業支援和維護。節省時間、降低風險並改善程式碼運作狀況,同時向您使用的確切依賴項的維護人員付費。了解更多。
如果您想為 PHPMD 做出貢獻,請參閱貢獻指南。