Skip to content

設定

PsalmはXML設定ファイル(デフォルトではpsalm.xml)を使用します。最小限の例は次のようになります:

<?xml version="1.0"?>
<psalm>
    <projectFiles>
        <directory name="src" />
    </projectFiles>
</psalm>

設定ファイルは、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
  errorLevel="[int]"/>
これはPsalmのエラー検出レベルに対応します。

reportMixedIssues

<psalm
  reportMixedIssues="[bool]"/>
これを"false"に設定すると、Psalmの出力でMixed型の問題がすべて非表示になります。指定されていない場合、errorLevelが3以上の場合はデフォルトで"false"、エラーレベルが1または2の場合は"true"になります。

totallyTyped

(非推奨)この設定はreportMixedIssuesに置き換えられました。errorLevelが1の場合に自動的に有効になります。

resolveFromConfigFile

<psalm
  resolveFromConfigFile="[bool]"/>
これが有効な場合、設定ファイルで言及された相対ディレクトリは、設定ファイルの位置を基準に解決されます。無効または存在しない場合、Psalmプロセスの作業ディレクトリを基準に解決されます。 新しいバージョンのPsalmは、設定ファイルを生成する際にこのオプションを有効にします。古いバージョンではこれを含めませんでした。

useDocblockTypes

<psalm
  useDocblockTypes="[bool]">
docblockで定義された型を使用するかどうか。デフォルトはtrueです。

useDocblockPropertyTypes

<psalm
  useDocblockPropertyTypes="[bool]">
すべてのdocblock型を使用しない場合でも、docblockプロパティ型を使用できます。デフォルトはfalseです(useDocblockTypesfalseの場合のみ関連)。

docblockPropertyTypesSealProperties

<psalm
  docblockPropertyTypesSealProperties="[bool]">
クラスのdocblockで@propertyを使用することが@psalm-seal-propertiesを暗示するかどうか。デフォルトはtrueです。

usePhpDocMethodsWithoutMagicCall

<psalm
  usePhpDocMethodsWithoutMagicCall="[bool]">
通常、PHPDocの@methodアノテーションは__callメソッドを持つクラスにのみ適用されます。これをtrueに設定すると、継承されたメソッドの戻り値の型をオーバーライドするために@methodアノテーションを使用できます。デフォルトはfalseです。

usePhpDocPropertiesWithoutMagicCall

<psalm
  usePhpDocPropertiesWithoutMagicCall="[bool]">
通常、PHPDocの@property@property-read@property-writeアノテーションは__get/__setメソッドを持つクラスにのみ適用されます。これをtrueに設定すると、プロパティの存在チェックと結果のプロパティ型をオーバーライドするために@property@property-read@property-writeアノテーションを使用できます。デフォルトはfalseです。

disableVarParsing

<psalm
  disableVarParsing="[bool]"/>
プロパティ以外のすべての場所で@var PHPDocの解析を無効にします。これをtrueに設定すると、Psalm genericsと適切な型付けの統合以前に使用された古い@varアノテーションによる多くの誤検出を除去し、単一の真実の源の原則を強制できます。デフォルトはfalseです。

strictBinaryOperands

<psalm
  strictBinaryOperands="[bool]">
trueの場合、数値および文字列演算に厳密な型付けを強制します(https://github.com/vimeo/psalm/issues/24 を参照)。デフォルトはfalseです。

rememberPropertyAssignmentsAfterCall

<psalm
  rememberPropertyAssignmentsAfterCall="[bool]">
これをfalseに設定すると、関数呼び出しによって、Psalmが現在分析している関数のスコープ内のオブジェクトプロパティについて知っていたことを忘れさせます。これはHackの機能を複製しています。デフォルトはtrueです。

allowStringToStandInForClass

<psalm
  allowStringToStandInForClass="[bool]">
trueの場合、文字列をクラスとして使用できます。つまり、$some_string::someMethod()が許可されます。falseの場合、クラス定数文字列(Foo\Bar::classの形式)のみがクラスの代わりに使用でき、そうでない場合はInvalidStringClass問題が発生します。デフォルトはfalseです。

disableSuppressAll

<psalm
  disableSuppressAll="[bool]">
trueの場合、@psalm-suppress allによるすべての問題のワイルドカード抑制を無効にします。デフォルトはfalseです。

memoizeMethodCallResults

<psalm
  memoizeMethodCallResults="[bool]">
trueの場合、引数なしのメソッド呼び出しの結果は、特定のオブジェクトでそのメソッドを繰り返し呼び出す間で記憶されます。デフォルトはfalseです。

hoistConstants

<psalm
  hoistConstants="[bool]">
trueの場合、ファイル内の関数で定義された定数は、その関数を呼び出すときだけでなく、そのファイルを要求するときに利用可能であると想定されます。デフォルトはfalseです(つまり、関数で定義された定数は、その関数が呼び出されたときにのみ使用可能になります)。

addParamDefaultToDocblockType

<psalm
  addParamDefaultToDocblockType="[bool]">
時々、パラメータのデフォルト値がdocblockの型と一致しないことがあります。デフォルトでは、Psalmは問題を発生させます。このフラグをtrueに設定すると、パラメータの型にデフォルト値を含めるように拡張します。デフォルトはfalseです。

checkForThrowsDocblock

<psalm
  checkForThrowsDocblock="[bool]">
trueの場合、Psalmは開発者が特定の関数またはメソッドでスローされるすべての例外に対して@throwsdocblockを提供しているかどうかをチェックします。デフォルトはfalseです。

checkForThrowsInGlobalScope

<psalm
  checkForThrowsInGlobalScope="[bool]">
trueの場合、Psalmは開発者がグローバルスコープですべての例外をキャッチしているかどうかをチェックします。デフォルトはfalseです。

#### ignoreInternalFunctionFalseReturn

<psalm
  ignoreInternalFunctionFalseReturn="[bool]">
trueの場合、Psalmは内部関数(preg_splitなど)の戻り値から生じる可能性のあるfalseの問題を無視します。これらの関数は稀にfalseを返す可能性がありますが、通常は無視しても問題ありません。デフォルトはfalseです。

ignoreInternalFunctionNullReturn

<psalm
  ignoreInternalFunctionNullReturn="[bool]">
trueの場合、Psalmは内部配列関数(currentなど)の戻り値から生じる可能性のあるnullの問題を無視します。これらの関数は稀にnullを返す可能性がありますが、通常は無視しても問題ありません。デフォルトはfalseです。

inferPropertyTypesFromConstructor

<psalm
  inferPropertyTypesFromConstructor="[bool]">
trueの場合、Psalmは単純なコンストラクタで見られる代入からプロパティ型を推論します。デフォルトはtrueです。

findUnusedVariablesAndParams

<psalm
  findUnusedVariablesAndParams="[bool]">
trueの場合、Psalmはすべての未使用の変数を見つけようとします。これは--find-unused-variablesオプションを使用して実行するのと同等です。デフォルトはfalseです。

findUnusedCode

<psalm
  findUnusedCode="[bool]">
trueの場合、Psalmはすべての未使用のコード(未使用の変数を含む)を見つけようとします。これは--find-unused-codeオプションを使用して実行するのと同等です。デフォルトはfalseです。

findUnusedPsalmSuppress

<psalm
  findUnusedPsalmSuppress="[bool]">
trueの場合、Psalmは使用されていないすべての@psalm-suppressアノテーションを報告します。これは--find-unused-psalm-suppressオプションを使用して実行するのと同等です。デフォルトはfalseです。

ensureArrayStringOffsetsExist

<psalm
  ensureArrayStringOffsetsExist="[bool]">
trueの場合、Psalmは配列の明示的な文字列オフセット(例:$arr['foo'])を参照する際に、ユーザーが最初にその存在を確認(issetチェックまたはオブジェクトのような配列を介して)していない場合に警告します。デフォルトはfalseです。

ensureArrayIntOffsetsExist

<psalm
  ensureArrayIntOffsetsExist="[bool]">
trueの場合、Psalmは配列の明示的な整数オフセット(例:$arr[7])を参照する際に、ユーザーが最初にその存在を確認(issetチェックまたはオブジェクトのような配列を介して)していない場合に警告します。デフォルトはfalseです。

ensureOverrideAttribute

<psalm
  ensureOverrideAttribute="[bool]">
trueの場合、Psalmは親のメソッドをオーバーライドするクラスおよびインターフェースのメソッドで、Override属性がない場合に報告します。デフォルトはfalseです。

phpVersion

<psalm
  phpVersion="[string]">
プロジェクトのチェックやフィックス時にPsalmが想定すべきPHPバージョンを設定します。この属性が設定されていない場合、Psalmはcomposer.jsonでの宣言があればそれを使用します。宣言されたphp依存関係を満たす最も古いバージョンのPHPに対してチェックします。

これはコマンドラインで--php-version=フラグを使用してオーバーライドできます。コマンドラインフラグはphpVersion設定とcomposer.jsonから派生したバージョンの両方に対して最も高い優先順位を持ちます。

skipChecksOnUnresolvableIncludes

<psalm
  skipChecksOnUnresolvableIncludes="[bool]">
trueの場合、Psalmは解決できないincludeまたはrequireに遭遇した後、クラス、変数、関数のチェックをスキップします。これにより、Psalmが知らない関数やクラスを参照するコードが許可されます。

デフォルトはfalseです。

sealAllMethods

<psalm
  sealAllMethods="[bool]">
trueの場合、Psalmはすべてのクラスがシールドされたメソッドを持っているかのように扱います。つまり、マジックメソッド__callを実装する場合、各マジックメソッドに対して@methodも追加する必要があります。デフォルトはfalseです。

sealAllProperties

<psalm
  sealAllProperties="[bool]">
trueの場合、Psalmはすべてのクラスがシールドされたプロパティを持っているかのように扱います。つまり、Psalmは@property(または@property-read/@property-write)アノテーションのリストに含まれておらず、明示的にpropertyとして定義されていないプロパティの取得と設定を許可しません。デフォルトはfalseです。

runTaintAnalysis

<psalm
  runTaintAnalysis="[bool]">
trueの場合、Psalmはコードベースで汚染分析を実行します。この設定は、Psalmを--taint-analysisオプション付きで実行するのと同じです。

reportInfo

<psalm
  reportInfo="[bool]">
falseの場合、PsalmはerrorLevelよりも低いレベルの問題をinfoとして扱いません(代わりに抑制されます)。これは大規模プロジェクトの分析時間を大幅に改善できます。ただし、この設定により、Psalmは抑制された問題の数を数えたり、修正を提案したりすることができなくなります。

allowNamedArgumentCalls

<psalm
  allowNamedArgumentCalls="[bool]">
falseの場合、Psalmはコード内のParamNameMismatch問題を報告しなくなります。これは、ライブラリのメソッドへの外部アクセスを防いだり、可変引数を使用する際に型をlistに減らしたりするための個々の@no-named-argumentsの使用に取って代わるものではありません。

triggerErrorExits

<psalm
  triggerErrorExits="[string]">
trigger_errorの動作を記述します。alwaysは常に終了することを意味し、neverは決して終了しないことを意味し、defaultE_USER_ERRORの場合にのみ終了することを意味します。デフォルトはdefaultです。

Psalmの実行

autoloader

<psalm
  autoloader="[string]">
アプリケーションが1つ以上のカスタムオートローダーを登録し、かつ/または普遍的な定数/関数を宣言する場合、このオートローダースクリプトはスキャンが開始される前にPsalmによって実行されます。Psalmは常にデフォルトでcomposerのオートローダーを登録します。

throwExceptionOnError

<psalm
  throwExceptionOnError="[bool]">
テストで便利です。これにより、Psalmはエラーに遭遇したときに通常の例外をスローします。デフォルトはfalseです。

hideExternalErrors

<psalm
  hideExternalErrors="[bool]">
プロジェクトファイルで使用されているが、<projectFiles>に含まれていないファイルの問題を表示するかどうか。デフォルトはfalseです。

hideAllErrorsExceptPassedFiles

<psalm
  hideAllErrorsExceptPassedFiles="[bool]">
CLIで明示的に引数として渡されたファイルに対してのみ問題を報告するかどうか。これは、CLIで設定されていない場合、require/includeで読み込まれたファイルも報告しないことを意味します。単一または選択したファイルのエラーのみをチェックしたい場合に便利です。デフォルトはfalseです。

cacheDirectory

<psalm
  cacheDirectory="[string]">
Psalmのキャッシュデータを保存するディレクトリ - 指定する場合(まだ存在しない場合)、その親ディレクトリが既に存在している必要があります。そうでない場合、Psalmはエラーをスローします。

デフォルトは$XDG_CACHE_HOME/psalmです。$XDG_CACHE_HOMEが設定されていないか空の場合、$HOME/.cache/psalmが使用されます。これが定義されていない場合はsys_get_temp_dir() . '/psalm'が使用されます。

allowFileIncludes

<psalm
  allowFileIncludes="[bool]">
PHPでrequire/include呼び出しを許可するかどうか。デフォルトはtrueです。

serializer

<psalm
  serializer="['igbinary'|'default']">
Psalmがデータのキャッシュに使用するシリアライザーをハードコードできます。デフォルトでは、Psalmはバージョンが2.0.5以上の場合はext-igbinaryを使用し、そうでない場合はPHPの組み込みシリアライザーを使用します。

compressor

<psalm
  compressor="['lz4'|'deflate'|'off']">
Psalmのキャッシュに使用する圧縮方法をハードコードできます。デフォルトでは、Psalmは有効な場合はext-zlibのdeflateを使用します。

threads

<psalm
        threads="[int]">
Psalmが使用するスレッド数をハードコードできます(コマンドラインの--threadsと同様)。この値はホストマシンからのスレッド検出の代わりに使用されますが、コマンドラインで--threadsまたは--debug(スレッドを1に設定)を使用すると上書きされます。

maxStringLength

<psalm
  maxStringLength="1000">
この設定は、Psalm分析中にリテラル文字列型に変換される文字列リテラルの最大長を制御します。この値(デフォルトでは1000バイト)より長い文字列は、代わりに一般的なnon-empty-string型に変換されます。この設定を変更すると望ましくない副作用が発生する可能性があり、それらの副作用はバグとは見なされないことに注意してください。

maxShapedArraySize

<psalm
  maxShapedArraySize="100">
この設定は、Psalm分析中に形状付きarray{key1: "value", key2: T}型に変換される形状付き配列の最大サイズを制御します。この値(デフォルトでは100)より大きい配列は、代わりに一般的なnon-empty-array型に変換されます。この設定を変更すると望ましくない副作用が発生する可能性があり、それらの副作用はバグとは見なされないことに注意してください。

restrictReturnTypes

<psalm
  restrictReturnTypes="true">
宣言された戻り値の型が推論された戻り値の型ほど厳密でない場合にLessSpecificReturnTypeを発行します。

このコード:

function getOne(): int // 宣言された型: int
{
     return 1; // 推論された型: 1 (int リテラル)
}

このエラーが発生します:LessSpecificReturnType - 関数aの推論された戻り値の型 '1' は、宣言された戻り値の型 'int' よりも具体的です

エラーを修正するには、docブロックでより具体的な型を指定する必要があります:

/** 
 * @return 1 
 */
function getOne(): int {
     return 1;
}

警告: より厳密な型を強制することは必ずしも最良の対処法ではなく、予期しない結果を招く可能性があります。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で必要とされる拡張機能のみが有効になります。

<enableExtensions>
  <extension name="decimal"/>
  <extension name="pdo"/>
</enableExtensions>

<disableExtensions>

オプション。無効にする拡張機能のリスト。デフォルトでは、composer.jsonで必要とされる拡張機能のみが有効になります。

<disableExtensions>
  <extension name="gmp"/>
</disableExtensions>

<plugins>

オプション。<plugin filename="path_to_plugin.php" />エントリのリスト。詳細はプラグインセクションを参照してください。

<issueHandlers>

オプション。Psalmが見つけたすべての問題について苦情を言うことを望まない場合、issueHandlerタグを使用してそれを設定できます。詳細はコードの問題への対処を参照してください。

<mockClasses>

オプション。テストでモッククラスを使用していますか?ファイルをチェックする際にPsalmがそれらを無視するようにしたい場合は、<class name="Your\Namespace\ClassName" />でクラスの完全修飾パスを含めてください。

<universalObjectCrates>

オプション。静的に決定できないプロパティを持つオブジェクトがありますか?Psalmが特定のクラスライクのすべてのプロパティを混合として扱うようにしたい場合は、<class name="Your\Namespace\ClassName" />でクラスの完全修飾パスを含めてください。デフォルトでは、stdClassSimpleXMLElementが汎用オブジェクトクレートとして設定されています。

<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>
  <var name="globalVariableName" type="type" />
</globals>

一部のフレームワークやライブラリは、例えば$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問題タイプを発行すべき関数のリストを指定できます。

<forbiddenFunctions>
  <function name="var_dump" />
  <function name="dd" />
</forbiddenFunctions>

プラグインでのPsalm設定へのアクセス

プラグインは、シングルトンPsalm\Configを使用してプラグインでグローバル設定にアクセスまたは変更できます。

$config = \Psalm\Config::getInstance();
if (!isset($config->globals['$GLOBALS'])) {
    $config->globals['$GLOBALS'] = 'array{data: array<string, string>}';
}

ユーザーノート