phpstan.neon
parameters:
level: max
phpVersion: 80300 # PHP 8.3
parallel:
maximumNumberOfProcesses: 1
processTimeout: 200.0
paths:
- src
- tests
scanFiles:
- %currentWorkingDirectory%/vendor/autoload.php
- %currentWorkingDirectory%/vendor/squizlabs/php_codesniffer/autoload.php
- %currentWorkingDirectory%/vendor/squizlabs/php_codesniffer/src/Util/Tokens.php
# reports occurrences of type-checking functions always evaluated to true
checkAlwaysTrueCheckTypeFunctionCall: true
# reports instanceof occurrences always evaluated to true
checkAlwaysTrueInstanceof: true
# reports === and !== occurrences always evaluated to true
checkAlwaysTrueStrictComparison: true
# enable stricter analysis of benevolent union types
checkBenevolentUnionTypes: true
# reports use of dynamic properties as undefined
checkDynamicProperties: true
# reports code paths with missing return statement in functions and methods with @return mixed PHPDoc
checkExplicitMixedMissingReturn: true
# reports function and method calls with incorrect name case
checkFunctionNameCase: true
# be strict about values with an unspecified (implicit mixed) type
checkImplicitMixed: true
# reports references to built-in classes with incorrect name case
checkInternalClassCaseSensitivity: true
# require that callable signatures are specified
checkMissingCallableSignature: true
# checks for missing typehints in iterables
checkMissingIterableValueType: true
# reports return typehints that could be narrowed down because some of the listed types are never returned
checkTooWideReturnTypesInProtectedAndPublicMethods: true
# reports properties with native types that weren’t initialized in the class constructor
checkUninitializedProperties: true
# reports missing #[\Override] attribute
checkMissingOverrideMethodAttribute: true
# doesn’t require typehints for properties if the types can be inferred from constructor injection
inferPrivatePropertyTypeFromConstructor: false
# prevents reading key and value variables set in foreach when iterating over a non-empty array
polluteScopeWithAlwaysIterableForeach: false
# prevents reading variables set in for loop initial statement and while loop condition after the loop
polluteScopeWithLoopInitialAssignments: false
# report always true last condition in a series of elseif branches and match expression arms
reportAlwaysTrueInLastCondition: true
# reports violations of parameter type contravariance and return type covariance
reportMaybesInMethodSignatures: true
# reports violations of property type invariance
reportMaybesInPropertyPhpDocTypes: true
# reports violations of parameter type contravariance and return type covariance in static methods
reportStaticMethodSignatures: true
#
reportWrongPhpDocTypeInVarTag: true
# differentiate between PHPDoc and native types (if false)
treatPhpDocTypesAsCertain: false
tipsOfTheDay: false
exceptions:
implicitThrows: false
checkedExceptionRegexes:
- '#Exception#'
- '#Throwable#'
check:
missingCheckedExceptionInThrows: true
tooWideThrowType: true
cognitive_complexity:
class: 69
function: 30
type_coverage:
return_type: 100
param_type: 100
property_type: 100
constant_type: 100
# also, how many files has declare strict types
declare: 100
unused_public:
methods: true
properties: true
constants: true
local_methods: true
type_perfect:
null_over_false: true
no_mixed: true
narrow_param: true
ignoreErrors:
- '~, mixed given~'
rules:
# code complexity
- Symplify\PHPStanRules\Rules\NoDynamicNameRule
- Symplify\PHPStanRules\Rules\NoReturnArrayVariableListRule
- Symplify\PHPStanRules\Rules\ForbiddenExtendOfNonAbstractClassRule
# domain
- Symplify\PHPStanRules\Rules\Domain\RequireExceptionNamespaceRule
- Symplify\PHPStanRules\Rules\Domain\RequireAttributeNamespaceRule
- Symplify\PHPStanRules\Rules\Enum\RequireUniqueEnumConstantRule
- Symplify\PHPStanRules\Rules\PreventParentMethodVisibilityOverrideRule
# paths
- Symplify\PHPStanRules\Rules\NoReferenceRule
# explicit naming
- Symplify\PHPStanRules\Rules\ForbiddenMultipleClassLikeInOneFileRule
- Symplify\PHPStanRules\Rules\Complexity\ForbiddenArrayMethodCallRule
- Symplify\PHPStanRules\Rules\CheckRequiredInterfaceInContractNamespaceRule
# naming
- Symplify\PHPStanRules\Rules\RequireAttributeNameRule
# regexes
- Symplify\PHPStanRules\Rules\AnnotateRegexClassConstWithRegexLinkRule
- Symplify\PHPStanRules\Rules\NoInlineStringRegexRule
- Symplify\PHPStanRules\Rules\RegexSuffixInRegexConstantRule
# naming
- Symplify\PHPStanRules\Rules\Explicit\ExplicitClassPrefixSuffixRule
- Symplify\PHPStanRules\Rules\NoReturnSetterMethodRule
- Symplify\PHPStanRules\Rules\UppercaseConstantRule
- Symplify\PHPStanRules\Rules\ClassNameRespectsParentSuffixRule
- Symplify\PHPStanRules\Rules\CheckClassNamespaceFollowPsr4Rule