Ekstensi untuk phpstan untuk memungkinkan analisis kode drupal.
PHPSTAN dapat menemukan simbol dengan menggunakan autoloading yang disediakan oleh komposer. Namun, Drupal tidak memberikan informasi autoloading untuk modul dan tema. Proyek ini mendaftarkan ruang nama tersebut sehingga Phpstan dapat menemukan simbol dengan benar di basis kode Drupal Anda secara otomatis.
Apakah Anda ingin mensponsori?
Saat Anda menggunakan phpstan/extension-installer , phpstan.neon akan dimasukkan secara otomatis.
Jika Anda tidak ingin menggunakan phpstan/extension-installer , sertakan extension.neon dalam konfigurasi phpstan proyek Anda:
includes:
- vendor/mglaman/phpstan-drupal/extension.neon
Untuk memasukkan aturan analisis spesifik drupal, sertakan file ini:
includes:
- vendor/mglaman/phpstan-drupal/rules.neon
Mintalah bantuan dalam diskusi atau saluran #PHPSTAN di Drupal Slack.
Untuk mengecualikan tes dari analisis, tambahkan parameter berikut
parameters:
excludePaths:
- *Test.php
- *TestBase.php
Proyek ini tergantung pada phpstan/phpstan-deprecation-rules yang menambah aturan penyusutan. Kami memberikan penyelesaian ruang lingkup yang sudah tidak ditentukan drupal.
Untuk hanya menangani pengujian penghentian, gunakan phpstan.neon seperti ini:
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
Untuk menonaktifkan aturan penyusutan saat menggunakan phpstan/extension-installer , Anda dapat melakukan hal berikut:
{
"extra" : {
"phpstan/extension-installer" : {
"ignore" : [
" phpstan/phpstan-deprecation-rules "
]
}
}
} Lihat dokumentasi extension-installer untuk informasi lebih lanjut: https://github.com/phpstan/extension-installer#ignoring-a-particular-extension
@internal Anda dapat menonaktifkan aturan ClassExtendsInternalClassRule dengan menambahkan yang berikut ini ke phpstan.neon Anda:
parameters :
drupal :
rules :
classExtendsInternalClassRule : false Layanan EntityTypeManagerGetStorageDynamicReturnTypeExtension membantu memetakan jenis pengembalian dinamis. Ini memeriksa ID tipe entitas yang dilewati dan mencoba mengembalikan kelas penyimpanan yang diketahui, selain EntityStorageInterface default. Pemetaan default dapat ditemukan di extension.neon . Misalnya:
parameters:
drupal:
entityMapping:
block:
class: DrupalblockEntityBlock
storage: DrupalCoreConfigEntityConfigEntityStorage
node:
class: DrupalnodeEntityNode
storage: DrupalnodeNodeStorage
taxonomy_term:
class: DrupaltaxonomyEntityTerm
storage: DrupaltaxonomyTermStorage
user:
class: DrupaluserEntityUser
storage: DrupaluserUserStorage
Untuk menambahkan dukungan untuk entitas khusus, Anda dapat menambahkan definisi yang sama di phpstan.neon proyek Anda. Lihat contoh berikut untuk menambahkan pemetaan untuk pencarian API:
parameters:
drupal:
entityMapping:
search_api_index:
class: Drupalsearch_apiEntityIndex
storage: Drupalsearch_apiEntitySearchApiConfigEntityStorage
search_api_server:
class: Drupalsearch_apiEntityServer
storage: Drupalsearch_apiEntitySearchApiConfigEntityStorage
Demikian pula, Layanan EntityStorageDynamicReturnTypeExtension membantu menentukan jenis entitas yang dimuat, dibuat dll. Saat menggunakan penyimpanan entitas. Misalnya saat menggunakan
$ node = Drupal:: entityTypeManager ()-> getStorage ( ' node ' )-> create ([ ' type ' => ' page ' , ' title ' => ' foo ' ]); Ini membantu mengetahui jenis variabel $node adalah DrupalnodeEntityNode .
Pemetaan default dapat ditemukan di 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 Untuk menambahkan dukungan untuk entitas kustom, Anda dapat menambahkan definisi yang sama di phpstan.neon proyek Anda juga.
Modul yang disumbangkan dapat memberikan pemetaan mereka sendiri yang dapat secara otomatis terdaftar dengan basis kode pengguna ketika mereka menggunakan phpstan/extension-installer . Pemindai Extension Pemindai yang diinstal composer.json untuk nilai di extra.phpstan . Ini akan secara otomatis menggabungkan yang ditentukan termasuk yang berisi konfigurasi pemetaan entitas.
Misalnya, modul paragraf dapat memiliki file entity_mapping.neon berikut:
parameters :
drupal :
entityMapping :
paragraph :
class : DrupalparagraphsEntityParagraph
paragraphs_type :
class : DrupalparagraphsEntityParagraphsType Kemudian di composer.json untuk paragraf, entity_mapping.neon akan disediakan sebagai phpstan termasuk
{
"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 "
]
}
}
}