2017-11-12 13 views
1

PHP_CodeSnifferには、コマンドラインを実行するのではなく、使用できるAPIがありますか?PHP_CodeSniffer用のAPIはありますか?

だから、PHPコード、$コード、およびPHP_CodeSnifferのコードの作曲確保ロードの文字列を与えられた、私にできる何かがあるような:

// Pseudocode! 
$code_sniffer = new PHPCodeSniffer; 
$result = $code_sniffer->sniff($code); 

のようなもので、コマンドラインを経由して行くのではなく、 :

$result = exec(sprintf('echo %s | vendor/bin/phpcs', escapeshellarg($code))); 

答えて

1

ありますが、それ以上のコードを書く必要があります。

ここでは例を見てみましょう:例では、(あなたはまだファイルに書き込まれていないコードの一部を盗聴することができ、かつ使用する標準のようなものを設定も可能であることhttps://gist.github.com/gsherwood/aafd2c16631a8a872f0c4a23916962ac

ruleset.xmlファイル)。

別の例は、その代わりにPHP +のJSのトークナイザを使用して、既存のファイルからコンテンツを引っ張る、ここに提供されています:https://gist.github.com/gsherwood/f17cfc90f14a9b29eeb6b2e99e6e7f66

それはできるだけ多くのオプションを使用しないので、それは短いです。

+0

ありがとう!それはPHPCS 3のようです。残念ながら、私が使っている標準はまだ2であるので、それを理解しなければなりませんでした。私は新しい答えとして働いているものを投稿します。 – joachim

0

は、ここで私はPHPCS 2のために働いて得たものです:

PHP_CodeSniffer::setConfigData(
    'installed_paths', 
    // The path to the standard I am using. 
    __DIR__ . '/../../vendor/drupal/coder/coder_sniffer', 
    TRUE 
); 


$phpcs = new PHP_CodeSniffer(
    // Verbosity. 
    0, 
    // Tab width 
    0, 
    // Encoding. 
    'iso-8859-1', 
    // Interactive. 
    FALSE 
); 

$phpcs->initStandard('Drupal'); 

// Mock a PHP_CodeSniffer_CLI object, as the PHP_CodeSniffer object expects 
// to have this and be able to retrieve settings from it. 
// (I am using PHPCS within tests, so I have Prophecy available to do this. In another context, just creating a subclass of PHP_CodeSniffer_CLI set to return the right things would work too.) 
$prophet = new \Prophecy\Prophet; 
$prophecy = $prophet->prophesize(); 
$prophecy->willExtend(\PHP_CodeSniffer_CLI::class); 
// No way to set these on the phpcs object. 
$prophecy->getCommandLineValues()->willReturn([ 
    'reports' => [ 
    "full" => NULL, 
    ], 
    "showSources" => false, 
    "reportWidth" => null, 
    "reportFile" => null 
]); 
$phpcs_cli = $prophecy->reveal(); 
// Have to set these properties, as they are read directly, e.g. by 
// PHP_CodeSniffer_File::_addError() 
$phpcs_cli->errorSeverity = 5; 
$phpcs_cli->warningSeverity = 5; 

// Set the CLI object on the PHP_CodeSniffer object. 
$phpcs->setCli($phpcs_cli); 

// Process the file with PHPCS. 
$phpcsFile = $phpcs->processFile(NULL, $code); 

$errors = $phpcsFile->getErrorCount(); 
$warnings = $phpcsFile->getWarningCount(); 

$total_error_count = ($phpcsFile->getErrorCount() + $phpcsFile->getWarningCount()); 

// Get the reporting to process the errors. 
$this->reporting = new \PHP_CodeSniffer_Reporting(); 
$reportClass = $this->reporting->factory('full'); 

// This gets you an array of all the messages which you can easily work over. 
$reportData = $this->reporting->prepareFileReport($phpcsFile); 

// This formats the report, but prints it directly. 
$reportClass->generateFileReport($reportData, $phpcsFile); 
関連する問題