設定¶
PsalmはXML設定ファイル(デフォルトではpsalm.xml
)を使用します。最小限の例は次のようになります:
設定ファイルは、XIncludeタグを使用して複数のファイルに分割できます(前の例を参照):
psalm.xml¶
<?xml version="1.0"?>
<psalm
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="files.xml"/>
</psalm>
files.xml¶
<?xml version="1.0" encoding="UTF-8"?>
<projectFiles xmlns="https://getpsalm.org/schema/config">
<file name="Bar.php" />
<file name="Bat.php" />
</projectFiles>
オプションの <psalm /> 属性¶
コーディングスタイル¶
errorLevel¶
これはPsalmのエラー検出レベルに対応します。reportMixedIssues¶
これを"false"
に設定すると、Psalmの出力でMixed
型の問題がすべて非表示になります。指定されていない場合、errorLevel
が3以上の場合はデフォルトで"false"
、エラーレベルが1または2の場合は"true"
になります。
totallyTyped¶
(非推奨)この設定はreportMixedIssues
に置き換えられました。errorLevel
が1の場合に自動的に有効になります。
resolveFromConfigFile¶
これが有効な場合、設定ファイルで言及された相対ディレクトリは、設定ファイルの位置を基準に解決されます。無効または存在しない場合、Psalmプロセスの作業ディレクトリを基準に解決されます。 新しいバージョンのPsalmは、設定ファイルを生成する際にこのオプションを有効にします。古いバージョンではこれを含めませんでした。useDocblockTypes¶
docblockで定義された型を使用するかどうか。デフォルトはtrue
です。
useDocblockPropertyTypes¶
すべてのdocblock型を使用しない場合でも、docblockプロパティ型を使用できます。デフォルトはfalse
です(useDocblockTypes
がfalse
の場合のみ関連)。
docblockPropertyTypesSealProperties¶
クラスのdocblockで@propertyを使用することが@psalm-seal-propertiesを暗示するかどうか。デフォルトはtrue
です。
usePhpDocMethodsWithoutMagicCall¶
通常、PHPDocの@method
アノテーションは__call
メソッドを持つクラスにのみ適用されます。これをtrue
に設定すると、継承されたメソッドの戻り値の型をオーバーライドするために@method
アノテーションを使用できます。デフォルトはfalse
です。
usePhpDocPropertiesWithoutMagicCall¶
通常、PHPDocの@property
、@property-read
、@property-write
アノテーションは__get
/__set
メソッドを持つクラスにのみ適用されます。これをtrue
に設定すると、プロパティの存在チェックと結果のプロパティ型をオーバーライドするために@property
、@property-read
、@property-write
アノテーションを使用できます。デフォルトはfalse
です。
disableVarParsing¶
プロパティ以外のすべての場所で@var
PHPDocの解析を無効にします。これをtrue
に設定すると、Psalm genericsと適切な型付けの統合以前に使用された古い@var
アノテーションによる多くの誤検出を除去し、単一の真実の源の原則を強制できます。デフォルトはfalse
です。
strictBinaryOperands¶
trueの場合、数値および文字列演算に厳密な型付けを強制します(https://github.com/vimeo/psalm/issues/24 を参照)。デフォルトはfalse
です。
rememberPropertyAssignmentsAfterCall¶
これをfalse
に設定すると、関数呼び出しによって、Psalmが現在分析している関数のスコープ内のオブジェクトプロパティについて知っていたことを忘れさせます。これはHackの機能を複製しています。デフォルトはtrue
です。
allowStringToStandInForClass¶
true
の場合、文字列をクラスとして使用できます。つまり、$some_string::someMethod()
が許可されます。false
の場合、クラス定数文字列(Foo\Bar::class
の形式)のみがクラスの代わりに使用でき、そうでない場合はInvalidStringClass
問題が発生します。デフォルトはfalse
です。
disableSuppressAll¶
true
の場合、@psalm-suppress all
によるすべての問題のワイルドカード抑制を無効にします。デフォルトはfalse
です。
memoizeMethodCallResults¶
true
の場合、引数なしのメソッド呼び出しの結果は、特定のオブジェクトでそのメソッドを繰り返し呼び出す間で記憶されます。デフォルトはfalse
です。
hoistConstants¶
true
の場合、ファイル内の関数で定義された定数は、その関数を呼び出すときだけでなく、そのファイルを要求するときに利用可能であると想定されます。デフォルトはfalse
です(つまり、関数で定義された定数は、その関数が呼び出されたときにのみ使用可能になります)。
addParamDefaultToDocblockType¶
時々、パラメータのデフォルト値がdocblockの型と一致しないことがあります。デフォルトでは、Psalmは問題を発生させます。このフラグをtrue
に設定すると、パラメータの型にデフォルト値を含めるように拡張します。デフォルトはfalse
です。
checkForThrowsDocblock¶
true
の場合、Psalmは開発者が特定の関数またはメソッドでスローされるすべての例外に対して@throws
docblockを提供しているかどうかをチェックします。デフォルトはfalse
です。
checkForThrowsInGlobalScope¶
true
の場合、Psalmは開発者がグローバルスコープですべての例外をキャッチしているかどうかをチェックします。デフォルトはfalse
です。
#### ignoreInternalFunctionFalseReturn¶
true
の場合、Psalmは内部関数(preg_split
など)の戻り値から生じる可能性のあるfalseの問題を無視します。これらの関数は稀にfalseを返す可能性がありますが、通常は無視しても問題ありません。デフォルトはfalse
です。
ignoreInternalFunctionNullReturn¶
true
の場合、Psalmは内部配列関数(current
など)の戻り値から生じる可能性のあるnullの問題を無視します。これらの関数は稀にnullを返す可能性がありますが、通常は無視しても問題ありません。デフォルトはfalse
です。
inferPropertyTypesFromConstructor¶
true
の場合、Psalmは単純なコンストラクタで見られる代入からプロパティ型を推論します。デフォルトはtrue
です。
findUnusedVariablesAndParams¶
true
の場合、Psalmはすべての未使用の変数を見つけようとします。これは--find-unused-variables
オプションを使用して実行するのと同等です。デフォルトはfalse
です。
findUnusedCode¶
true
の場合、Psalmはすべての未使用のコード(未使用の変数を含む)を見つけようとします。これは--find-unused-code
オプションを使用して実行するのと同等です。デフォルトはfalse
です。
findUnusedPsalmSuppress¶
true
の場合、Psalmは使用されていないすべての@psalm-suppress
アノテーションを報告します。これは--find-unused-psalm-suppress
オプションを使用して実行するのと同等です。デフォルトはfalse
です。
ensureArrayStringOffsetsExist¶
true
の場合、Psalmは配列の明示的な文字列オフセット(例:$arr['foo']
)を参照する際に、ユーザーが最初にその存在を確認(isset
チェックまたはオブジェクトのような配列を介して)していない場合に警告します。デフォルトはfalse
です。
ensureArrayIntOffsetsExist¶
true
の場合、Psalmは配列の明示的な整数オフセット(例:$arr[7]
)を参照する際に、ユーザーが最初にその存在を確認(isset
チェックまたはオブジェクトのような配列を介して)していない場合に警告します。デフォルトはfalse
です。
ensureOverrideAttribute¶
true
の場合、Psalmは親のメソッドをオーバーライドするクラスおよびインターフェースのメソッドで、Override
属性がない場合に報告します。デフォルトはfalse
です。
phpVersion¶
プロジェクトのチェックやフィックス時にPsalmが想定すべきPHPバージョンを設定します。この属性が設定されていない場合、Psalmはcomposer.json
での宣言があればそれを使用します。宣言されたphp
依存関係を満たす最も古いバージョンのPHPに対してチェックします。
これはコマンドラインで--php-version=
フラグを使用してオーバーライドできます。コマンドラインフラグはphpVersion
設定とcomposer.json
から派生したバージョンの両方に対して最も高い優先順位を持ちます。
skipChecksOnUnresolvableIncludes¶
true
の場合、Psalmは解決できないinclude
またはrequire
に遭遇した後、クラス、変数、関数のチェックをスキップします。これにより、Psalmが知らない関数やクラスを参照するコードが許可されます。
デフォルトはfalse
です。
sealAllMethods¶
true
の場合、Psalmはすべてのクラスがシールドされたメソッドを持っているかのように扱います。つまり、マジックメソッド__call
を実装する場合、各マジックメソッドに対して@method
も追加する必要があります。デフォルトはfalseです。
sealAllProperties¶
true
の場合、Psalmはすべてのクラスがシールドされたプロパティを持っているかのように扱います。つまり、Psalmは@property
(または@property-read
/@property-write
)アノテーションのリストに含まれておらず、明示的にproperty
として定義されていないプロパティの取得と設定を許可しません。デフォルトはfalseです。
runTaintAnalysis¶
true
の場合、Psalmはコードベースで汚染分析を実行します。この設定は、Psalmを--taint-analysis
オプション付きで実行するのと同じです。
reportInfo¶
false
の場合、PsalmはerrorLevel
よりも低いレベルの問題をinfo
として扱いません(代わりに抑制されます)。これは大規模プロジェクトの分析時間を大幅に改善できます。ただし、この設定により、Psalmは抑制された問題の数を数えたり、修正を提案したりすることができなくなります。
allowNamedArgumentCalls¶
false
の場合、Psalmはコード内のParamNameMismatch
問題を報告しなくなります。これは、ライブラリのメソッドへの外部アクセスを防いだり、可変引数を使用する際に型をlist
に減らしたりするための個々の@no-named-arguments
の使用に取って代わるものではありません。
triggerErrorExits¶
trigger_errorの動作を記述します。always
は常に終了することを意味し、never
は決して終了しないことを意味し、default
はE_USER_ERROR
の場合にのみ終了することを意味します。デフォルトはdefault
です。
Psalmの実行¶
autoloader¶
アプリケーションが1つ以上のカスタムオートローダーを登録し、かつ/または普遍的な定数/関数を宣言する場合、このオートローダースクリプトはスキャンが開始される前にPsalmによって実行されます。Psalmは常にデフォルトでcomposerのオートローダーを登録します。throwExceptionOnError¶
テストで便利です。これにより、Psalmはエラーに遭遇したときに通常の例外をスローします。デフォルトはfalse
です。
hideExternalErrors¶
プロジェクトファイルで使用されているが、<projectFiles>
に含まれていないファイルの問題を表示するかどうか。デフォルトはfalse
です。
hideAllErrorsExceptPassedFiles¶
CLIで明示的に引数として渡されたファイルに対してのみ問題を報告するかどうか。これは、CLIで設定されていない場合、require/includeで読み込まれたファイルも報告しないことを意味します。単一または選択したファイルのエラーのみをチェックしたい場合に便利です。デフォルトはfalse
です。
cacheDirectory¶
Psalmのキャッシュデータを保存するディレクトリ - 指定する場合(まだ存在しない場合)、その親ディレクトリが既に存在している必要があります。そうでない場合、Psalmはエラーをスローします。デフォルトは$XDG_CACHE_HOME/psalm
です。$XDG_CACHE_HOME
が設定されていないか空の場合、$HOME/.cache/psalm
が使用されます。これが定義されていない場合はsys_get_temp_dir() . '/psalm'
が使用されます。
allowFileIncludes¶
PHPでrequire
/include
呼び出しを許可するかどうか。デフォルトはtrue
です。
serializer¶
Psalmがデータのキャッシュに使用するシリアライザーをハードコードできます。デフォルトでは、Psalmはバージョンが2.0.5以上の場合はext-igbinary
を使用し、そうでない場合はPHPの組み込みシリアライザーを使用します。
compressor¶
Psalmのキャッシュに使用する圧縮方法をハードコードできます。デフォルトでは、Psalmは有効な場合はext-zlib
のdeflateを使用します。
threads¶
Psalmが使用するスレッド数をハードコードできます(コマンドラインの--threads
と同様)。この値はホストマシンからのスレッド検出の代わりに使用されますが、コマンドラインで--threads
または--debug
(スレッドを1に設定)を使用すると上書きされます。
maxStringLength¶
この設定は、Psalm分析中にリテラル文字列型に変換される文字列リテラルの最大長を制御します。この値(デフォルトでは1000バイト)より長い文字列は、代わりに一般的なnon-empty-string
型に変換されます。この設定を変更すると望ましくない副作用が発生する可能性があり、それらの副作用はバグとは見なされないことに注意してください。
maxShapedArraySize¶
この設定は、Psalm分析中に形状付きarray{key1: "value", key2: T}
型に変換される形状付き配列の最大サイズを制御します。この値(デフォルトでは100)より大きい配列は、代わりに一般的なnon-empty-array
型に変換されます。この設定を変更すると望ましくない副作用が発生する可能性があり、それらの副作用はバグとは見なされないことに注意してください。
restrictReturnTypes¶
宣言された戻り値の型が推論された戻り値の型ほど厳密でない場合にLessSpecificReturnType
を発行します。
このコード:
このエラーが発生します:LessSpecificReturnType - 関数aの推論された戻り値の型 '1' は、宣言された戻り値の型 'int' よりも具体的です
エラーを修正するには、docブロックでより具体的な型を指定する必要があります:
警告: より厳密な型を強制することは必ずしも最良の対処法ではなく、予期しない結果を招く可能性があります。restrictReturnTypes="true"
では、次のコードは無効です:
class StandardCar {
/**
* @return list{'motor', 'brakes', 'wheels'}
*/
public function getSystems(): array {
return ['motor', 'brakes', 'wheels'];
}
}
class PremiumCar extends StandardCar {
/**
* @return list{'motor', 'brakes', 'wheels', 'rear parking sensor'}
*/
public function getSystems(): array {
return ['motor', 'brakes', 'wheels', 'rear parking sensor'];
}
}
`ImplementedReturnTypeMismatch - StandardCar::getSystemsの継承された戻り値の型 'list{'motor', 'brakes', 'wheels'}' は、PremiumCar::getSystemsの実装された戻り値の型 'list{'motor', 'brakes', 'wheels', 'rear parking sensor'}' と異なります
findUnusedBaselineEntry¶
使用されていないベースラインエントリに対してUnusedBaselineEntryを発行します。
findUnusedIssueHandlerSuppression¶
問題を抑制するために使用されていない抑制された問題ハンドラに対してUnusedIssueHandlerSuppressionを発行します。
プロジェクト設定¶
<projectFiles>¶
Psalmが検査すべきすべてのディレクトリのリストを含みます。<ignoreFiles>
ディレクティブを使用して、無視するファイルやフォルダのセットを指定することもできます。デフォルトでは、無視されるファイル/フォルダは存在する必要があります。存在しないかもしれない無視されるファイル/フォルダにはallowMissingFiles
属性を追加できます。
<projectFiles>
<directory name="src" />
<ignoreFiles>
<directory name="src/Stubs" />
</ignoreFiles>
<ignoreFiles allowMissingFiles="true">
<directory name="path-that-may-not-exist" />
</ignoreFiles>
</projectFiles>
<extraFiles>¶
オプション。<projectFiles>
と同じ形式です。Psalmが読み込むべきが検査しないディレクトリ。
<fileExtensions>¶
オプション。検索する拡張子のリスト。これを拡張する方法を理解するには、非PHPファイルのチェックを参照してください。
<enableExtensions>¶
オプション。有効にする拡張機能のリスト。デフォルトでは、composer.jsonで必要とされる拡張機能のみが有効になります。
<disableExtensions>¶
オプション。無効にする拡張機能のリスト。デフォルトでは、composer.jsonで必要とされる拡張機能のみが有効になります。
<plugins>¶
オプション。<plugin filename="path_to_plugin.php" />
エントリのリスト。詳細はプラグインセクションを参照してください。
<issueHandlers>¶
オプション。Psalmが見つけたすべての問題について苦情を言うことを望まない場合、issueHandlerタグを使用してそれを設定できます。詳細はコードの問題への対処を参照してください。
<mockClasses>¶
オプション。テストでモッククラスを使用していますか?ファイルをチェックする際にPsalmがそれらを無視するようにしたい場合は、<class name="Your\Namespace\ClassName" />
でクラスの完全修飾パスを含めてください。
<universalObjectCrates>¶
オプション。静的に決定できないプロパティを持つオブジェクトがありますか?Psalmが特定のクラスライクのすべてのプロパティを混合として扱うようにしたい場合は、<class name="Your\Namespace\ClassName" />
でクラスの完全修飾パスを含めてください。デフォルトでは、stdClass
とSimpleXMLElement
が汎用オブジェクトクレートとして設定されています。
<stubs>¶
オプション。コードベースがPsalmにリフレクションを介して見えないクラスや関数を使用している場合(例えば、Psalmを実行しているマシンで利用できない内部パッケージにコードベースが依存している場合)、スタブファイルを使用できます。PhpStorm(人気のあるIDE)などで使用されているスタブは、実装なしでクラスと関数の説明を提供します。
一般的なクラスのスタブのリストはこちらで見つけることができます。
各ファイルを<file name="path/to/file.php" />
でリストアップしてください。テストするクラスがスタブファイルで定義された親クラスまたはインターフェースを使用している場合、このスタブはpreloadClasses="true"
属性で設定する必要があります。
<stubs>
<file name="path/to/file.php" />
<file name="path/to/abstract-class.php" preloadClasses="true" />
</stubs>
<ignoreExceptions>¶
オプション。checkForThrowsDocblock
またはcheckForThrowsInGlobalScope
で報告しない例外のリスト。class
タグはspecifiedクラスのインスタンスのみをPsalmに無視させ、classAndDescendants
はサブクラスも無視させます。例外にonlyGlobalScope="true"
が設定されている場合、その例外に対してはcheckForThrowsInGlobalScope
のみが無視されます。例:
<ignoreExceptions>
<class name="fully\qualified\path\Exc" onlyGlobalScope="true" />
<classAndDescendants name="fully\qualified\path\OtherExc" />
</ignoreExceptions>
<globals>¶
オプション。コードベースがglobal
キーワードでアクセスするグローバル変数を使用している場合、その型を宣言できます。例:
一部のフレームワークやライブラリは、例えば$GLOBALS[DB]->query($query)
を通じて機能を公開しています。
以下の設定は、スーパーグローバル($GLOBALS
、$_GET
など)にカスタム型を宣言します。
<globals>
<var name="GLOBALS" type="array{DB: MyVendor\DatabaseConnection, VIEW: MyVendor\TemplateView}" />
<var name="_GET" type="array{data: array<string, string>}" />
</globals>
上の例は、以下のようにグローバル変数を宣言します:
- $GLOBALS
- DB
の型はMyVendor\DatabaseConnection
- VIEW
の型はMyVendor\TemplateView
- $_GET
- data
は例えば["id" => "123", "title" => "Nice"]
のような型
<forbiddenFunctions>¶
オプション。ForbiddenCode
問題タイプを発行すべき関数のリストを指定できます。
プラグインでのPsalm設定へのアクセス¶
プラグインは、シングルトンPsalm\Configを使用してプラグインでグローバル設定にアクセスまたは変更できます。
$config = \Psalm\Config::getInstance();
if (!isset($config->globals['$GLOBALS'])) {
$config->globals['$GLOBALS'] = 'array{data: array<string, string>}';
}