Skip to content

Rules ​

custos ships 178 rules in 12 groups. Rules marked off only run when enabled in custos.json or with --all; rules with a quick-fix are applied by custos fix and offered as code actions by the language server. Every rule also answers to its PhpStorm inspection name (<ID>Inspection), in @noinspection comments, --rule and custos.json.

Architecture ​

RuleSeverityDefaultQuick-fixPHP
BadExceptionsProcessinginfooffany
CallableParameterUseCaseInTypeContextwarningonany
ClassOverridesFieldOfSuperClasswarningoffany
ClassReImplementsParentInterfacewarningon✓any
EfferentObjectCouplinginfooffany
EmptyClassinfooffany
LongInheritanceChainwarningoffany
MultipleReturnStatementswarningoffany
PropertyCanBeStaticinfooffany

Code style ​

RuleSeverityDefaultQuick-fixPHP
AccessModifierPresentedinfoon✓any
ComparisonOperandsOrderinfooff✓any
DisallowWritingIntoStaticPropertiesinfooffany
DynamicInvocationViaScopeResolutionwarningon✓any
ImplodeArgumentsOrderinfoon✓any
IncrementDecrementOperationEquivalentinfoon✓any
IsEmptyFunctionUsageinfoon✓any
IsNullFunctionUsageinfooff✓any
MisorderedModifiersinfoon✓any
MissUsingParentKeywordinfoon✓any
MissingOrEmptyGroupStatementinfoon✓any
NestedAssignmentsUsageinfooff✓any
NestedNotOperatorsinfoon✓any
NestedPositiveIfStatementsinfoon✓any
OpAssignShortSyntaxinfoon✓any
ParameterDefaultValueIsNotNullinfooffany
ProperNullCoalescingOperatorUsageinfoon✓PHP ≥ 7.0
SelfClassReferencinginfoon✓any
ShortEchoTagCanBeUsedinfooff✓any
ShortOpenTagUsageinfoon✓any
StaticClosureCanBeUsedinfoon✓PHP ≥ 5.4
StaticInvocationViaThiswarningon✓any
UnNecessaryDoubleQuotesinfooff✓any
UnknownInspectioninfoonany
UnnecessaryCastinginfoon✓any
UnnecessaryFinalModifierinfoon✓any
UnnecessarySemicoloninfoon✓any
UnnecessaryUseAliasinfoon✓any
UnsetConstructsCanBeMergedinfoon✓any
UsingInclusionReturnValueinfooffany

Compatibility ​

RuleSeverityDefaultQuick-fixPHP
DeprecatedIniOptionswarningonany
FopenBinaryUnsafeUsagewarningon✓any
MktimeUsagewarningon✓any
RandomApiMigrationwarningon✓any

Confusing constructs ​

RuleSeverityDefaultQuick-fixPHP
ClassMethodNameMatchesFieldNameinfoonany
NestedTernaryOperatorwarningonany
ReferencingObjectswarningon✓any
SenselessTernaryOperatorwarningon✓any
UselessReturninfoon✓any

Control flow ​

RuleSeverityDefaultQuick-fixPHP
ArraySearchUsedAsInArraywarningon✓any
ArrayUniqueCanBeUsedinfoon✓PHP ≥ 7.2
CompactCanBeUsedinfooff✓any
DegradedSwitchinfoonany
DisconnectedForeachInstructioninfooffany
ForeachInvariantswarningon✓any
GetTypeMissUsewarningon✓any
IfReturnReturnSimplificationwarningon✓any
InvertedIfElseConstructsinfooff✓any
IssetConstructsCanBeMergedinfoon✓any
LoopWhichDoesNotLoopwarningonany
MultiAssignmentUsageinfoonany
NotOptimalIfConditionswarningonany
ObGetCleanCanBeUsedwarningon✓any
OneTimeUseVariableswarningon✓any
PdoApiUsageinfoon✓any
RedundantElseClausewarningon✓any
StrTrUsageAsStrReplaceinfoon✓any
StringCaseManipulationinfoon✓any
StringNormalizationinfoon✓any
StrlenInEmptyStringCheckContextinfoon✓any
SubStrUsedAsStrPosinfoon✓any
TernaryOperatorSimplifyinfoon✓any
ThrowRawExceptioninfoon✓any
UnSafeIsSetOverArraywarningon✓any

Language level migration ​

RuleSeverityDefaultQuick-fixPHP
AliasFunctionsUsagewarningon✓any
ArgumentUnpackingCanBeUsedwarningon✓PHP ≥ 5.6
ArrayIsListCanBeUsedinfoon✓PHP ≥ 8.0
CascadingDirnameCallswarningon✓PHP ≥ 7.0
ClassConstantCanBeUsedinfoon✓PHP ≥ 5.5
ConstantCanBeUsedinfoon✓any
DeprecatedConstructorStyleerroron✓any
DirectoryConstantCanBeUsedwarningon✓any
DynamicCallsToScopeIntrospectionwarningonPHP ≥ 7.1
ElvisOperatorCanBeUsedinfoon✓any
GetClassUsagewarningonPHP ≥ 7.1
GetDebugTypeCanBeUsedinfoonPHP ≥ 8.0
InstanceofCanBeUsedwarningon✓any
IsCountableCanBeUsedinfoonPHP ≥ 7.4
IsIterableCanBeUsedinfoonPHP ≥ 7.1
NullCoalescingOperatorCanBeUsedinfoon✓PHP ≥ 7.0
PowerOperatorCanBeUsedwarningon✓PHP ≥ 5.6
ReturnTypeCanBeDeclaredinfoon✓PHP ≥ 7.0
ShortListSyntaxCanBeUsedinfoon✓PHP ≥ 7.1
StrContainsCanBeUsedinfoon✓PHP ≥ 8.0
StrEndsWithCanBeUsedinfoon✓PHP ≥ 8.0
StrStartsWithCanBeUsedinfoon✓PHP ≥ 8.0
TypesCastingCanBeUsedinfoon✓any
UnsupportedEmptyListAssignmentserroronPHP ≥ 7.0
UnsupportedStringOffsetOperationserroronPHP ≥ 7.1

PHPUnit ​

RuleSeverityDefaultQuick-fixPHP
MockingMethodsCorrectnesswarningon✓any
PhpUnitDeprecationsinfoon✓any
PhpUnitTestsinfoon✓any
UnnecessaryAssertioninfoon✓any

Performance ​

RuleSeverityDefaultQuick-fixPHP
AlterInForeachwarningonany
AmbiguousMethodsCallsInArrayMappingwarningonany
ArrayPushMissUsewarningon✓any
CascadeStringReplacementwarningon✓any
CaseInsensitiveStringFunctionsMissUsewarningon✓any
FixedTimeStartWithwarningoff✓any
InArrayMissUsewarningon✓any
NotOptimalRegularExpressionswarningon✓any
PackedHashtableOptimizationinfoonPHP ≥ 7.0
SlowArrayOperationsInLooperroron✓any
StrStrUsedAsStrPoswarningon✓any
StrtotimeUsagewarningon✓any
SubStrShortHandUsagewarningon✓any
SubStrUsedAsArrayAccesswarningon✓any
UnqualifiedReferenceinfooff✓PHP ≥ 7.0
VariableFunctionsUsageinfoon✓any

Probable bugs ​

RuleSeverityDefaultQuick-fixPHP
AutoloadingIssueswarningonany
CallableMethodValiditywarningonany
ClassConstantUsageCorrectnesserroronany
ClassMockingCorrectnesserroronany
CompactArgumentserroronany
DateIntervalSpecificationerroronany
DateTimeConstantsUsageerroron✓any
DateTimeSetTimeUsageerroronPHP ≤ 7.0
DuplicateArrayKeyswarningonany
ForgottenDebugOutputerroronany
IncorrectRandomRangeerroronany
InfinityLooperroronany
IssetArgumentExistencewarningonany
MagicMethodsValidityerroronany
MissingArrayInitializationwarningonany
MissingIssetImplementationerroronany
MkdirRaceConditionerroron✓any
NullPointerExceptionwarningoff, experimentalany
OffsetOperationserroroffany
PassingByReferenceCorrectnesswarningonany
PregQuoteUsageerroronany
PreloadingUsageCorrectnesswarningon✓any
PrintfScanfArgumentserroronany
RealpathInStreamContextwarningon✓any
SimpleXmlLoadFileUsageerroron✓any
StaticLambdaBindingerroron✓PHP ≥ 5.4
StringsFirstCharactersCompareerroron✓any
SuspiciousAssignmentserroronany
SuspiciousBinaryOperationerroron✓any
SuspiciousFunctionCallserroronany
SuspiciousLooperroronany
SuspiciousReturnerroronany
SuspiciousSemicolonerroronany
SwitchContinuationInLooperroron✓any
TraitsPropertiesConflictserroronany
UsingInclusionOnceReturnValueerroronany

Security ​

RuleSeverityDefaultQuick-fixPHP
BacktickOperatorUsagewarningon✓any
CryptographicallySecureAlgorithmserroronany
CryptographicallySecureRandomnesserroronany
CurlSslServerSpoofingerroronany
EncryptionInitializationVectorRandomnesserroronany
HostnameSubstitutionerroronany
NonSecureParseStrUsageerroronany
NonSecureUniqidUsageerroron✓any
PotentialMalwareerroronany
SecurityAdvisorieswarningon✓any
UnserializeExploitserroronany
UntrustedInclusionerroroffany

Type compatibility ​

RuleSeverityDefaultQuick-fixPHP
JsonEncodingApiUsageinfoon✓any
TypeUnsafeArraySearchinfoonany
TypeUnsafeComparisonwarningon✓any

Unused ​

RuleSeverityDefaultQuick-fixPHP
DateUsageinfoon✓any
OnlyWritesOnParameterinfoonany
PropertyInitializationFlawsinfoon✓any
SenselessMethodDuplicationinfoon✓any
SenselessProxyMethodwarningon✓any
UnnecessaryIssetArgumentsinfoon✓any
UnusedConstructorDependenciesinfoonany
UnusedGotoLabelinfoon✓any
UselessUnsetinfoonany

Released under the MIT License. Rule catalogue modelled on Php Inspections (EA Extended); independent clean-room implementation.