Wir haben eine PHP 5-Webanwendung und testen derzeit PHP CodeSniffer, um zu entscheiden, ob das Erzwingen von Codestandards die Codequalität verbessert, ohne zu viel Kopfzerbrechen zu verursachen. Wenn es gut erscheint, fügen wir einen SVN-Pre-Commit-Hook hinzu, um sicherzustellen, dass alle neuen Dateien, die in der dev-Verzweigung festgeschrieben wurden, frei von Standardgerüchen sind.
Gibt es eine Möglichkeit, PHP codeSniffer so zu konfigurieren, dass ein bestimmter Fehlertyp ignoriert wird? oder soll es stattdessen einen bestimmten Fehler als Warnung behandeln?
Hier ein Beispiel, um das Problem zu demonstrieren:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
<?php
echo getTabContent('Programming', 1, $numX, $numY);
if (isset($msg)) {
echo $msg;
}
?>
</div>
</body>
</html>
Und das ist die Ausgabe von PHP_CodeSniffer:
> phpcs test.php -------------------------------------------------- ------------------------------ GEFUNDEN 2 FEHLER UND 1 WARNHINWEISE, DIE 3 ZEILEN BETROFFEN -------------------------------------------------- ------------------------------ 1 | WARNUNG | Zeile überschreitet 85 Zeichen; enthält 121 Zeichen 9 | FEHLER | Fehlender Dateidokumentkommentar 11 | FEHLER | Zeile falsch eingerückt; Erwartet 0 Leerzeichen, gefunden 4 -------------------------------------------------- ------------------------------
Ich habe ein Problem mit dem Fehler " Zeile falsch eingerückt ". Ich vermute, es passiert, weil ich den PHP-Einzug mit dem HTML-Einzug mische. Aber das macht es lesbarer, nicht wahr? ( In Anbetracht dessen, dass ich momentan nicht die Ressourcen habe, um auf ein MVC-Framework umzusteigen ). Ich würde es also gerne ignorieren.
Antworten:
Ich habe eine Lösung gefunden, um den Fehler " Zeile falsch eingerückt " zu beseitigen, aber zuerst sollte ich das sagen Drachenmantel einen hervorragenden Punkt hat - Sie sollten PHP und HTML nicht mischen. Es ist ein Rezept für Kopfschmerzen. Leider denke ich, dass das Mischen von PHP und HTML besonders in Legacy-Software sehr verbreitet ist.
Die schnellste und schmutzigste Lösung, vorausgesetzt, wir verwenden die
phpcs
Standard-Codierungsstandards (die PEAR- Standards), besteht darin, die relevante Sniff-Datei zu entfernen. Finden Sie den Speicherort der PEAR-Standards, für mich mit Ubuntu , es war hier:Benennen Sie die
ScopeIndentSniff.php
Datei um, damit der Sniff, der die Codeeinrückung überprüft, nicht mehr ausgeführt wird:Arbeit erledigt - jetzt wird der Einzug nicht überprüft und der Fehler " Zeile falsch eingerückt " tritt nicht auf ( und Ihr Code wird nicht dem Standard entsprechen und keine so hohe Qualität aufweisen! ).
Die obige Lösung ist ziemlich amateurhaft - die sauberere Lösung besteht darin, einen neuen Codierungsstandard zu erstellen, der alle PEAR-Standards mit Ausnahme der von Ihnen ausgewählten Anpassungen verwendet. Das geht sehr schnell. So geht's mit
getIncludedSniffs()
undgetExcludedSniffs()
und einigenphpcs
Namenskonventionen:Testen Sie Ihren neuen benutzerdefinierten Codierungsstandard, indem Sie ihn
phpcs
mit dem--standard
Flag aufrufen . Beispielsweise:Sobald es funktioniert, können Sie Ihren neuen Standard als Standard festlegen, was bedeutet, dass Sie das
--standard
Flag nicht jedes Mal eingeben müssen, wenn Sie Folgendes verwendenphpcs
:Weitere Informationen finden Sie im phpcs-Handbuch .
quelle
Sie werden auf viele Probleme stoßen, wenn Sie PHPCS mit Ihrem in HTML gemischten PHP-Code ausführen. PHPCS ist nur dann wirklich nützlich, wenn Sie reine PHP-Skripte analysieren. Die integrierten Codierungsstandards basieren auf reinem PHP und nicht auf gemischtem PHP / HTML.
Eine Möglichkeit wäre, einen eigenen benutzerdefinierten Standard zu erstellen und diesen stattdessen zu verwenden. Der benutzerdefinierte Standard würde das Mischen von Code berücksichtigen, aber es wäre wahrscheinlich mühsam, ihn zu schreiben.
Die andere Option ist die Verwendung eines Templating-Systems, da Sie gesagt haben, dass Sie nicht zu einem Framework wechseln möchten. Smarty und Twig können beide außerhalb eines MVC-Frameworks verwendet werden. Wechseln Sie zu einem dieser Ordner, und lassen Sie PHPCS nur die .PHP-Dateien analysieren, nicht die Vorlagendateien.
quelle