Erweiterung für Phpstan, um eine Analyse des Drupal -Code zu ermöglichen.
PHPSTAN kann Symbole durch die Verwendung von Autolading von Composer entdecken. Drupal liefert jedoch keine Autoloadinformationen für Module und Themen. Dieses Projekt registriert diese Namespaces, damit Phpstan Symbole in Ihrer Drupal -Code -Basis automatisch entdecken kann.
Möchten Sie sponsern?
Wenn Sie phpstan/extension-installer verwenden, wird phpstan.neon automatisch enthalten.
Wenn Sie phpstan/extension-installer nicht verwenden möchten, enthalten Sie extension.neon in der Phpstan-Konfiguration Ihres Projekts:
includes:
- vendor/mglaman/phpstan-drupal/extension.neon
Um drupalspezifische Analysebereitungen einzubeziehen, geben Sie diese Datei an:
includes:
- vendor/mglaman/phpstan-drupal/rules.neon
Bitten Sie um Hilfe in den Diskussionen oder bei #Phpstan -Kanal über Drupal Slack.
Fügen Sie den folgenden Parameter hinzu, um Tests aus der Analyse auszuschließen
parameters:
excludePaths:
- *Test.php
- *TestBase.php
Dieses Projekt hängt von phpstan/phpstan-deprecation-rules ab, was Abschaltungsregeln hinzufügt. Wir bieten drupalspezifische, veraltete Umfangsresschlaufe an.
Verwenden Sie ein phpstan.neon wie folgt:
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
Um die Abschaltungsregeln bei der Verwendung von phpstan/extension-installer zu deaktivieren, können Sie Folgendes ausführen:
{
"extra" : {
"phpstan/extension-installer" : {
"ignore" : [
" phpstan/phpstan-deprecation-rules "
]
}
}
} Weitere Informationen finden Sie in der Dokumentation extension-installer .
@internal -Klassen Sie können die Regel ClassExtendsInternalClassRule deaktivieren, indem Sie Ihrem phpstan.neon Folgendes hinzufügen:
parameters :
drupal :
rules :
classExtendsInternalClassRule : false Der EntityTypeManagerGetStorageDynamicReturnTypeExtension -Dienst hilft dynamischen Rückgabetypen. Dies untersucht die bestandene Entitäts -ID und versucht neben der Standard EntityStorageInterface eine bekannte Speicherklasse zurückzugeben. Die Standardzuordnung finden Sie in extension.neon . Zum Beispiel:
parameters:
drupal:
entityMapping:
block:
class: DrupalblockEntityBlock
storage: DrupalCoreConfigEntityConfigEntityStorage
node:
class: DrupalnodeEntityNode
storage: DrupalnodeNodeStorage
taxonomy_term:
class: DrupaltaxonomyEntityTerm
storage: DrupaltaxonomyTermStorage
user:
class: DrupaluserEntityUser
storage: DrupaluserUserStorage
Um Unterstützung für benutzerdefinierte Entitäten hinzuzufügen, können Sie die gleiche Definition in das phpstan.neon Ihres Projekts hinzufügen. Weitere Informationen finden Sie im folgenden Beispiel zum Hinzufügen einer Zuordnung für die Such -API:
parameters:
drupal:
entityMapping:
search_api_index:
class: Drupalsearch_apiEntityIndex
storage: Drupalsearch_apiEntitySearchApiConfigEntityStorage
search_api_server:
class: Drupalsearch_apiEntityServer
storage: Drupalsearch_apiEntitySearchApiConfigEntityStorage
In ähnlicher Weise hilft der EntityStorageDynamicReturnTypeExtension -Dienst bei der Verwendung eines Entitätspeichers den Typ der geladenen Entität, erstellt, erstellt usw. Zum Beispiel bei der Verwendung
$ node = Drupal:: entityTypeManager ()-> getStorage ( ' node ' )-> create ([ ' type ' => ' page ' , ' title ' => ' foo ' ]); Es hilft beim Wissen, dass der Typ der $node -Variablen DrupalnodeEntityNode ist.
Die Standardzuordnung finden Sie in 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 Um Unterstützung für benutzerdefinierte Entitäten hinzuzufügen, können Sie die gleiche Definition in phpstan.neon Ihres Projekts hinzufügen. Neon ebenfalls.
Startige Module können ihre eigene Zuordnung bereitstellen, die automatisch bei der Codebasis eines Benutzers registriert werden kann, wenn sie die phpstan/extension-installer verwenden. Die Erweiterung Installateure Scans hat den composer.json des Pakets für einen Wert in extra.phpstan installiert. Dadurch wird automatisch die definierten Einschlüsse einbündet, die eine Entitätskartierungskonfiguration enthält.
Zum Beispiel könnte das Absatzmodul die folgende entity_mapping.neon -Datei haben:
parameters :
drupal :
entityMapping :
paragraph :
class : DrupalparagraphsEntityParagraph
paragraphs_type :
class : DrupalparagraphsEntityParagraphsType Dann im composer.json für Absätze wird die entity_mapping.neon als Phpstan include bereitgestellt
{
"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 "
]
}
}
}