Extensão do Phpstan para permitir a análise do código Drupal.
O Phpstan é capaz de descobrir símbolos usando o carregamento automático fornecido pelo Composer. No entanto, o Drupal não fornece informações automáticas para módulos e temas. Este projeto registra esses espaços para nome para que o Phpstan possa descobrir adequadamente os símbolos em sua base de código Drupal automaticamente.
Você gostaria de patrocinar?
Quando você estiver usando phpstan/extension-installer , phpstan.neon será incluído automaticamente.
Se você não quiser usar phpstan/extension-installer , inclua extension.neon na configuração do Phpstan do seu projeto:
includes:
- vendor/mglaman/phpstan-drupal/extension.neon
Para incluir regras de análise específica do Drupal, inclua este arquivo:
includes:
- vendor/mglaman/phpstan-drupal/rules.neon
Peça assistência nas discussões ou no canal #phpstan no Drupal Slack.
Para excluir os testes da análise, adicione o seguinte parâmetro
parameters:
excludePaths:
- *Test.php
- *TestBase.php
Este projeto depende das phpstan/phpstan-deprecation-rules que adicionam regras de depreciação. Fornecemos resolvedores de escopo depreciado específicos para drupal.
Para lidar apenas com os testes de depreciação, use um 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 desativar as regras de depreciação ao usar phpstan/extension-installer , você pode fazer o seguinte:
{
"extra" : {
"phpstan/extension-installer" : {
"ignore" : [
" phpstan/phpstan-deprecation-rules "
]
}
}
} Consulte a documentação de extension-installer para obter mais informações: https://github.com/phpstan/extension-installer#ignoring-a-paricular-extension
@internal Você pode desativar a regra de ClassExtendsInternalClassRule , adicionando o seguinte ao seu phpstan.neon :
parameters :
drupal :
rules :
classExtendsInternalClassRule : false O EntityTypeManagerGetStorageDynamicReturnTypeExtension Service ajuda a mapear os tipos de retorno dinâmico. Isso inspeciona o ID do tipo de entidade passada e tenta devolver uma classe de armazenamento conhecida, além do EntityStorageInterface padrão. O mapeamento padrão pode ser encontrado em extension.neon . Por exemplo:
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 adicionar suporte para entidades personalizadas, você pode adicionar a mesma definição no phpstan.neon do seu projeto. Veja o exemplo a seguir para adicionar um mapeamento para a API de pesquisa:
parameters:
drupal:
entityMapping:
search_api_index:
class: Drupalsearch_apiEntityIndex
storage: Drupalsearch_apiEntitySearchApiConfigEntityStorage
search_api_server:
class: Drupalsearch_apiEntityServer
storage: Drupalsearch_apiEntitySearchApiConfigEntityStorage
Da mesma forma, o serviço EntityStorageDynamicReturnTypeExtension ajuda a determinar o tipo de entidade que é carregada, criada etc. ao usar um armazenamento de entidades. Por exemplo, ao usar
$ node = Drupal:: entityTypeManager ()-> getStorage ( ' node ' )-> create ([ ' type ' => ' page ' , ' title ' => ' foo ' ]); Ajuda a conhecer o tipo de variável $node é DrupalnodeEntityNode .
O mapeamento padrão pode ser encontrado em 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 adicionar suporte para entidades personalizadas, você pode adicionar a mesma definição no phpstan.neon do seu projeto da mesma forma.
Os módulos contribuídos podem fornecer seu próprio mapeamento que pode ser registrado automaticamente com a base de código de um usuário quando eles usam o phpstan/extension-installer . O Extension Installer Scanns instalou o composer.json do pacote de pacote para obter um valor no extra.phpstan . Isso agrupará automaticamente o definido incluir que contém uma configuração de mapeamento de entidades.
Por exemplo, o módulo de parágrafos pode ter o seguinte arquivo entity_mapping.neon :
parameters :
drupal :
entityMapping :
paragraph :
class : DrupalparagraphsEntityParagraph
paragraphs_type :
class : DrupalparagraphsEntityParagraphsType Então, no composer.json para parágrafos, o entity_mapping.neon seria fornecido como um 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 "
]
}
}
}