Přejít k hlavnímu obsahu

Programujeme v Drupalu – jak na Coding Standards

Jak známo, Drupal kromě kvalitního CMS poskytuje také možnosti využít jeho bohatého frameworku. „Bastlit“ vlastní moduly není žádný problém, ale pokud budete chtít programovat na úrovni, případně pracovat ve větším teamu vývojářů, neobejdete se bez znalosti Drupal coding standards.

Coding Standards Drupalu jsou zdokumentované zde: https://www.drupal.org/coding-standards a definují všechny zásady formátování kódu (odřádkování, počty mezer u jednotlivých operátorů, …). Komunita Drupalu vyžaduje Coding Standards u všech contribute modulů (moduly poskytnuté komunitě) a je to zcela pochopitelné – v momentu, kdy verzujete kód (např. v GITu), chcete sledovat pouze změny logiky kódu, nikoli formátování. Ve chvíli, kdy 2 programátoři používají jiné formátování kódu, je log změn zcela zmatený a většinu času strávíte pouze luštěním změn místo porozumění kódu.

Pochopitelně je dosti náročné pamatovat si přesně Coding Standards a psát každý řádek podle nich. Naštěstí nám komunita poskytuje podporu coding standards do běžně používaných vývojových prostředí jako jsou NetBeans, PhpStorm,... (pozn. pro české vývojáře – PSPad a poznámkový blok nejsou Drupalem podporovaná vývojová prostředí :-). Tento článek zaměřím na volně dostupné NetBeans, nicméně níže bude pár odkazů i pro konkurenční vývojová prostředí.

Formátování kódu v NetBeans

NetBeans umožňují formátovat bloky kódu nebo celé soubory pomocí klávesové zkratky CTRL+F. Proto, aby kód naformátovala dle Drupal coding standards, stačí jen vše nastavit dle podrobného návodu plného screenshotů, který je na Drupal.org: https://www.drupal.org/node/1019816. Po nastavení, které zabere sotva 15 min můžete vesele formátovat.

Formátování NetBeans ale nezaručí 100% dodržování Coding Standards. Např. správný formát komentáře hooku,… formátování neřeší. Proto se hodí další nástroj  - Code Sniffer. Jedná se o nástroj, který umožňuje kontrolovat zejména právě Coding Standards. Drupal podporuje PHP_CodeSniffer. Pro tento nástroj definuje všechna důležitá nastavení pomocí Drupal „modulu“ Coder (https://www.drupal.org/project/coder). PHP_CodeSniffer se stará o kontrolu coding standards zatímco Coder definuje Drupal Coding Standards pro Sniffer. Vlastní výstup z PHP_CodeSnifferu pak v příkazové řádce vypadá takto:

FILE: C:\Data\WWW\sources\index.php ---------------------------------------------------------------------- FOUND 2 ERRORS AFFECTING 2 LINES ---------------------------------------------------------------------- 12 | ERROR | [ ] There must be exactly one blank line after the file | | comment 24 | ERROR | [x] Doc comment short description must end with a full | | stop ---------------------------------------------------------------------- PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY ---------------------------------------------------------------------- Time: 232ms; Memory: 3.25Mb

Takový výstup je pěkný pro kontrolu, ale pro rychlý vývoj je pomalý. Naštěstí pro PHP_CodeSniffer existují pluginy i do NetBeans, který všechna upozornění pěkně vizualizuje a zdokonaluje tak vývoj dle Coding Standards. Konkrétně se jedná o pluginy phpcsmd (http://plugins.netbeans.org/plugin/42434/phpcsmd) a phpMD / PHP (http://plugins.netbeans.org/plugin/40282/phpmd-php-codesniffer-plugin). phpMD / PHP je bohužel pouze pro NetBeans 7.x, ale phpcsmd podporuje NetBeans 7.x i 8.0.

Vizualizace pomocí phpcsmd vypadá pak takto:

NebBeans screenshot

Instalace CodeSnifferu do NetBeans

Instalace výše uvedených nástrojů a pluginů není úplně přímočará, proto uvádím STEP-BY-STEP návod, abyste zbytečně netrávili čas nad nastavením a mohli se vesele pustit do Drupal Coding Standard vývoje. Návod je konkrétně pro Windows 8 a NetBeans 8.0:

  • Pokud nemáte instalované PHP (v příkazové řádce zkuste php -v).
    • Stáhněte si PHP 5.4 z php.net (stahuj: VC9 x86 thread safe zip) na http://windows.php.net/download/#php-5.4
    • Unzipněte si kam chcete instalovat. Např. C:\www\php (! Cesta nesmí obsahovat mezery jako např.: "C:\Program Files (x86)", jinak nebude fungovat CodeSniffer v NetBeans.)
    • Stáhněte si pear  http://pear.php.net/go-pear.phar
    • Přesuňte soubor go-pear.phar do C:\www\php
    • Přejmenujte php.ini-development na php.ini ve složce C:\www\php
    • Bězte do: Ovládací panely, najděte a otevřete "Upravit proměnné prostředí systému", dole klikněte na "Proměnné prostředí...", ve spodní části najděte proměnnou "Path" a na její konec přidejte ";C:\www\php"
    • Spusťte si příkazovou řádku jako administrátor
      • Zadejte: cd C:\www\php
    • Nainstalujte pear: php go-pear.phar
      • Bude to po vás chtít vybrat typ instalace, chcete "system". Tzn. stačí jen enter
      • V dalším kroku to kontroluje, zda má správně vypněné cesty. Je třeba změnit cestu k pear.ini. Tzn. zadejte 10, enter, a zadejte cestu C:\www\php\pear.ini
    • Nakonec z průzkumníku spusťte C:\www\php\PEAR_ENV.reg
  • Instalace PHP CodeSnifferu
    • Otevřete příkazovou řádku
      • cd C:\www\php
      • pear install PHP_CodeSniffer
      • otestujte, že se podařilo přes: phpcs --version
    • Stáhněte si coder modul https://www.drupal.org/project/coder, poslední verzi 8.x (verze 8.x je určena pro Drupal 6,7 i 8. Verzování modulu může být matoucí…)
    • Coder modul rozbalte např. do C:\www\Coder
    • Otestujte, že Code Sniffer s Drupal Coding Standards funguje přes příkazovou řádku: phpcs --standard="C:\www\Coder\coder_sniffer\Drupal" "[cesta k testovanému souboru]"
    • Mělo by to vrátit něco jako:

FILE: C:\Data\WWW\sources\index.php ---------------------------------------------------------------------- FOUND 2 ERRORS AFFECTING 2 LINES ---------------------------------------------------------------------- 12 | ERROR | [ ] There must be exactly one blank line after the file | | comment 24 | ERROR | [x] Doc comment short description must end with a full | | stop ---------------------------------------------------------------------- PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY ---------------------------------------------------------------------- Time: 232ms; Memory: 3.25Mb

  • Instalace do NetBeans
    • Nainstalujte si do NetBeans plugin "phpcsmd" (V NetBeans: Tools->Plugins->Available plugins nebo Downloaded , pokud si ho ručně stáhnete na http://plugins.netbeans.org/plugin/42434/phpcsmd)
    • Nastavte si ho v NetBeans přes Tools->Options->PHP->PHPCSMD:
      •  Script location=C:\www\php\phpcs.bat
        •  Cesta nesmí obsahovat mezery. Pokud v cestě mezery máte, vytvořte si link pomocí příkazové řádky a příkazu mklink tak, aby linkovaná cesta mezery neobsahovala)
      •  standard=C:\www\Coder\coder_sniffer\Drupal    
      • extensions=php,module,inc,install,test,profile,theme,js,css,info,txt
      • A nahoře v sekci General je možné začkrtnout: update on save, aby vám to projelo kód po každém uložení

To je vše.

Trocha zklamání na závěr

Práce s tímto pluginem ukázala, že nefunguje stoprocentě správně a některé chyby PHPCS nevypíše. Pokud si chcete být jisti, že váš kód splňuje Drupal Coding Standards, je třeba před ukončením práce zkontrolovat svůj kód přes příkazovou řádku. (Jak bylo zmíněno výše, test provedete příkazem phpcs --standard="C:\www\Coder\coder_sniffer\Drupal" "[cesta k testovanému souboru]").

I tak vám NetBeans plugin výrazně usnadní dodržování Coding Standards.

Příjemné kódění!

Další odkazy, které se mohou hodit:

Zdroje:

Chci vědět víc o Drupalu!