Skip to content

Issue Kinds

All issue types mir can emit, grouped by category.

KindDescription
UndefinedVariableVariable used before assignment
PossiblyUndefinedVariableVariable only assigned in some branches
UndefinedFunctionCall to a function not found in codebase or stubs
UndefinedMethodCall to a method not found on the type
UndefinedClassReference to a class/interface/trait that doesn’t exist
UndefinedPropertyAccess to a property not declared on the class
UndefinedConstantReference to an undefined constant
KindDescription
NullArgumentPassing null to a non-nullable parameter
NullPropertyFetchProperty access on a possibly-null value
NullMethodCallMethod call on a possibly-null value
NullArrayAccessArray access on a possibly-null value
PossiblyNull*Nullable variants of the above
NullableReturnStatementReturning null from a non-nullable return type
KindDescription
InvalidReturnTypeReturn value doesn’t match declared return type
InvalidArgumentArgument type doesn’t match parameter type
TooFewArgumentsCall provides fewer arguments than required
TooManyArgumentsCall provides more arguments than accepted
InvalidNamedArgumentNamed argument does not match a callable parameter
InvalidPassByReferenceBy-reference parameter receives a non-referenceable expression
InvalidPropertyAssignmentAssigned value incompatible with property type
InvalidCastExplicit cast that can never succeed
InvalidOperandOperator applied to incompatible types
MismatchingDocblockReturnTypeDocblock return type conflicts with native type hint
KindDescription
InvalidArrayOffsetArray accessed with a key of the wrong type
NonExistentArrayOffsetArray accessed with a key known not to exist
PossiblyInvalidArrayOffsetArray accessed with a key that might not exist
PossiblyInvalidArrayAccessArray access on a value that might not be an array
KindDescription
RedundantConditionCondition that is always true or always false
RedundantCastCast to a type the value already has
UnnecessaryVarAnnotation@var annotation that matches the inferred type
TypeDoesNotContainTypeType check that can never be true
KindDescription
UnusedVariableVariable assigned but never read
UnusedParamParameter never used in the function body
UnusedMethodPrivate method never called
UnusedPropertyPrivate property never read
UnusedFunctionFunction never called
UnreachableCodeCode after an unconditional return/throw/exit
KindDescription
UnimplementedAbstractMethodAbstract method not implemented in concrete class
UnimplementedInterfaceMethodInterface method not implemented
MethodSignatureMismatchOverride has incompatible signature
OverriddenMethodAccessOverride reduces visibility
FinalClassExtendedExtending a final class
FinalMethodOverriddenOverriding a final method
KindDescription
TaintedHtmlUser input reaches an HTML sink without sanitization
TaintedSqlUser input reaches a SQL sink without sanitization
TaintedShellUser input reaches a shell sink without sanitization
KindDescription
InvalidTemplateParamTemplate argument violates declared bounds
KindDescription
DeprecatedMethodCall to a @deprecated method
DeprecatedClassInstantiation of a @deprecated class
InternalMethodCall to an @internal method from outside its package
InvalidThrowthrow of a non-Throwable value
MissingThrowsDocblockThrown exception not declared in @throws
ReadonlyPropertyAssignmentAssignment to a readonly property after construction
ParseErrorFile could not be parsed
InvalidDocblockMalformed or unrecognisable docblock annotation