codeigniter / phpstan-codeigniter
CodeIgniter extensions and rules for PHPStan
Installs: 216 469
Dependents: 17
Suggesters: 0
Security: 0
Stars: 15
Watchers: 6
Forks: 0
Open Issues: 5
Type:phpstan-extension
Requires
- php: ^8.1
- codeigniter4/framework: ^4.5
- phpstan/phpstan: ^2.0
Requires (Dev)
- codeigniter/coding-standard: ^1.7
- codeigniter4/shield: ^1.0
- friendsofphp/php-cs-fixer: ^3.49
- nexusphp/cs-config: ^3.21
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^10.5 || ^11.4
Conflicts
This package is auto-updated.
Last update: 2024-12-02 15:33:53 UTC
README
This extension provides the following features:
Type Inference
- Provides precise return types for
config()
andmodel()
functions. - Provides precise return types for
service()
andsingle_service()
functions. - Provides precise return types for
fake()
helper function. - Provides precise return types for
CodeIgniter\Model
'sfind()
,findAll()
, andfirst()
methods. - Allows dynamic return type transformation of
CodeIgniter\Model
whenasArray()
orasObject()
is called.
Rules
- Checks if the string argument passed to
config()
ormodel()
function is a valid class string extendingCodeIgniter\Config\BaseConfig
orCodeIgniter\Model
, respectively. This can be turned off by settingcodeigniter.checkArgumentTypeOfFactories: false
in yourphpstan.neon
. For fine-grained control, you can individually choose which factory function to disable usingcodeigniter.checkArgumentTypeOfConfig
andcodeigniter.checkArgumentTypeOfModel
. NOTE: Settingcodeigniter.checkArgumentTypeOfFactories: false
will effectively bypass the two specific options. - Checks if the string argument passed to
service()
orsingle_service()
function is a valid service name. This can be turned off by settingcodeigniter.checkArgumentTypeOfServices: false
in yourphpstan.neon
. - Disallows instantiating cache handlers using
new
and suggests to use theCacheFactory
class instead. - Disallows instantiating
FrameworkException
classes usingnew
. - Disallows direct re-assignment or access of
$_SERVER
and$_GET
and suggests to use theSuperglobals
class instead. - Disallows use of
::class
fetch onconfig()
andmodel()
and suggests to use the short form of the class instead.
Installation
To use this extension, require it in Composer:
composer require --dev codeigniter/phpstan-codeigniter
If you also install phpstan/extension-installer then you're all set!
Manual installation
If you don't want to use phpstan/extension-installer
, include extension.neon in your project's PHPStan config:
includes: - vendor/codeigniter/phpstan-codeigniter/extension.neon
Development in this repository uses PHP 8.1+.
Starting v1.1.0, releases come with a downgraded version to suit lower PHP versions. Currently, lowest supported downgraded PHP version is PHP 7.4.
Configuration
This extension adds the default namespace for config()
and model()
functions as Config\
and App\Models\
, respectively,
when searching for possible classes. If your application uses other namespaces, you can configure this extension
in your phpstan.neon
to recognize those namespaces:
parameters: codeigniter: additionalConfigNamespaces: - Acme\Blog\Config\ - Foo\Bar\Config\ additionalModelNamespaces: - Acme\Blog\Models\
For the service()
and single_service()
functions, you can instruct PHPStan to consider your own
services factory classes. Please note that it should be a valid class extending CodeIgniter\Config\BaseService
!
parameters: codeigniter: additionalServices: - Acme\Blog\Config\ServiceFactory
When the model passed to fake()
has the property $returnType
set to array
, this extension will give a precise
array shape based on the allowed fields of the model. Most of the time, the formatted fields are strings. If not a string,
you can indicate the format return type for the particular field.
parameters: codeigniter: notStringFormattedFields: # key-value pair of field => format success: bool user_id: int
Caveats
- The behavior of factories functions relative to how they load classes is based on codeigniter4/framework v4.4. If you are relying on the behavior of < v4.4, this may not work out for you.
Contributing
Any contributions are welcome.
If you want to see a new rule or extension specific to CodeIgniter, please open a feature request. If you can contribute the code yourself, please open a pull request instead.
Before reporting any bugs, please check if the bug occurs only if using this extension with PHPStan. If the bug is reproducible in PHPStan alone, please open a bug report there instead. Thank you!
License
PHPStan CodeIgniter is an open source library licensed under MIT.