22

PHP_CodeSnifferルールに関するドキュメントはどこで入手できますか? ルールは存在するように思えますが、それらのリストとそのプロパティは誰も知りません。私は本質的な問題に直面しました。標準をカスタマイズし、ステートメントを1つのスペースで区切った後、同じ行で中括弧の開始を強制したいのですが、それを行う方法がわかりません。これは 1 つの問題にすぎませんが、他にも多くの問題があります。ありがとうございました。

4

4 に答える 4

20

ソース コードを見るのは恐ろしいことですが、考えられるすべてのルール (または PHP_CodeSniffer が呼び出すスニッフィング) を一覧表示するには、ソース コードを確認する必要があります

私は同じ問題を抱えていたので、次の 3 つの手法を使用しました。

1.オプション-s

phpcsコマンドには、追跡されていないスニフの識別子を出力するオプションがあります。例を見てみましょう:

$ phpcs -p -s --extensions=php /path/to/my/source/code

...E...E....W.....W..E.............W........................  60 / 723 (8%)
.......................W.................................... 120 / 723 (17%)
.............................W..W....E..................E..E 180 / 723 (25%)

----------------------------------------------------------------------
 60 | ERROR   | [x] Line indented incorrectly; expected at least 2 spaces,
    |         |     found 0 (Generic.WhiteSpace.ScopeIndent.Incorrect)
----------------------------------------------------------------------
 61 | WARNING | Comment refers to a TODO task "Improve readability"
    |         | (Generic.Commenting.Todo.TaskFound)
----------------------------------------------------------------------

... output has been truncated
Time: 2 mins, 9.46 secs; Memory: 25.5Mb

レポートでは、各エラーまたは警告がスニフを出力します。

2.ruleset.xmlソースコード内のファイル

プロジェクトでどのルールに従うか無視するかの構成は、通常、ruleset.xmlファイルで定義されます。PHP_CodeSniffer ソース コードには、それらの例がいくつか含まれています。PHP_CodeSniffer は、いくつかの標準を定義します: Generic、PSR1、PSR2、... それぞれにruleset.xmlファイルがあります。それらから、独自の作成方法を学ぶことができます。

この手法では、ソース コードを確認する必要がありますが、プロジェクトにおそらくあるものと同様のファイルを読み取るだけで済みます。たとえばruleset.xml、フォルダーの下に PSR2 規格のファイルがありCodeSniffer/Standards/PSR2ます。

3.最終的に、ソースコード

最後に、スニフの包括的なリストが必要な場合は、ソース コードからそれらを抽出する必要があります。スニフ識別子がどのように構築されるかを解読しましょう。

sniff を実装する PHP クラスを知るのは簡単です。たとえば、 を見てみましょうGeneric.Commenting.Todo.TaskFound。最初の 3 つのトークンの意味は次のとおりです。

  1. Generic: 標準であり、標準のフォルダを定義しますCodeSniffer/Standards/Generic
  2. Commenting: これは標準の下の sniff グループであり、標準内のフォルダーも指しています。CodeSniffer/Standards/Generic/Sniffs/Commenting
  3. Todo: それは sniff であり、というクラスに実装されています。<sniff name>Sniff.php

そのため、Generic.Commenting.Todo.TaskFoundsniff がCodeSniffer/Standards/Generic/Sniffs/Commenting/TodoSniff.phpクラスに実装されています。

その逆もできます。PHP クラスへのパスがわかれば、PHP_CodeSniffer が報告するスニフを知ることができます。たとえば、 に実装されているクラスはCodeSniffer/Standards/Squiz/Sniffs/NamingConventions/ValidFunctionNameSniff.php、識別子 を持つスニフを生成しますSquiz.NamingConventions.ValidFunctionName

于 2015-07-31T06:55:52.707 に答える
2

ソース コード以外のルールに関するドキュメントはありません。さまざまな規格とそれらの使用方法を見てください。

于 2013-05-08T05:25:36.640 に答える