امتداد لـ Phpstan للسماح بتحليل رمز Drupal.
Phpstan قادر على اكتشاف الرموز باستخدام التحميل التلقائي المقدم من الملحن. ومع ذلك ، لا يوفر دروبال معلومات التحميل التلقائي للوحدات النمطية والمواضيع. يسجل هذا المشروع مساحات الأسماء هذه بحيث يمكن لـ 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/extense-installer#ignoring-a-particular-extense
@internal يمكنك تعطيل قاعدة ClassExtendsInternalClassRule بإضافة ما يلي إلى phpstan.neon :
parameters :
drupal :
rules :
classExtendsInternalClassRule : false تساعد EntityTypeManagerGetStorageDynamicReturnTypeExtension Service أنواع العائدات الديناميكية. هذا يفقد معرف نوع الكيان الذي تم تمريره ويحاول إرجاع فئة تخزين معروفة ، إلى جانب 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 لمشروعك. راجع المثال التالي لإضافة رسم خرائط لاتحاد واجهات برمجة التطبيقات:
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 . قام تثبيت التثبيت بالتمديد بتثبيت composer.json للحصول على قيمة في extra.phpstan . سيؤدي ذلك تلقائيًا إلى تجميع المعرفة التي تحتوي على تكوين رسم خرائط كيان.
على سبيل المثال ، يمكن أن تحتوي وحدة الفقرات على ملف entity_mapping.neon التالي:
parameters :
drupal :
entityMapping :
paragraph :
class : DrupalparagraphsEntityParagraph
paragraphs_type :
class : DrupalparagraphsEntityParagraphsType entity_mapping.neon composer.json
{
"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 "
]
}
}
}