2012-04-12 1 views
0

Firebugという文字列のファイルをスキャンしたいが、これは十分ではない。また、QFirebug :: logとQFirebug :: errorの静的メソッドを変更したいと考えています。PHP_CodeSnifferで文字列ルールを見つける

クラス名の後にメソッド名を抽出する方法はありますか?

public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) 
{ 
    $tokens = $phpcsFile->getTokens(); 
    echo $tokens[$stackPtr]['content']; 
    if ($tokens[$stackPtr]['content'] === 'Firebug') { 
     $error = 'found ' . $tokens[$stackPtr]['content']; 
     $data = array(trim($tokens[$stackPtr]['content'])); 
     $phpcsFile->addError($error, $stackPtr, 'Found', $data); 
    } 

}//end process() 

答えて

4

あなたは-vvコマンドライン引数でphpcsを実行する場合は、PHPファイルをに分割されたトークンのリストを見ることができます。あなたが得るFirebug::error();のような行の場合:

Process token 1 on line 2 [lvl:0;]: T_STRING => Firebug 
Process token 2 on line 2 [lvl:0;]: T_DOUBLE_COLON => :: 
Process token 3 on line 2 [lvl:0;]: T_STRING => error 
Process token 4 on line 2 [lvl:0;]: T_OPEN_PARENTHESIS => (
Process token 5 on line 2 [lvl:0;]: T_CLOSE_PARENTHESIS =>) 
Process token 6 on line 2 [lvl:0;]: T_SEMICOLON => ; 

あなたはあなたの全体のスニフは表示されませんが、私はあなたがT_STRINGトークンを探していると仮定します。この場合、あなたは$ stackPtrはちょうどそれが静的呼び出しであることを確認し、次の文字列トークンつかみ、「Firebugの」おとり捜査を指していると判断したら:あなたは、人々がいると思う場合

if ($tokens[$stackPtr]['content'] === 'Firebug' 
    && $tokens[($stackPtr + 1)]['code'] === T_DOUBLE_COLON 
) { 
    // This is a static call to a Firebug class method. 
    $methodName = $tokens[($stackPtr + 2)]['content']; 
    /* your error code here */ 
} 

か、をそれを確認するために、あなたはさらに一歩に行きたい場合は、あなたがT_OPEN_PARENTHESISを探すことができますし、T_CLOSE_PARENTHESISが同様にトークン

if ($tokens[$stackPtr]['content'] === 'Firebug') { 
    // Find the next non-whitespace token. 
    $colon = $phpcsFile->findNext(PHP_CodeSniffer_Tokens::$emptyTokens, ($stackPtr + 1), null, true); 
    if ($tokens[$colon]['code'] === T_DOUBLE_COLON) { 
     // This is a static call to a Firebug class method. 
     $methodName = $phpcsFile->findNext(T_STRING, ($colon + 1)); 
     /* your error code here */ 
    } 
} 

Firebug :: error()のように、二重のコロンの間にスペースを置くつもり、あなたはこのような何かを行うことができます関数呼び出しですが、使用するクラスによって異なります。

希望に役立ちます。

関連する問題