Share Pastebin
Guest
Public paste!

ClassFileNameSniff

By: a guest | Mar 19th, 2010 | Syntax: PHP | Size: 3.12 KB | Hits: 74 | Expires: Never
This paste has a previous version, view the difference. Copy text to clipboard
  1. <?php
  2. /**
  3.  * Zend_Sniffs_Classes_ValidClassNameSniff.
  4.  *
  5.  * PHP version 5
  6.  *
  7.  * @category  PHP
  8.  * @package   PHP_CodeSniffer
  9.  * @author    Juan Sotuyo <juansotuyo@gmail.com>
  10.  * @copyright 2010 Juan Sotuyo (Buenos Aires, Argentina)
  11.  * @license   BSD Licence
  12.  * @version   1.0
  13.  * @link      http://pear.php.net/package/PHP_CodeSniffer
  14.  */
  15.  
  16. /**
  17.  * Zend_Sniffs_Classes_ValidClassNameSniff.
  18.  *
  19.  * Ensures classes are in camel caps, and the first letter is capitalised.
  20.  * Numers are allowed but discouraged, and undersocres are allowed.
  21.  *
  22.  * @category  PHP
  23.  * @package   PHP_CodeSniffer
  24.  * @author    Juan Sotuyo <juansotuyo@gmail.com>
  25.  * @copyright 2010 Juan Sotuyo (Buenos Aires, Argentina)
  26.  * @license   BSD Licence
  27.  * @version   Release: 1.2.2
  28.  * @link      http://pear.php.net/package/PHP_CodeSniffer
  29.  */
  30. class Zend_Sniffs_Classes_ValidClassNameSniff implements PHP_CodeSniffer_Sniff
  31. {
  32.     /**
  33.      * Returns an array of tokens this test wants to listen for.
  34.      *
  35.      * @return array
  36.      */
  37.     public function register()
  38.     {
  39.         return array(
  40.                 T_CLASS,
  41.                 T_INTERFACE,
  42.                );
  43.  
  44.     }//end register()
  45.  
  46.  
  47.     /**
  48.      * Processes this test, when one of its tokens is encountered.
  49.      *
  50.      * @param PHP_CodeSniffer_File $phpcsFile The current file being processed.
  51.      * @param int                  $stackPtr  The position of the current token in the
  52.      *                                        stack passed in $tokens.
  53.      *
  54.      * @return void
  55.      */
  56.     public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
  57.     {
  58.         $tokens = $phpcsFile->getTokens();
  59.  
  60.         $name      = $phpcsFile->getDeclarationName($stackPtr);
  61.  
  62.         // Check for name format.
  63.         $valid = $this->nameIsValid($name);
  64.        
  65.         if ($valid === false) {
  66.             $type  = ucfirst($tokens[$stackPtr]['content']);
  67.             $error = " name \"$name\" is not in camel caps format";
  68.             $phpcsFile->addError($error, $stackPtr);
  69.         }
  70.  
  71.     }//end process()
  72.    
  73.     private function nameIsValid($name)
  74.     {
  75.         $letters = str_split($name);
  76.        
  77.         // First letter must be upper-case or numeric, following characters must be lowercase / underscores / numbers
  78.         $requiresUpper = true;
  79.         $lastWasUpper = false;
  80.        
  81.         foreach ($letters as $letter) {
  82.                 if (!$requiresUpper && $letter == '_') {
  83.                         $requiresUpper = true;
  84.                         $lastWasUpper = false;
  85.                         continue;
  86.                 }
  87.                
  88.                 // Number are allways valid
  89.                 if (ctype_digit($letter)) {
  90.                         $requiresUpper = false;
  91.                         $lastWasUpper = false;
  92.                         continue;
  93.                 }
  94.                
  95.                 // If a capital letter is required
  96.                 if ($requiresUpper) {
  97.                         if (!ctype_upper($letter)) {
  98.                                 return false;
  99.                         }
  100.                        
  101.                         $requiresUpper = false;
  102.                         $lastWasUpper = true;
  103.                         continue;
  104.                 }
  105.                
  106.                 if (!ctype_alpha($letter)) {
  107.                         return false;
  108.                 }
  109.                
  110.                 $requiresUpper = false;
  111.                 $lastWasUpper = false;
  112.         }
  113.        
  114.         return true;
  115.     }//end nameIsValid()
  116.  
  117.  
  118. }//end class
  119.  
  120.  
  121. ?>