Extensión para PHPSTAN para permitir el análisis del código Drupal.
Phpstan puede descubrir símbolos mediante el uso de la autoinformación proporcionada por el compositor. Sin embargo, Drupal no proporciona información de carga automática para módulos y temas. Este proyecto registra esos espacios de nombres para que Phpstan pueda descubrir correctamente los símbolos en su base de código Drupal automáticamente.
¿Te gustaría patrocinar?
Cuando esté utilizando phpstan/extension-installer , phpstan.neon se incluirá automáticamente.
Si no desea utilizar phpstan/extension-installer , incluya extension.neon en la configuración PHPSTAN de su proyecto:
includes:
- vendor/mglaman/phpstan-drupal/extension.neon
Para incluir reglas de análisis específicas de Drupal, incluya este archivo:
includes:
- vendor/mglaman/phpstan-drupal/rules.neon
Solicite ayuda en las discusiones o el canal #Phpstan en Drupal Slack.
Para excluir las pruebas del análisis, agregue el siguiente parámetro
parameters:
excludePaths:
- *Test.php
- *TestBase.php
Este proyecto depende de phpstan/phpstan-deprecation-rules que agrega reglas de deprecación. Proporcionamos resolución de alcance desaprobado específicos de Drupal.
Para manejar solo las pruebas de deprecación, use un phpstan.neon como este:
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
Para deshabilitar las reglas de deprecación mientras usa phpstan/extension-installer , puede hacer lo siguiente:
{
"extra" : {
"phpstan/extension-installer" : {
"ignore" : [
" phpstan/phpstan-deprecation-rules "
]
}
}
} Consulte la documentación extension-installer para obtener más información: https://github.com/phpstan/extension-installer#ignoring-a-particular-extension
@internal Puede deshabilitar la regla ClassExtendsInternalClassRule agregando lo siguiente a su phpstan.neon :
parameters :
drupal :
rules :
classExtendsInternalClassRule : false El servicio EntityTypeManagerGetStorageDynamicReturnTypeExtension ayuda a mapear los tipos de retorno dinámico. Esto inspecciona la ID de tipo de entidad aprobada e intenta devolver una clase de almacenamiento conocida, además de la EntityStorageInterface predeterminada. La asignación predeterminada se puede encontrar en extension.neon . Por ejemplo:
parameters:
drupal:
entityMapping:
block:
class: DrupalblockEntityBlock
storage: DrupalCoreConfigEntityConfigEntityStorage
node:
class: DrupalnodeEntityNode
storage: DrupalnodeNodeStorage
taxonomy_term:
class: DrupaltaxonomyEntityTerm
storage: DrupaltaxonomyTermStorage
user:
class: DrupaluserEntityUser
storage: DrupaluserUserStorage
Para agregar soporte para entidades personalizadas, puede agregar la misma definición en phpstan.neon de su proyecto. Consulte el siguiente ejemplo para agregar una asignación para la API de búsqueda:
parameters:
drupal:
entityMapping:
search_api_index:
class: Drupalsearch_apiEntityIndex
storage: Drupalsearch_apiEntitySearchApiConfigEntityStorage
search_api_server:
class: Drupalsearch_apiEntityServer
storage: Drupalsearch_apiEntitySearchApiConfigEntityStorage
Del mismo modo, el servicio EntityStorageDynamicReturnTypeExtension ayuda a determinar el tipo de entidad que se carga, crea, etc. cuando se usa un almacenamiento de entidad. Por ejemplo, cuando se usa
$ node = Drupal:: entityTypeManager ()-> getStorage ( ' node ' )-> create ([ ' type ' => ' page ' , ' title ' => ' foo ' ]); Ayuda a conocer el tipo de la variable $node es DrupalnodeEntityNode .
La asignación predeterminada se puede encontrar en 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 Para agregar soporte para entidades personalizadas, puede agregar la misma definición en phpstan.neon de su proyecto.
Los módulos contribuidos pueden proporcionar su propia asignación que se puede registrar automáticamente con la base de código de un usuario cuando usan el phpstan/extension-installer . El instalador Extension escanea composer.json de paquete instalado para un valor en extra.phpstan . Esto agrupará automáticamente la inclusión definida que contiene una configuración de mapeo de entidad.
Por ejemplo, el módulo de párrafos podría tener el siguiente archivo entity_mapping.neon :
parameters :
drupal :
entityMapping :
paragraph :
class : DrupalparagraphsEntityParagraph
paragraphs_type :
class : DrupalparagraphsEntityParagraphsType Luego, en el composer.json para los párrafos, el entity_mapping.neon se proporcionaría como un phpstan incluye
{
"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 "
]
}
}
}