drupalコードの分析を許可するためのphpstanの拡張。
PHPSTANは、Composerが提供するオートローディングを使用してシンボルを発見することができます。ただし、Drupalはモジュールやテーマの自動搭載情報を提供していません。このプロジェクトは、これらの名前空間を登録して、PHPSTANがDrupalコードベースのシンボルを自動的に適切に発見できるようにします。
スポンサーしますか?
phpstan/extension-installerを使用している場合、 phpstan.neon自動的に含まれます。
phpstan/extension-installer使用したくない場合は、プロジェクトのphpstan configにextension.neonを含めます。
includes:
- vendor/mglaman/phpstan-drupal/extension.neon
Drupal固有の分析ルールを含めるには、このファイルを含めます。
includes:
- vendor/mglaman/phpstan-drupal/rules.neon
Drupal Slackに関するディスカッションまたは#PHPSTANチャンネルでの支援を求めてください。
分析からテストを除外するには、次のパラメーターを追加します
parameters:
excludePaths:
- *Test.php
- *TestBase.php
このプロジェクトは、非推奨ルールを追加するphpstan/phpstan-deprecation-rulesに依存します。 Drupal固有の非推奨スコープリゾルバーを提供します。
非推奨テストのみを処理するには、このようなphpstan.neonを使用してください。
parameters:
customRulesetUsed: true
reportUnmatchedIgnoredErrors: false
# Ignore phpstan-drupal extension's rules.
ignoreErrors:
- '#Drupal calls should be avoided in classes, use dependency injection instead#'
- '#Plugin definitions cannot be altered.#'
- '#Missing cache backend declaration for performance.#'
- '#Plugin manager has cache backend specified but does not declare cache tags.#'
includes:
- vendor/mglaman/phpstan-drupal/extension.neon
- vendor/phpstan/phpstan-deprecation-rules/rules.neon
phpstan/extension-installerを使用している間に非推奨ルールを無効にするには、次のことを行うことができます。
{
"extra" : {
"phpstan/extension-installer" : {
"ignore" : [
" phpstan/phpstan-deprecation-rules "
]
}
}
}詳細については、 extension-installerドキュメントを参照してください:https://github.com/phpstan/extension-installer#ignoring-a-particular-extion
@internalクラスを拡張するためのチェックを無効にします次のphpstan.neonに以下を追加することにより、 ClassExtendsInternalClassRuleルールを無効にできます。
parameters :
drupal :
rules :
classExtendsInternalClassRule : false EntityTypeManagerGetStorageDynamicReturnTypeExtensionサービスは、動的リターンタイプのマッピングを支援します。これにより、渡されたエンティティタイプIDを検査し、デフォルトのEntityStorageInterfaceに加えて、既知のストレージクラスを返しようとします。デフォルトのマッピングは、 extension.neonにあります。例えば:
parameters:
drupal:
entityMapping:
block:
class: DrupalblockEntityBlock
storage: DrupalCoreConfigEntityConfigEntityStorage
node:
class: DrupalnodeEntityNode
storage: DrupalnodeNodeStorage
taxonomy_term:
class: DrupaltaxonomyEntityTerm
storage: DrupaltaxonomyTermStorage
user:
class: DrupaluserEntityUser
storage: DrupaluserUserStorage
カスタムエンティティのサポートを追加するには、プロジェクトのphpstan.neonに同じ定義を追加できます。検索APIのマッピングを追加するための次の例を参照してください。
parameters:
drupal:
entityMapping:
search_api_index:
class: Drupalsearch_apiEntityIndex
storage: Drupalsearch_apiEntitySearchApiConfigEntityStorage
search_api_server:
class: Drupalsearch_apiEntityServer
storage: Drupalsearch_apiEntitySearchApiConfigEntityStorage
同様に、 EntityStorageDynamicReturnTypeExtensionサービスは、エンティティストレージを使用するときに、ロード、作成などのエンティティのタイプを決定するのに役立ちます。たとえば、使用する場合
$ node = Drupal:: entityTypeManager ()-> getStorage ( ' node ' )-> create ([ ' type ' => ' page ' , ' title ' => ' foo ' ]); $node変数のタイプがDrupalnodeEntityNodeです。
デフォルトのマッピングはextension.neonにあります:
parameters :
drupal :
entityMapping :
block :
class : DrupalblockEntityBlock
storage : DrupalCoreConfigEntityConfigEntityStorage
node :
class : DrupalnodeEntityNode
storage : DrupalnodeNodeStorage
taxonomy_term :
class : DrupaltaxonomyEntityTerm
storage : DrupaltaxonomyTermStorage
user :
class : DrupaluserEntityUser
storage : DrupaluserUserStorageカスタムエンティティのサポートを追加するには、プロジェクトのphpstan.neonに同じ定義を追加することもできます。
貢献したモジュールはphpstan/extension-installerを使用すると、ユーザーのコードベースに自動的に登録できる独自のマッピングを提供できます。拡張機能インストーラーは、Packageのcomposer.jsonをインストールして、 extra.phpstanの値をスキャンします。これにより、エンティティマッピング構成を含む定義済みのfindedが自動的にバンドルされます。
たとえば、段落モジュールには、次のentity_mapping.neonファイルを持つことができます。
parameters :
drupal :
entityMapping :
paragraph :
class : DrupalparagraphsEntityParagraph
paragraphs_type :
class : DrupalparagraphsEntityParagraphsType次に、段落についてはcomposer.jsonで、 entity_mapping.neonがphpstanに提供されます。
{
"name" : " drupal/paragraphs " ,
"description" : " Enables the creation of Paragraphs entities. " ,
"type" : " drupal-module " ,
"license" : " GPL-2.0-or-later " ,
"require" : {
"drupal/entity_reference_revisions" : " ~1.3 "
},
"extra" : {
"phpstan" : {
"includes" : [
" entity_mapping.neon "
]
}
}
}