Mamy aplikację internetową PHP 5 i obecnie oceniamy PHP CodeSniffer , aby zdecydować, czy wymuszenie standardów kodu poprawia jakość kodu bez powodowania nadmiernego bólu głowy. Jeśli wydaje się to dobre, dodamy hak wstępnego zatwierdzania SVN, aby upewnić się, że wszystkie nowe pliki zatwierdzone w gałęzi deweloperskiej są wolne od kodowania standardowych zapachów.
Czy istnieje sposób skonfigurowania kodu PHP CodeSniffer, aby ignorował określony typ błędu? lub może potraktować określony błąd jako ostrzeżenie?
Oto przykład pokazujący problem:
<!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>
A to jest wynik PHP_CodeSniffer:
> phpcs test.php -------------------------------------------------- ------------------------------ ZNALEZIONO 2 BŁĘDY I 1 OSTRZEŻENIA DOTYCZĄCE 3 LINII -------------------------------------------------- ------------------------------ 1 | OSTRZEŻENIE | Linia przekracza 85 znaków; zawiera 121 znaków 9 | BŁĄD | Brak komentarza do pliku doc 11 | BŁĄD | Nieprawidłowe wcięcie linii; oczekiwane 0 spacji, znaleziono 4 -------------------------------------------------- ------------------------------
Mam problem z błędem „ Niepoprawne wcięcie wiersza ”. Wydaje mi się, że tak się dzieje, ponieważ mieszam wcięcia PHP z wcięciami HTML. Ale to czyni go bardziej czytelnym, prawda? ( biorąc pod uwagę, że nie mam teraz zasobów, aby przejść do frameworka MVC ). Więc chciałbym to zignorować.
źródło
Odpowiedzi:
Znalazłem rozwiązanie pozwalające usunąć błąd „ Niepoprawne wcięcie wiersza ”, ale najpierw muszę powiedzieć, że dragonmantank ma doskonałą rację - nie należy mieszać PHP i HTML. To przepis na bóle głowy. Niestety niestety myślę, że mieszanie PHP i HTML jest bardzo powszechne, szczególnie w starszym oprogramowaniu.
Najszybszą i najbrudniejszą poprawką przy założeniu, że używamy
phpcs
domyślnych standardów kodowania (które są standardami PEAR ), jest usunięcie odpowiedniego pliku Sniff. Znajdź lokalizację standardów PEAR, dla mnie, używając Ubuntu , było tutaj:Zmień nazwę
ScopeIndentSniff.php
pliku, aby wąchanie sprawdzające wcięcie kodu nie było już wykonywane:Zadanie wykonane - teraz wcięcie nie będzie sprawdzane i nie pojawi się błąd „ Niepoprawne wcięcie wiersza ” ( a kod nie będzie standardowy i nie będzie tak wysokiej jakości! ).
Powyższe rozwiązanie jest dość amatorskie - czystszym rozwiązaniem jest stworzenie nowego standardu kodowania, który będzie korzystał ze wszystkich standardów PEAR, z wyjątkiem dostosowanych przez ciebie konfiguracji. To jest bardzo szybkie. Oto jak to zrobić używając
getIncludedSniffs()
igetExcludedSniffs()
a pewnephpcs
konwencje nazewnictwa:Przetestuj swój nowy niestandardowy standard kodowania, wywołując
phpcs
za pomocą--standard
flagi. Na przykład:Gdy już zacznie działać, możesz ustawić nowy standard jako domyślny, co oznacza, że nie musisz wpisywać
--standard
flagi przy każdym użyciuphpcs
:Aby uzyskać więcej informacji, zobacz instrukcję phpcs .
źródło
Będziesz mieć wiele problemów z uruchomieniem PHPCS z kodem PHP zmieszanym z HTML. PHPCS jest naprawdę użyteczny tylko podczas analizowania czystych skryptów PHP. Wbudowane standardy kodowania są zbudowane wokół czystego PHP, a nie mieszanego PHP / HTML.
Jedną z opcji byłoby zbudowanie własnego niestandardowego standardu i użycie go zamiast tego. Standard niestandardowy uwzględniałby mieszanie kodu, ale pisanie go byłoby prawdopodobnie trudne.
Inną opcją jest użycie systemu szablonów, ponieważ powiedziałeś, że nie chcesz przejść do frameworka. Smarty i Twig mogą być używane poza frameworkiem MVC. Przejdź do jednego z nich, a następnie PHPCS przeanalizuj tylko pliki .PHP, a nie pliki szablonów.
źródło