Расширение для PHPSTAN для анализа кода Drupal.
PHPSTAN может обнаружить символы, используя автозагрузку, предоставленную Composer. Тем не менее, Drupal не предоставляет информацию о автоматической загрузке для модулей и тем. Этот проект регистрирует эти пространства имен, так что PHPSTAN может автоматически обнаружить символы в вашей базе кода Drupal.
Хотите спонсировать?
Когда вы используете phpstan/extension-installer , phpstan.neon будет автоматически включен.
Если вы не хотите использовать phpstan/extension-installer , включите extension.neon в конфигурации вашего проекта Phpstan:
includes:
- vendor/mglaman/phpstan-drupal/extension.neon
Чтобы включить специфические правила анализа Drupal, включите этот файл:
includes:
- vendor/mglaman/phpstan-drupal/rules.neon
Попросите о помощи в дискуссиях или канале #Phpstan на Drupal Slack.
Чтобы исключить тесты из анализа, добавьте следующий параметр
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-extension
@internal Вы можете отключить правило ClassExtendsInternalClassRule , добавив следующее к своему phpstan.neon :
parameters :
drupal :
rules :
classExtendsInternalClassRule : false Служба EntityTypeManagerGetStorageDynamicReturnTypeExtension помогает карту динамических типов возврата. Это осматривает идентификатор типа пропущенного объекта и пытается вернуть известный класс хранения, помимо 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 . Установщик расширения сканирует extra.phpstan composer.json . Это автоматически объединит определенный, который содержит конфигурацию сопоставления объектов.
Например, модуль параграфов может иметь следующий файл 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 "
]
}
}
}