codesniffer gyorstipp

Tulajdonképp nincs komoly tapasztalatom a CodeSnifferrel és épp emiatt nem is próbálok meg belemenni a mélységeibe, de baromira idegesített, hogy ha Zend standarddal próbáltam elemeztetni a Zend Framework dokumentumomat, a többsoros függvényhívásoknál, mindig vinnyogott, hogy a hívás első sorában a nyitó zárójel után ne álljon semmi. (Opening parenthesis of a multi-line function call must be the last content on the line) Márpedig a doksi szerint ez nem gond. (http://framework.zend.com/manual/en/coding-standard.coding-style.html)

A saját kódomban még csak javítgathattam volna a dolgot, mert arra nem látok a leírásban semmit, hogy ténylegesen a standard elleni vétség lenne a paraméterek új sorra helyezése. A Doctrine által generált kódot viszont macerás és felesleges lett volna emiatt módosítani. Emiatt mindig kihagytam a generált könyvtárat kb így:

$: phpcs -n --standard=Zend --encoding=utf-8 --ignore=*/tests/log*,*application/models/Base*,*library/Zend*,*library/Doctrine*,*library/vendor*,*orig* ./

Mivel viszont még a parancssoros projekt-generátor is generál többsoros hívást ahogy a paraméterek a zárójel után kezdődnek, ezért úgy döntöttem inkább belenyúlok a Snifferbe.

Megjegyzés CS-t nem ismerőknek: A fenti parancs elindítja a CodeSniffert, kikapcsolja a figyelmeztetéseket (pl sor hosszabb, mint 80 karakter), beállítja a Zend-et mint standard és egyértelműsíti, hogy utf-8 fájlokkal fog dolgozni, majd vesszővel elválasztva megadja a kihagyandó könyvtárakat, végül megadja, hogy melyik könyvtárban dolgozzon a Sniffer.

 

Előszöris meg kellett keresnem a CodeSniffert, ami nálam a /usr/share/php/PHP/CodeSniffer/ könyvtárban ült. Kikerestem és megnyitottam a Zend Standardot, ami meglepő módon a Standards/Zend alkönyvtár volt, melyben egy ruleset.xml és egy Sniff könyvtár van. Ha megnyitjuk az xml fájlt, az alábbi leírást pillanthatjuk meg hozzá: 

A coding standard based on an early Zend Framework coding standard. Note that this standard is out of date.Nyilván ezt a helppel is elő lehet hozni, én sosem tettem. Mindegy, ne bántsuk a Standardot, inkább hozzunk létre egy sajátot gyorsan. Mivel furcsa mód a Zend alkönyvtárban levő Sniffeket egyáltalán nem használja a rulest.xml, ezért ne is foglalkozzunk felük. Hozzunk létre egy új könyvtárt és másoljuk át az xml fájlt:

$: sudo mkdir /usr/share/php/PHP/CodeSniffer/Standards/MyZend
$: cd /usr/share/php/PHP/CodeSniffer/Standards/MyZend
$: sudo cp ../Zend/ruleset.xml ruleset.xml

Maga a szabály, ami nekem fájt a FunctionCallSignature volt, amit a PEAR szabályrendszerből vesz az xml. Másoljuk át ezt is a megfelelő könyvtárba:

$: sudo mkdir -p Sniffs/Functions
$: sudo cp ../PEAR/Sniffs/Functions/FunctionCallSignatureSniff.php Sniffs/Functions/FunctionCallSignatureSniff.php

Ezután szerkesszük a ruleset.xml fájlunkat, írjuk át a ruleset tag nevét MyZend-re aés cseréljük ki a PEAR.Functions.FunctionCallSignature-t MyZend.Functions.FunctionCallSignature-re. Ezután nyissuk meg a FunctionCallSignatureSniff.php fájlt, írjuk át az osztály nevét MyZend_Sniffs_Functions_FunctionCallSignatureSniff-re, végül a fájl vége felé található következő kódrészt kommenteljük ki:

if ($tokens[($openBracket + 1)]['content'] !== $phpcsFile->eolChar) {
    $error = 'Opening parenthesis of a multi-line function call must be the last content on the line';
    $phpcsFile->addError($error, $stackPtr, 'ContentAfterOpenBracket');
}

$prev = $phpcsFile->findPrevious(T_WHITESPACE, ($closeBracket - 1), null, true);
if ($tokens[$prev]['line'] === $tokens[$closeBracket]['line']) {
    $error = 'Closing parenthesis of a multi-line function call must be on a line by itself';
    $phpcsFile->addError($error, $closeBracket, 'CloseBracketLine');
}
Ezután már csak egy dolgunk van, reménykedni, hgoy előbb-utóbb elérhető lesz egy sokkal jobb Zend CodeSniffer csomag, mint a jelenlegi, mert természetesen ez inkább egy hack, mint egy korrekt megoldás.

Extraként, ha főleg Zend Frameworkkel dolgozunk, akkor alapértelmezetté tehetjük a standard csomagunkat:

phpcs --config-set default_standard MyZend
Címkék: zend framework codesniffer

A bejegyzés trackback címe:

http://szajtbilder.blog.hu/api/trackback/id/tr82341481

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben.

Nincsenek hozzászólások.