-
[BC] TPositiveInt has been removed and replaced by TIntRange
-
[BC] The parameter
$php_version
ofPsalm\Type\Atomic::create()
renamed to$analysis_php_version_id
and changed fromarray|null
toint|null
. Previously it accepted PHP version asarray{major_version, minor_version}
while now it accepts version ID, similar to howPHP_VERSION_ID
is calculated. -
[BC] The parameter
$php_version
ofPsalm\Type::parseString()
renamed to$analysis_php_version_id
and changed fromarray|null
toint|null
. Previously it accepted PHP version asarray{major_version, minor_version}
while now it accepts version ID. -
[BC] Parameter 0 of
canBeFullyExpressedInPhp()
of the classes listed below changed name fromphp_major_version
toanalysis_php_version_id
. Previously it accepted major PHP version as int (e.g.7
), while now it accepts version ID. Classes affected:Psalm\Type\Atomic
Psalm\Type\Atomic\Scalar
Psalm\Type\Atomic\TArray
Psalm\Type\Atomic\TArrayKey
Psalm\Type\Atomic\TCallable
Psalm\Type\Atomic\TCallableObject
Psalm\Type\Atomic\TCallableString
Psalm\Type\Atomic\TClassConstant
Psalm\Type\Atomic\TClassString
Psalm\Type\Atomic\TClassStringMap
Psalm\Type\Atomic\TClosedResource
Psalm\Type\Atomic\TClosure
Psalm\Type\Atomic\TConditional
Psalm\Type\Atomic\TDependentGetClass
Psalm\Type\Atomic\TDependentGetDebugType
Psalm\Type\Atomic\TDependentGetType
Psalm\Type\Atomic\TDependentListKey
Psalm\Type\Atomic\TEnumCase
Psalm\Type\Atomic\TFalse
Psalm\Type\Atomic\TGenericObject
Psalm\Type\Atomic\TIntMask
Psalm\Type\Atomic\TIntMaskOf
Psalm\Type\Atomic\TIntRange
Psalm\Type\Atomic\TIterable
Psalm\Type\Atomic\TKeyedArray
Psalm\Type\Atomic\TKeyOfArray
Psalm\Type\Atomic\TList
Psalm\Type\Atomic\TLiteralClassString
Psalm\Type\Atomic\TLowercaseString
Psalm\Type\Atomic\TMixed
Psalm\Type\Atomic\TNamedObject
Psalm\Type\Atomic\TNever
Psalm\Type\Atomic\TNonEmptyLowercaseString
Psalm\Type\Atomic\TNonspecificLiteralInt
Psalm\Type\Atomic\TNonspecificLiteralString
Psalm\Type\Atomic\TNull
Psalm\Type\Atomic\TNumeric
Psalm\Type\Atomic\TNumericString
Psalm\Type\Atomic\TObject
Psalm\Type\Atomic\TObjectWithProperties
Psalm\Type\Atomic\TResource
Psalm\Type\Atomic\TScalar
Psalm\Type\Atomic\TTemplateIndexedAccess
Psalm\Type\Atomic\TTemplateParam
Psalm\Type\Atomic\TTraitString
Psalm\Type\Atomic\TTrue
Psalm\Type\Atomic\TTypeAlias
Psalm\Type\Atomic\TValueOfArray
Psalm\Type\Atomic\TVoid
Psalm\Type\Union
-
[BC] Parameter 3 of
toPhpString()
of methods listed below changed name fromphp_major_version
toanalysis_php_version_id
. Previously it accepted major PHP version as int (e.g.7
), while now it accepts version ID. Classes affected:Psalm\Type\Atomic
Psalm\Type\Atomic\CallableTrait
Psalm\Type\Atomic\TAnonymousClassInstance
Psalm\Type\Atomic\TArray
Psalm\Type\Atomic\TArrayKey
Psalm\Type\Atomic\TBool
Psalm\Type\Atomic\TCallable
Psalm\Type\Atomic\TCallableObject
Psalm\Type\Atomic\TClassConstant
Psalm\Type\Atomic\TClassString
Psalm\Type\Atomic\TClassStringMap
Psalm\Type\Atomic\TClosedResource
Psalm\Type\Atomic\TConditional
Psalm\Type\Atomic\TEmpty
Psalm\Type\Atomic\TEnumCase
Psalm\Type\Atomic\TFloat
Psalm\Type\Atomic\TGenericObject
Psalm\Type\Atomic\TInt
Psalm\Type\Atomic\TIterable
Psalm\Type\Atomic\TKeyedArray
Psalm\Type\Atomic\TKeyOfArray
Psalm\Type\Atomic\TList
Psalm\Type\Atomic\TLiteralClassString
Psalm\Type\Atomic\TMixed
Psalm\Type\Atomic\TNamedObject
Psalm\Type\Atomic\TNever
Psalm\Type\Atomic\TNull
Psalm\Type\Atomic\TNumeric
Psalm\Type\Atomic\TObject
Psalm\Type\Atomic\TObjectWithProperties
Psalm\Type\Atomic\TResource
Psalm\Type\Atomic\TScalar
Psalm\Type\Atomic\TString
Psalm\Type\Atomic\TTemplateIndexedAccess
Psalm\Type\Atomic\TTemplateParam
Psalm\Type\Atomic\TTraitString
Psalm\Type\Atomic\TTypeAlias
Psalm\Type\Atomic\TValueOfArray
Psalm\Type\Atomic\TVoid
Psalm\Type\Union
-
While not a BC break per se, all classes / interfaces / traits / enums under
Psalm\Internal
namespace are now marked@internal
. -
[BC] Parameter 1 of
Psalm\Type\Atomic\TNamedObject::__construct()
changed name fromwas_static
tois_static
-
[BC] Parameter 1 of
Psalm\Type\Atomic\TAnonymousClassInstance::__construct()
changed name fromwas_static
tois_static
-
[BC] Parameter 5 of
Psalm\Type::getStringFromFQCLN()
changed name fromwas_static
tois_static
-
[BC] Property
Psalm\Type\Atomic\TNamedObject::$was_static
was renamed to$is_static
-
[BC] Method
Psalm\Type\Union::isFormerStaticObject()
was renamed toisStaticObject()
-
[BC] Method
Psalm\Type\Union::hasFormerStaticObject()
was renamed tohasStaticObject()
-
[BC] Function assertions (from
@psalm-assert Foo $bar
) have been converted from strings to specificAssertion
objects. -
[BC] Property
Psalm\Storage\ClassLikeStorage::$invalid_dependencies
changed fromarray<string>
toarray<string, true>
. -
[BC] Property
Psalm\Storage\ClassLikeStorage::$template_extended_count
was renamed to$template_type_extends_count
, its type was changed fromint|null
toarray<string, int>|null
. -
[BC] Event classes became final and their constructors were marked
@internal
:Psalm\Plugin\EventHandler\Event\AddRemoveTaintsEvent
Psalm\Plugin\EventHandler\Event\AfterAnalysisEvent
Psalm\Plugin\EventHandler\Event\AfterClassLikeAnalysisEvent
Psalm\Plugin\EventHandler\Event\AfterClassLikeExistenceCheckEvent
Psalm\Plugin\EventHandler\Event\AfterClassLikeVisitEvent
Psalm\Plugin\EventHandler\Event\AfterCodebasePopulatedEvent
Psalm\Plugin\EventHandler\Event\AfterEveryFunctionCallAnalysisEvent
Psalm\Plugin\EventHandler\Event\AfterExpressionAnalysisEvent
Psalm\Plugin\EventHandler\Event\AfterFileAnalysisEvent
Psalm\Plugin\EventHandler\Event\AfterFunctionCallAnalysisEvent
Psalm\Plugin\EventHandler\Event\AfterFunctionLikeAnalysisEvent
Psalm\Plugin\EventHandler\Event\AfterMethodCallAnalysisEvent
Psalm\Plugin\EventHandler\Event\AfterStatementAnalysisEvent
Psalm\Plugin\EventHandler\Event\BeforeFileAnalysisEvent
Psalm\Plugin\EventHandler\Event\FunctionExistenceProviderEvent
Psalm\Plugin\EventHandler\Event\FunctionParamsProviderEvent
Psalm\Plugin\EventHandler\Event\FunctionReturnTypeProviderEvent
Psalm\Plugin\EventHandler\Event\MethodExistenceProviderEvent
Psalm\Plugin\EventHandler\Event\MethodParamsProviderEvent
Psalm\Plugin\EventHandler\Event\MethodReturnTypeProviderEvent
Psalm\Plugin\EventHandler\Event\MethodVisibilityProviderEvent
Psalm\Plugin\EventHandler\Event\PropertyExistenceProviderEvent
Psalm\Plugin\EventHandler\Event\PropertyTypeProviderEvent
Psalm\Plugin\EventHandler\Event\PropertyVisibilityProviderEvent
Psalm\Plugin\EventHandler\Event\StringInterpreterEvent
-
[BC]
Atomic::__toString()
used to return a string representation of the type that was using double quotes ("
) to quote literals. This is now using single quotes ('
) to be more aligned with the rest of the codebase. -
[BC]
Atomic::__toString()
is now final -
[BC]
Atomic::__toString()
now returns a more detailed version of the type (it callsgetId()
under the hood) -
[BC] Atomic::getId() has now a first param $exact. Calling the method with false will return a less detailed version of the type in some cases (similarly to what
__toString
used to return) -
[BC] To remove a variable from the context, use
Context::remove()
. Callingunset($context->vars_in_scope[$var_id])
can cause problems when using references. -
[BC]
TKeyOfClassConstant
has been renamed toTKeyOfArray
. -
[BC]
TValueOfClassConstant
has been renamed toTValueOfArray
. -
[BC]
TKeyOfTemplate
base class has been changed fromScalar
toAtomic
. -
[BC] Class
Psalm\FileManipulation
became final -
[BC] Class
Psalm\Context
became final -
[BC]
Psalm\Context#__construct()
was marked@internal
-
[BC] Class
Psalm\PluginRegistrationSocket
became final -
[BC] Class
Psalm\PluginFileExtensionsSocket
became final -
[BC] Class
Psalm\Config\IssueHandler
became final -
[BC]
Psalm\Config\IssueHandler
was marked@internal
-
[BC] Class
Psalm\Config\ProjectFileFilter
became final -
[BC]
Psalm\Config\ProjectFileFilter
was marked@internal
-
[BC] Class
Psalm\Config\Creator
became final -
[BC]
Psalm\Config\Creator
was marked@internal
-
[BC] Class
Psalm\Config\TaintAnalysisFileFilter
became final -
[BC]
Psalm\Config\TaintAnalysisFileFilter
was marked@internal
-
[BC] Class
Psalm\Config\ErrorLevelFileFilter
became final -
[BC]
Psalm\Config\ErrorLevelFileFilter
was marked@internal
-
[BC] Class
Psalm\FileBasedPluginAdapter
became final -
[BC]
Psalm\FileBasedPluginAdapter
was marked@internal
-
[BC] Class
Psalm\Exception\InvalidMethodOverrideException
became final -
[BC] Class
Psalm\Exception\UnpopulatedClasslikeException
became final -
[BC] Class
Psalm\Exception\ConfigNotFoundException
became final -
[BC] Class
Psalm\Exception\TypeParseTreeException
became final -
[BC] Class
Psalm\Exception\ComplicatedExpressionException
became final -
[BC] Class
Psalm\Exception\ScopeAnalysisException
became final -
[BC] Class
Psalm\Exception\InvalidClasslikeOverrideException
became final -
[BC] Class
Psalm\Exception\CircularReferenceException
became final -
[BC] Class
Psalm\Exception\UnsupportedIssueToFixException
became final -
[BC] Class
Psalm\Exception\CodeException
became final -
[BC] Class
Psalm\Exception\RefactorException
became final -
[BC] Class
Psalm\Exception\UnpreparedAnalysisException
became final -
[BC] Class
Psalm\Exception\IncorrectDocblockException
became final -
[BC] Class
Psalm\Exception\UnanalyzedFileException
became final -
[BC] Class
Psalm\Exception\UnresolvableConstantException
became final -
[BC] Class
Psalm\Exception\FileIncludeException
became final -
[BC] Class
Psalm\Exception\ConfigCreationException
became final -
[BC] Class
Psalm\Aliases
became final -
[BC]
Psalm\Aliases#__construct()
was marked@internal
-
[BC] Class
Psalm\Codebase
became final -
[BC]
Psalm\Codebase#__construct()
was marked@internal
-
[BC] Class
Psalm\Progress\VoidProgress
became final -
[BC] Class
Psalm\Progress\DebugProgress
became final -
[BC] Class
Psalm\Report\JsonReport
became final -
[BC] Class
Psalm\Report\SonarqubeReport
became final -
[BC] Class
Psalm\Report\CodeClimateReport
became final -
[BC] Class
Psalm\Report\CheckstyleReport
became final -
[BC] Class
Psalm\Report\JsonSummaryReport
became final -
[BC] Class
Psalm\Report\XmlReport
became final -
[BC] Class
Psalm\Report\EmacsReport
became final -
[BC] Class
Psalm\Report\ConsoleReport
became final -
[BC] Class
Psalm\Report\ReportOptions
became final -
[BC] Class
Psalm\Report\PylintReport
became final -
[BC] Class
Psalm\Report\JunitReport
became final -
[BC] Class
Psalm\Report\CompactReport
became final -
[BC] Class
Psalm\Report\GithubActionsReport
became final -
[BC] Class
Psalm\Report\TextReport
became final -
[BC] Class
Psalm\Report\SarifReport
became final -
[BC] Class
Psalm\Report\PhpStormReport
became final -
[BC] Class
Psalm\Plugin\Shepherd
became final -
[BC] Class
Psalm\IssueBuffer
became final -
[BC] Class
Psalm\SourceControl\Git\RemoteInfo
became final -
[BC] Class
Psalm\SourceControl\Git\CommitInfo
became final -
[BC] Class
Psalm\SourceControl\Git\GitInfo
became final -
[BC] Class
Psalm\ErrorBaseline
became final -
[BC]
Psalm\Config#__construct()
was marked@internal
-
[BC] Class
Psalm\DocComment
became final -
All non-abstract issues are now final:
- [BC] Class
Psalm\Issue\InaccessibleProperty
became final - [BC] Class
Psalm\Issue\TaintedShell
became final - [BC] Class
Psalm\Issue\PossiblyInvalidIterator
became final - [BC] Class
Psalm\Issue\MethodSignatureMustOmitReturnType
became final - [BC] Class
Psalm\Issue\TaintedHtml
became final - [BC] Class
Psalm\Issue\DuplicateConstant
became final - [BC] Class
Psalm\Issue\MissingConstructor
became final - [BC] Class
Psalm\Issue\PossiblyFalseIterator
became final - [BC] Class
Psalm\Issue\PossiblyUndefinedArrayOffset
became final - [BC] Class
Psalm\Issue\FalseOperand
became final - [BC] Class
Psalm\Issue\MixedArrayAssignment
became final - [BC] Class
Psalm\Issue\MixedArrayAccess
became final - [BC] Class
Psalm\Issue\TaintedUnserialize
became final - [BC] Class
Psalm\Issue\NullFunctionCall
became final - [BC] Class
Psalm\Issue\UnusedConstructor
became final - [BC] Class
Psalm\Issue\InvalidEnumCaseValue
became final - [BC] Class
Psalm\Issue\MissingClosureReturnType
became final - [BC] Class
Psalm\Issue\LessSpecificClassConstantType
became final - [BC] Class
Psalm\Issue\MixedPropertyFetch
became final - [BC] Class
Psalm\Issue\PossiblyNullArrayAccess
became final - [BC] Class
Psalm\Issue\MissingPropertyType
became final - [BC] Class
Psalm\Issue\TaintedCallable
became final - [BC] Class
Psalm\Issue\PossiblyInvalidMethodCall
became final - [BC] Class
Psalm\Issue\TaintedHeader
became final - [BC] Class
Psalm\Issue\PossiblyInvalidArrayAssignment
became final - [BC] Class
Psalm\Issue\PossiblyInvalidCast
became final - [BC] Class
Psalm\Issue\ImpurePropertyAssignment
became final - [BC] Class
Psalm\Issue\MixedPropertyTypeCoercion
became final - [BC] Class
Psalm\Issue\UnresolvableConstant
became final - [BC] Class
Psalm\Issue\LoopInvalidation
became final - [BC] Class
Psalm\Issue\TooManyTemplateParams
became final - [BC] Class
Psalm\Issue\InvalidCatch
became final - [BC] Class
Psalm\Issue\MismatchingDocblockReturnType
became final - [BC] Class
Psalm\Issue\PossiblyUndefinedIntArrayOffset
became final - [BC] Class
Psalm\Issue\NullArrayAccess
became final - [BC] Class
Psalm\Issue\NoEnumProperties
became final - [BC] Class
Psalm\Issue\ImpureByReferenceAssignment
became final - [BC] Class
Psalm\Issue\RedundantConditionGivenDocblockType
became final - [BC] Class
Psalm\Issue\MixedReturnTypeCoercion
became final - [BC] Class
Psalm\Issue\PossiblyNullOperand
became final - [BC] Class
Psalm\Issue\InvalidGlobal
became final - [BC] Class
Psalm\Issue\PossiblyNullArgument
became final - [BC] Class
Psalm\Issue\ForbiddenCode
became final - [BC] Class
Psalm\Issue\RedundantCast
became final - [BC] Class
Psalm\Issue\UnusedParam
became final - [BC] Class
Psalm\Issue\DuplicateArrayKey
became final - [BC] Class
Psalm\Issue\MissingImmutableAnnotation
became final - [BC] Class
Psalm\Issue\MutableDependency
became final - [BC] Class
Psalm\Issue\MixedPropertyAssignment
became final - [BC] Class
Psalm\Issue\DeprecatedTrait
became final - [BC] Class
Psalm\Issue\InvalidArrayAccess
became final - [BC] Class
Psalm\Issue\LessSpecificReturnStatement
became final - [BC] Class
Psalm\Issue\AssignmentToVoid
became final - [BC] Class
Psalm\Issue\InvalidPropertyAssignment
became final - [BC] Class
Psalm\Issue\InvalidFalsableReturnType
became final - [BC] Class
Psalm\Issue\IfThisIsMismatch
became final - [BC] Class
Psalm\Issue\UndefinedPropertyFetch
became final - [BC] Class
Psalm\Issue\UndefinedMagicPropertyFetch
became final - [BC] Class
Psalm\Issue\PossiblyUnusedReturnValue
became final - [BC] Class
Psalm\Issue\PossiblyNullPropertyFetch
became final - [BC] Class
Psalm\Issue\PossiblyInvalidPropertyFetch
became final - [BC] Class
Psalm\Issue\MixedClone
became final - [BC] Class
Psalm\Issue\DuplicateFunction
became final - [BC] Class
Psalm\Issue\InaccessibleClassConstant
became final - [BC] Class
Psalm\Issue\UndefinedGlobalVariable
became final - [BC] Class
Psalm\Issue\ImplicitToStringCast
became final - [BC] Class
Psalm\Issue\PossiblyInvalidDocblockTag
became final - [BC] Class
Psalm\Issue\ReservedWord
became final - [BC] Class
Psalm\Issue\InvalidOperand
became final - [BC] Class
Psalm\Issue\UnusedProperty
became final - [BC] Class
Psalm\Issue\UnevaluatedCode
became final - [BC] Class
Psalm\Issue\NullPropertyFetch
became final - [BC] Class
Psalm\Issue\ParamNameMismatch
became final - [BC] Class
Psalm\Issue\CircularReference
became final - [BC] Class
Psalm\Issue\UndefinedThisPropertyFetch
became final - [BC] Class
Psalm\Issue\NonStaticSelfCall
became final - [BC] Class
Psalm\Issue\NullOperand
became final - [BC] Class
Psalm\Issue\MixedAssignment
became final - [BC] Class
Psalm\Issue\MixedFunctionCall
became final - [BC] Class
Psalm\Issue\InvalidTypeImport
became final - [BC] Class
Psalm\Issue\PossiblyNullArrayOffset
became final - [BC] Class
Psalm\Issue\PossiblyInvalidArrayOffset
became final - [BC] Class
Psalm\Issue\PossiblyInvalidArgument
became final - [BC] Class
Psalm\Issue\UndefinedPropertyAssignment
became final - [BC] Class
Psalm\Issue\UnusedReturnValue
became final - [BC] Class
Psalm\Issue\ImpureFunctionCall
became final - [BC] Class
Psalm\Issue\RedundantFunctionCallGivenDocblockType
became final - [BC] Class
Psalm\Issue\PossiblyInvalidPropertyAssignmentValue
became final - [BC] Class
Psalm\Issue\PossiblyInvalidOperand
became final - [BC] Class
Psalm\Issue\ArgumentTypeCoercion
became final - [BC] Class
Psalm\Issue\OverriddenPropertyAccess
became final - [BC] Class
Psalm\Issue\PossiblyInvalidArrayAccess
became final - [BC] Class
Psalm\Issue\UnusedForeachValue
became final - [BC] Class
Psalm\Issue\ImplementedParamTypeMismatch
became final - [BC] Class
Psalm\Issue\InvalidConstantAssignmentValue
became final - [BC] Class
Psalm\Issue\PossiblyUndefinedMethod
became final - [BC] Class
Psalm\Issue\DuplicateEnumCaseValue
became final - [BC] Class
Psalm\Issue\RawObjectIteration
became final - [BC] Class
Psalm\Issue\UndefinedVariable
became final - [BC] Class
Psalm\Issue\MissingDocblockType
became final - [BC] Class
Psalm\Issue\NullArrayOffset
became final - [BC] Class
Psalm\Issue\PropertyNotSetInConstructor
became final - [BC] Class
Psalm\Issue\PossiblyInvalidPropertyAssignment
became final - [BC] Class
Psalm\Issue\PossiblyNullPropertyAssignmentValue
became final - [BC] Class
Psalm\Issue\UnsafeInstantiation
became final - [BC] Class
Psalm\Issue\UnimplementedAbstractMethod
became final - [BC] Class
Psalm\Issue\UnusedClosureParam
became final - [BC] Class
Psalm\Issue\PossiblyNullFunctionCall
became final - [BC] Class
Psalm\Issue\UndefinedAttributeClass
became final - [BC] Class
Psalm\Issue\NullableReturnStatement
became final - [BC] Class
Psalm\Issue\DuplicateMethod
became final - [BC] Class
Psalm\Issue\TooFewArguments
became final - [BC] Class
Psalm\Issue\UndefinedConstant
became final - [BC] Class
Psalm\Issue\NullReference
became final - [BC] Class
Psalm\Issue\ImplementedReturnTypeMismatch
became final - [BC] Class
Psalm\Issue\InvalidEnumBackingType
became final - [BC] Class
Psalm\Issue\InvalidNullableReturnType
became final - [BC] Class
Psalm\Issue\ImpureVariable
became final - [BC] Class
Psalm\Issue\TypeDoesNotContainNull
became final - [BC] Class
Psalm\Issue\ConstructorSignatureMismatch
became final - [BC] Class
Psalm\Issue\ImpurePropertyFetch
became final - [BC] Class
Psalm\Issue\RedundantCastGivenDocblockType
became final - [BC] Class
Psalm\Issue\PropertyTypeCoercion
became final - [BC] Class
Psalm\Issue\InvalidDocblockParamName
became final - [BC] Class
Psalm\Issue\UnsafeGenericInstantiation
became final - [BC] Class
Psalm\Issue\MissingClosureParamType
became final - [BC] Class
Psalm\Issue\TraitMethodSignatureMismatch
became final - [BC] Class
Psalm\Issue\ImpureStaticProperty
became final - [BC] Class
Psalm\Issue\InvalidThrow
became final - [BC] Class
Psalm\Issue\ParentNotFound
became final - [BC] Class
Psalm\Issue\ImpureStaticVariable
became final - [BC] Class
Psalm\Issue\PossiblyFalseReference
became final - [BC] Class
Psalm\Issue\ComplexMethod
became final - [BC] Class
Psalm\Issue\PossiblyNullArrayAssignment
became final - [BC] Class
Psalm\Issue\AbstractInstantiation
became final - [BC] Class
Psalm\Issue\UncaughtThrowInGlobalScope
became final - [BC] Class
Psalm\Issue\MismatchingDocblockPropertyType
became final - [BC] Class
Psalm\Issue\UnresolvableInclude
became final - [BC] Class
Psalm\Issue\DocblockTypeContradiction
became final - [BC] Class
Psalm\Issue\TaintedEval
became final - [BC] Class
Psalm\Issue\UnusedVariable
became final - [BC] Class
Psalm\Issue\DeprecatedConstant
became final - [BC] Class
Psalm\Issue\TaintedSystemSecret
became final - [BC] Class
Psalm\Issue\EmptyArrayAccess
became final - [BC] Class
Psalm\Issue\UndefinedInterface
became final - [BC] Class
Psalm\Issue\MixedInferredReturnType
became final - [BC] Class
Psalm\Issue\TaintedCookie
became final - [BC] Class
Psalm\Issue\UndefinedMagicPropertyAssignment
became final - [BC] Class
Psalm\Issue\NamedArgumentNotAllowed
became final - [BC] Class
Psalm\Issue\MethodSignatureMustProvideReturnType
became final - [BC] Class
Psalm\Issue\MissingParamType
became final - [BC] Class
Psalm\Issue\InvalidArrayAssignment
became final - [BC] Class
Psalm\Issue\UnimplementedInterfaceMethod
became final - [BC] Class
Psalm\Issue\InvalidPassByReference
became final - [BC] Class
Psalm\Issue\MissingDependency
became final - [BC] Class
Psalm\Issue\ReferenceConstraintViolation
became final - [BC] Class
Psalm\Issue\TaintedLdap
became final - [BC] Class
Psalm\Issue\PossiblyNullIterator
became final - [BC] Class
Psalm\Issue\InvalidScalarArgument
became final - [BC] Class
Psalm\Issue\DeprecatedMethod
became final - [BC] Class
Psalm\Issue\NullPropertyAssignment
became final - [BC] Class
Psalm\Issue\InvalidExtendClass
became final - [BC] Class
Psalm\Issue\DeprecatedClass
became final - [BC] Class
Psalm\Issue\ReferenceReusedFromConfusingScope
became final - [BC] Class
Psalm\Issue\UndefinedFunction
became final - [BC] Class
Psalm\Issue\LessSpecificImplementedReturnType
became final - [BC] Class
Psalm\Issue\NullIterator
became final - [BC] Class
Psalm\Issue\TaintedInclude
became final - [BC] Class
Psalm\Issue\UnusedMethodCall
became final - [BC] Class
Psalm\Issue\InvalidIterator
became final - [BC] Class
Psalm\Issue\PsalmInternalError
became final - [BC] Class
Psalm\Issue\InvalidParent
became final - [BC] Class
Psalm\Issue\AmbiguousConstantInheritance
became final - [BC] Class
Psalm\Issue\InvalidLiteralArgument
became final - [BC] Class
Psalm\Issue\MixedReturnStatement
became final - [BC] Class
Psalm\Issue\AbstractMethodCall
became final - [BC] Class
Psalm\Issue\InvalidClone
became final - [BC] Class
Psalm\Issue\DuplicateEnumCase
became final - [BC] Class
Psalm\Issue\InvalidDocblock
became final - [BC] Class
Psalm\Issue\RedundantIdentityWithTrue
became final - [BC] Class
Psalm\Issue\MissingReturnType
became final - [BC] Class
Psalm\Issue\RedundantCondition
became final - [BC] Class
Psalm\Issue\UnnecessaryVarAnnotation
became final - [BC] Class
Psalm\Issue\ConfigIssue
became final - [BC] Class
Psalm\Issue\InternalClass
became final - [BC] Class
Psalm\Issue\UndefinedDocblockClass
became final - [BC] Class
Psalm\Issue\DuplicateParam
became final - [BC] Class
Psalm\Issue\MismatchingDocblockParamType
became final - [BC] Class
Psalm\Issue\LessSpecificReturnType
became final - [BC] Class
Psalm\Issue\PossiblyUnusedProperty
became final - [BC] Class
Psalm\Issue\PossiblyNullReference
became final - [BC] Class
Psalm\Issue\MissingFile
became final - [BC] Class
Psalm\Issue\InvalidArgument
became final - [BC] Class
Psalm\Issue\PossiblyUndefinedGlobalVariable
became final - [BC] Class
Psalm\Issue\UndefinedThisPropertyAssignment
became final - [BC] Class
Psalm\Issue\ConflictingReferenceConstraint
became final - [BC] Class
Psalm\Issue\InvalidCast
became final - [BC] Class
Psalm\Issue\MoreSpecificReturnType
became final - [BC] Class
Psalm\Issue\ImpureMethodCall
became final - [BC] Class
Psalm\Issue\UnrecognizedExpression
became final - [BC] Class
Psalm\Issue\NoValue
became final - [BC] Class
Psalm\Issue\DeprecatedInterface
became final - [BC] Class
Psalm\Issue\InvalidStringClass
became final - [BC] Class
Psalm\Issue\MixedMethodCall
became final - [BC] Class
Psalm\Issue\UndefinedMagicMethod
became final - [BC] Class
Psalm\Issue\MissingThrowsDocblock
became final - [BC] Class
Psalm\Issue\TaintedTextWithQuotes
became final - [BC] Class
Psalm\Issue\InvalidReturnStatement
became final - [BC] Class
Psalm\Issue\DeprecatedFunction
became final - [BC] Class
Psalm\Issue\InterfaceInstantiation
became final - [BC] Class
Psalm\Issue\TooManyArguments
became final - [BC] Class
Psalm\Issue\PossibleRawObjectIteration
became final - [BC] Class
Psalm\Issue\PossiblyFalsePropertyAssignmentValue
became final - [BC] Class
Psalm\Issue\FalsableReturnStatement
became final - [BC] Class
Psalm\Issue\RedundantFunctionCall
became final - [BC] Class
Psalm\Issue\ImplementationRequirementViolation
became final - [BC] Class
Psalm\Issue\InternalMethod
became final - [BC] Class
Psalm\Issue\PossiblyInvalidFunctionCall
became final - [BC] Class
Psalm\Issue\OverriddenMethodAccess
became final - [BC] Class
Psalm\Issue\MixedArgumentTypeCoercion
became final - [BC] Class
Psalm\Issue\InvalidAttribute
became final - [BC] Class
Psalm\Issue\UndefinedInterfaceMethod
became final - [BC] Class
Psalm\Issue\InvalidPropertyFetch
became final - [BC] Class
Psalm\Issue\PossiblyUnusedMethod
became final - [BC] Class
Psalm\Issue\UndefinedTrace
became final - [BC] Class
Psalm\Issue\NullArgument
became final - [BC] Class
Psalm\Issue\UndefinedMethod
became final - [BC] Class
Psalm\Issue\TaintedUserSecret
became final - [BC] Class
Psalm\Issue\UndefinedTrait
became final - [BC] Class
Psalm\Issue\UnusedClass
became final - [BC] Class
Psalm\Issue\StringIncrement
became final - [BC] Class
Psalm\Issue\InaccessibleMethod
became final - [BC] Class
Psalm\Issue\PossiblyUnusedParam
became final - [BC] Class
Psalm\Issue\Trace
became final - [BC] Class
Psalm\Issue\UnhandledMatchCondition
became final - [BC] Class
Psalm\Issue\DuplicateClass
became final - [BC] Class
Psalm\Issue\InvalidClass
became final - [BC] Class
Psalm\Issue\TypeDoesNotContainType
became final - [BC] Class
Psalm\Issue\InvalidScope
became final - [BC] Class
Psalm\Issue\TaintedCustom
became final - [BC] Class
Psalm\Issue\TaintedSSRF
became final - [BC] Class
Psalm\Issue\InvalidNamedArgument
became final - [BC] Class
Psalm\Issue\InvalidPropertyAssignmentValue
became final - [BC] Class
Psalm\Issue\ContinueOutsideLoop
became final - [BC] Class
Psalm\Issue\MixedArgument
became final - [BC] Class
Psalm\Issue\TaintedSql
became final - [BC] Class
Psalm\Issue\UnusedFunctionCall
became final - [BC] Class
Psalm\Issue\InternalProperty
became final - [BC] Class
Psalm\Issue\InvalidParamDefault
became final - [BC] Class
Psalm\Issue\RedundantPropertyInitializationCheck
became final - [BC] Class
Psalm\Issue\InvalidTraversableImplementation
became final - [BC] Class
Psalm\Issue\InvalidTemplateParam
became final - [BC] Class
Psalm\Issue\InvalidStaticInvocation
became final - [BC] Class
Psalm\Issue\MixedArrayOffset
became final - [BC] Class
Psalm\Issue\PossiblyInvalidClone
became final - [BC] Class
Psalm\Issue\InvalidFunctionCall
became final - [BC] Class
Psalm\Issue\InvalidMethodCall
became final - [BC] Class
Psalm\Issue\ComplexFunction
became final - [BC] Class
Psalm\Issue\UnusedPsalmSuppress
became final - [BC] Class
Psalm\Issue\MixedStringOffsetAssignment
became final - [BC] Class
Psalm\Issue\UnrecognizedStatement
became final - [BC] Class
Psalm\Issue\TaintedFile
became final - [BC] Class
Psalm\Issue\UnusedMethod
became final - [BC] Class
Psalm\Issue\PossiblyFalseArgument
became final - [BC] Class
Psalm\Issue\DeprecatedProperty
became final - [BC] Class
Psalm\Issue\PossiblyUndefinedVariable
became final - [BC] Class
Psalm\Issue\PossiblyNullPropertyAssignment
became final - [BC] Class
Psalm\Issue\MixedOperand
became final - [BC] Class
Psalm\Issue\NoInterfaceProperties
became final - [BC] Class
Psalm\Issue\InvalidReturnType
became final - [BC] Class
Psalm\Issue\MixedArrayTypeCoercion
became final - [BC] Class
Psalm\Issue\ParadoxicalCondition
became final - [BC] Class
Psalm\Issue\InvalidToString
became final - [BC] Class
Psalm\Issue\MethodSignatureMismatch
became final - [BC] Class
Psalm\Issue\PossiblyFalseOperand
became final - [BC] Class
Psalm\Issue\UndefinedClass
became final - [BC] Class
Psalm\Issue\OverriddenInterfaceConstant
became final - [BC] Class
Psalm\Issue\MissingTemplateParam
became final - [BC] Class
Psalm\Issue\InvalidArrayOffset
became final - [BC] Class
Psalm\Issue\MoreSpecificImplementedParamType
became final - [BC] Class
Psalm\Issue\UninitializedProperty
became final - [BC] Class
Psalm\Issue\ParseError
became final - [BC] Class
Psalm\Issue\PossiblyUndefinedStringArrayOffset
became final - [BC] Class
Psalm\Issue\ExtensionRequirementViolation
became final
- [BC] Class
- [BC] Property
Psalm\Codebase::$php_major_version
was removed, usePsalm\Codebase::$analysis_php_version_id
. - [BC] Property
Psalm\Codebase::$php_minor_version
was removed, usePsalm\Codebase::$analysis_php_version_id
. - [BC] Class
Psalm\Type\Atomic\TEmpty
was removed - [BC] Method
Psalm\Type\Union::isEmpty()
was removed - [BC] Property
Psalm\Config::$allow_phpstorm_generics
was removed - [BC] Property
Psalm\Config::$exit_functions
was removed - [BC] Property
Psalm\Config::$forbid_echo
was removed - [BC] Property
Psalm\Config::$load_xdebug_stub
was removed - [BC] Method
Psalm\Type::getEmpty()
was removed - [BC] Legacy hook interfaces have been removed:
Psalm\Plugin\Hook\MethodReturnTypeProviderInterface
Psalm\Plugin\Hook\BeforeFileAnalysisInterface
Psalm\Plugin\Hook\AfterFileAnalysisInterface
Psalm\Plugin\Hook\AfterMethodCallAnalysisInterface
Psalm\Plugin\Hook\AfterClassLikeVisitInterface
Psalm\Plugin\Hook\StringInterpreterInterface
Psalm\Plugin\Hook\AfterExpressionAnalysisInterface
Psalm\Plugin\Hook\AfterEveryFunctionCallAnalysisInterface
Psalm\Plugin\Hook\PropertyExistenceProviderInterface
Psalm\Plugin\Hook\AfterFunctionLikeAnalysisInterface
Psalm\Plugin\Hook\FunctionParamsProviderInterface
Psalm\Plugin\Hook\FunctionReturnTypeProviderInterface
Psalm\Plugin\Hook\FunctionExistenceProviderInterface
Psalm\Plugin\Hook\AfterAnalysisInterface
Psalm\Plugin\Hook\MethodVisibilityProviderInterface
Psalm\Plugin\Hook\MethodParamsProviderInterface
Psalm\Plugin\Hook\AfterClassLikeExistenceCheckInterface
Psalm\Plugin\Hook\PropertyTypeProviderInterface
Psalm\Plugin\Hook\AfterFunctionCallAnalysisInterface
Psalm\Plugin\Hook\MethodExistenceProviderInterface
Psalm\Plugin\Hook\AfterCodebasePopulatedInterface
Psalm\Plugin\Hook\AfterClassLikeAnalysisInterface
Psalm\Plugin\Hook\PropertyVisibilityProviderInterface
Psalm\Plugin\Hook\AfterStatementAnalysisInterface
- [BC] Method
Psalm\Issue\CodeIssue::getLocation()
was removed - [BC] Method
Psalm\Issue\CodeIssue::getFileName()
was removed - [BC] Method
Psalm\Issue\CodeIssue::getMessage()
was removed - [BC] Method
Psalm\DocComment::parse()
was removed - [BC] Class
Psalm\Type\Atomic\THtmlEscapedString
has been removed - [BC] Property
Psalm\Context::$vars_from_global
has been renamed to$referenced_globals
- [BC] Self-registration of file type scanners and file type analyzers has been changed
Psalm\Plugin\RegistrationInterface::addFileTypeScanner
was removedPsalm\Plugin\RegistrationInterface::addFileTypeAnalyzer
was removed- ℹ️ migration possible using
Psalm\Plugin\FileExtensionsInterface
Psalm\PluginRegistrationSocket::addFileTypeScanner
was removedPsalm\PluginRegistrationSocket::getAdditionalFileTypeScanners
was removedPsalm\PluginRegistrationSocket::addFileTypeAnalyzer
was removedPsalm\PluginRegistrationSocket::getAdditionalFileTypeAnalyzers
was removedPsalm\PluginRegistrationSocket::getAdditionalFileExtensions
was removedPsalm\PluginRegistrationSocket::addFileExtension
was removed- ℹ️ migration possible using
Psalm\PluginFileExtensionsSocket
- [BC] Method
\Psalm\Plugin\EventHandler\Event\AfterFunctionLikeAnalysisEvent::getClasslikeStorage()
was removed, use correct\Psalm\Plugin\EventHandler\Event\AfterFunctionLikeAnalysisEvent::getFunctionlikeStorage()
instead