Extension pour PHPSTAN pour permettre l'analyse du code Drupal.
PHPSTAN est capable de découvrir des symboles en utilisant la mise en œuvre automatique fournis par le compositeur. Cependant, Drupal ne fournit pas d'informations actualisées pour les modules et les thèmes. Ce projet enregistre ces espaces de noms afin que PHPSTAN puisse découvrir correctement les symboles dans votre base de code Drupal automatiquement.
Souhaitez-vous parrainer?
Lorsque vous utilisez phpstan/extension-installer , phpstan.neon sera automatiquement inclus.
Si vous ne souhaitez pas utiliser phpstan/extension-installer , incluez extension.neon dans la configuration phpstan de votre projet:
includes:
- vendor/mglaman/phpstan-drupal/extension.neon
Pour inclure les règles d'analyse spécifique à Drupal, incluez ce fichier:
includes:
- vendor/mglaman/phpstan-drupal/rules.neon
Demandez de l'aide dans les discussions ou le canal #phpstan sur Drupal Slack.
Pour exclure les tests de l'analyse, ajoutez le paramètre suivant
parameters:
excludePaths:
- *Test.php
- *TestBase.php
Ce projet dépend des phpstan/phpstan-deprecation-rules qui ajoutent des règles de dépréciation. Nous fournissons des résolveurs de portée obsolète spécifiques à Drupal.
Pour ne gérer que les tests de dépréciation, utilisez un phpstan.neon comme ceci:
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
Pour désactiver les règles de dépréciation lors de l'utilisation phpstan/extension-installer , vous pouvez effectuer ce qui suit:
{
"extra" : {
"phpstan/extension-installer" : {
"ignore" : [
" phpstan/phpstan-deprecation-rules "
]
}
}
} Consultez la documentation extension-installer pour plus d'informations: https://github.com/phpstan/extension-installer#ignoring-a-particular-extension
@internal Vous pouvez désactiver la règle ClassExtendsInternalClassRule en ajoutant ce qui suit à votre phpstan.neon :
parameters :
drupal :
rules :
classExtendsInternalClassRule : false Le service EntityTypeManagerGetStorageDynamicReturnTypeExtension aide à cartographier les types de retour dynamique. Cela inspecte l'ID de type d'entité passé et essaie de renvoyer une classe de stockage connue, en plus de l' EntityStorageInterface par défaut. Le mappage par défaut peut être trouvé dans extension.neon . Par exemple:
parameters:
drupal:
entityMapping:
block:
class: DrupalblockEntityBlock
storage: DrupalCoreConfigEntityConfigEntityStorage
node:
class: DrupalnodeEntityNode
storage: DrupalnodeNodeStorage
taxonomy_term:
class: DrupaltaxonomyEntityTerm
storage: DrupaltaxonomyTermStorage
user:
class: DrupaluserEntityUser
storage: DrupaluserUserStorage
Pour ajouter la prise en charge des entités personnalisées, vous pouvez ajouter la même définition dans phpstan.neon de votre projet. Voir l'exemple suivant pour ajouter un mappage pour l'API de recherche:
parameters:
drupal:
entityMapping:
search_api_index:
class: Drupalsearch_apiEntityIndex
storage: Drupalsearch_apiEntitySearchApiConfigEntityStorage
search_api_server:
class: Drupalsearch_apiEntityServer
storage: Drupalsearch_apiEntitySearchApiConfigEntityStorage
De même, le service EntityStorageDynamicReturnTypeExtension aide à déterminer le type de l'entité qui est chargé, créé, etc. lors de l'utilisation d'un stockage d'entité. Par exemple lors de l'utilisation
$ node = Drupal:: entityTypeManager ()-> getStorage ( ' node ' )-> create ([ ' type ' => ' page ' , ' title ' => ' foo ' ]); Il aide à connaître le type de la variable $node est DrupalnodeEntityNode .
Le mappage par défaut peut être trouvé dans 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 Pour ajouter la prise en charge des entités personnalisées, vous pouvez également ajouter la même définition dans phpstan.neon de votre projet.
Les modules contribués peuvent fournir leur propre mappage qui peut être automatiquement enregistré avec la base de code d'un utilisateur lorsqu'il utilise le phpstan/extension-installer . L'installation d'extension analyse composer.json du package installé pour une valeur en extra.phpstan . Cela regroupera automatiquement l'inclusion définie qui contient une configuration de mappage d'entité.
Par exemple, le module de paragraphes pourrait avoir le fichier entity_mapping.neon suivant:
parameters :
drupal :
entityMapping :
paragraph :
class : DrupalparagraphsEntityParagraph
paragraphs_type :
class : DrupalparagraphsEntityParagraphsType Ensuite, dans le composer.json pour les paragraphes, l' entity_mapping.neon serait fourni en tant que phpstan inclus
{
"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 "
]
}
}
}