19/06/2018 - PHING, PHP, SYMFONY
PHPStan'ın amacı, PHP uygulamasını çalıştırmadan hataları bulmak için uygulama kodunu taramaktır. PHP derlenmiş bir dil olmadığından, hatalı bir kod çalıştığında uygulama production ortamında çökme eğilimindedir. PHPStan, kodun production ortamına gitmeden önce hataları bulmak için kullanılır.
Terminalde $ composer require --dev phpstan/phpstan
komutunu kullanarak kurulum yapabilirsiniz.
Varsayılan olarak $ vendor/bin/phpstan analyse src --level max
kodunu kullanabilirsiniz. İhtiyacınıza göre "katılık" değerini düşürebilirsiniz.
Bazen, kendi kural dosyanız olan phpstan.neon
içinde belirli kurallar listelemeniz gerekebilir. Bu isteğe bağlıdır, ancak biriyle çalışmaya gelince birkaç temel konu görelim. Asıl kural dosyalarının neye benzediğini görmek için phpstan.neon
klasörünü kontrol edebilirsiniz. Proje içeriğinizde "phpstan.neon" dosyasını aşağıdaki içeriği kullanarak oluşturun ve $ vendor/bin/phpstan analyse src -c phpstan.neon
komutunu çalıştırın.
parameters:
# Needed only when you use "rules" block below
customRulesetUsed: true
# Sometimes needed
autoload_files:
- %rootDir%/../../../vendor/autoload.php
# Prevents scanning given folders/files
excludes_analyse:
- %rootDir%/../../../src/Migrations/*
# You specific list of rules
rules:
- PHPStan\Rules\Arrays\DuplicateKeysInLiteralArraysRule
Eğer composer.json dosyanızda phpunit/phpunit
bileşenine manuel olarak ihtiyaç duymuyorsanız ve bunun yerine Symfony PHPUnit Bridge kullanıyorsanız, muhtemelen aşağıdakine benzer hatalarla karşılaşırsınız.
Class PHPUnit\Framework\TestCase not found and could not be autoloaded.
Class [a test class of yours] was not found while trying to analyse it - autoloading is probably not configured properly.
İlk sorunu çözmek için aşağıdakileri yapın.
$ find -iname 'autoload.php'
komutunu çalıştırın.autoload_files
bölümüne yolu ekleyin. Örnek: - %rootDir%/../../../bin/.phpunit/phpunit-6.5/vendor/autoload.php
İkinci sorunu çözmek için PHPStan'ın yapılandırma dosyasının parameters
bölümüne aşağıdaki kodu ekleyin.
autoload_directories:
- %rootDir%/../../../tests