Mirin webspace

Nejbohatší život má ten, kdo žije s minimem nároků

30. 9. 2010 - Komentáře (5) PHP

Syntaktická kontrola před commitem

Dnes už dost lidí používá k vážnější práci na PHP nějaké IDE a tak dnes už automaticky umějí parsovat PHP do té míry, že vás odstíní od syntax error chyb. I tak se ale ještě poměrně často vyskytnou případy, kdy musíte něco opravovat mimo IDE a nebo kdy je výhodnější a rychlejší použít editor. Nemluvě o skupině vim/emacs fans, která je a bude pořád poměrně silná.

Další věcí je použití verzovacích systémů. Jejich použití se už dnes i pro menší projekty stalo skoro standardem. Pokud tedy pracujeme na nějakém projektu, jeho zdrojové kódy udržujeme v nějakém verzovacím systému, tak je určitě záhodno, aby tyto (PHP) kódy byly po syntaktické stránce v pořádku.

PHP standardně nabízí ve své command line binárce možnost ověřit bezchybnost syntaxe PHP kódu přes přepínač -l. Pak už není nic jednoduššího, než se ve svém verzovacím systému napsat hook, který nám zajistí, že všechny naše kódy, které budou vstupovat do repository, budou syntakticky v pořádku.

Jeden takový jsem na internetu našel, drobně upravil a používám jako mercurial pretxncommit hook.

#!/bin/bash
php=/usr/bin/php

echo "checking syntax for php files"

#get all modified and newly added files, remove duplicate's
files=`hg log -r $HG_NODE:tip --template "{file_mods} {file_adds}\n" | sort | uniq`

for file in $files; do
 #skip files which doesn't have php like extensions
 if [ -z "$(echo $file | grep -E "\.(php|inc)$")" ]; then continue; fi
 #test file via php interpreter
 test_result=`$php -l -d display_errors=1 \
  -d error_reporting='E_ALL|E_STRICT' \
  -d html_errors=0 \
  -f $file`
 #parse error detected
 if [ -n "$(echo $test_result | grep "Errors parsing")" ]; then
  echo $test_result
  exit 1;
 fi
done

echo "syntax OK"

Určitě je to možné podobně použít u gitu, svn a jiných. Trochu nevýhoda může být, pokud je nutné protlačit hookem nějaké obrovské množství souborů, např. když máte v repositáři projektu i knihovny a frameworky a následně provádíte jejich upgrade. To pak může pěknou chvíli trvat, ale na druhou stranu alespoň proklepnete knihovnu samotnou.


Komentáře (5)

  1. koubel - 2. 10. 2010 00:38

    Ale kdepak, na tyhle věci jedině bash, bash totiž na rozdíl od PHP admini rádi a tak se tohle dá snáze prosadit jako součást firemní praxe pro nadřazený repositář a admini si to rádi vezmou pod křídlo :-).

  2. kacer - 2. 10. 2010 10:19

    Akorát bash nepojede pod windows, php ano.

  3. v6ak - 2. 10. 2010 10:59

    [3] Ale pojede... Cygwin. Kdysi jsem takto pro Windows taky psal v bashi. Jen mě pak přestalo bavit si pořád unixovat Windows, tak na notebooku mám už Linux.

  4. kacer - 2. 10. 2010 11:03

    Cygwin nemám v PATH (dělalo mi to binec), takže se tomu radši vyhnu, když to jde.

Komentáře jsou uzavřeny.