PHP CodeSniffer進階使用-新增CodeIgniter格式

安裝好PHP_CodeSniffer,內建有五種coding standards。如果您使用其中一種,就可以馬上使用了。
  1. MySource
  2. PEAR
  3. PHPCS
  4. Squiz
  5. Zend
如果不是上述五種,需要增加其他的coding standards,該怎麼辦?喜歡自己動手做,可以參考官方文件 - Coding Standard Tutorial自己做一套。也可以找別人寫好的…以CodeIgniter - General Style and Syntax為例,可以下載CodeIgniter-for-PHP_CodeSniffer安裝使用。

安裝方式很簡單,將CodeIgniter-for-PHP_CodeSniffer解壓縮到PHP_CodeSniffer存放coding standards的目錄下即可。 完成上述步驟,基本上PHP_CodeSniffer就可以使用CodeIgniter的風格作為檢查的依據。

不幸的,CodeIgniter-for-PHP_CodeSniffer直到目前(2011/09)的版本是以CodeIgniter 1.7.x 的風格為依據,所以會有一些誤判…

以Constructor的寫法所遇到的問題舉例,CodeIgniter 2.x 開始不再支援PHP 4。Constructor的寫法必須依照PHP 5的作法。因此,當我們拿CodeIgniter 2.x 開發的php程式檢查,CodeIgniter-for-PHP_CodeSniffer會顯示如下的錯誤,不允許我們使用PHP5的模式。
  1. 12 | ERROR | PHP5 style constructors are not allowed; use "Xyz" instead  
  2. 15 | ERROR | PHP5 style calls to parent constructors are not allowed. Please use "parent::CI_Controller" instead.  
我們需要額外做些調整。處理方式也很簡單,不需要調整CodeIgniter-for-PHP_CodeSniffer的程式。在官方文件-Annotated ruleset.xml,提到一些作法。我們只需要調整ruleset.xml 設定即可。
  1. <rule ref="CodeIgniter.NamingConventions.ConstructorName">  
  2.     <severity>0</severity>  
  3. </rule>  
檢查時,也需要指明要使用調整後的ruleset.xml。之前的錯誤訊息就不會再顯示了。
  1. phpcs --standard=/CodeSniffer/Standards/CodeIgniter/ruleset.xml /prog/myprog.php   
以下,則是另外兩個範例。分別是編排程式碼時允許使用tab,以及{}的使用風格
  1. <rule ref="CodeIgniter.WhiteSpace.DisallowSpaceIndent">  
  2.     <severity>0</severity>  
  3. </rule>  
  4. <rule ref="Generic.Functions.OpeningFunctionBraceBsdAllman.BraceOnSameLine">  
  5.     <severity>0</severity>  
  6. </rule>  
後記
在實際使用CodeIgniter-for-PHP_CodeSniffer後,發現PHP_CodeSniffer常會因segmentation fault的錯誤而結束執行。原以為是因為被檢查的程式碼行數太多。但,有時檢查不到200行的程式也會有此狀況。最後才知道,很多人使用上都有此問題。該問題也已經列在CodeIgniter-for-PHP_CodeSnifferissues

留言