2014-10-30 5 views
1

мой sniff не работает и не распознает свойство private $ testvar. Я хочу сделать Doc-Block обязательным там.PHP CodeSniffer собственность не признана

Когда я запускаю сниффер кода, метод процесса, похоже, не используется. Я добавил некоторые эхо до этого.

Существует ли токен T_PROPERTY? Я не могу найти его на php manual http://php.net/manual/en/tokens.php Тем не менее, в исходном коде squiz lab используется T_PROPERTY.

<?php 
/** 
* Extension for the pear class comment sniff. 
* 
*/ 

/** 
* Extension for the pear class comment sniff. 
* 
*/ 
class XYZ_Sniffs_Commenting_PropertyCommentSniff implements PHP_CodeSniffer_Sniff 
{ 
    private $testvar = 1; 

    /** 
    * Returns an array of tokens this test wants to listen for. 
    * 
    * @return array 
    */ 
    public function register() 
    { 
     return array(T_PROPERTY); 
    } 

    /** 
    * Checks the property comments. 
    * 
    * @param PHP_CodeSniffer_File $phpcsFile the file object 
    * @param int     $stackPtr the stack pointer 
    * 
    * @return void 
    */ 
    public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) 
    { 
     $tokens = $phpcsFile->getTokens(); 
     $find = PHP_CodeSniffer_Tokens::$scopeModifiers; 
     $find[] = T_WHITESPACE; 
     $find[] = T_STATIC; 

     $commentEnd = $phpcsFile->findPrevious($find, ($stackPtr - 1), null, true); 

     if ($tokens[$commentEnd]['code'] !== T_DOC_COMMENT_CLOSE_TAG 
      && $tokens[$commentEnd]['code'] !== T_COMMENT 
     ) { 
      $phpcsFile->addError('Missing property doc comment', $stackPtr, 'Missing'); 
      $phpcsFile->recordMetric($stackPtr, 'Function has property comment', 'no'); 
      return; 
     } else { 
      $phpcsFile->recordMetric($stackPtr, 'Function has property comment', 'yes'); 
     } 
    } 
} 

Спасибо за помощь :).

ответ

1

Ток T_PROPERTY используется только при проверке файлов JavaScript. Он не существует для файлов PHP.

Для файлов PHP вам понадобится помощник AbstractVariableSniff. Вот нюх, который проверяет комментарии членов vars: https://github.com/squizlabs/PHP_CodeSniffer/blob/master/CodeSniffer/Standards/Squiz/Sniffs/Commenting/VariableCommentSniff.php

Обратите внимание, как он расширяет PHP_CodeSniffer_Standards_AbstractVariableSniff, а затем реализует только метод processMemberVar(). Он оставляет методы processVariable() и processVariableInString() пустым, потому что на него не заботятся о регулярных переменных внутри кода.

Также обратите внимание, что если вы пишете комментарии к комментариям, анализатор комментариев полностью отличается от версии 2.0 (в настоящее время в бета-версии, но из-за стабильности в течение недели). Взгляните на новую версию приведенного выше нюха: https://github.com/squizlabs/PHP_CodeSniffer/blob/phpcs-fixer/CodeSniffer/Standards/Squiz/Sniffs/Commenting/VariableCommentSniff.php