PHPMD ist ein Spin-off-Projekt von PHP Depend und soll ein PHP-Äquivalent des bekannten Java-Tools PMD sein. PHPMD kann als benutzerfreundliche Frontend-Anwendung für den von PHP Depend gemessenen Rohmetrikstrom angesehen werden.
https://phpmd.org
Siehe https://phpmd.org/download/index.html
Geben Sie phpmd [filename|directory[,filename|directory[,...]]] [report format] [ruleset file]
ein, also:
mapi@arwen ~ $ phpmd php/PDepend/DbusUI/ xml Rulesets.xml
Während die Regelsatzdatei rulesets.xml
wie folgt aussehen könnte:
<? 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 >
Der XML-Bericht würde so aussehen:
<? 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 >
Sie können eine durch Kommas getrennte Zeichenfolge mit einer Liste von Dateinamen oder Verzeichnisnamen, die PHP-Quellcode enthält, an PHPMD übergeben.
Die PHPMD Phar-Distribution enthält die Regelsatzdateien in ihrem Archiv, auch wenn der obige Parameter „rulesets/codesize.xml“ wie eine Dateisystemreferenz aussieht.
Beachten Sie, dass die Standardausgabe in XML erfolgt, sodass Sie sie in eine Datei umleiten und XSLT oder was auch immer verwenden können
Sie können auch verkürzte Namen verwenden, um auf die integrierten Regelsätze zu verweisen, wie folgt:
phpmd PHP/Depend/DbusUI/ xml-Codegröße
Die Befehlszeilenschnittstelle akzeptiert außerdem die folgenden optionalen Argumente:
--verbose, -v, -vv, -vvv
– Die Ausführlichkeitsstufe der Ausgabe. Gibt weitere Informationen darüber aus, was verarbeitet oder zwischengespeichert wird. Wird an STDERR
gesendet, um die Berichtsausgabe nicht zu beeinträchtigen. text
enthält außerdem unter jedem Fehler einen Link zur Dokumentation der Regel und formatiert den Speicherort so, dass die meisten IDEs ihn in einen Link umwandeln, um die Datei in der Zeile des Fehlers zu öffnen, wenn darauf geklickt wird.--minimumpriority
– Der Regelprioritätsschwellenwert; Regeln mit niedrigerer Priorität werden nicht verwendet.--reportfile
– Sendet die Berichtsausgabe an die angegebene Datei und nicht an das Standardausgabeziel STDOUT
.--suffixes
– Durch Kommas getrennte Zeichenfolge gültiger Quellcode-Dateinamenerweiterungen, z. B. php, phtml.--exclude
– Durch Kommas getrennte Musterfolge, die zum Ignorieren von Verzeichnissen verwendet wird. Verwenden Sie Sternchen, um nach Muster auszuschließen. Zum Beispiel *src/foo/*.php
oder *src/foo/*
--strict
– Melden Sie diese Knoten auch mit einer @SuppressWarnings-Annotation.--ignore-errors-on-exit
– wird mit einem Nullcode beendet, selbst wenn ein Fehler auftritt.--ignore-violations-on-exit
– wird mit einem Nullcode beendet, selbst wenn Verstöße festgestellt werden.--cache
– aktiviert den Ergebniscache. Standardmäßig wird .phpmd.result-cache.php
im aktuellen Arbeitsverzeichnis verwendet.--cache-file
– überschreibt in Zusammenarbeit mit --cache
den standardmäßigen Ergebnis-Cache-Dateipfad von .phpmd.result-cache.php
durch den angegebenen Dateipfad.--cache-strategy
– legt die Caching-Strategie fest, um festzustellen, ob eine Datei noch aktuell ist. Entweder „Inhalt“, um auf dem Dateiinhalt zu basieren, oder „Zeitstempel“, um auf dem Zeitstempel der geänderten Datei zu basieren.--generate-baseline
– generiert eine phpmd.baseline.xml
für bestehende Verstöße neben der Regelsatzdefinitionsdatei. Die Dateipfade der Verstöße beziehen sich auf das aktuelle Arbeitsverzeichnis.--update-baseline
– entfernt alle Verstöße aus einer vorhandenen phpmd.baseline.xml
, die nicht mehr existiert. Neue Verstöße werden _nicht_ hinzugefügt. Der Dateipfad der Verstöße ist relativ zum aktuellen Arbeitsverzeichnis.--baseline-file
– der Dateipfad zu einer benutzerdefinierten Baseline-XML-Datei. Wenn nicht vorhanden, wird standardmäßig phpmd.baseline.xml
verwendet--color
– Farbe in der Ausgabe aktivieren, zum Beispiel zeigt der Textrenderer den Regelnamen in Gelb und die Fehlerbeschreibung in Rot an.--extra-line-in-excerpt
– Geben Sie an, wie viele zusätzliche Zeilen einem Code-Snippet im HTML-Format hinzugefügt werdenEine Beispiel-Befehlszeile:
phpmd PHP/Depend/DbusUI xml codesize --reportfile "phpmd.xml" --suffixes "php,phtml"
Optionen können vor oder nach Argumenten stehen. Sie können entweder durch ein Leerzeichen oder ein Gleichheitszeichen ( =
) von ihrem Wert getrennt werden. Somit entspricht die folgende Syntax der vorherigen:
phpmd --reportfile="phpmd.xml" --suffixes="php,phtml" PHP/Depend/DbusUI XML-Codegröße
Zeichenfolgen, die mit -
beginnen, werden als Optionsnamen erkannt. Wenn Sie Argumente haben, die mit -
beginnen, legen Sie zuerst die Optionen fest und verwenden Sie dann --
um den expliziten Anfang oder die Argumentliste zu markieren:
phpmd --reportfile "phpmd.xml" --suffixes "php,phtml" --foo/Folder xml codesize
PHPMD verwendet sogenannte Regelsätze, die eine Reihe von Regeln konfigurieren/definieren, die auf die zu testende Quelle angewendet werden. Die Standarddistribution von PHPMD wird bereits mit einigen Standardsätzen ausgeliefert, die sofort verwendet werden können. Sie können das CLI-Tool von PHPMD mit dem Namen eines Sets aufrufen, um diese Konfiguration anzuwenden:
~ $ phpmd /path/to/source text codesize
Was aber, wenn Sie mehr als einen Regelsatz auf Ihre Quelle anwenden möchten? Sie können auch eine durch Kommas getrennte Liste von Regelsatznamen an das CLI-Tool von PHPMD übergeben:
~ $ phpmd /path/to/source text codesize,unusedcode,naming
Sie können auch benutzerdefinierte Regelsatzdateien mit integrierten Regelsätzen kombinieren:
~ $ phpmd /path/to/source text codesize,/my/rules.xml
Das ist es. Mit diesem Verhalten können Sie Ihre eigene Kombination von Regelsätzen angeben, die den Quellcode überprüfen.
Mit PHPMD können Sie auch mehrere Quellverzeichnisse angeben, falls Sie für bestimmte Teile Ihres Codes eine Ausgabe erstellen möchten
~ $ phpmd /path/to/code,index.php,/another/place/with/code text codesize
Oder verwenden Sie das Glob-Muster:
~ $ phpmd src/main/php/*/*/*{Renderer,Node}.php text my/rules.xml
PHPMD kann auch die Standardeingabe stdin lesen:
~ $ cat src/MyService.php | phpmd – Text my/rules.xml
Der zu scannende PHP-Code kann also von einem anderen Programm generiert werden und muss nicht unbedingt in einer Datei gespeichert werden.
Das Befehlszeilentool von PHPMD definiert derzeit vier verschiedene Exit-Codes.
--ignore-violations-on-exit
verhindern, das zu einem Wert von 0 führt, selbst wenn Verstöße gefunden werden.Derzeit verfügt PHPMD über die folgenden Renderer:
Für bestehende Projekte kann eine Verstoß-Baseline generiert werden. Alle Verstöße gegen diese Grundlinie werden bei weiteren Kontrollen ignoriert.
Der empfohlene Ansatz wäre eine phpmd.xml
im Stammverzeichnis des Projekts. Um die phpmd.baseline.xml
daneben zu generieren:
~ $ phpmd /path/to/source text phpmd.xml --generate-baseline
So geben Sie einen benutzerdefinierten Basisdateipfad für den Export an:
~ $ phpmd /path/to/source text phpmd.xml --generate-baseline --baseline-file /path/to/source/phpmd.baseline.xml
Standardmäßig sucht PHPMD neben phpmd.xml
nach phpmd.baseline.xml
. Um dieses Verhalten zu überschreiben:
~ $ phpmd /path/to/source text phpmd.xml --baseline-file /path/to/source/phpmd.baseline.xml
So bereinigen Sie eine vorhandene Baseline-Datei und entfernen nur nicht mehr vorhandene Verstöße:
~ $ phpmd /path/to/source text phpmd.xml --update-baseline
Verfügbar als Teil des Tidelift-Abonnements.
Die Betreuer von PHPMD
und Tausenden anderer Pakete arbeiten mit Tidelift zusammen, um kommerziellen Support und Wartung für die Open-Source-Abhängigkeiten bereitzustellen, die Sie zum Erstellen Ihrer Anwendungen verwenden. Sparen Sie Zeit, reduzieren Sie Risiken und verbessern Sie den Zustand des Codes, während Sie gleichzeitig die Betreuer der genauen Abhängigkeiten bezahlen, die Sie verwenden. Erfahren Sie mehr.
Wenn Sie einen Beitrag zu PHPMD leisten möchten, lesen Sie bitte den Beitragsleitfaden.