#!/usr/bin/env php  stubs/Php74.phpstubbd stubs/CoreGenericClasses.phpstub=bd=/w[٤stubs/Php82.phpstubbdjstubs/Php80.phpstub;bd;2"stubs/CoreGenericFunctions.phpstub bd )"stubs/CoreImmutableClasses.phpstubbdlȤstubs/SPL.phpstubdibddi/Gstubs/Reflection.phpstubx8bdx8stubs/phpparser.phpstub/bd/ifĤstubs/Php81.phpstub bd stubs/extensions/gmp.phpstubbdrU stubs/extensions/decimal.phpstub@bd@f."stubs/extensions/simplexml.phpstubbdؿ  stubs/extensions/ibm_db2.phpstubbd3^:stubs/extensions/xdebug.phpstubbdȤstubs/extensions/mysqli.phpstub]bd]3stubs/extensions/apcu.phpstubbdͤ stubs/extensions/mongodb.phpstubFbdF๐ߤstubs/extensions/random.phpstubG bdG Yf'stubs/extensions/pdo.phpstubKbdKSEstubs/extensions/ds.phpstub4cbd4cNQ٤stubs/extensions/soap.phpstub{+bd{+lNstubs/extensions/redis.phpstub Pbd Pdܤstubs/extensions/dom.phpstub]bd]ᨤstubs/extensions/ffi.phpstub$bd$GGstubs/extensions/geos.phpstubbdS"stubs/CoreGenericIterators.phpstubjbdj۸y#stubs/CoreGenericAttributes.phpstubbdpsalmbd(phar-versions.phpbd}Qsrc/Psalm/FileSource.phpbd=;src/Psalm/NodeTypeProvider.phpbdJsrc/Psalm/DocComment.php< bd< Psrc/Psalm/StatementsSource.phpbdlĤsrc/Psalm/FileManipulation.phpbduN| src/Psalm/CodeLocation.php-bd-src/Psalm/Context.phpgbdgN-src/Psalm/CodeLocation/ParseErrorLocation.phpbd\դ/src/Psalm/CodeLocation/DocblockTypeLocation.phpbdKsrc/Psalm/CodeLocation/Raw.phpbd4u$src/Psalm/Plugin/PluginInterface.php>bd>Ѓ ,src/Psalm/Plugin/DynamicTemplateProvider.phpbdJ8src/Psalm/Plugin/EventHandler/AfterAnalysisInterface.phpbdAX<src/Psalm/Plugin/EventHandler/AfterFileAnalysisInterface.php!bd!oBsrc/Psalm/Plugin/EventHandler/AfterMethodCallAnalysisInterface.phpbd<4src/Psalm/Plugin/EventHandler/AddTaintsInterface.php7bd7hBsrc/Psalm/Plugin/EventHandler/AfterExpressionAnalysisInterface.phpcbdc(uBsrc/Psalm/Plugin/EventHandler/MethodExistenceProviderInterface.phpbd'Asrc/Psalm/Plugin/EventHandler/AfterClassLikeAnalysisInterface.phpbdM7Dsrc/Psalm/Plugin/EventHandler/AfterFunctionLikeAnalysisInterface.phpfbdf4`Csrc/Psalm/Plugin/EventHandler/BeforeExpressionAnalysisInterface.php[bd['ua7src/Psalm/Plugin/EventHandler/RemoveTaintsInterface.php?bd?暤Gsrc/Psalm/Plugin/EventHandler/AfterClassLikeExistenceCheckInterface.phpbd<=Bsrc/Psalm/Plugin/EventHandler/BeforeStatementAnalysisInterface.php bd V&Isrc/Psalm/Plugin/EventHandler/DynamicFunctionStorageProviderInterface.phpbd7ߍEsrc/Psalm/Plugin/EventHandler/FunctionReturnTypeProviderInterface.phpbdsAsrc/Psalm/Plugin/EventHandler/AfterStatementAnalysisInterface.php]bd]&?src/Psalm/Plugin/EventHandler/MethodParamsProviderInterface.phpbdʫIsrc/Psalm/Plugin/EventHandler/AfterEveryFunctionCallAnalysisInterface.phpbd7t<src/Psalm/Plugin/EventHandler/StringInterpreterInterface.phpWbdWn2Dsrc/Psalm/Plugin/EventHandler/AfterFunctionCallAnalysisInterface.phpbd,Esrc/Psalm/Plugin/EventHandler/PropertyVisibilityProviderInterface.phpgbdg/=src/Psalm/Plugin/EventHandler/BeforeFileAnalysisInterface.php&bd& 5>src/Psalm/Plugin/EventHandler/AfterClassLikeVisitInterface.phpQbdQݷ?src/Psalm/Plugin/EventHandler/PropertyTypeProviderInterface.phpjbdjYި9src/Psalm/Plugin/EventHandler/BeforeAddIssueInterface.phpbd١EAsrc/Psalm/Plugin/EventHandler/AfterCodebasePopulatedInterface.phpbd+m7Csrc/Psalm/Plugin/EventHandler/MethodVisibilityProviderInterface.php_bd_Dsrc/Psalm/Plugin/EventHandler/PropertyExistenceProviderInterface.phpbd+ǤAsrc/Psalm/Plugin/EventHandler/FunctionParamsProviderInterface.phpbdUFsrc/Psalm/Plugin/EventHandler/Event/FunctionExistenceProviderEvent.phpbdCDsrc/Psalm/Plugin/EventHandler/Event/AfterExpressionAnalysisEvent.phpbd-C¤<src/Psalm/Plugin/EventHandler/Event/AddRemoveTaintsEvent.php:bd:PvCsrc/Psalm/Plugin/EventHandler/Event/AfterStatementAnalysisEvent.phpbdݙ1Esrc/Psalm/Plugin/EventHandler/Event/BeforeExpressionAnalysisEvent.phpbdfnKsrc/Psalm/Plugin/EventHandler/Event/DynamicFunctionStorageProviderEvent.phpgbdgh ݸGsrc/Psalm/Plugin/EventHandler/Event/PropertyVisibilityProviderEvent.phpbd3Gsrc/Psalm/Plugin/EventHandler/Event/FunctionReturnTypeProviderEvent.phpbd7}Fsrc/Psalm/Plugin/EventHandler/Event/PropertyExistenceProviderEvent.phpbdbA]Fsrc/Psalm/Plugin/EventHandler/Event/AfterFunctionCallAnalysisEvent.phpbdlsCsrc/Psalm/Plugin/EventHandler/Event/AfterClassLikeAnalysisEvent.php5bd5|ϤCsrc/Psalm/Plugin/EventHandler/Event/AfterCodebasePopulatedEvent.phpbd@$>src/Psalm/Plugin/EventHandler/Event/StringInterpreterEvent.phpdbddla@src/Psalm/Plugin/EventHandler/Event/AfterClassLikeVisitEvent.phpbd/Esrc/Psalm/Plugin/EventHandler/Event/MethodReturnTypeProviderEvent.php bd 㙃Esrc/Psalm/Plugin/EventHandler/Event/MethodVisibilityProviderEvent.php bd ֓Dsrc/Psalm/Plugin/EventHandler/Event/AfterMethodCallAnalysisEvent.php bd _(Asrc/Psalm/Plugin/EventHandler/Event/PropertyTypeProviderEvent.phpbdKbKsrc/Psalm/Plugin/EventHandler/Event/AfterEveryFunctionCallAnalysisEvent.phpbdE2:src/Psalm/Plugin/EventHandler/Event/AfterAnalysisEvent.php^bd^؂)Dsrc/Psalm/Plugin/EventHandler/Event/MethodExistenceProviderEvent.phpbd&Asrc/Psalm/Plugin/EventHandler/Event/MethodParamsProviderEvent.phpbd{&E>src/Psalm/Plugin/EventHandler/Event/AfterFileAnalysisEvent.phpbdR Csrc/Psalm/Plugin/EventHandler/Event/FunctionParamsProviderEvent.phpbd8O;src/Psalm/Plugin/EventHandler/Event/BeforeAddIssueEvent.phpbd AFsrc/Psalm/Plugin/EventHandler/Event/AfterFunctionLikeAnalysisEvent.php' bd' ѡX?src/Psalm/Plugin/EventHandler/Event/BeforeFileAnalysisEvent.phpbd焤Isrc/Psalm/Plugin/EventHandler/Event/AfterClassLikeExistenceCheckEvent.phpbd>ۤDsrc/Psalm/Plugin/EventHandler/Event/BeforeStatementAnalysisEvent.php&bd&)Dsrc/Psalm/Plugin/EventHandler/FunctionExistenceProviderInterface.phpbd^I*Csrc/Psalm/Plugin/EventHandler/MethodReturnTypeProviderInterface.phpbdف ,src/Psalm/Plugin/FileExtensionsInterface.php6bd6j+src/Psalm/Plugin/DynamicFunctionStorage.phpbd2src/Psalm/Plugin/Shepherd.php'bd'}5*src/Psalm/Plugin/RegistrationInterface.phpbd%դ#src/Psalm/Plugin/ArgTypeInferer.phpsbdsy2src/Psalm/Plugin/PluginFileExtensionsInterface.phpbd.src/Psalm/Plugin/PluginEntryPointInterface.phpbd&src/Psalm/PluginRegistrationSocket.php bd `Nsrc/Psalm/Report/TextReport.php6bd6Y'$src/Psalm/Report/SonarqubeReport.phpbdVˤ"src/Psalm/Report/CompactReport.php bd "src/Psalm/Report/ReportOptions.php\bd\bxsrc/Psalm/Report/XmlReport.phpbdFH&src/Psalm/Report/CodeClimateReport.phpZ bdZ + (src/Psalm/Report/GithubActionsReport.phpbd .src/Psalm/Report/ByIssueLevelAndTypeReport.phpbd;!src/Psalm/Report/PylintReport.php+bd+%/a src/Psalm/Report/CountReport.phpbdEŤ src/Psalm/Report/SarifReport.php% bd% _ src/Psalm/Report/JunitReport.phpbdىn#src/Psalm/Report/PhpStormReport.phpv bdv DK{src/Psalm/Report/JsonReport.phpbdmࢶ%src/Psalm/Report/CheckstyleReport.phpbdy"src/Psalm/Report/ConsoleReport.php'bd' ρ&&src/Psalm/Report/JsonSummaryReport.phpbdTۤ src/Psalm/Report/EmacsReport.phpSbdSQ$Y$src/Psalm/FileBasedPluginAdapter.phpbdx[%src/Psalm/Issue/DuplicateEnumCase.phpbd%*Ť)src/Psalm/Issue/AbstractInstantiation.phpbd%ɤ*src/Psalm/Issue/TypeDoesNotContainType.phpbdz`I#src/Psalm/Issue/DuplicateMethod.phpbdʤU)src/Psalm/Issue/RedundantFunctionCall.phpbd src/Psalm/Issue/UnusedClass.phpbd(src/Psalm/Issue/InvalidPropertyFetch.phpbdRFO5src/Psalm/Issue/PossiblyInvalidPropertyAssignment.phpbdZϙ%src/Psalm/Issue/NullPropertyFetch.php+bd+8src/Psalm/Issue/PossiblyFalsePropertyAssignmentValue.phpbdJ81src/Psalm/Issue/ExtensionRequirementViolation.phpbdI,src/Psalm/Issue/PossiblyNullFunctionCall.phpbd(src/Psalm/Issue/ImplicitToStringCast.phpbdnUv-src/Psalm/Issue/PossiblyUndefinedVariable.phpbd$-src/Psalm/Issue/InvalidPropertyAssignment.phpbd&f.&src/Psalm/Issue/MixedPropertyFetch.phpbdĤΤ src/Psalm/Issue/TaintedShell.phpbdQ2src/Psalm/Issue/InvalidInterfaceImplementation.phpbdx#)src/Psalm/Issue/PossiblyNullReference.phpbd22src/Psalm/Issue/PossiblyNullPropertyAssignment.php?bd?*+src/Psalm/Issue/UndefinedAttributeClass.phpbd5src/Psalm/Issue/ReferenceReusedFromConfusingScope.phpbdݪD#src/Psalm/Issue/MixedMethodCall.phpbd?Eͤ src/Psalm/Issue/InvalidScope.phpbdߏǤ$src/Psalm/Issue/ImpureMethodCall.phpbd"src/Psalm/Issue/UnusedProperty.phpbdU.src/Psalm/Issue/PossibleRawObjectIteration.phpbdM!*src/Psalm/Issue/LessSpecificReturnType.phpbdyp-src/Psalm/Issue/PossiblyUnusedReturnValue.phpbd$src/Psalm/Issue/NullFunctionCall.phpbdјu(src/Psalm/Issue/PropertyTypeCoercion.phpbdNi(src/Psalm/Issue/PossiblyUnusedMethod.phpbd&src/Psalm/Issue/DeprecatedConstant.phpbdp'+դ src/Psalm/Issue/UnusedMethod.phpbdcѳ,src/Psalm/Issue/UnnecessaryVarAnnotation.phpbd6zb],src/Psalm/Issue/OverriddenPropertyAccess.phpbdl *&src/Psalm/Issue/UndefinedInterface.phpbdo*src/Psalm/Issue/PossiblyUnusedProperty.phpbd+src/Psalm/Issue/PossiblyUndefinedMethod.phpbd(src/Psalm/Issue/ArgumentTypeCoercion.phpbdӖsrc/Psalm/Issue/NullOperand.phpbdEwVsrc/Psalm/Issue/TaintedEval.phpbd&sxP!src/Psalm/Issue/RedundantCast.phpbdb&src/Psalm/Issue/InaccessibleMethod.phpbd-_$src/Psalm/Issue/MissingParamType.phpbdj!src/Psalm/Issue/PropertyIssue.phpbd̨src/Psalm/Issue/TaintedLdap.phpbd:(src/Psalm/Issue/InvalidNamedArgument.phpbd)פ*src/Psalm/Issue/InterfaceInstantiation.phpbd^ᔤ/src/Psalm/Issue/ImpureByReferenceAssignment.phpbd|ҍ3src/Psalm/Issue/UndefinedThisPropertyAssignment.phpbd֤2src/Psalm/Issue/RedundantCastGivenDocblockType.phpbdYߤ$src/Psalm/Issue/InvalidAttribute.phpbdŻ&src/Psalm/Issue/UnusedFunctionCall.phpbdOԅ/src/Psalm/Issue/UndefinedMagicPropertyFetch.phpbd6K!src/Psalm/Issue/ForbiddenCode.phpbdy60src/Psalm/Issue/PossiblyUndefinedArrayOffset.phpbd1(src/Psalm/Issue/ImpureStaticVariable.phpbd2B7src/Psalm/Issue/PossiblyNullPropertyAssignmentValue.phpbd08src/Psalm/Issue/RedundantPropertyInitializationCheck.phpbd֕.src/Psalm/Issue/MissingImmutableAnnotation.phpbd/m%src/Psalm/Issue/InvalidEnumMethod.phpbdsxPsrc/Psalm/Issue/TaintedFile.phpbd¤src/Psalm/Issue/Trace.phpbd)+src/Psalm/Issue/PossiblyInvalidArgument.phpbdo#1src/Psalm/Issue/ImplementedReturnTypeMismatch.phpbd5*src/Psalm/Issue/TypeDoesNotContainNull.phpbd淽Ф/src/Psalm/Issue/PossiblyNullArrayAssignment.phpbdc"=src/Psalm/Issue/ClassIssue.phpbdnۤ#src/Psalm/Issue/TaintedCallable.phpbd\ˤ+src/Psalm/Issue/MixedPropertyAssignment.phpbdX(src/Psalm/Issue/UndefinedMagicMethod.phpbdڥ'src/Psalm/Issue/DeprecatedInterface.phpbdD!src/Psalm/Issue/ComplexMethod.phpbd0ZB)src/Psalm/Issue/UnrecognizedStatement.phpbd5w+src/Psalm/Issue/NamedArgumentNotAllowed.phpbd2G{%src/Psalm/Issue/DuplicateArrayKey.phpbd6!src/Psalm/Issue/NullReference.phpbdФ'src/Psalm/Issue/ImpurePropertyFetch.phpbdȤ'src/Psalm/Issue/TaintedSystemSecret.phpbd%src/Psalm/Issue/ParamNameMismatch.phpbdT%src/Psalm/Issue/DuplicateFunction.phpbdҴ8K'src/Psalm/Issue/InvalidFunctionCall.phpbdN$src/Psalm/Issue/NoEnumProperties.phpbd src/Psalm/Issue/NullArgument.phpbdMl%src/Psalm/Issue/MutableDependency.phpbd5mݤ.src/Psalm/Issue/UnsafeGenericInstantiation.phpbd&#src/Psalm/Issue/DeprecatedTrait.phpbdIݰ&src/Psalm/Issue/UnusedClosureParam.phpbdR 0/7src/Psalm/Issue/RedundantConditionGivenDocblockType.phpbdD<&src/Psalm/Issue/RawObjectIteration.phpbd4@b'src/Psalm/Issue/MissingPropertyType.phpbdsrc/Psalm/Issue/CheckType.phpbd>#C&src/Psalm/Issue/InvalidArrayAccess.phpbdͤ4src/Psalm/Issue/UndefinedMagicPropertyAssignment.phpbd޾פ*src/Psalm/Issue/InvalidEnumBackingType.phpbdor-src/Psalm/Issue/PossiblyInvalidMethodCall.phpbd-u 3src/Psalm/Issue/PossiblyUndefinedGlobalVariable.phpbdߤ%src/Psalm/Issue/UndefinedConstant.phpbdȊФ-src/Psalm/Issue/UnsupportedReferenceUsage.phpbdy6#src/Psalm/Issue/DeprecatedClass.phpbdHn%src/Psalm/Issue/InvalidTypeImport.phpbdR*src/Psalm/Issue/UndefinedDocblockClass.phpbd(&src/Psalm/Issue/DeprecatedProperty.phpbdh z#src/Psalm/Issue/TooFewArguments.phpbdiH8.src/Psalm/Issue/UncaughtThrowInGlobalScope.phpbd/src/Psalm/Issue/PropertyNotSetInConstructor.phpbd 0(src/Psalm/Issue/MixedArrayAssignment.phpbd4&src/Psalm/Issue/UnusedForeachValue.phpbdp(src/Psalm/Issue/MixedReturnStatement.phpbd0src/Psalm/Issue/ImplementedParamTypeMismatch.phpbde/src/Psalm/Issue/OverriddenInterfaceConstant.phpbdQ'src/Psalm/Issue/UnusedBaselineEntry.phpbd ) src/Psalm/Issue/InvalidClass.phpbde!src/Psalm/Issue/VariableIssue.phpbd"vG)src/Psalm/Issue/TooManyTemplateParams.phpbd^/src/Psalm/Issue/MixedStringOffsetAssignment.phpbd>*src/Psalm/Issue/UndefinedPropertyFetch.phpbdMn5src/Psalm/Issue/MethodSignatureMustOmitReturnType.phpbdi1src/Psalm/Issue/LessSpecificClassConstantType.phpbdf$src/Psalm/Issue/DeprecatedMethod.phpbd*src/Psalm/Issue/InvalidArrayAssignment.phpbdj! src/Psalm/Issue/InvalidThrow.phpbd23src/Psalm/Issue/ParseError.phpbd#src/Psalm/Issue/UndefinedMethod.phpbd%Ӥ+src/Psalm/Issue/MethodSignatureMismatch.phpbdūM0src/Psalm/Issue/MismatchingDocblockParamType.phpbd'src/Psalm/Issue/PossiblyInvalidCast.phpbdl:2src/Psalm/Issue/PossiblyInvalidArrayAssignment.phpbd /src/Psalm/Issue/UnimplementedAbstractMethod.phpbd 'src/Psalm/Issue/InvalidParamDefault.phpbd q:)src/Psalm/Issue/PossiblyFalseIterator.phpbdfG!src/Psalm/Issue/InvalidGlobal.phpbdY@.,src/Psalm/Issue/MissingClosureReturnType.phpbdKI2src/Psalm/Issue/ConflictingReferenceConstraint.phpbdtN"src/Psalm/Issue/UndefinedClass.phpbdsrc/Psalm/Issue/MethodIssue.phpbdLup src/Psalm/Issue/InvalidClone.phpbd?0src/Psalm/Issue/UnimplementedInterfaceMethod.phpbd2-src/Psalm/Issue/MixedPropertyTypeCoercion.phpbdp/=̤.src/Psalm/Issue/ConstantDeclarationInTrait.phpbd7l src/Psalm/Issue/TaintedInput.phpbd *src/Psalm/Issue/OverriddenMethodAccess.phpbdˡ"src/Psalm/Issue/TaintedInclude.phpbd`3src/Psalm/Issue/PossiblyUndefinedIntArrayOffset.phpbdIMΤ$src/Psalm/Issue/InternalProperty.phpbd`w(src/Psalm/Issue/ParadoxicalCondition.phpbd (src/Psalm/Issue/PossiblyFalseOperand.phpbdΤ(src/Psalm/Issue/PossiblyNullIterator.phpbd*src/Psalm/Issue/MixedArrayTypeCoercion.phpbdљ&!src/Psalm/Issue/MixedArgument.phpbdx +src/Psalm/Issue/UndefinedGlobalVariable.phpbdGW턤8src/Psalm/Issue/MethodSignatureMustProvideReturnType.phpbd11썤&src/Psalm/Issue/AbstractMethodCall.phpbdd/src/Psalm/Issue/LessSpecificReturnStatement.phpbd^s"src/Psalm/Issue/InvalidOperand.phpbdgū$src/Psalm/Issue/IfThisIsMismatch.phpbdaŔ-src/Psalm/Issue/InvalidFalsableReturnType.phpbd1D(src/Psalm/Issue/PossiblyNullArgument.phpbd4>csrc/Psalm/Issue/PluginIssue.php]bd]䕿H$src/Psalm/Issue/AssignmentToVoid.phpbdvx(%src/Psalm/Issue/CircularReference.phpbdYj'src/Psalm/Issue/MissingDocblockType.phpbdL.0src/Psalm/Issue/AmbiguousConstantInheritance.phpbdK)src/Psalm/Issue/InvalidScalarArgument.phpbd@A9*src/Psalm/Issue/InvalidPassByReference.phpbdsrc/Psalm/Issue/RiskyCast.phpbdW˖&src/Psalm/Issue/DeprecatedFunction.phpbd_Ĥ2src/Psalm/Issue/InvalidConstantAssignmentValue.phpbd Zsrc/Psalm/Issue/MixedIssue.phpbd!Ϥ#src/Psalm/Issue/NullArrayAccess.php)bd)bNw$src/Psalm/Issue/EmptyArrayAccess.phpbdRXR+src/Psalm/Issue/NullableReturnStatement.phpbd )0src/Psalm/Issue/ConstructorSignatureMismatch.phpbdyg֤%src/Psalm/Issue/TaintedUserSecret.phpbdn1src/Psalm/Issue/MismatchingDocblockReturnType.phpbdOy*src/Psalm/Issue/NullPropertyAssignment.php0bd06%src/Psalm/Issue/DuplicateConstant.phpbd$\+src/Psalm/Issue/PossiblyInvalidIterator.phpbd|;B)src/Psalm/Issue/UninitializedProperty.phpbd[J41%src/Psalm/Issue/MixedFunctionCall.phpbdӭ$src/Psalm/Issue/MixedArrayAccess.phpbd\OѤ)src/Psalm/Issue/NoInterfaceProperties.phpbdX7f#src/Psalm/Issue/InvalidDocblock.phpbdQ}J%src/Psalm/Issue/UndefinedFunction.phpbdN:src/Psalm/Issue/RedundantFunctionCallGivenDocblockType.phpbdR5src/Psalm/Issue/LessSpecificImplementedReturnType.phpbd!3-src/Psalm/Issue/MixedArgumentTypeCoercion.phpbd%src/Psalm/Issue/InvalidReturnType.phpbd(*src/Psalm/Issue/InvalidLiteralArgument.phpbdT*src/Psalm/Issue/PossiblyFalseReference.phpbdWϤ&src/Psalm/Issue/ImpureFunctionCall.phpbde?e.src/Psalm/Issue/UndefinedThisPropertyFetch.phpbdD)src/Psalm/Issue/TaintedTextWithQuotes.phpbdpLX90src/Psalm/Issue/ReferenceConstraintViolation.phpbd#src/Psalm/Issue/NullArrayOffset.phpbd6src/Psalm/Issue/InvalidCast.phpbdye!src/Psalm/Issue/TaintedHeader.phpbd[ݤ"src/Psalm/Issue/UndefinedTrace.phpbd$.src/Psalm/Issue/PossiblyInvalidDocblockTag.phpbdT-,src/Psalm/Issue/NonInvariantPropertyType.phpbdc &src/Psalm/Issue/TaintedUnserialize.phpbd>ͤ%src/Psalm/Issue/MissingDependency.phpbdӬ-src/Psalm/Issue/DocblockTypeContradiction.phpbd21%src/Psalm/Issue/UnusedReturnValue.phpbdYsrc/Psalm/Issue/CodeIssue.php' bd' j"src/Psalm/Issue/UnusedVariable.phpbd& src/Psalm/Issue/InvalidCatch.phpbdUYje!src/Psalm/Issue/TaintedCookie.phpbd5Rsrc/Psalm/Issue/TaintedSql.php~bd~=(src/Psalm/Issue/InvalidEnumCaseValue.phpbdܤ:src/Psalm/Issue/PossiblyInvalidPropertyAssignmentValue.phpbdT+src/Psalm/Issue/PossiblyNullArrayAccess.php8bd8*'M src/Psalm/Issue/NullIterator.phpbdQyhsrc/Psalm/Issue/TaintedSSRF.phpbdj_$src/Psalm/Issue/UnusedMethodCall.phpbdr"src/Psalm/Issue/DuplicateClass.phpbd77*&src/Psalm/Issue/InvalidArrayOffset.phpbdPZ3src/Psalm/Issue/MismatchingDocblockPropertyType.phpbdg4(src/Psalm/Issue/InaccessibleProperty.phpbd@ src/Psalm/Issue/FalseOperand.phpbd%src/Psalm/Issue/UnusedConstructor.phpbdي#src/Psalm/Issue/UnevaluatedCode.phpbd"+src/Psalm/Issue/InvalidStaticInvocation.phpbd"src/Psalm/Issue/ParentNotFound.phpbdޤ&src/Psalm/Issue/PsalmInternalError.phpbda3src/Psalm/Issue/MissingFile.php|bd|,src/Psalm/Issue/MixedClone.phpbd֤(src/Psalm/Issue/MissingTemplateParam.phpbd9=௤)src/Psalm/Issue/DirectConstructorCall.phpbdQ_)src/Psalm/Issue/PossiblyFalseArgument.phpbd]+src/Psalm/Issue/PossiblyNullArrayOffset.phpbdxmsrc/Psalm/Issue/ConfigIssue.phpbdµ 'src/Psalm/Issue/UnsafeInstantiation.phpbdw&*src/Psalm/Issue/InvalidReturnStatement.phpbdqaT'src/Psalm/Issue/UnresolvableInclude.phpbd $k-src/Psalm/Issue/InvalidNullableReturnType.phpbdDH0src/Psalm/Issue/TraitMethodSignatureMismatch.phpbd7¤-src/Psalm/Issue/RedundantIdentityWithTrue.phpbdy*src/Psalm/Issue/UnrecognizedExpression.phpbd0 .src/Psalm/Issue/PossiblyInvalidArrayOffset.phpbduۤ src/Psalm/Issue/MixedOperand.phpbd|\$src/Psalm/Issue/TooManyArguments.phpbdU0'src/Psalm/Issue/PossiblyNullOperand.phpbd R[/src/Psalm/Issue/PossiblyInvalidFunctionCall.phpbdң`&src/Psalm/Issue/ClassConstantIssue.php}bd}`0ڤ(src/Psalm/Issue/ImpureStaticProperty.phpbd0i&src/Psalm/Issue/InvalidExtendClass.phpbda Ȥ+src/Psalm/Issue/MixedReturnTypeCoercion.phpbdc++src/Psalm/Issue/MissingClosureParamType.phpbdR(src/Psalm/Issue/InvalidTemplateParam.phpbd!a&src/Psalm/Issue/InheritorViolation.phpbd'5L?"src/Psalm/Issue/UndefinedTrait.phpbdϤ%src/Psalm/Issue/NonStaticSelfCall.phpbdR#src/Psalm/Issue/MixedIssueTrait.phpbdq!src/Psalm/Issue/FunctionIssue.phpbdCN6src/Psalm/Issue/PossiblyUndefinedStringArrayOffset.phpbdu!src/Psalm/Issue/InternalClass.phpbdW src/Psalm/Issue/ReservedWord.phpbd=F+src/Psalm/Issue/OverriddenFinalConstant.phpbdw7#src/Psalm/Issue/InvalidToString.phpbd 4src/Psalm/Issue/InvalidTraversableImplementation.phpbdsrc/Psalm/Issue/NoValue.phpbd`w6src/Psalm/Issue/ImplementationRequirementViolation.phpbd-Ϥ,src/Psalm/Issue/InvalidClassConstantType.phpbd4N'src/Psalm/Issue/PossiblyUnusedParam.phpbdH*src/Psalm/Issue/DuplicateEnumCaseValue.phpbde)src/Psalm/Issue/MissingThrowsDocblock.phpbdHjQ!src/Psalm/Issue/TaintedCustom.phpbdiT*src/Psalm/Issue/PossiblyInvalidOperand.phpbdȤ4src/Psalm/Issue/MoreSpecificImplementedParamType.phpbd¤#src/Psalm/Issue/ComplexFunction.phpbdE+src/Psalm/Issue/UnhandledMatchCondition.phpbdCah4src/Psalm/Issue/NonInvariantDocblockPropertyType.phpbd2 ¤+src/Psalm/Issue/FalsableReturnStatement.phpbd+src/Psalm/Issue/MixedInferredReturnType.phpbd)b'src/Psalm/Issue/UnusedDocblockParam.phpbdF%src/Psalm/Issue/UndefinedVariable.phpbdG6-src/Psalm/Issue/InaccessibleClassConstant.phpbd,src/Psalm/Issue/ImpurePropertyAssignment.phpbdh)&src/Psalm/Issue/PrivateFinalMethod.phpbdm'src/Psalm/Issue/UnusedPsalmSuppress.phpbdġ),src/Psalm/Issue/UndefinedInterfaceMethod.phpbdhL"src/Psalm/Issue/DuplicateParam.phpbdM#src/Psalm/Issue/InvalidArgument.phpbddYԪ.src/Psalm/Issue/PossiblyInvalidArrayAccess.phpbdQr<src/Psalm/Issue/TaintedHtml.phpbd$!src/Psalm/Issue/ArgumentIssue.phpbd,,src/Psalm/Issue/InvalidDocblockParamName.phpbdZ-src/Psalm/Issue/PossiblyNullPropertyFetch.php:bd:o&src/Psalm/Issue/InvalidStringClass.phpbd5J%src/Psalm/Issue/MissingReturnType.phpbd׊"src/Psalm/Issue/InternalMethod.phpbd!1$src/Psalm/Issue/LoopInvalidation.phpbd2&src/Psalm/Issue/RedundantCondition.phpbdX|Ϥ(src/Psalm/Issue/UnresolvableConstant.phpbdЯt(src/Psalm/Issue/PossiblyInvalidClone.phpbdjŐ*src/Psalm/Issue/MoreSpecificReturnType.phpbdsrc/Psalm/Issue/UnusedParam.phpbd/i&src/Psalm/Issue/MissingConstructor.phpbdQ5src/Psalm/Issue/UnsupportedPropertyReferenceUsage.phpbdxN!ڤ$src/Psalm/Issue/MixedArrayOffset.phpbdI/src/Psalm/Issue/UndefinedPropertyAssignment.phpbd+M7'src/Psalm/Issue/ContinueOutsideLoop.phpbd KA2src/Psalm/Issue/InvalidPropertyAssignmentValue.phpbdm!src/Psalm/Issue/InvalidParent.phpbd7#src/Psalm/Issue/InvalidIterator.phpbd.Q#src/Psalm/Issue/StringIncrement.phpbdkq0src/Psalm/Issue/PossiblyInvalidPropertyFetch.phpbdY9k"src/Psalm/Issue/ImpureVariable.phpbdk %src/Psalm/Issue/InvalidMethodCall.phpbdHE#src/Psalm/Issue/MixedAssignment.phpbd¿src/Psalm/Config.phpFbdFf|src/Psalm/IssueBuffer.php|bd|E؋(src/Psalm/PluginFileExtensionsSocket.php bd _src/Psalm/Codebase.phpbd}W&src/Psalm/Progress/DefaultProgress.phpbd mmsrc/Psalm/Progress/Progress.phpUbdUV$src/Psalm/Progress/DebugProgress.phpbdrF E#src/Psalm/Progress/VoidProgress.phpbd_#src/Psalm/Progress/LongProgress.php" bd" q'src/Psalm/SourceControl/Git/GitInfo.phpbduYl*src/Psalm/SourceControl/Git/CommitInfo.php bd `/*src/Psalm/SourceControl/Git/RemoteInfo.phpbd[EФ-src/Psalm/SourceControl/SourceControlInfo.php|bd|Tsrc/Psalm/Type.phpobdo%src/Psalm/Type/MutableTypeVisitor.phpbdOsrc/Psalm/Type/TypeNode.phpbdY Rsrc/Psalm/Type/Reconciler.phpbd)src/Psalm/Type/TypeVisitor.phpbdʡbsrc/Psalm/Type/Atomic.phpdbdd u,src/Psalm/Type/Atomic/TDependentGetClass.phpbd/l src/Psalm/Type/Atomic/Scalar.phpbdJч%src/Psalm/Type/Atomic/TKeyedArray.phpPbdP걏&src/Psalm/Type/Atomic/TClassString.phpbḓ˺0src/Psalm/Type/Atomic/TTemplateIndexedAccess.phpbd*%src/Psalm/Type/Atomic/TLiteralInt.phpUbdUG"#src/Psalm/Type/Atomic/TResource.phpbdaf(src/Psalm/Type/Atomic/TNumericString.phpbd;m-src/Psalm/Type/Atomic/TTemplateParamClass.phpbdL|)src/Psalm/Type/Atomic/TClosedResource.phpbdyoJ(src/Psalm/Type/Atomic/TTemplateKeyOf.phpbd) src/Psalm/Type/Atomic/TArray.php>bd>"@ src/Psalm/Type/Atomic/TFloat.phpCbdCj62src/Psalm/Type/Atomic/TNonEmptyLowercaseString.phpmbdm(VMa&src/Psalm/Type/Atomic/GenericTrait.phpbdV3src/Psalm/Type/Atomic/TNonspecificLiteralString.phpbdes,)src/Psalm/Type/Atomic/TCallableObject.phpbd 2'src/Psalm/Type/Atomic/DependentType.php.bd.RI0src/Psalm/Type/Atomic/TDependentGetDebugType.phpbd|X+src/Psalm/Type/Atomic/TDependentListKey.phpbdNyX#src/Psalm/Type/Atomic/TEnumCase.php bd m,$src/Psalm/Type/Atomic/TIntMaskOf.phpbd'*src/Psalm/Type/Atomic/TTemplateValueOf.phpbdCQĤ+src/Psalm/Type/Atomic/TDependentGetType.phpbdITsrc/Psalm/Type/Atomic/TBool.php>bd>$'src/Psalm/Type/Atomic/TLiteralFloat.phpbdI1src/Psalm/Type/Atomic/TAnonymousClassInstance.phpbd1Z(src/Psalm/Type/Atomic/TLiteralString.phpB bdB >i%src/Psalm/Type/Atomic/TEmptyMixed.phpbdFv"src/Psalm/Type/Atomic/TClosure.php bd -src/Psalm/Type/Atomic/TUnknownClassString.phpbdE_(src/Psalm/Type/Atomic/TClassConstant.phpybdyqݤ&src/Psalm/Type/Atomic/TTraitString.phpbdT!src/Psalm/Type/Atomic/TString.phpGbdG-7(src/Psalm/Type/Atomic/TNonEmptyArray.phpbdd)src/Psalm/Type/Atomic/TNonFalsyString.phpbd;)src/Psalm/Type/Atomic/TNonEmptyScalar.php8bd8ge&src/Psalm/Type/Atomic/TConditional.phpbd 0Ǥ(src/Psalm/Type/Atomic/TTemplateParam.phpbdN7'src/Psalm/Type/Atomic/TEmptyNumeric.phpqbdqO̙6 src/Psalm/Type/Atomic/TFalse.phpbdm src/Psalm/Type/Atomic/TInt.php;bd;[[%.src/Psalm/Type/Atomic/HasIntersectionTrait.phpLbdLê&src/Psalm/Type/Atomic/TEmptyScalar.php-bd-a-̤src/Psalm/Type/Atomic/TVoid.phpbdXx'src/Psalm/Type/Atomic/TCallableList.phpbdR(src/Psalm/Type/Atomic/TNonEmptyMixed.phpbd*src/Psalm/Type/Atomic/TLowercaseString.phpxbdx٤#src/Psalm/Type/Atomic/TIterable.phpbd1&src/Psalm/Type/Atomic/TNamedObject.phpbd #src/Psalm/Type/Atomic/TArrayKey.phpbd"-src/Psalm/Type/Atomic/TCallableKeyedArray.php.bd.rQB(src/Psalm/Type/Atomic/TGenericObject.phpbdb•#src/Psalm/Type/Atomic/TIntRange.phpbd`!src/Psalm/Type/Atomic/TObject.phpbdiY̤)src/Psalm/Type/Atomic/TNonEmptyString.phpbd6-src/Psalm/Type/Atomic/TLiteralClassString.php bd :'src/Psalm/Type/Atomic/CallableTrait.phpr$bdr$\)src/Psalm/Type/Atomic/TClassStringMap.php bd /"src/Psalm/Type/Atomic/TNumeric.phpbdsrc/Psalm/Type/Atomic/TList.php/bd/ܞ!src/Psalm/Type/Atomic/TScalar.php8bd8MԤ/src/Psalm/Type/Atomic/TTemplatePropertiesOf.php bd 4o/src/Psalm/Type/Atomic/TObjectWithProperties.phpbd3 (src/Psalm/Type/Atomic/TCallableArray.phpbdcmפ src/Psalm/Type/Atomic/TNever.phpbdĤ;src/Psalm/Type/Atomic/TNonEmptyNonspecificLiteralString.phpbd78src/Psalm/Type/Atomic/TNull.phpnbdn\ !|'src/Psalm/Type/Atomic/TSingleLetter.phpbdDg#src/Psalm/Type/Atomic/TCallable.phps bds n)src/Psalm/Type/Atomic/TCallableString.phpbd'src/Psalm/Type/Atomic/TNonEmptyList.phpjbdj3V"src/Psalm/Type/Atomic/TValueOf.phpbd5 "src/Psalm/Type/Atomic/TIntMask.phpbdOzYT0src/Psalm/Type/Atomic/TNonspecificLiteralInt.phpCbdCil src/Psalm/Type/Atomic/TKeyOf.php9 bd9 z, src/Psalm/Type/Atomic/TMixed.phpFbdF-K'src/Psalm/Type/Atomic/TPropertiesOf.php bd aXsrc/Psalm/Type/Atomic/TTrue.phpbd݆$src/Psalm/Type/Atomic/TTypeAlias.php bd @Ɂsrc/Psalm/Type/UnionTrait.phpbdok!src/Psalm/Type/TaintKindGroup.phpbdsrc/Psalm/Type/Union.phpj$bdj$pJsrc/Psalm/Type/MutableUnion.php8bd84src/Psalm/Type/TaintKind.phpbd\wk#src/Psalm/Internal/ErrorHandler.phpA bdA ßNu*src/Psalm/Internal/ReferenceConstraint.phpbdz6ɤsrc/Psalm/Internal/Clause.phpbdA'src/Psalm/Internal/IncludeCollector.phpbd2src/Psalm/Internal/Fork/ForkProcessDoneMessage.phpbd='src/Psalm/Internal/Fork/ForkMessage.phpAbdA*src/Psalm/Internal/Fork/PsalmRestarter.phpbdFʤ3src/Psalm/Internal/Fork/ForkProcessErrorMessage.phplbdlS* src/Psalm/Internal/Fork/Pool.phpBbdB"9./src/Psalm/Internal/Fork/ForkTaskDoneMessage.phpbd8%8src/Psalm/Internal/Provider/FileStorageCacheProvider.phpbd>J4src/Psalm/Internal/Provider/PropertyTypeProvider.phpbdx8src/Psalm/Internal/Provider/MethodVisibilityProvider.phpWbdW:src/Psalm/Internal/Provider/PropertyVisibilityProvider.phpbd@w:src/Psalm/Internal/Provider/FunctionReturnTypeProvider.phpbd46src/Psalm/Internal/Provider/FunctionParamsProvider.phpKbdKU2src/Psalm/Internal/Provider/StatementsProvider.phpC8bdC8;f:src/Psalm/Internal/Provider/FileReferenceCacheProvider.php.bd. )src/Psalm/Internal/Provider/Providers.php bd J>src/Psalm/Internal/Provider/DynamicFunctionStorageProvider.php bd 뛚Ť8src/Psalm/Internal/Provider/ClassLikeStorageProvider.php"bd"A[פIsrc/Psalm/Internal/Provider/ReturnTypeProvider/DateReturnTypeProvider.phpbd.Osrc/Psalm/Internal/Provider/ReturnTypeProvider/StrReplaceReturnTypeProvider.phpbdc7Nsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayRandReturnTypeProvider.phpzbdzhU \Lsrc/Psalm/Internal/Provider/ReturnTypeProvider/DirnameReturnTypeProvider.php+ bd+ XKbMsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayPopReturnTypeProvider.php bd cw>Ksrc/Psalm/Internal/Provider/ReturnTypeProvider/MktimeReturnTypeProvider.phpBbdBZOPsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArraySpliceReturnTypeProvider.phpbdH Ssrc/Psalm/Internal/Provider/ReturnTypeProvider/FirstArgStringReturnTypeProvider.phpbdBJsrc/Psalm/Internal/Provider/ReturnTypeProvider/StrTrReturnTypeProvider.phpbdTҤQsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayReverseReturnTypeProvider.php2 bd2 D Osrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayMergeReturnTypeProvider.php'bd'{Isrc/Psalm/Internal/Provider/ReturnTypeProvider/RandReturnTypeProvider.php<bd<FKsrc/Psalm/Internal/Provider/ReturnTypeProvider/HexdecReturnTypeProvider.phpRbdRȤ[src/Psalm/Internal/Provider/ReturnTypeProvider/ArrayPointerAdjustmentReturnTypeProvider.phpbdXJQsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayCombineReturnTypeProvider.php_bd_kz#ؤPsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayColumnReturnTypeProvider.php%bd%\~Tsrc/Psalm/Internal/Provider/ReturnTypeProvider/IteratorToArrayReturnTypeProvider.phpbdKsrc/Psalm/Internal/Provider/ReturnTypeProvider/MinMaxReturnTypeProvider.phpobdoŤELsrc/Psalm/Internal/Provider/ReturnTypeProvider/SprintfReturnTypeProvider.php24bd24oL>Msrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayMapReturnTypeProvider.phpBbdBj=Rsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayFillKeysReturnTypeProvider.php8 bd8 +]Tsrc/Psalm/Internal/Provider/ReturnTypeProvider/GetClassMethodsReturnTypeProvider.phpzbdz9Nsrc/Psalm/Internal/Provider/ReturnTypeProvider/FilterVarReturnTypeProvider.phpibdiBIXsrc/Psalm/Internal/Provider/ReturnTypeProvider/ClosureFromCallableReturnTypeProvider.phpbd'BVsrc/Psalm/Internal/Provider/ReturnTypeProvider/ImagickPixelColorReturnTypeProvider.php bd {FOsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArraySliceReturnTypeProvider.php bd 'Lsrc/Psalm/Internal/Provider/ReturnTypeProvider/InArrayReturnTypeProvider.php_ bd_ vQsrc/Psalm/Internal/Provider/ReturnTypeProvider/TriggerErrorReturnTypeProvider.php bd P$Ksrc/Psalm/Internal/Provider/ReturnTypeProvider/PdoStatementSetFetchMode.php3 bd3 KְNsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayFillReturnTypeProvider.phpbd`gNOsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayChunkReturnTypeProvider.phpbdt2Rsrc/Psalm/Internal/Provider/ReturnTypeProvider/GetObjectVarsReturnTypeProvider.phpbdY Wsrc/Psalm/Internal/Provider/ReturnTypeProvider/MbInternalEncodingReturnTypeProvider.php4 bd4 ? _Ssrc/Psalm/Internal/Provider/ReturnTypeProvider/VersionCompareReturnTypeProvider.php bd NuQsrc/Psalm/Internal/Provider/ReturnTypeProvider/PdoStatementReturnTypeProvider.phpbdHsrc/Psalm/Internal/Provider/ReturnTypeProvider/PowReturnTypeProvider.php bd zϲPsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayReduceReturnTypeProvider.php$bd$~wMsrc/Psalm/Internal/Provider/ReturnTypeProvider/BasenameReturnTypeProvider.phpbdxZcPsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayFilterReturnTypeProvider.php%bd%.ĤSsrc/Psalm/Internal/Provider/ReturnTypeProvider/DateTimeModifyReturnTypeProvider.phpUbdUYYEsrc/Psalm/Internal/Provider/ReturnTypeProvider/DomNodeAppendChild.phpabda4xMsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayPadReturnTypeProvider.phpbd~9hVMsrc/Psalm/Internal/Provider/ReturnTypeProvider/ParseUrlReturnTypeProvider.php"bd"syhuJsrc/Psalm/Internal/Provider/ReturnTypeProvider/RoundReturnTypeProvider.php7 bd7 p=src/Psalm/Internal/Provider/ClassLikeStorageCacheProvider.phpVbdV PCsrc/Psalm/Internal/Provider/AddRemoveTaints/HtmlFunctionTainter.php bd SZ4src/Psalm/Internal/Provider/MethodParamsProvider.php bd ?_3src/Psalm/Internal/Provider/FileStorageProvider.php bd &,src/Psalm/Internal/Provider/FileProvider.phpbd:s^4src/Psalm/Internal/Provider/ProjectCacheProvider.phpIbdIjӤ0src/Psalm/Internal/Provider/FakeFileProvider.phpS bdS a+7src/Psalm/Internal/Provider/MethodExistenceProvider.phpjbdj,3src/Psalm/Internal/Provider/ParserCacheProvider.php+bd+U]5src/Psalm/Internal/Provider/FileReferenceProvider.phpbdu9src/Psalm/Internal/Provider/FunctionExistenceProvider.phpbbdbE0src/Psalm/Internal/Provider/NodeDataProvider.phpbdy7Tsrc/Psalm/Internal/Provider/PropertyTypeProvider/DomDocumentPropertyTypeProvider.phpbdAxפ8src/Psalm/Internal/Provider/MethodReturnTypeProvider.php bd MT9src/Psalm/Internal/Provider/PropertyExistenceProvider.phpbd 3src/Psalm/Internal/PhpTraverser/CustomTraverser.phpbdHeݤsrc/Psalm/Internal/CliUtils.php\?bd\?+~/src/Psalm/Internal/PluginManager/ConfigFile.phprbdrB8src/Psalm/Internal/PluginManager/Command/ShowCommand.php bd ;src/Psalm/Internal/PluginManager/Command/DisableCommand.php bd ɤ:src/Psalm/Internal/PluginManager/Command/EnableCommand.php bd qפ1src/Psalm/Internal/PluginManager/ComposerLock.php bd r/src/Psalm/Internal/PluginManager/PluginList.php bd I6src/Psalm/Internal/PluginManager/PluginListFactory.php bd 'src/Psalm/Internal/MethodIdentifier.phpHbdHqH src/Psalm/Internal/Json/Json.phpbdx=/src/Psalm/Internal/Algebra/FormulaGenerator.phps0bds0)5src/Psalm/Internal/Stubs/Generator/StubsGenerator.php3.bd3.c=src/Psalm/Internal/Stubs/Generator/ClassLikeStubGenerator.phpP"bdP"ծ[#src/Psalm/Internal/Cli/Refactor.php''bd'' src/Psalm/Internal/Cli/Psalm.php!bd!ޡ#"src/Psalm/Internal/Cli/Psalter.phpHbdHW!)src/Psalm/Internal/Cli/LanguageServer.php7bd7ȟ!src/Psalm/Internal/Cli/Plugin.php"bd"HNsrc/Psalm/Internal/Cache.php bd &src/Psalm/Internal/EventDispatcher.php>:bd>:8,src/Psalm/Internal/DataFlow/DataFlowNode.phpX bdX ]H)src/Psalm/Internal/DataFlow/TaintSink.phpbd˜+src/Psalm/Internal/DataFlow/TaintSource.phpbdWǽ$src/Psalm/Internal/DataFlow/Path.phpbdȤ-src/Psalm/Internal/Scanner/DocblockParser.php(bd(䓏6src/Psalm/Internal/Scanner/FunctionDocblockComment.phpbd7src/Psalm/Internal/Scanner/ClassLikeDocblockComment.phpbd A]-src/Psalm/Internal/Scanner/ParsedDocblock.php bd ~26:src/Psalm/Internal/Scanner/UnresolvedConstantComponent.phpbdC2src/Psalm/Internal/Scanner/PhpStormMetaScanner.phpF8bdF8*src/Psalm/Internal/Scanner/FileScanner.php bd 3Fsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedBitwiseXor.phpbdra2Csrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedTernary.phpbd5@src/Psalm/Internal/Scanner/UnresolvedConstant/EnumValueFetch.phpbd\}Bsrc/Psalm/Internal/Scanner/UnresolvedConstant/ArrayOffsetFetch.phpbd_Dsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedBinaryOp.phpFbdFՖä=src/Psalm/Internal/Scanner/UnresolvedConstant/ArraySpread.phpvbdvY=src/Psalm/Internal/Scanner/UnresolvedConstant/ScalarValue.phpbd\=Dsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedConcatOp.phpbdCsrc/Psalm/Internal/Scanner/UnresolvedConstant/EnumPropertyFetch.phpbdAmcFsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedDivisionOp.phpbdRB"Isrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedSubtractionOp.php bd p?Esrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedBitwiseOr.phpbdU츤Fsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedAdditionOp.phpbd܃Lsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedMultiplicationOp.php#bd#?src/Psalm/Internal/Scanner/UnresolvedConstant/EnumNameFetch.phpbdfo<src/Psalm/Internal/Scanner/UnresolvedConstant/ArrayValue.phpbdi>src/Psalm/Internal/Scanner/UnresolvedConstant/KeyValuePair.phpbd&0?src/Psalm/Internal/Scanner/UnresolvedConstant/ClassConstant.phpbdnjaFsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedBitwiseAnd.phpbdB:src/Psalm/Internal/Scanner/UnresolvedConstant/Constant.phpbdqM 1src/Psalm/Internal/Scanner/VarDocblockComment.php=bd=i<src/Psalm/Internal/ExecutionEnvironment/GitInfoCollector.php bd f>src/Psalm/Internal/ExecutionEnvironment/BuildInfoCollector.phpz)bdz)-`+Asrc/Psalm/Internal/ExecutionEnvironment/SystemCommandExecutor.phpbdƤۤ5src/Psalm/Internal/TypeVisitor/FromDocblockSetter.phpbd貀.src/Psalm/Internal/TypeVisitor/TypeScanner.php bd j X>src/Psalm/Internal/TypeVisitor/CanContainObjectTypeVisitor.phpbdi,0src/Psalm/Internal/TypeVisitor/TypeLocalizer.php# bd# ݐ.src/Psalm/Internal/TypeVisitor/TypeChecker.phpG+bdG+-P9src/Psalm/Internal/TypeVisitor/ContainsLiteralVisitor.phpbd_;src/Psalm/Internal/TypeVisitor/ContainsClassLikeVisitor.phpbdAW8src/Psalm/Internal/TypeVisitor/ContainsStaticVisitor.phplbdlj\(8src/Psalm/Internal/TypeVisitor/TemplateTypeCollector.phpbdx,4src/Psalm/Internal/TypeVisitor/ClasslikeReplacer.phpjbdjm1src/Psalm/Internal/Diff/ClassStatementsDiffer.php'(bd'(a$src/Psalm/Internal/Diff/DiffElem.php$bd$ [;5src/Psalm/Internal/Diff/NamespaceStatementsDiffer.phpbd6E%src/Psalm/Internal/Diff/AstDiffer.php] bd] N>&src/Psalm/Internal/Diff/FileDiffer.php!bd!H0src/Psalm/Internal/Diff/FileStatementsDiffer.phpbdƆ3src/Psalm/Internal/LanguageServer/ClientHandler.php bd i0src/Psalm/Internal/LanguageServer/PathMapper.phpbd4src/Psalm/Internal/LanguageServer/ProtocolReader.php<bd<o1f2src/Psalm/Internal/LanguageServer/EmitterTrait.phpbdm9src/Psalm/Internal/LanguageServer/ClientConfiguration.php bd ,Gsrc/Psalm/Internal/LanguageServer/Provider/FileStorageCacheProvider.phpbdQ0PIsrc/Psalm/Internal/LanguageServer/Provider/FileReferenceCacheProvider.phpbd((TLsrc/Psalm/Internal/LanguageServer/Provider/ClassLikeStorageCacheProvider.phpbdCsrc/Psalm/Internal/LanguageServer/Provider/ProjectCacheProvider.phpbd-NBsrc/Psalm/Internal/LanguageServer/Provider/ParserCacheProvider.phpk bdk #bk9.src/Psalm/Internal/LanguageServer/Progress.phpbd/ M/src/Psalm/Internal/LanguageServer/Reference.phpbd4src/Psalm/Internal/LanguageServer/LanguageClient.phpbd-8src/Psalm/Internal/LanguageServer/PHPMarkdownContent.phpcbdcL@4src/Psalm/Internal/LanguageServer/ProtocolWriter.phpbdk:src/Psalm/Internal/LanguageServer/ProtocolStreamReader.phpYbdYz&4src/Psalm/Internal/LanguageServer/LanguageServer.phpbdn)f6src/Psalm/Internal/LanguageServer/EmitterInterface.phpbdx0>src/Psalm/Internal/LanguageServer/Client/Progress/Progress.php bd voDsrc/Psalm/Internal/LanguageServer/Client/Progress/LegacyProgress.phpbd; Gsrc/Psalm/Internal/LanguageServer/Client/Progress/ProgressInterface.phpcbdco6src/Psalm/Internal/LanguageServer/Client/Workspace.phpbd{pL9src/Psalm/Internal/LanguageServer/Client/TextDocument.phpbdk1src/Psalm/Internal/LanguageServer/IdGenerator.phpObdO5F6src/Psalm/Internal/LanguageServer/Server/Workspace.phpbdG9src/Psalm/Internal/LanguageServer/Server/TextDocument.php{Cbd{C$-src/Psalm/Internal/LanguageServer/Message.phpDbdDrV:src/Psalm/Internal/LanguageServer/ProtocolStreamWriter.phpbddCsrc/Psalm/Internal/FileManipulation/PropertyDocblockManipulator.phpbdR Csrc/Psalm/Internal/FileManipulation/FunctionDocblockManipulator.phpJbdJ8@src/Psalm/Internal/FileManipulation/ClassDocblockManipulator.php bd c>5>src/Psalm/Internal/FileManipulation/FileManipulationBuffer.phpbdP֤5src/Psalm/Internal/FileManipulation/CodeMigration.phpbde&src/Psalm/Internal/Type/TypeParser.phpNbdN@h(src/Psalm/Internal/Type/TypeExpander.php|bd|Co8%src/Psalm/Internal/Type/ArrayType.phpbdU7)src/Psalm/Internal/Type/TypeTokenizer.php5bd56src/Psalm/Internal/Type/NegatedAssertionReconciler.php>bd>2hH7)src/Psalm/Internal/Type/TemplateBound.php{bd{i4src/Psalm/Internal/Type/ClosedInheritanceToUnion.php5 bd5 $5&%src/Psalm/Internal/Type/ParseTree.php~bd~U-n=src/Psalm/Internal/Type/Comparator/IntegerRangeComparator.phpbd:src/Psalm/Internal/Type/Comparator/ArrayTypeComparator.phpbd0;src/Psalm/Internal/Type/Comparator/ScalarTypeComparator.php6Fbd6Fx@src/Psalm/Internal/Type/Comparator/ClassLikeStringComparator.php bd [^;src/Psalm/Internal/Type/Comparator/AtomicTypeComparator.phpibdi`;src/Psalm/Internal/Type/Comparator/TypeComparisonResult.phpVbdV7R1<src/Psalm/Internal/Type/Comparator/GenericTypeComparator.phpebde 7src/Psalm/Internal/Type/Comparator/ObjectComparator.phpq3bdq3>XB=src/Psalm/Internal/Type/Comparator/CallableTypeComparator.php.Ebd.Et}:src/Psalm/Internal/Type/Comparator/UnionTypeComparator.php6Cbd6CD;src/Psalm/Internal/Type/Comparator/KeyedArrayComparator.php 9bd 95xR<src/Psalm/Internal/Type/SimpleNegatedAssertionReconciler.phpVbdVlt+src/Psalm/Internal/Type/TypeCombination.php bd N$2(src/Psalm/Internal/Type/TypeCombiner.phpbd>5src/Psalm/Internal/Type/SimpleAssertionReconciler.phpVbdV8src/Psalm/Internal/Type/TemplateInferredTypeReplacer.phpAbdAM3,src/Psalm/Internal/Type/ParseTreeCreator.phpNjbdNj'3src/Psalm/Internal/Type/ParseTree/FieldEllipsis.phpbds)2src/Psalm/Internal/Type/ParseTree/CallableTree.phphbdh1src/Psalm/Internal/Type/ParseTree/GenericTree.phpgbdgS84src/Psalm/Internal/Type/ParseTree/KeyedArrayTree.phpjbdju5src/Psalm/Internal/Type/ParseTree/ConditionalTree.phpbd'am.0src/Psalm/Internal/Type/ParseTree/MethodTree.php@bd@(0*src/Psalm/Internal/Type/ParseTree/Root.phpbd4src/Psalm/Internal/Type/ParseTree/TemplateAsTree.phpbd_A/src/Psalm/Internal/Type/ParseTree/UnionTree.phpbdZ5src/Psalm/Internal/Type/ParseTree/MethodParamTree.phpbdHvo7src/Psalm/Internal/Type/ParseTree/IndexedAccessTree.phpGbdG=q S4src/Psalm/Internal/Type/ParseTree/TemplateIsTree.phpXbdXD2src/Psalm/Internal/Type/ParseTree/NullableTree.phpbdlv7src/Psalm/Internal/Type/ParseTree/EncapsulationTree.phpbd/B6src/Psalm/Internal/Type/ParseTree/IntersectionTree.phpbdJJ@src/Psalm/Internal/Type/ParseTree/CallableWithReturnTypeTree.phpbdΓ>src/Psalm/Internal/Type/ParseTree/MethodWithReturnTypeTree.phpbd2ˤ7src/Psalm/Internal/Type/ParseTree/CallableParamTree.phpbd[<<src/Psalm/Internal/Type/ParseTree/KeyedArrayPropertyTree.phpLbdL ޤ+src/Psalm/Internal/Type/ParseTree/Value.phpUbdUr%src/Psalm/Internal/Type/TypeAlias.php?bd?47src/Psalm/Internal/Type/TemplateStandinTypeReplacer.phppbdp;4src/Psalm/Internal/Type/TypeAlias/ClassTypeAlias.phpbd3r5src/Psalm/Internal/Type/TypeAlias/InlineTypeAlias.phpHbdHd~?7src/Psalm/Internal/Type/TypeAlias/LinkableTypeAlias.php6bd6 /src/Psalm/Internal/Type/AssertionReconciler.phpabdah*src/Psalm/Internal/Type/TemplateResult.phpbd'src/Psalm/Internal/Codebase/Scanner.phpdfbddf}'src/Psalm/Internal/Codebase/Methods.phpbd.src/Psalm/Internal/Codebase/TaintFlowGraph.php<bd< *src/Psalm/Internal/Codebase/Reflection.phpGbdG_&֤)src/Psalm/Internal/Codebase/Functions.phpp[bdp[s *src/Psalm/Internal/Codebase/ClassLikes.phpAbdAΤ0src/Psalm/Internal/Codebase/VariableUseGraph.phpbd& 5src/Psalm/Internal/Codebase/ReferenceMapGenerator.phpbd >*src/Psalm/Internal/Codebase/Properties.php0)bd0) ̤+src/Psalm/Internal/Codebase/PropertyMap.phpbd.)src/Psalm/Internal/Codebase/Populator.php=bd=K/4src/Psalm/Internal/Codebase/ConstantTypeResolver.php0bd0uM(src/Psalm/Internal/Codebase/Analyzer.phpbd4s-src/Psalm/Internal/Codebase/DataFlowGraph.phpRbdR?src/Psalm/Internal/Codebase/ClassConstantByWildcardResolver.phppbdptQ8src/Psalm/Internal/Codebase/StorageByPatternResolver.phpbdI#u6src/Psalm/Internal/Codebase/InternalCallMapHandler.php94bd94K~M5src/Psalm/Internal/PhpVisitor/ShortClosureVisitor.phpbd/A2src/Psalm/Internal/PhpVisitor/ReflectorVisitor.phptVbdtV˵b6src/Psalm/Internal/PhpVisitor/PartialParserVisitor.phpX3bdX3S0src/Psalm/Internal/PhpVisitor/CloningVisitor.phpbdx39src/Psalm/Internal/PhpVisitor/CheckTrivialExprVisitor.php bd _9src/Psalm/Internal/PhpVisitor/ConditionCloningVisitor.phpbd}פ6src/Psalm/Internal/PhpVisitor/AssignmentMapVisitor.phpbd>LWʤ@src/Psalm/Internal/PhpVisitor/Reflector/ClassLikeNodeScanner.phpbd8왤Gsrc/Psalm/Internal/PhpVisitor/Reflector/FunctionLikeDocblockScanner.phpbd$ݤ=src/Psalm/Internal/PhpVisitor/Reflector/AttributeResolver.phpbdbJCsrc/Psalm/Internal/PhpVisitor/Reflector/ClassLikeDocblockParser.phpSbdS6'%=src/Psalm/Internal/PhpVisitor/Reflector/ExpressionScanner.php50bd50J<src/Psalm/Internal/PhpVisitor/Reflector/TypeHintResolver.phpEbdEpKFsrc/Psalm/Internal/PhpVisitor/Reflector/FunctionLikeDocblockParser.phpdbbddb0>src/Psalm/Internal/PhpVisitor/Reflector/ExpressionResolver.php4Ebd4E9" Csrc/Psalm/Internal/PhpVisitor/Reflector/FunctionLikeNodeScanner.phpbdΗO%9src/Psalm/Internal/PhpVisitor/ParamReplacementVisitor.php bd 4src/Psalm/Internal/PhpVisitor/NodeCounterVisitor.php:bd:ą4src/Psalm/Internal/PhpVisitor/YieldTypeCollector.phpbd/4src/Psalm/Internal/PhpVisitor/TypeMappingVisitor.php`bd`K6src/Psalm/Internal/PhpVisitor/OffsetShifterVisitor.phpbd -src/Psalm/Internal/PhpVisitor/TraitFinder.phph bdh 踤4src/Psalm/Internal/PhpVisitor/SimpleNameResolver.phpYbdYf4src/Psalm/Internal/PhpVisitor/NodeCleanerVisitor.phpcbdcSn)src/Psalm/Internal/Scope/FinallyScope.phptbdt,[&src/Psalm/Internal/Scope/LoopScope.phpbd؉+$src/Psalm/Internal/Scope/IfScope.phpbdɣ&src/Psalm/Internal/Scope/CaseScope.phpbds(src/Psalm/Internal/Scope/SwitchScope.phpbdĤ/src/Psalm/Internal/Scope/IfConditionalScope.php]bd]9g@src/Psalm/Internal/Analyzer/FunctionLike/ReturnTypeCollector.phpw!bdw!.Ϸk?src/Psalm/Internal/Analyzer/FunctionLike/ReturnTypeAnalyzer.php{bd{EϤ-src/Psalm/Internal/Analyzer/ScopeAnalyzer.phpt6bdt6ؐ-src/Psalm/Internal/Analyzer/ClassAnalyzer.php*bd*;src/Psalm/Internal/Analyzer/Statements/ContinueAnalyzer.php bd K9src/Psalm/Internal/Analyzer/Statements/ReturnAnalyzer.phpVTbdVT8Ӥ9src/Psalm/Internal/Analyzer/Statements/GlobalAnalyzer.php8bd8R@9src/Psalm/Internal/Analyzer/Statements/StaticAnalyzer.php| bd| 6Csrc/Psalm/Internal/Analyzer/Statements/Expression/IssetAnalyzer.php' bd' K!Csrc/Psalm/Internal/Analyzer/Statements/Expression/EmptyAnalyzer.phpbd<ˤCsrc/Psalm/Internal/Analyzer/Statements/Expression/MatchAnalyzer.php&bd&9ijcGsrc/Psalm/Internal/Analyzer/Statements/Expression/YieldFromAnalyzer.php bd f#Hsrc/Psalm/Internal/Analyzer/Statements/Expression/ClassConstAnalyzer.phpwbdwPsrc/Psalm/Internal/Analyzer/Statements/Expression/EncapsulatedStringAnalyzer.phpbd&WGsrc/Psalm/Internal/Analyzer/Statements/Expression/ArrayCreationInfo.php;bd;:~ڤHsrc/Psalm/Internal/Analyzer/Statements/Expression/BitwiseNotAnalyzer.php=bd=!Y-äCsrc/Psalm/Internal/Analyzer/Statements/Expression/PrintAnalyzer.php bd Jsrc/Psalm/Internal/Analyzer/Statements/Expression/ExpressionIdentifier.php/bd/Nsrc/Psalm/Internal/Analyzer/Statements/Expression/IncDecExpressionAnalyzer.phpbdB7asrc/Psalm/Internal/Analyzer/Statements/Expression/Assignment/StaticPropertyAssignmentAnalyzer.phpe(bde({Qsrc/Psalm/Internal/Analyzer/Statements/Expression/Assignment/AssignedProperty.phpbdŤXsrc/Psalm/Internal/Analyzer/Statements/Expression/Assignment/ArrayAssignmentAnalyzer.phpbd3Dcsrc/Psalm/Internal/Analyzer/Statements/Expression/Assignment/InstancePropertyAssignmentAnalyzer.phpsbdsudnHsrc/Psalm/Internal/Analyzer/Statements/Expression/InstanceofAnalyzer.php bd iCBsrc/Psalm/Internal/Analyzer/Statements/Expression/CallAnalyzer.phpFbdF AHsrc/Psalm/Internal/Analyzer/Statements/Expression/AssignmentAnalyzer.phpbd2ޤBsrc/Psalm/Internal/Analyzer/Statements/Expression/EvalAnalyzer.php bd ,Bsrc/Psalm/Internal/Analyzer/Statements/Expression/ExitAnalyzer.php\bd\REsrc/Psalm/Internal/Analyzer/Statements/Expression/AssertionFinder.php!*bd!*QHsrc/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php{bd{pwBsrc/Psalm/Internal/Analyzer/Statements/Expression/CastAnalyzer.phptbdtH"Csrc/Psalm/Internal/Analyzer/Statements/Expression/ArrayAnalyzer.phpXbdX7Qsrc/Psalm/Internal/Analyzer/Statements/Expression/Fetch/VariableFetchAnalyzer.phpgbdg bNsrc/Psalm/Internal/Analyzer/Statements/Expression/Fetch/ConstFetchAnalyzer.phpA&bdA&2}Nsrc/Psalm/Internal/Analyzer/Statements/Expression/Fetch/ArrayFetchAnalyzer.php6bd6:@ɤYsrc/Psalm/Internal/Analyzer/Statements/Expression/Fetch/InstancePropertyFetchAnalyzer.phpQ:bdQ:sWsrc/Psalm/Internal/Analyzer/Statements/Expression/Fetch/StaticPropertyFetchAnalyzer.php8bd865/Wsrc/Psalm/Internal/Analyzer/Statements/Expression/Fetch/AtomicPropertyFetchAnalyzer.php8bd8!Esrc/Psalm/Internal/Analyzer/Statements/Expression/TernaryAnalyzer.php()bd()#bZGsrc/Psalm/Internal/Analyzer/Statements/Expression/SimpleTypeInferer.phpabda,Ksrc/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallInfo.phpbdAD4Vsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/ClassTemplateParamCollector.php$bd$:tVsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/HighOrderFunctionArgHandler.php6,bd6,`src/Psalm/Internal/Analyzer/Statements/Expression/Call/StaticMethod/AtomicStaticCallAnalyzer.phpbd%hhsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/StaticMethod/ExistingAtomicStaticCallAnalyzer.phpPbdPW4Ssrc/Psalm/Internal/Analyzer/Statements/Expression/Call/NamedFunctionCallHandler.phpSbdSNMsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/MethodCallAnalyzer.php6bd6kXsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallReturnTypeFetcher.php+ebd+e2MSsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/HighOrderFunctionArgInfo.phpbdOU*Zsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/AtomicMethodCallAnalyzer.phpqbdqܸZsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MethodVisibilityAnalyzer.phpbdRh`src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/AtomicMethodCallAnalysisResult.phpbdaZsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MethodCallPurityAnalyzer.phpbdi!bsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/ExistingAtomicMethodCallAnalyzer.phpSbdSz+U_src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MethodCallProhibitionAnalyzer.phpbdTӤZsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MissingMethodCallHandler.php%3bd%3?]src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MethodCallReturnTypeFetcher.phpmHbdmH[,Ssrc/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/AtomicCallContext.phpbdqbKsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/ArgumentAnalyzer.php;bd;CrJYsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/ArrayFunctionArgumentsAnalyzer.phpbdƋOsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/ArgumentMapPopulator.php{bd{OߤLsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/ArgumentsAnalyzer.phpbdd,~Msrc/Psalm/Internal/Analyzer/Statements/Expression/Call/StaticCallAnalyzer.php<-bd<-oyFsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/NewAnalyzer.phppbdp0Osrc/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallAnalyzer.phpbdV Lsrc/Psalm/Internal/Analyzer/Statements/Expression/UnaryPlusMinusAnalyzer.php`bd`7Csrc/Psalm/Internal/Analyzer/Statements/Expression/YieldAnalyzer.php1bd1vzCsrc/Psalm/Internal/Analyzer/Statements/Expression/CloneAnalyzer.phpgbdgѤFsrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOpAnalyzer.phpYFbdYFEsrc/Psalm/Internal/Analyzer/Statements/Expression/IncludeAnalyzer.phpK;bdK;)Osrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOp/CoalesceAnalyzer.phpX bdX B'Isrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOp/OrAnalyzer.phpZ1bdZ1qǤMsrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOp/ConcatAnalyzer.php>bd>gJsrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOp/AndAnalyzer.phpbdt7Vsrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOp/NonComparisonOpAnalyzer.php[ bd[ E Ssrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOp/ArithmeticOpAnalyzer.php;bd;<Hsrc/Psalm/Internal/Analyzer/Statements/Expression/BooleanNotAnalyzer.phpbdwFsrc/Psalm/Internal/Analyzer/Statements/Expression/NullsafeAnalyzer.phpK bdK T=src/Psalm/Internal/Analyzer/Statements/Block/LoopAnalyzer.phpXbdX?src/Psalm/Internal/Analyzer/Statements/Block/IfElseAnalyzer.phpg4bdg4-FǤCsrc/Psalm/Internal/Analyzer/Statements/Block/SwitchCaseAnalyzer.php5Xbd5X쁤<src/Psalm/Internal/Analyzer/Statements/Block/ForAnalyzer.phpbdx,S<src/Psalm/Internal/Analyzer/Statements/Block/TryAnalyzer.phpAbdA v;src/Psalm/Internal/Analyzer/Statements/Block/DoAnalyzer.php bd Fsrc/Psalm/Internal/Analyzer/Statements/Block/IfConditionalAnalyzer.php-bd-YM>src/Psalm/Internal/Analyzer/Statements/Block/WhileAnalyzer.phpEbdEZN@src/Psalm/Internal/Analyzer/Statements/Block/ForeachAnalyzer.phpbd5{^Dsrc/Psalm/Internal/Analyzer/Statements/Block/IfElse/ElseAnalyzer.php-bd-JFsrc/Psalm/Internal/Analyzer/Statements/Block/IfElse/ElseIfAnalyzer.php5bd5>Bsrc/Psalm/Internal/Analyzer/Statements/Block/IfElse/IfAnalyzer.php?bd?_?src/Psalm/Internal/Analyzer/Statements/Block/SwitchAnalyzer.phpbd=src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.phpKbdKABsrc/Psalm/Internal/Analyzer/Statements/UnusedAssignmentRemover.phpz1bdz12m:7src/Psalm/Internal/Analyzer/Statements/EchoAnalyzer.php bd ;ނ8src/Psalm/Internal/Analyzer/Statements/BreakAnalyzer.php9 bd9 q"8src/Psalm/Internal/Analyzer/Statements/UnsetAnalyzer.phpbdcH8src/Psalm/Internal/Analyzer/Statements/ThrowAnalyzer.php bd #?/src/Psalm/Internal/Analyzer/CommentAnalyzer.php>bd> Ι(src/Psalm/Internal/Analyzer/CanAlias.phpLbdLO7.src/Psalm/Internal/Analyzer/SourceAnalyzer.php|bd|ĉ\.src/Psalm/Internal/Analyzer/MethodAnalyzer.phpU&bdU&Le20src/Psalm/Internal/Analyzer/DataFlowNodeData.phpObdOWܤ0src/Psalm/Internal/Analyzer/FunctionAnalyzer.phpbd60src/Psalm/Internal/Analyzer/MethodComparator.phpZbdZ2src/Psalm/Internal/Analyzer/AttributesAnalyzer.phpe0bde0Jv2src/Psalm/Internal/Analyzer/StatementsAnalyzer.phpbdKۤ1src/Psalm/Internal/Analyzer/ClassLikeAnalyzer.php_bd_n4src/Psalm/Internal/Analyzer/FunctionLikeAnalyzer.phpbdgJij1src/Psalm/Internal/Analyzer/NamespaceAnalyzer.php#bd#r%1src/Psalm/Internal/Analyzer/InterfaceAnalyzer.phpKbdK`t4src/Psalm/Internal/Analyzer/ClassLikeNameOptions.phpbdzh,src/Psalm/Internal/Analyzer/TypeAnalyzer.phpbd5-src/Psalm/Internal/Analyzer/TraitAnalyzer.phpbd lm/src/Psalm/Internal/Analyzer/AlgebraAnalyzer.phpbd˱Rh/src/Psalm/Exception/ConfigCreationException.phplbdl2#6src/Psalm/Exception/ComplicatedExpressionException.phpsbds{?u6src/Psalm/Exception/InvalidMethodOverrideException.phpsbds'src/Psalm/Exception/ConfigException.php^bd^G5src/Psalm/Exception/UnresolvableConstantException.phpbd%Ф9src/Psalm/Exception/InvalidClasslikeOverrideException.phpvbdvd>6src/Psalm/Exception/UnsupportedIssueToFixException.phpsbds<2src/Psalm/Exception/IncorrectDocblockException.php~bd~ޤ2src/Psalm/Exception/CircularReferenceException.phpobdo9ػ.src/Psalm/Exception/DocblockParseException.phpebde^٤.src/Psalm/Exception/TypeParseTreeException.phpkbdkȤ3src/Psalm/Exception/UnpreparedAnalysisException.phppbdp2*\/src/Psalm/Exception/ConfigNotFoundException.phptbdt=g/src/Psalm/Exception/UnanalyzedFileException.phplbdlP>5src/Psalm/Exception/UnpopulatedClasslikeException.phpqbdq.src/Psalm/Exception/ScopeAnalysisException.phpkbdkUg,src/Psalm/Exception/FileIncludeException.phpibdiJݤ%src/Psalm/Storage/FunctionStorage.php0bd0|#Ĥsrc/Psalm/Storage/Assertion.phpbdUG%src/Psalm/Storage/PropertyStorage.php. bd. _Ҥ)src/Psalm/Storage/FunctionLikeStorage.phpbdɤ*src/Psalm/Storage/ClassConstantStorage.php bd ͤ#src/Psalm/Storage/Possibilities.phpobdos&src/Psalm/Storage/AttributeStorage.phpbdJ0src/Psalm/Storage/ImmutableNonCloneableTrait.phpbdخ#src/Psalm/Storage/MethodStorage.phpbda1/src/Psalm/Storage/Assertion/HasAtLeastCount.phpbd쎤7src/Psalm/Storage/Assertion/DoesNotHaveAtLeastCount.php?bd?%src/Psalm/Storage/Assertion/Falsy.php$bd$ÃQ6src/Psalm/Storage/Assertion/IsGreaterThanOrEqualTo.phpKbdKr.src/Psalm/Storage/Assertion/IsLooselyEqual.php bd MGw.src/Psalm/Storage/Assertion/IsNotIdentical.phpLbdLic-src/Psalm/Storage/Assertion/HasExactCount.phpEbdE2&src/Psalm/Storage/Assertion/IsType.phpbd0-^4src/Psalm/Storage/Assertion/ArrayKeyDoesNotExist.phpObdOaDW1src/Psalm/Storage/Assertion/IsNotLooselyEqual.phpUbdUl_&src/Psalm/Storage/Assertion/Truthy.phpbdev3)src/Psalm/Storage/Assertion/IsNotType.phpbdFb.src/Psalm/Storage/Assertion/IsNotCountable.phpbdSRl+src/Psalm/Storage/Assertion/IsIdentical.phpbdDȚ0src/Psalm/Storage/Assertion/NestedAssertions.php=bd=@&src/Psalm/Storage/Assertion/Empty_.php.bd.uؤ*src/Psalm/Storage/Assertion/IsNotIsset.php/bd/#F4src/Psalm/Storage/Assertion/HasStringArrayAccess.phpbd!03src/Psalm/Storage/Assertion/NotNestedAssertions.phpbdJ7h5src/Psalm/Storage/Assertion/DoesNotHaveExactCount.php<bd<ZϤ,src/Psalm/Storage/Assertion/IsEqualIsset.phpbd=m&*src/Psalm/Storage/Assertion/NotInArray.php$bd$R/1src/Psalm/Storage/Assertion/NonEmptyCountable.phpfbdf6$?'src/Psalm/Storage/Assertion/InArray.phpbd#(src/Psalm/Storage/Assertion/NonEmpty.phpbd:Efx-src/Psalm/Storage/Assertion/IsGreaterThan.phpbd@Ŏ4src/Psalm/Storage/Assertion/NotNonEmptyCountable.phpybdyE,src/Psalm/Storage/Assertion/IsClassEqual.phpbdF!+src/Psalm/Storage/Assertion/IsCountable.phpbdPV)*src/Psalm/Storage/Assertion/IsLessThan.php bd hs(src/Psalm/Storage/Assertion/IsAClass.phpWbdWnar#src/Psalm/Storage/Assertion/Any.phpbdq+src/Psalm/Storage/Assertion/IsNotAClass.phpbd'src/Psalm/Storage/Assertion/IsIsset.phpbdMw.src/Psalm/Storage/Assertion/ArrayKeyExists.php bd n)src/Psalm/Storage/Assertion/HasMethod.phpbdF/79src/Psalm/Storage/Assertion/HasIntOrStringArrayAccess.php bd ZE\+src/Psalm/Storage/Assertion/HasArrayKey.php_bd_"fg1src/Psalm/Storage/Assertion/DoesNotHaveMethod.phpbde/src/Psalm/Storage/Assertion/IsClassNotEqual.phpbdO=p/3src/Psalm/Storage/Assertion/IsLessThanOrEqualTo.phpBbdBO,src/Psalm/Storage/HasAttributesInterface.phpbd )src/Psalm/Storage/CustomMetadataTrait.phpbd}ѕ&src/Psalm/Storage/ClassLikeStorage.php+bd+H[!src/Psalm/Storage/FileStorage.phpjbdjޫ\äsrc/Psalm/Node/VirtualConst.phpbdĜD'src/Psalm/Node/Name/VirtualRelative.phpbdN-src/Psalm/Node/Name/VirtualFullyQualified.phpbd5.l$src/Psalm/Node/VirtualIdentifier.php&bd&\m#src/Psalm/Node/VirtualAttribute.phpbdN 1src/Psalm/Node/Scalar/MagicConst/VirtualClass.phpbd(*4src/Psalm/Node/Scalar/MagicConst/VirtualFunction.phpbdpä/src/Psalm/Node/Scalar/MagicConst/VirtualDir.phpbdI8&5src/Psalm/Node/Scalar/MagicConst/VirtualNamespace.phpbdxQ2src/Psalm/Node/Scalar/MagicConst/VirtualMethod.phpbd$0src/Psalm/Node/Scalar/MagicConst/VirtualLine.phpbd =51src/Psalm/Node/Scalar/MagicConst/VirtualTrait.phpbdިפ0src/Psalm/Node/Scalar/MagicConst/VirtualFile.phpbd2Ȥ3src/Psalm/Node/Scalar/VirtualEncapsedStringPart.phpbd6B(src/Psalm/Node/Scalar/VirtualLNumber.phpbdzU'src/Psalm/Node/Scalar/VirtualString.phpbdj`(src/Psalm/Node/Scalar/VirtualDNumber.phpbd}%)src/Psalm/Node/Scalar/VirtualEncapsed.phpbdAzܤsrc/Psalm/Node/VirtualArg.phpbdsrc/Psalm/Node/VirtualParam.phpbdׇ#src/Psalm/Node/Expr/VirtualExit.phpbdxGq2src/Psalm/Node/Expr/VirtualStaticPropertyFetch.phpbd!$src/Psalm/Node/Expr/VirtualPrint.phpbd}P'%src/Psalm/Node/Expr/VirtualAssign.phpbd~/,src/Psalm/Node/Expr/VirtualPropertyFetch.phpbd5($src/Psalm/Node/Expr/VirtualMatch.phpbdrv&src/Psalm/Node/Expr/VirtualPostInc.phpbdZXϤ$src/Psalm/Node/Expr/VirtualClone.phpbdT,src/Psalm/Node/Expr/AssignOp/VirtualPlus.phpbdT.src/Psalm/Node/Expr/AssignOp/VirtualConcat.phpbdNt}2src/Psalm/Node/Expr/AssignOp/VirtualBitwiseXor.phpbd1src/Psalm/Node/Expr/AssignOp/VirtualBitwiseOr.phpbdCЍU1src/Psalm/Node/Expr/AssignOp/VirtualShiftLeft.phpbdvx b+src/Psalm/Node/Expr/AssignOp/VirtualMod.phpbd \0src/Psalm/Node/Expr/AssignOp/VirtualCoalesce.phpbdB#j+src/Psalm/Node/Expr/AssignOp/VirtualPow.phpbdE-src/Psalm/Node/Expr/AssignOp/VirtualMinus.phpbd> +src/Psalm/Node/Expr/AssignOp/VirtualDiv.phpbdlϤ+src/Psalm/Node/Expr/AssignOp/VirtualMul.phpbdE2src/Psalm/Node/Expr/AssignOp/VirtualShiftRight.phpbdG9O(2src/Psalm/Node/Expr/AssignOp/VirtualBitwiseAnd.phpbdB&src/Psalm/Node/Expr/VirtualClosure.phpbd}i)src/Psalm/Node/Expr/VirtualMethodCall.phpbdS.src/Psalm/Node/Expr/VirtualClassConstFetch.phpbd`)src/Psalm/Node/Expr/VirtualClosureUse.phpbd(src/Psalm/Node/Expr/VirtualArrayItem.phpbdU-)src/Psalm/Node/Expr/VirtualBooleanNot.phpbd=")src/Psalm/Node/Expr/VirtualInstanceof.phpbd)src/Psalm/Node/Expr/VirtualUnaryMinus.phpbdy [$src/Psalm/Node/Expr/VirtualError.phpbdou&src/Psalm/Node/Expr/VirtualPostDec.phpbdm %src/Psalm/Node/Expr/VirtualPreDec.phpbdd1src/Psalm/Node/Expr/VirtualNullsafeMethodCall.phpbdJ'src/Psalm/Node/Expr/VirtualFuncCall.phpbdQ9'src/Psalm/Node/Expr/VirtualVariable.phpbd8[,src/Psalm/Node/Expr/VirtualArrowFunction.phpbd:#src/Psalm/Node/Expr/VirtualList.phpbd+$src/Psalm/Node/Expr/VirtualArray.phpbdYq%src/Psalm/Node/Expr/VirtualPreInc.phpbde͗i*src/Psalm/Node/Expr/Cast/VirtualDouble.phpbdh'src/Psalm/Node/Expr/Cast/VirtualInt.phpbd0B)src/Psalm/Node/Expr/Cast/VirtualUnset.phpbdI#(src/Psalm/Node/Expr/Cast/VirtualBool.phpbdC)src/Psalm/Node/Expr/Cast/VirtualArray.phpbd@*src/Psalm/Node/Expr/Cast/VirtualString.phpbdx-*src/Psalm/Node/Expr/Cast/VirtualObject.phpbd3(src/Psalm/Node/Expr/VirtualUnaryPlus.phpbd)src/Psalm/Node/Expr/VirtualConstFetch.phpbd ($src/Psalm/Node/Expr/VirtualThrow.phpbdؘ&src/Psalm/Node/Expr/VirtualTernary.phpbd me$src/Psalm/Node/Expr/VirtualYield.phpbdd(src/Psalm/Node/Expr/VirtualShellExec.phpbd(|Z,src/Psalm/Node/Expr/VirtualErrorSuppress.phpbd HA4src/Psalm/Node/Expr/VirtualNullsafePropertyFetch.phpbdP#src/Psalm/Node/Expr/VirtualEval.phpbd%ҫ"src/Psalm/Node/Expr/VirtualNew.phpbdp(src/Psalm/Node/Expr/VirtualAssignRef.phpbd z&src/Psalm/Node/Expr/VirtualInclude.phpbd,src/Psalm/Node/Expr/VirtualArrayDimFetch.phpbdΓ)src/Psalm/Node/Expr/VirtualStaticCall.phpbdݸ(src/Psalm/Node/Expr/VirtualYieldFrom.phpbdJ82src/Psalm/Node/Expr/BinaryOp/VirtualBooleanAnd.phpbd|w+ͤ,src/Psalm/Node/Expr/BinaryOp/VirtualPlus.phpbd yV/src/Psalm/Node/Expr/BinaryOp/VirtualSmaller.phpbdizt0src/Psalm/Node/Expr/BinaryOp/VirtualNotEqual.phpbdw4src/Psalm/Node/Expr/BinaryOp/VirtualNotIdentical.phpbde~C2src/Psalm/Node/Expr/BinaryOp/VirtualLogicalXor.phpbd.src/Psalm/Node/Expr/BinaryOp/VirtualConcat.phpbdnڤ1src/Psalm/Node/Expr/BinaryOp/VirtualSpaceship.phpbd݉dH2src/Psalm/Node/Expr/BinaryOp/VirtualBitwiseXor.phpbdti/1src/Psalm/Node/Expr/BinaryOp/VirtualBooleanOr.phpbd1src/Psalm/Node/Expr/BinaryOp/VirtualLogicalOr.phpbdD1src/Psalm/Node/Expr/BinaryOp/VirtualBitwiseOr.phpbd)-src/Psalm/Node/Expr/BinaryOp/VirtualEqual.phpbd,Y1src/Psalm/Node/Expr/BinaryOp/VirtualShiftLeft.phpbd'>2src/Psalm/Node/Expr/BinaryOp/VirtualLogicalAnd.phpbda졤+src/Psalm/Node/Expr/BinaryOp/VirtualMod.phpbdqF0src/Psalm/Node/Expr/BinaryOp/VirtualCoalesce.phpbd%ep+src/Psalm/Node/Expr/BinaryOp/VirtualPow.phpbd~i-src/Psalm/Node/Expr/BinaryOp/VirtualMinus.phpbdܳ+src/Psalm/Node/Expr/BinaryOp/VirtualDiv.phpbd>/src/Psalm/Node/Expr/BinaryOp/VirtualGreater.phpbdK+src/Psalm/Node/Expr/BinaryOp/VirtualMul.phpbdl?2src/Psalm/Node/Expr/BinaryOp/VirtualShiftRight.phpbdDŽ1src/Psalm/Node/Expr/BinaryOp/VirtualIdentical.phpbd\6src/Psalm/Node/Expr/BinaryOp/VirtualSmallerOrEqual.phpbd~-̤2src/Psalm/Node/Expr/BinaryOp/VirtualBitwiseAnd.phpbd1~&6src/Psalm/Node/Expr/BinaryOp/VirtualGreaterOrEqual.phpbd'3$src/Psalm/Node/Expr/VirtualEmpty.phpbd9 A$src/Psalm/Node/Expr/VirtualIsset.phpbdfo)src/Psalm/Node/Expr/VirtualBitwiseNot.phpbdZɤ%src/Psalm/Node/Stmt/VirtualElseIf.phpbdN1+src/Psalm/Node/Stmt/VirtualHaltCompiler.phpbd&src/Psalm/Node/Stmt/VirtualForeach.phpbdHB(src/Psalm/Node/Stmt/VirtualInterface.phpbd"'src/Psalm/Node/Stmt/VirtualTryCatch.phpbdu@&o$src/Psalm/Node/Stmt/VirtualClass.phpbd&`]z/src/Psalm/Node/Stmt/VirtualPropertyProperty.phpbd/%src/Psalm/Node/Stmt/VirtualGlobal.phpbdPͩ"src/Psalm/Node/Stmt/VirtualNop.phpbdM$src/Psalm/Node/Stmt/VirtualUnset.phpbd|F'src/Psalm/Node/Stmt/VirtualFunction.phpbdZѤ!src/Psalm/Node/Stmt/VirtualDo.phpbd$src/Psalm/Node/Stmt/VirtualBreak.phpbde 'src/Psalm/Node/Stmt/VirtualTraitUse.phpbd5?"src/Psalm/Node/Stmt/VirtualFor.phpbdf:]$src/Psalm/Node/Stmt/VirtualCatch.phpbdN($src/Psalm/Node/Stmt/VirtualConst.phpbdZ$src/Psalm/Node/Stmt/VirtualLabel.phpbd_'src/Psalm/Node/Stmt/VirtualGroupUse.phpbd`k5)src/Psalm/Node/Stmt/VirtualClassConst.phpbdWj%src/Psalm/Node/Stmt/VirtualStatic.phpbdEb[)src/Psalm/Node/Stmt/VirtualExpression.phpbdŤ!src/Psalm/Node/Stmt/VirtualIf.phpbdF#src/Psalm/Node/Stmt/VirtualGoto.phpbdRe(src/Psalm/Node/Stmt/VirtualNamespace.phpbdO-$src/Psalm/Node/Stmt/VirtualTrait.phpbd;)src/Psalm/Node/Stmt/VirtualInlineHTML.phpbd.ڤ*src/Psalm/Node/Stmt/VirtualClassMethod.phpbdKkC%src/Psalm/Node/Stmt/VirtualSwitch.phpbd#src/Psalm/Node/Stmt/VirtualCase.phpbdِ%src/Psalm/Node/Stmt/VirtualReturn.phpbdBԤ$src/Psalm/Node/Stmt/VirtualThrow.phpbd{'src/Psalm/Node/Stmt/VirtualProperty.phpbdn+#src/Psalm/Node/Stmt/VirtualElse.phpbd.t%src/Psalm/Node/Stmt/VirtualUseUse.phpbdf:¤-src/Psalm/Node/Stmt/VirtualDeclareDeclare.phpbd%D'src/Psalm/Node/Stmt/VirtualContinue.phpbd(src/Psalm/Node/Stmt/VirtualStaticVar.phpbdm&src/Psalm/Node/Stmt/VirtualDeclare.phpbd @"src/Psalm/Node/Stmt/VirtualUse.phpbd&src/Psalm/Node/Stmt/VirtualFinally.phpbd=$src/Psalm/Node/Stmt/VirtualWhile.phpbd֤7src/Psalm/Node/Stmt/TraitUseAdaptation/VirtualAlias.phpbd]dE<src/Psalm/Node/Stmt/TraitUseAdaptation/VirtualPrecedence.phpbdHYV#src/Psalm/Node/Stmt/VirtualEcho.phpbdj~(src/Psalm/Node/VirtualAttributeGroup.phpbde <&src/Psalm/Node/VirtualNullableType.phpbdL@+src/Psalm/Node/VirtualVarLikeIdentifier.phpbd0Ѥsrc/Psalm/Aliases.phpbdsrc/Psalm/ErrorBaseline.php$bd$<.box/bin/check-requirements.phpbd^ʨ.box/src/IsFulfilled.phpvbdv%*H!.box/src/IsExtensionFulfilled.phpvbdv'0Ҥ.box/src/IO.php bd [l%.box/src/Printer.php bd )8AV.box/src/Checker.phpbd)W>.box/src/Terminal.php bd %V.box/src/Requirement.phpmbdmB".box/src/IsPhpVersionFulfilled.phpbd!83".box/src/RequirementCollection.phpbdWb?.box/.requirements.phpbdzC.box/vendor/composer/LICENSE.bd. 1.box/vendor/composer/semver/src/VersionParser.php9bd9Wz >.box/vendor/composer/semver/src/Constraint/MultiConstraint.php~bd~5[e9.box/vendor/composer/semver/src/Constraint/Constraint.php'&bd'&`B.box/vendor/composer/semver/src/Constraint/ConstraintInterface.phpbdwQ*.box/vendor/composer/semver/src/Semver.phpbdׯ..box/vendor/composer/semver/src/Comparator.phpubdu 74&.box/vendor/composer/autoload_psr4.php6bd60Ӥ$.box/vendor/composer/ClassLoader.php>bd>5Ky&.box/vendor/composer/autoload_real.phpbdyi\*.box/vendor/composer/autoload_classmap.php, bd, ӽǤ,.box/vendor/composer/autoload_namespaces.phpbdt!פ(.box/vendor/composer/autoload_static.phpKbdK?.box/vendor/autoload.phpbds>docs/running_psalm/issues/UnsupportedPropertyReferenceUsage.mdpbdpF1docs/running_psalm/issues/ArgumentTypeCoercion.md]bd]?&^3docs/running_psalm/issues/InvalidArrayAssignment.md}bd}Q2docs/running_psalm/issues/TooManyTemplateParams.mdEbdELQڤ4docs/running_psalm/issues/PossiblyInvalidIterator.mdbdD10docs/running_psalm/issues/UnusedDocblockParam.mdPbdPao٪0docs/running_psalm/issues/ImpurePropertyFetch.mdbdRV2docs/running_psalm/issues/NoInterfaceProperties.md-bd-/3docs/running_psalm/issues/TypeDoesNotContainNull.mdbd:^0docs/running_psalm/issues/PossiblyInvalidCast.mdbdS7docs/running_psalm/issues/MissingImmutableAnnotation.mdbd>մz)docs/running_psalm/issues/TaintedInput.mdBbdB3docs/running_psalm/issues/UndefinedDocblockClass.mdbd^/docs/running_psalm/issues/MissingConstructor.mdbdKX-docs/running_psalm/issues/MixedArrayOffset.mdbdT-docs/running_psalm/issues/AssignmentToVoid.mdbdPɤ1docs/running_psalm/issues/PossiblyInvalidClone.mdbdd,docs/running_psalm/issues/InvalidDocblock.mdtbdt%Fz/docs/running_psalm/issues/UndefinedInterface.mdbdg@vV1docs/running_psalm/issues/PossiblyNullArgument.mdbd;Y47docs/running_psalm/issues/UncaughtThrowInGlobalScope.mdbd^1docs/running_psalm/issues/InvalidNamedArgument.mdbdM+docs/running_psalm/issues/UndefinedTrace.mdbd%N,docs/running_psalm/issues/NullArrayOffset.mdbd%S5docs/running_psalm/issues/UndefinedInterfaceMethod.mdbd6ܬ=docs/running_psalm/issues/MoreSpecificImplementedParamType.mdbdYt1docs/running_psalm/issues/ImpureStaticVariable.mdbd ;docs/running_psalm/issues/ConflictingReferenceConstraint.mdbd -?docs/running_psalm/issues/ImplementationRequirementViolation.mdbdդ4docs/running_psalm/issues/MethodSignatureMismatch.md'bd'd:;docs/running_psalm/issues/InvalidConstantAssignmentValue.mdbd0docs/running_psalm/issues/UnusedPsalmSuppress.mdbdW0,docs/running_psalm/issues/InvalidArgument.mdzbdzɤ=docs/running_psalm/issues/UndefinedMagicPropertyAssignment.md3bd3736docs/running_psalm/issues/MixedPropertyTypeCoercion.md2bd29A/docs/running_psalm/issues/DeprecatedFunction.md2bd2/%B,docs/running_psalm/issues/DuplicateMethod.mdbd)<docs/running_psalm/issues/PossiblyUndefinedGlobalVariable.mdbdtf@.docs/running_psalm/issues/MissingDependency.mdbdC2docs/running_psalm/issues/MissingThrowsDocblock.mdbd *"2docs/running_psalm/issues/AbstractInstantiation.mdbd!Ȥ0docs/running_psalm/issues/PossiblyUnusedParam.mdbd6ˤ6docs/running_psalm/issues/PossiblyNullPropertyFetch.mdbduŤ/docs/running_psalm/issues/InvalidExtendClass.mdpbdp="-docs/running_psalm/issues/EmptyArrayAccess.mdxbdx-B/docs/running_psalm/issues/InvalidArrayOffset.mdbdyyڤ;docs/running_psalm/issues/PossiblyNullPropertyAssignment.mdbdAAdocs/running_psalm/issues/RedundantPropertyInitializationCheck.md3bd3rA0docs/running_psalm/issues/UnresolvableInclude.mdbd>docs/running_psalm/issues/ReferenceReusedFromConfusingScope.mdbd+h8docs/running_psalm/issues/MixedStringOffsetAssignment.mdbd9docs/running_psalm/issues/UnimplementedInterfaceMethod.mdbd_פ9docs/running_psalm/issues/ReferenceConstraintViolation.mdbd sϤ+docs/running_psalm/issues/UnusedProperty.mdbdsP^1docs/running_psalm/issues/InvalidPropertyFetch.mdbd`&;docs/running_psalm/issues/PossiblyInvalidArrayAssignment.mdbd,Adocs/running_psalm/issues/MethodSignatureMustProvideReturnType.mdbd&,docs/running_psalm/issues/DeprecatedTrait.md0bd0Xz)docs/running_psalm/issues/InvalidClass.mdbbdbn;0docs/running_psalm/issues/UnusedBaselineEntry.mdbdl_,docs/running_psalm/issues/NullArrayAccess.mdxbdx6Mx10docs/running_psalm/issues/MissingPropertyType.mdbd`,docs/running_psalm/issues/UnevaluatedCode.mdbdߒ2docs/running_psalm/issues/RedundantFunctionCall.mdbd,docs/running_psalm/issues/DeprecatedClass.md"bd"2C8docs/running_psalm/issues/OverriddenInterfaceConstant.mdbdN,docs/running_psalm/issues/TooFewArguments.mdbd&Vڤ$docs/running_psalm/issues/NoValue.mdBbdBI.docs/running_psalm/issues/DuplicateConstant.mdbdB-docs/running_psalm/issues/NullFunctionCall.mdsbdsY=docs/running_psalm/issues/NonInvariantDocblockPropertyType.mdbd )docs/running_psalm/issues/NullIterator.md^bd^Vj4docs/running_psalm/issues/MixedInferredReturnType.mdbd>-docs/running_psalm/issues/InvalidAttribute.md+bd+)֫ɤ'docs/running_psalm/issues/ParseError.mdbduAf7docs/running_psalm/issues/UndefinedThisPropertyFetch.mdbdGvk*docs/running_psalm/issues/RedundantCast.mdbd /14docs/running_psalm/issues/OverriddenFinalConstant.mdbdΌv1docs/running_psalm/issues/ParadoxicalCondition.mdbdX.docs/running_psalm/issues/UndefinedFunction.mdfbdfTCdocs/running_psalm/issues/RedundantFunctionCallGivenDocblockType.mdebde(90docs/running_psalm/issues/TaintedSystemSecret.mdbdG@8docs/running_psalm/issues/ImpureByReferenceAssignment.mdbdӬF/docs/running_psalm/issues/MixedPropertyFetch.mdbdFF4docs/running_psalm/issues/UndefinedAttributeClass.mdbd]2/docs/running_psalm/issues/UnusedFunctionCall.mdbd=q7docs/running_psalm/issues/UnsafeGenericInstantiation.md5 bd5 ZNj>(docs/running_psalm/issues/TaintedHtml.mdbdvB).docs/running_psalm/issues/NonStaticSelfCall.mdbd̄.docs/running_psalm/issues/DuplicateFunction.mdbd/docs/running_psalm/issues/RedundantCondition.mdbdaI.docs/running_psalm/issues/InvalidMethodCall.mdtbdtlq &docs/running_psalm/issues/CheckType.md{bd{WRo:docs/running_psalm/issues/ImplementedReturnTypeMismatch.mdbdO/docs/running_psalm/issues/UnusedClosureParam.mdbdz<3docs/running_psalm/issues/InvalidPassByReference.mdbdp3docs/running_psalm/issues/MixedArrayTypeCoercion.md2bd2{/docs/running_psalm/issues/UnusedForeachValue.mdbdW+docs/running_psalm/issues/TaintedInclude.mdbd#0docs/running_psalm/issues/UnsafeInstantiation.md=bd=1docs/running_psalm/issues/PossiblyNullIterator.mdbdia)3docs/running_psalm/issues/PossiblyUnusedProperty.mdbdy8docs/running_psalm/issues/UndefinedPropertyAssignment.mdbduȐ3docs/running_psalm/issues/InterfaceInstantiation.mdbdZ'docs/running_psalm/issues/TaintedSql.mdybdy-docs/running_psalm/issues/ImpureMethodCall.mdzbdzw1w,docs/running_psalm/issues/MixedMethodCall.mdfbdfx!4docs/running_psalm/issues/PossiblyInvalidArgument.mdbd.docs/running_psalm/issues/MixedFunctionCall.mdbd$5docs/running_psalm/issues/PossiblyNullFunctionCall.mdbdR>'4docs/running_psalm/issues/PossiblyUndefinedMethod.mdbd,docs/running_psalm/issues/MixedAssignment.mdbd=,docs/running_psalm/issues/UndefinedMethod.mdmbdm^/docs/running_psalm/issues/InvalidStringClass.mdbd*q1docs/running_psalm/issues/MissingTemplateParam.mdbd:3docs/running_psalm/issues/PossiblyInvalidOperand.mdbdL/4docs/running_psalm/issues/InvalidStaticInvocation.mdbdAĤ2docs/running_psalm/issues/PossiblyFalseArgument.mdTbdTM.docs/running_psalm/issues/InvalidEnumMethod.mdbdŇѤ(docs/running_psalm/issues/TaintedEval.mdAbdA<)docs/running_psalm/issues/InvalidThrow.mdbd)Ԥ+docs/running_psalm/issues/UndefinedTrait.mdqbdqݹͤ<docs/running_psalm/issues/MismatchingDocblockPropertyType.mdbdN2docs/running_psalm/issues/PossiblyNullReference.mdbd9n(6*docs/running_psalm/issues/MixedArgument.mdbdfD(docs/running_psalm/issues/MissingFile.mdbdH3G*docs/running_psalm/issues/NullReference.mdmbdmߍ&@docs/running_psalm/issues/RedundantConditionGivenDocblockType.md{bd{tޤ)docs/running_psalm/issues/TaintedShell.mdbdQ8docs/running_psalm/issues/LessSpecificReturnStatement.mdbd10docs/running_psalm/issues/PossiblyNullOperand.mdbd פ)docs/running_psalm/issues/InvalidCatch.mdbd,6docs/running_psalm/issues/DocblockTypeContradiction.mdybdy\&docs/running_psalm/issues/RiskyCast.md3bd3;1docs/running_psalm/issues/MixedArrayAssignment.mdbd;l,docs/running_psalm/issues/ComplexFunction.mdibdi{Τ:docs/running_psalm/issues/ExtensionRequirementViolation.mdibdiKZ9docs/running_psalm/issues/MismatchingDocblockParamType.mdbdX.docs/running_psalm/issues/NullPropertyFetch.md{bd{=]X:docs/running_psalm/issues/MismatchingDocblockReturnType.mdbdB s-docs/running_psalm/issues/UnusedMethodCall.mdbd0T.docs/running_psalm/issues/UndefinedConstant.mdnbdny}+docs/running_psalm/issues/InvalidOperand.mdbdjVz/docs/running_psalm/issues/InaccessibleMethod.mdbdwb0docs/running_psalm/issues/InvalidFunctionCall.mdxbdxѶs4docs/running_psalm/issues/UndefinedGlobalVariable.mdnbdns.docs/running_psalm/issues/InvalidTypeImport.mdbdK2docs/running_psalm/issues/UninitializedProperty.mdbd }*docs/running_psalm/issues/InvalidGlobal.mdZbdZ.docs/running_psalm/issues/UndefinedVariable.mdbd_;docs/running_psalm/issues/InvalidInterfaceImplementation.mdbdi;R3docs/running_psalm/issues/MoreSpecificReturnType.mdMbdM+&3docs/running_psalm/issues/InvalidReturnStatement.mdbd>docs/running_psalm/issues/MethodSignatureMustOmitReturnType.mdbd#.docs/running_psalm/issues/CircularReference.mdbdp5docs/running_psalm/issues/InvalidClassConstantType.mdIbdI/L(docs/running_psalm/issues/TaintedLdap.mdbdֵ.docs/running_psalm/issues/TaintedUserSecret.mdbdZ/docs/running_psalm/issues/InheritorViolation.mdbdYI+docs/running_psalm/issues/UnusedVariable.md:bd:b?docs/running_psalm/issues/PossiblyUndefinedStringArrayOffset.md)bd)V04docs/running_psalm/issues/NullableReturnStatement.mdbd 3docs/running_psalm/issues/PossiblyFalseReference.mdbdW\]43docs/running_psalm/issues/TypeDoesNotContainType.mdbdm/docs/running_psalm/issues/DeprecatedProperty.mdbdG`0docs/running_psalm/issues/MissingDocblockType.mdbdOf/docs/running_psalm/issues/DeprecatedConstant.mdbddnj1docs/running_psalm/issues/ImpureStaticProperty.md7bd7U7-docs/running_psalm/issues/MixedArrayAccess.mdbdRࣤ9docs/running_psalm/issues/TraitMethodSignatureMismatch.mdbd,6docs/running_psalm/issues/RedundantIdentityWithTrue.md9bd9q`Cdocs/running_psalm/issues/PossiblyInvalidPropertyAssignmentValue.md5bd5Z9docs/running_psalm/issues/ImplementedParamTypeMismatch.md bd 6J1docs/running_psalm/issues/PossiblyUnusedMethod.mdbbdb`(docs/running_psalm/issues/UnusedParam.mdpbdp.docs/running_psalm/issues/MutableDependency.mdPbdPv4docs/running_psalm/issues/MissingClosureParamType.mdbd"&f6docs/running_psalm/issues/PossiblyUndefinedVariable.mdbd 3docs/running_psalm/issues/LessSpecificReturnType.mdbdL6e'docs/running_psalm/issues/MixedClone.mdxbdx;ɮ1docs/running_psalm/issues/InvalidEnumCaseValue.mdYbdYxw)docs/running_psalm/issues/FalseOperand.mdbdy8docs/running_psalm/issues/UnimplementedAbstractMethod.mdbd+a.docs/running_psalm/issues/UnusedReturnValue.md4bd43Yۤ6docs/running_psalm/issues/InvalidPropertyAssignment.mdbdD4docs/running_psalm/issues/FalsableReturnStatement.mdbdY/9docs/running_psalm/issues/PossiblyUndefinedArrayOffset.mdMbdM֚]l/docs/running_psalm/issues/TaintedUnserialize.mdbdc3docs/running_psalm/issues/InvalidEnumBackingType.mdbd8K9docs/running_psalm/issues/AmbiguousConstantInheritance.md(bd( ;f 4docs/running_psalm/issues/PossiblyNullArrayOffset.mdbd1/docs/running_psalm/issues/InvalidArrayAccess.mdbd[H9docs/running_psalm/issues/ConstructorSignatureMismatch.mdbd +docs/running_psalm/issues/UndefinedClass.mdhbdh 3docs/running_psalm/issues/UnrecognizedExpression.mdbdcB7docs/running_psalm/issues/ConstantDeclarationInTrait.mdbd9[.docs/running_psalm/issues/DuplicateArrayKey.mdbd_+docs/running_psalm/issues/InternalMethod.mdbd3docs/running_psalm/issues/InvalidLiteralArgument.mdbdbgK"docs/running_psalm/issues/Trace.mdbdDդ2docs/running_psalm/issues/TaintedTextWithQuotes.mdbdkb5docs/running_psalm/issues/InvalidDocblockParamName.md bd $\2docs/running_psalm/issues/InvalidScalarArgument.mdbda 0docs/running_psalm/issues/DeprecatedInterface.mdAbdA7U4docs/running_psalm/issues/NamedArgumentNotAllowed.mdbd8Ѥ5docs/running_psalm/issues/OverriddenPropertyAccess.md bd 71docs/running_psalm/issues/InvalidTemplateParam.mdtbdt|K)+docs/running_psalm/issues/ImpureVariable.mdbdȉ5docs/running_psalm/issues/NonInvariantPropertyType.mdNbdN46docs/running_psalm/issues/InaccessibleClassConstant.mdbd (docs/running_psalm/issues/NullOperand.mdbdp$8docs/running_psalm/issues/PossiblyInvalidFunctionCall.mdbdJj-docs/running_psalm/issues/TooManyArguments.mdbd4/docs/running_psalm/issues/PrivateFinalMethod.mdbdx-docs/running_psalm/issues/InternalProperty.mdbdy6Q6docs/running_psalm/issues/PossiblyInvalidMethodCall.mdbd~ 2docs/running_psalm/issues/DirectConstructorCall.mdbdnW2docs/running_psalm/issues/PossiblyFalseIterator.mdbdI+docs/running_psalm/issues/ParentNotFound.mdbd.docs/running_psalm/issues/InvalidReturnType.mdbdȸ61docs/running_psalm/issues/UnresolvableConstant.mdbd0ۤ8docs/running_psalm/issues/PossiblyNullArrayAssignment.mdbdǤ=docs/running_psalm/issues/InvalidTraversableImplementation.md>bd>iM>docs/running_psalm/issues/LessSpecificImplementedReturnType.mdbd8(R+docs/running_psalm/issues/DuplicateClass.mdbd;docs/running_psalm/issues/InvalidPropertyAssignmentValue.mdbdX34docs/running_psalm/issues/MixedPropertyAssignment.mdbdK`6docs/running_psalm/issues/InvalidNullableReturnType.mdbdDŤ3docs/running_psalm/issues/NullPropertyAssignment.mdybdy p3docs/running_psalm/issues/DuplicateEnumCaseValue.mdRbdRhqA7docs/running_psalm/issues/PossibleRawObjectIteration.mdbde(docs/running_psalm/issues/TaintedSSRF.mdObdO85docs/running_psalm/issues/MissingClosureReturnType.mdbdmj6docs/running_psalm/issues/MixedArgumentTypeCoercion.md&bd&>@#-docs/running_psalm/issues/IfThisIsMismatch.md7bd7a1docs/running_psalm/issues/MixedReturnStatement.mdbdDm)docs/running_psalm/issues/ReservedWord.md|bd|>8docs/running_psalm/issues/PropertyNotSetInConstructor.mdbdwä:docs/running_psalm/issues/LessSpecificClassConstantType.mdKbdKi7a^.docs/running_psalm/issues/DuplicateEnumCase.mdbdÿq5docs/running_psalm/issues/ImpurePropertyAssignment.mdbda3";docs/running_psalm/issues/RedundantCastGivenDocblockType.mdbd$6v1docs/running_psalm/issues/InaccessibleProperty.mdbd&ؤ>docs/running_psalm/issues/PossiblyInvalidPropertyAssignment.md`bd`bݤ9docs/running_psalm/issues/PossiblyInvalidPropertyFetch.mdYbdYϾӤ*docs/running_psalm/issues/InternalClass.mdbdዂ0docs/running_psalm/issues/InvalidParamDefault.mdbd}@docs/running_psalm/issues/PossiblyNullPropertyAssignmentValue.md$bd$-}/docs/running_psalm/issues/AbstractMethodCall.mdbdW8Τ1docs/running_psalm/issues/UndefinedMagicMethod.mdbd0docs/running_psalm/issues/ContinueOutsideLoop.mdbdO9Y֤)docs/running_psalm/issues/MixedOperand.mdWbdWT 4docs/running_psalm/issues/PossiblyNullArrayAccess.mdbd=3docs/running_psalm/issues/OverriddenMethodAccess.mdbdn/docs/running_psalm/issues/RawObjectIteration.mdmbdm𒮤4docs/running_psalm/issues/MixedReturnTypeCoercion.mdbdLj5docs/running_psalm/issues/UnnecessaryVarAnnotation.mdbduf8docs/running_psalm/issues/UndefinedMagicPropertyFetch.mdbd(docs/running_psalm/issues/InvalidCast.mdbdM)docs/running_psalm/issues/UnusedMethod.mdbd:V7docs/running_psalm/issues/PossiblyInvalidArrayAccess.mdbdci,1docs/running_psalm/issues/PossiblyFalseOperand.mdbd״(docs/running_psalm/issues/TaintedFile.mdbdȤ(docs/running_psalm/issues/PluginIssue.md*bd*xͤ-docs/running_psalm/issues/MissingParamType.mdbd_@d+docs/running_psalm/issues/DuplicateParam.mdbd )docs/running_psalm/issues/NullArgument.mdbdϥŤ<docs/running_psalm/issues/UndefinedThisPropertyAssignment.mdbdG_}.docs/running_psalm/issues/ParamNameMismatch.md bd 3,docs/running_psalm/issues/StringIncrement.mdbd$,docs/running_psalm/issues/TaintedCallable.md4bd49Qפ-docs/running_psalm/issues/LoopInvalidation.mdbd|<docs/running_psalm/issues/PossiblyUndefinedIntArrayOffset.mdbdy71docs/running_psalm/issues/PropertyTypeCoercion.mdbd 1docs/running_psalm/issues/ImplicitToStringCast.mdtbdt!)docs/running_psalm/issues/InvalidClone.mdzbdzx&%*docs/running_psalm/issues/ComplexMethod.mdcbdcX*docs/running_psalm/issues/InvalidParent.mdbdӤ.docs/running_psalm/issues/UnusedConstructor.mdbd3n: ,docs/running_psalm/issues/InvalidToString.mdbd۱6docs/running_psalm/issues/UnsupportedReferenceUsage.mdbdXd\>Adocs/running_psalm/issues/PossiblyFalsePropertyAssignmentValue.md3bd3f큤(docs/running_psalm/issues/UnusedClass.mdbdHYڤ,docs/running_psalm/issues/InvalidIterator.mdbdG%-docs/running_psalm/issues/DeprecatedMethod.mdcbdc^ӂ2docs/running_psalm/issues/UnrecognizedStatement.mdbdC*docs/running_psalm/issues/TaintedHeader.mdbd &)docs/running_psalm/issues/InvalidScope.mdabdal#6docs/running_psalm/issues/InvalidFalsableReturnType.mdbd(docs/running_psalm/issues/ConfigIssue.mdbd*docs/running_psalm/issues/TaintedCustom.mdhbdh%7docs/running_psalm/issues/PossiblyInvalidArrayOffset.mdbd(;%6docs/running_psalm/issues/PossiblyUnusedReturnValue.md bd 0 *docs/running_psalm/issues/ForbiddenCode.mdbd(g-docs/running_psalm/issues/NoEnumProperties.mdbd0lѤ*docs/running_psalm/issues/TaintedCookie.mdbd.docs/running_psalm/issues/MissingReturnType.mdbdLƤ4docs/running_psalm/issues/UnhandledMatchCondition.mdWbdW97docs/running_psalm/issues/PossiblyInvalidDocblockTag.mdbdE)3docs/running_psalm/issues/UndefinedPropertyFetch.mdbd~h/docs/running_psalm/issues/ImpureFunctionCall.md@bd@U$vendor/phpstan/phpdoc-parser/LICENSE.bd.-3vendor/phpstan/phpdoc-parser/src/Printer/Differ.phprbdr64vendor/phpstan/phpdoc-parser/src/Printer/Printer.phpbdPPɤ5vendor/phpstan/phpdoc-parser/src/Printer/DiffElem.phpbd/Hؤ6vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php{{bd{{G ;vendor/phpstan/phpdoc-parser/src/Parser/ConstExprParser.php&bd&xؔ;vendor/phpstan/phpdoc-parser/src/Parser/ParserException.php bd ~*9vendor/phpstan/phpdoc-parser/src/Parser/TokenIterator.php#bd#R8vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php|bd|?Ȥ;vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php bd 6vendor/phpstan/phpdoc-parser/src/Ast/NodeTraverser.php4*bd4* Ds<vendor/phpstan/phpdoc-parser/src/Ast/AbstractNodeVisitor.phpbd9L>Bvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ThrowsTagValueNode.phpbd0aLnBvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.phpbdwDhFvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ImplementsTagValueNode.phpbdAvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MixinTagValueNode.phpbdrԜ֤Dvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamOutTagValueNode.phpVbdV@Avendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamTagValueNode.phpbdp._Cvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/SelfOutTagValueNode.phpbd:B:vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocNode.php$bd$'pJvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagPropertyValueNode.phpbdy>vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTextNode.phpbd Fvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/DeprecatedTagValueNode.phpbdcKvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasImportTagValueNode.phpbdˤCvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ExtendsTagValueNode.phpbd a}Dvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php5bd5C_Mvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineTagValueNode.phpbdQKvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineAnnotation.phpbdwF>Jvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArrayItem.phpbdȌ%Fvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArray.phpbdIvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArgument.php bd ?vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.phpfbdfjwKvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueParameterNode.phpbd1Dvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.phpQbdQ<Bvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.phpbdqBvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueNode.phpbdG*=vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagNode.php+bd+9~P@vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/UsesTagValueNode.phpbdg&-ʤEvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasTagValueNode.phpbd eZHvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagMethodValueNode.php bd ^FBvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagValueNode.phpbdbΆCvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/GenericTagValueNode.phpbdxW7Cvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/InvalidTagValueNode.phpbdlyIvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypelessParamTagValueNode.phpbdy?vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocChildNode.phpbdEɤ@vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNode.phpbdֳAvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstFetchNode.phpbdGEvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFloatNode.phpbd,Pvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/QuoteAwareConstExprStringNode.php6 bd6 Nvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/DoctrineConstExprStringNode.phpbd̔Evendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFalseNode.phpGbdG.Fvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprStringNode.phpbdGvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprIntegerNode.phpbd^Dvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprTrueNode.phpEbdEEDvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNullNode.phpEbdE"ȸTIvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayItemNode.phpbdBΤEvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayNode.phpPbdP67vendor/phpstan/phpdoc-parser/src/Ast/NodeAttributes.phpbdDŽ54vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor.php bd -vendor/phpstan/phpdoc-parser/src/Ast/Node.phpbdL)ӤCvendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor/CloningVisitor.php%bd%b:vendor/phpstan/phpdoc-parser/src/Ast/Type/ThisTypeNode.php7bd76vendor/phpstan/phpdoc-parser/src/Ast/Type/TypeNode.phpbdld祤Bvendor/phpstan/phpdoc-parser/src/Ast/Type/OffsetAccessTypeNode.phpbdOBvendor/phpstan/phpdoc-parser/src/Ast/Type/IntersectionTypeNode.phpbd%@vendor/phpstan/phpdoc-parser/src/Ast/Type/IdentifierTypeNode.phpbdkrT>vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php&bd&~ߤAvendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeItemNode.php!bd!nG7=vendor/phpstan/phpdoc-parser/src/Ast/Type/InvalidTypeNode.phpybdyݐx=vendor/phpstan/phpdoc-parser/src/Ast/Type/GenericTypeNode.phpBbdBʤ=vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeNode.php\bd\ǁ8;vendor/phpstan/phpdoc-parser/src/Ast/Type/UnionTypeNode.phpbduϤAvendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeNode.phpbd~Gvendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeParameterNode.phpbd|KԤ;vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.phpbdncMvendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeForParameterNode.phpbd5@vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.phpbd(%h&>vendor/phpstan/phpdoc-parser/src/Ast/Type/NullableTypeNode.phpbd{t<vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.phpbd_ޤ;vendor/phpstan/phpdoc-parser/src/Ast/Type/ConstTypeNode.php>bd>i6y2vendor/phpstan/phpdoc-parser/src/Ast/Attribute.phpPbdP^0vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.phpbdހQvendor/psr/container/LICENSEybdyOp/vendor/psr/container/src/ContainerInterface.php&bd&X7vendor/psr/container/src/NotFoundExceptionInterface.phpbdf8vendor/psr/container/src/ContainerExceptionInterface.phpbdvendor/psr/log/LICENSE=bd=pO%vendor/psr/log/Psr/Log/NullLogger.phpbdNI+vendor/psr/log/Psr/Log/LoggerAwareTrait.phpbd)i*vendor/psr/log/Psr/Log/LoggerInterface.php9 bd9 xFu3vendor/psr/log/Psr/Log/InvalidArgumentException.phpwbdw6¤/vendor/psr/log/Psr/Log/LoggerAwareInterface.php@bd@]at#vendor/psr/log/Psr/Log/LogLevel.phpPbdPL)vendor/psr/log/Psr/Log/AbstractLogger.php0 bd0 I&vendor/psr/log/Psr/Log/LoggerTrait.phpf bdf Vlvendor/composer/LICENSE.bd. &vendor/composer/xdebug-handler/LICENSE)bd)#;^4vendor/composer/xdebug-handler/src/XdebugHandler.phpVNbdVN0vendor/composer/xdebug-handler/src/PhpConfig.phpbd7@i-vendor/composer/xdebug-handler/src/Status.phpbd5l.vendor/composer/xdebug-handler/src/Process.phpR bdR Rvendor/composer/semver/LICENSEbdBh(vendor/composer/semver/src/Intervals.phpNbdN,vendor/composer/semver/src/VersionParser.phpeTbdeT#9vendor/composer/semver/src/Constraint/MultiConstraint.phpD#bdD#_'<vendor/composer/semver/src/Constraint/MatchAllConstraint.phpbd ~J/vendor/composer/semver/src/Constraint/Bound.phpI bdI pKI4vendor/composer/semver/src/Constraint/Constraint.php0bd04ͤ=vendor/composer/semver/src/Constraint/ConstraintInterface.phpbdIp=vendor/composer/semver/src/Constraint/MatchNoneConstraint.phpbdc}a'vendor/composer/semver/src/Interval.phpbdX6c{%vendor/composer/semver/src/Semver.php\ bd\ )vendor/composer/semver/src/Comparator.phpj bdj P/vendor/composer/semver/src/CompilingMatcher.php5 bd5 V!vendor/composer/autoload_psr4.php bd 2Ĥvendor/composer/ClassLoader.php?bd?2@u!vendor/composer/autoload_real.phpbd?Τ%vendor/composer/autoload_classmap.phpbd~>vendor/composer/pcre/LICENSEbdhg^(vendor/composer/pcre/src/MatchResult.phpbde+6vendor/composer/pcre/src/MatchAllWithOffsetsResult.phpbdr!vendor/composer/pcre/src/Preg.phpDbdDR 54vendor/composer/pcre/src/MatchStrictGroupsResult.phpbdINT*vendor/composer/pcre/src/PcreException.php bd *vendor/composer/pcre/src/ReplaceResult.phpbd]Dy+vendor/composer/pcre/src/MatchAllResult.phpbd'ZA$3vendor/composer/pcre/src/MatchWithOffsetsResult.phpbdN 9vendor/composer/pcre/src/UnexpectedNullMatchException.phpbdV7vendor/composer/pcre/src/MatchAllStrictGroupsResult.phpbdQ"vendor/composer/pcre/src/Regex.phpbd"vendor/composer/autoload_files.phpbdkPvendor/composer/installed.phpUbdUM$ZV'vendor/composer/autoload_namespaces.phpbd/t#vendor/composer/autoload_static.phpbdVC"vendor/composer/platform_check.phpbdqK\%vendor/composer/InstalledVersions.phpK?bdK?$švendor/autoload.phpbdb9a-vendor/spatie/array-to-xml/src/ArrayToXml.phpbd}.a%vendor/netresearch/jsonmapper/LICENSER(bdR((}:vendor/netresearch/jsonmapper/src/JsonMapper/Exception.php0bd0K0vendor/netresearch/jsonmapper/src/JsonMapper.phpsbds2_vendor/webmozart/assert/LICENSE<bd<t}&vendor/webmozart/assert/src/Assert.phpbd8vendor/webmozart/assert/src/InvalidArgumentException.phpqbdq%vendor/webmozart/assert/src/Mixin.php=bd=[n4vendor/felixfbecker/language-server-protocol/LICENSEbd>9>vendor/felixfbecker/language-server-protocol/src/FileEvent.phpbd!p˺Uvendor/felixfbecker/language-server-protocol/src/TypeDefinitionClientCapabilities.phpbdmFvendor/felixfbecker/language-server-protocol/src/SymbolInformation.phpbdTvendor/felixfbecker/language-server-protocol/src/DocumentOnTypeFormattingOptions.phpbd{a~`vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesSymbolKind.phpbd/ݤLvendor/felixfbecker/language-server-protocol/src/TextDocumentSyncOptions.phpbdvUvendor/felixfbecker/language-server-protocol/src/SelectionRangeClientCapabilities.phpJbdJwvendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesCodeActionLiteralSupportcodeActionKind.phpbd Tvendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilities.phpbd|,sPvendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesWorkspace.phpibdiפ|vendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilitiesSignatureInformationParameterInformation.php!bd!:Yvendor/felixfbecker/language-server-protocol/src/ShowMessageRequestClientCapabilities.phpbdunW?vendor/felixfbecker/language-server-protocol/src/LogMessage.php6bd61*:Lvendor/felixfbecker/language-server-protocol/src/HoverClientCapabilities.phpEbdElCWBvendor/felixfbecker/language-server-protocol/src/DiagnosticTag.php@bd@e Vvendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilities.phpbdAW3Mvendor/felixfbecker/language-server-protocol/src/RenameClientCapabilities.phpbdAkGvendor/felixfbecker/language-server-protocol/src/CodeActionDisabled.phpbdSJ=vendor/felixfbecker/language-server-protocol/src/Location.php)bd)a3:vendor/felixfbecker/language-server-protocol/src/Hover.phpbdYvendor/felixfbecker/language-server-protocol/src/DocumentFormattingClientCapabilities.phpbd7 |=vendor/felixfbecker/language-server-protocol/src/TextEdit.phpzbdzܤUvendor/felixfbecker/language-server-protocol/src/ExecuteCommandClientCapabilities.phpybdyG ѤIvendor/felixfbecker/language-server-protocol/src/ParameterInformation.phpbd=:૤Dvendor/felixfbecker/language-server-protocol/src/CodeDescription.phpbd8.dvendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesResolveSupport.phpbda-Ĥ_vendor/felixfbecker/language-server-protocol/src/DocumentOnTypeFormattingClientCapabilities.phpbd<"ݤEvendor/felixfbecker/language-server-protocol/src/SymbolDescriptor.phpbd^Fvendor/felixfbecker/language-server-protocol/src/PackageDescriptor.phpbd9__vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItem.phpbd_'mHvendor/felixfbecker/language-server-protocol/src/FailureHandlingKind.php=bd=\Uvendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilities.phpbdEm=vendor/felixfbecker/language-server-protocol/src/LogTrace.phpbd9Gvendor/felixfbecker/language-server-protocol/src/ServerCapabilities.php bd kvendor/felixfbecker/language-server-protocol/src/WorkspaceEditClientCapabilitiesChangeAnnotationSupport.phpbd-ldޤJvendor/felixfbecker/language-server-protocol/src/ResourceOperationKind.phpbdOŤCvendor/felixfbecker/language-server-protocol/src/CompletionItem.phpbd, =vendor/felixfbecker/language-server-protocol/src/CodeLens.phpbdA^vendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesWorkspaceFileOperations.phpnbdnsEvendor/felixfbecker/language-server-protocol/src/TextDocumentItem.phpbddAvendor/felixfbecker/language-server-protocol/src/MarkedString.phpbdD&Fvendor/felixfbecker/language-server-protocol/src/CompletionItemTag.phpbd5@vendor/felixfbecker/language-server-protocol/src/TokenFormat.phpbdx]Bvendor/felixfbecker/language-server-protocol/src/WorkspaceEdit.php> bd> Gvendor/felixfbecker/language-server-protocol/src/ContentChangeEvent.phpfbdfKؤCvendor/felixfbecker/language-server-protocol/src/InsertTextMode.phpbd >L:vendor/felixfbecker/language-server-protocol/src/Range.phpbdg\dJvendor/felixfbecker/language-server-protocol/src/ExecuteCommandOptions.phpgbdg!CFvendor/felixfbecker/language-server-protocol/src/CompletionOptions.phpbd]1^vendor/felixfbecker/language-server-protocol/src/SemanticTokensWorkspaceClientCapabilities.phpbd |\vendor/felixfbecker/language-server-protocol/src/DidChangeWatchedFilesClientCapabilities.phpbdOXTvendor/felixfbecker/language-server-protocol/src/WorkspaceEditClientCapabilities.phpbdDߟ Fvendor/felixfbecker/language-server-protocol/src/DocumentHighlight.phpbdh"Jvendor/felixfbecker/language-server-protocol/src/DocumentHighlightKind.phpbd<HSvendor/felixfbecker/language-server-protocol/src/FoldingRangeClientCapabilities.phpbdһQvendor/felixfbecker/language-server-protocol/src/DiagnosticRelatedInformation.phpbdUͬOvendor/felixfbecker/language-server-protocol/src/CodeLensClientCapabilities.phpbd[Ivendor/felixfbecker/language-server-protocol/src/SignatureInformation.phpbdrʤivendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesCodeActionLiteralSupport.phpbdNJvendor/felixfbecker/language-server-protocol/src/CodeActionTriggerKind.phpbd._vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionList.phpbdʌYYvendor/felixfbecker/language-server-protocol/src/LinkedEditingRangeClientCapabilities.phpLbdL&Kդ]vendor/felixfbecker/language-server-protocol/src/DidChangeConfigurationClientCapabilities.phpbd9Y?vendor/felixfbecker/language-server-protocol/src/Diagnostic.php bd cvendor/felixfbecker/language-server-protocol/src/PublishDiagnosticsClientCapabilitiesTagSupport.phpbd.Nvendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesGeneral.phpbd\T:Cvendor/felixfbecker/language-server-protocol/src/CompletionList.phpbdNJYvendor/felixfbecker/language-server-protocol/src/PublishDiagnosticsClientCapabilities.phpbdoMvendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesWindow.phpEbdEvendor/felixfbecker/language-server-protocol/src/ErrorCode.phpibdiZPA6Ovendor/felixfbecker/language-server-protocol/src/MarkdownClientCapabilities.phpbd gXEvendor/felixfbecker/language-server-protocol/src/ChangeAnnotation.phpbd9Evendor/felixfbecker/language-server-protocol/src/InitializeResult.phpbdeB3Nvendor/felixfbecker/language-server-protocol/src/MonikerClientCapabilities.phpAbdA<_vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilitiesTagSupport.phpKbdKiܤmvendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemResolveSupport.phpbdvНTvendor/felixfbecker/language-server-protocol/src/CallHierarchyClientCapabilities.phpHbdH&> O<vendor/felixfbecker/language-server-protocol/src/Command.phpbdJvendor/felixfbecker/language-server-protocol/src/CompletionTriggerKind.php6bd6$Rvendor/felixfbecker/language-server-protocol/src/PrepareSupportDefaultBehavior.php bd  Nujvendor/felixfbecker/language-server-protocol/src/ShowMessageRequestClientCapabilitiesMessageActionItem.php bd ؿpSvendor/felixfbecker/language-server-protocol/src/DocumentLinkClientCapabilities.phpbdd ivendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemTagSupport.phpbd.Fvendor/felixfbecker/language-server-protocol/src/CompletionContext.php$bd$32%@Gvendor/felixfbecker/language-server-protocol/src/CompletionItemKind.phpbdtԀQvendor/felixfbecker/language-server-protocol/src/DefinitionClientCapabilities.phpobdoM/Wvendor/felixfbecker/language-server-protocol/src/TextDocumentSyncClientCapabilities.phpJbdJ Bc>vendor/felixfbecker/language-server-protocol/src/SymbolTag.php-bd-MiDvendor/felixfbecker/language-server-protocol/src/WorkspaceFolder.phpbdAZOvendor/felixfbecker/language-server-protocol/src/CompletionItemLabelDetails.php~bd~AiOvendor/felixfbecker/language-server-protocol/src/InitializeResultServerInfo.phpbd4!Ϥ_vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesResolveSupport.phpbdTtvendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemInsertTextModeSupport.phpbd!\Bvendor/felixfbecker/language-server-protocol/src/MarkupContent.phpbdX'#Fvendor/felixfbecker/language-server-protocol/src/CodeActionContext.php,bd,äFvendor/felixfbecker/language-server-protocol/src/MessageActionItem.phpqbdq=ҤBvendor/felixfbecker/language-server-protocol/src/SignatureHelp.php$bd$ݤYvendor/felixfbecker/language-server-protocol/src/RegularExpressionsClientCapabilities.php[bd[wu?vendor/felixfbecker/language-server-protocol/src/MarkupKind.php$bd$iHvendor/felixfbecker/language-server-protocol/src/DependencyReference.phpbdچӤXvendor/felixfbecker/language-server-protocol/src/DocumentHighlightClientCapabilities.phpbdǡᝤFvendor/felixfbecker/language-server-protocol/src/FormattingOptions.phpbdJGvendor/felixfbecker/language-server-protocol/src/DiagnosticSeverity.phpkbdkSTvendor/felixfbecker/language-server-protocol/src/VersionedTextDocumentIdentifier.phpbdeb٤Evendor/felixfbecker/language-server-protocol/src/ReferenceContext.phpbdœv`vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesTagSupport.phpbd\Vl@vendor/felixfbecker/language-server-protocol/src/SaveOptions.php'bd'zPvendor/felixfbecker/language-server-protocol/src/ReferenceClientCapabilities.phpwbdw Rvendor/felixfbecker/language-server-protocol/src/DeclarationClientCapabilities.phpbd,]vendor/felixfbecker/language-server-protocol/src/SemanticTokensClientCapabilitiesRequests.phpbdk"Svendor/felixfbecker/language-server-protocol/src/ShowDocumentClientCapabilities.phpVbdVMyXvendor/felixfbecker/language-server-protocol/src/CodeLensWorkspaceClientCapabilities.phpbdj:LTvendor/felixfbecker/language-server-protocol/src/DocumentColorClientCapabilities.phpbdt8@vendor/felixfbecker/language-server-protocol/src/MessageType.phpkbdkz Ehvendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilitiesSignatureInformation.phpbdVko_vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilitiesSymbolKind.phpbdfSvendor/felixfbecker/language-server-protocol/src/TextDocumentContentChangeEvent.phprbdrps Qvendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilities.php bd eCzIvendor/felixfbecker/language-server-protocol/src/ReferenceInformation.php`bd`qPEvendor/felixfbecker/language-server-protocol/src/InsertTextFormat.phpbd LA2?vendor/felixfbecker/language-server-protocol/src/SymbolKind.phpbdҖ#ڤIvendor/felixfbecker/language-server-protocol/src/TextDocumentSyncKind.php>bd>^XBUvendor/felixfbecker/language-server-protocol/src/SemanticTokensClientCapabilities.phpbd ^vendor/felixfbecker/language-server-protocol/src/DocumentRangeFormattingClientCapabilities.phpbdbl=vendor/felixfbecker/language-server-protocol/src/Position.phpbd3-Kvendor/felixfbecker/language-server-protocol/src/TextDocumentIdentifier.phpbd Ivendor/felixfbecker/language-server-protocol/src/SignatureHelpOptions.phpbdlDvendor/felixfbecker/language-server-protocol/src/CodeLensOptions.phpqbdqiy*Gvendor/felixfbecker/language-server-protocol/src/ClientCapabilities.phpbd+Ϧ?vendor/felixfbecker/language-server-protocol/src/ClientInfo.php bd BNvendor/felixfbecker/language-server-protocol/src/SymbolLocationInformation.phpzbdz&Uvendor/felixfbecker/language-server-protocol/src/ImplementationClientCapabilities.phpbd&Cvendor/felixfbecker/language-server-protocol/src/FileChangeType.phpTbdTW񝷤Cvendor/felixfbecker/language-server-protocol/src/CodeActionKind.phpbd~'NSvendor/felixfbecker/language-server-protocol/src/TextDocumentClientCapabilities.php+bd+Z7?vendor/felixfbecker/language-server-protocol/src/CodeAction.phpbdQ 9vendor/felixfbecker/language-server-protocol/package.jsonNbdN2W>>vendor/felixfbecker/language-server-protocol/package-lock.jsonNbdNj\-vendor/felixfbecker/advanced-json-rpc/LICENSEbd>9:vendor/felixfbecker/advanced-json-rpc/lib/Notification.phpbdx~3vendor/felixfbecker/advanced-json-rpc/lib/Error.phpbdl5vendor/felixfbecker/advanced-json-rpc/lib/Request.phpbdLy@Ϥ8vendor/felixfbecker/advanced-json-rpc/lib/Dispatcher.phpbdA_=vendor/felixfbecker/advanced-json-rpc/lib/SuccessResponse.phphbdhwYX7vendor/felixfbecker/advanced-json-rpc/lib/ErrorCode.php bd i;vendor/felixfbecker/advanced-json-rpc/lib/ErrorResponse.phprbdr!U6vendor/felixfbecker/advanced-json-rpc/lib/Response.phpbd f5vendor/felixfbecker/advanced-json-rpc/lib/Message.phpbdLo vendor/amphp/byte-stream/LICENSE6bd6\>W1vendor/amphp/byte-stream/lib/ZlibOutputStream.phpg bdg Ս[*vendor/amphp/byte-stream/lib/functions.phpbdŻ@0vendor/amphp/byte-stream/lib/ClosedException.phpqbdq򴕎-vendor/amphp/byte-stream/lib/OutputStream.phpJbdJӔ5vendor/amphp/byte-stream/lib/ResourceOutputStream.php0*bd0* O,vendor/amphp/byte-stream/lib/InputStream.phpObdOO0vendor/amphp/byte-stream/lib/ZlibInputStream.php bd 3s(vendor/amphp/byte-stream/lib/Payload.php bd sS+vendor/amphp/byte-stream/lib/LineReader.php bd % 1vendor/amphp/byte-stream/lib/InputStreamChain.phpbdG/vendor/amphp/byte-stream/lib/IteratorStream.phpbdk10vendor/amphp/byte-stream/lib/StreamException.phpfbdfXh8-vendor/amphp/byte-stream/lib/OutputBuffer.phpbd1ɤBvendor/amphp/byte-stream/lib/Base64/Base64EncodingOutputStream.phpbd%mAvendor/amphp/byte-stream/lib/Base64/Base64DecodingInputStream.phpPbdPL3wBvendor/amphp/byte-stream/lib/Base64/Base64DecodingOutputStream.phpbdڟAvendor/amphp/byte-stream/lib/Base64/Base64EncodingInputStream.phpbdi4vendor/amphp/byte-stream/lib/ResourceInputStream.php<bd<iФ1vendor/amphp/byte-stream/lib/PendingReadError.phpbdD#f/vendor/amphp/byte-stream/lib/InMemoryStream.phpbde(vendor/amphp/byte-stream/lib/Message.phppbdp\vendor/amphp/amp/LICENSEqbdqrg&vendor/amphp/amp/lib/CallableMaker.php bd 7&!vendor/amphp/amp/lib/Producer.phpbdMH*vendor/amphp/amp/lib/Loop.phpFbdF]9vendor/amphp/amp/lib/Loop/UnsupportedFeatureException.php(bd(] &vendor/amphp/amp/lib/Loop/EvDriver.php!bd!62r)vendor/amphp/amp/lib/Loop/EventDriver.phpL%bdL%Zf%vendor/amphp/amp/lib/Loop/Watcher.phpbd)l*vendor/amphp/amp/lib/Loop/NativeDriver.php8bd8bp1vendor/amphp/amp/lib/Loop/InvalidWatcherError.php*bd*ArΤ&vendor/amphp/amp/lib/Loop/UvDriver.php(bd(3#i+vendor/amphp/amp/lib/Loop/DriverFactory.phpbdFĤ+vendor/amphp/amp/lib/Loop/TracingDriver.phpibdi `;1vendor/amphp/amp/lib/Loop/Internal/TimerQueue.phpJbdJv$vendor/amphp/amp/lib/Loop/Driver.phpCgbdCgD Ѥ!vendor/amphp/amp/lib/Iterator.php\bd\͈"vendor/amphp/amp/lib/functions.php]bd]˛2vendor/amphp/amp/lib/CombinedCancellationToken.phpbdRKe1vendor/amphp/amp/lib/TimeoutCancellationToken.php3bd3d vendor/amphp/amp/lib/Delayed.phpbd, vendor/amphp/amp/lib/Emitter.phpbdp؄;*vendor/amphp/amp/lib/InvalidYieldError.phpbdaT-!vendor/amphp/amp/lib/Deferred.php)bd) vendor/amphp/amp/lib/Failure.phpbdͧU vendor/amphp/amp/lib/Success.phpbd|JHvendor/amphp/amp/lib/Struct.phpbd6?-vendor/amphp/amp/lib/Internal/Placeholder.php+bd++1vendor/amphp/amp/lib/Internal/PrivateIterator.phpbd['0vendor/amphp/amp/lib/Internal/PrivatePromise.php1bd1fM*vendor/amphp/amp/lib/Internal/Producer.php,bd,=41vendor/amphp/amp/lib/Internal/ResolutionQueue.php bd ;+vendor/amphp/amp/lib/Internal/functions.php bd 5?"vendor/amphp/amp/lib/Coroutine.php)bd)Z)vendor/amphp/amp/lib/TimeoutException.phpbd"$vendor/amphp/amp/lib/LazyPromise.phpbddaL+vendor/amphp/amp/lib/CancelledException.phpkbdkU.vendor/amphp/amp/lib/NullCancellationToken.phpbd: vendor/amphp/amp/lib/Promise.phpbd0vendor/amphp/amp/lib/CancellationTokenSource.php=bd=򹿤-vendor/amphp/amp/lib/MultiReasonException.phpbd[U*vendor/amphp/amp/lib/CancellationToken.phpbd`҅yvendor/nikic/php-parser/LICENSEbd*%vendor/nikic/php-parser/bin/php-parsezbdzAԤ6vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php>bd>?vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.phpbdmq@vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.phpХbdХ2DT7vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.phpl'bdl'fY`<vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php%bd%@ޤ0vendor/nikic/php-parser/lib/PhpParser/Parser.phpbd1|4vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php bd cT8vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php+bd+/vendor/nikic/php-parser/lib/PhpParser/Error.phpbdZe/vendor/nikic/php-parser/lib/PhpParser/Lexer.phpZbdZE4vendor/nikic/php-parser/lib/PhpParser/NodeDumper.phpbdBX&5vendor/nikic/php-parser/lib/PhpParser/NameContext.php+&bd+&vK5vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php,bd, IӤ9vendor/nikic/php-parser/lib/PhpParser/Parser/Multiple.phpbd?v_5vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.phpUbdU9C7vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php5bd5Τ=vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.phpbd6vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.phpibdi$5vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php/ bd/ A7vendor/nikic/php-parser/lib/PhpParser/ParserFactory.phpbdb{[vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.phpbdaSvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.phpbd\-Mvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.phpbd:㳤Svendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.phpjbdj(Wvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php)bd)X5uKvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.phpbdh㊤Wvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php bd dsOAMvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.phpbdՈI0Ovendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.phpbdK>s]vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.phptbdte$Mvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.phpbd,zcPvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.phpbd?1Ovendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.phpbd/Svendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.phpbd Ƥ9vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.phpN$bdN$65vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.phpbd/8vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php%bd%yZ.vendor/nikic/php-parser/lib/PhpParser/Node.phpbdNf4Mvendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.phpbdk>0Dvendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.phpbdDvendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php?bd?ߠؤIvendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php8bd8P| Bvendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php&bd& `VVKvendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.phpbdW#1vendor/nikic/php-parser/lib/PhpParser/Comment.phpbdݚ9vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php<bd<3Ϥ>vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php $bd $.ZzLvendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.phpbd/-;vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.phpFbdF%Fvendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.phpnbdnS8vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.phpbd sAvendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.phpbd&H?vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.phpbdQ1vendor/nikic/php-parser/lib/PhpParser/Builder.phpbdFm?5vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.phpzbdzK3ʤ4vendor/nikic/php-parser/lib/PhpParser/Node/Param.phpbdU5vendor/nikic/php-parser/lib/PhpParser/Node/Const_.phpbd噤@vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.phpbdթ3vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.phpbd%:2vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php]bd] ^f3vendor/nikic/php-parser/lib/PhpParser/Node/Expr.phpbdl˗:vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.phpqbdq'ݛ<vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.phpbdsBvendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.phpbd M9vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php bd C;vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.phpbdI?Gvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.phprbdr$Gvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.phptbdtEvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.phpnbdn갤Dvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.phpkbdk$RJvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php{bd{,d__Gvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.phprbdr!Evendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.phpnbdnTKvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php~bd~ޱ =vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.phpbdW=vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php bd Q8@vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.phpbdb=vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.phpbd t#Hvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.phpbd>~>vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.phpbd: Bvendor/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.phpbd+<8vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.phpbd&E=vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.phpbdG3vendor/nikic/php-parser/lib/PhpParser/Node/Name.php>bd>xt߃?vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.phpbdMs9vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.phpbdcT=vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.phpbdFT9>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.phpbd/t<vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php`bd`g*>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.phpbdcǎ<vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.phpbd 49vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php bd XmģCvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.phpbd@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.phpbdL>ޤAvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.phpbd缤Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.phpbd5V@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.phpbd $^Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.phpbd3m๤Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.phpbd, Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.phpbd wBvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.phpbdk&Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.phpbdRt@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.phpbd?Evendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.phpbdke@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.phpbdnѤIvendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.phpbdP>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.phpbdp >vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.phpbdj<vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.phpbd,֤:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.phpbd}f:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.phpzbdz/?vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.phpbdaeCvendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.phpDbdD&HAvendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.phpbdK;vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php bd ǩl:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.phpbd߱9vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.phpbd.3=vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.phpbd:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.phpbd կ>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.phpbdg:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.phpbd_aAvendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php bd ,pwZ=vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.phpfbdfjH:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.phpbdŤ:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.phpbdVdAvendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.phpkbdk$ Avendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.phpbd/>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.phpbdFc;vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.phpbd0?vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.phpbd[@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.phpbd >vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.phpbdtBZ?vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.phpbd؋=vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.phpbdm_u@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.phpbdZa?vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.phpbd5E=vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.phpbdX=vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.phpbdݤGvendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.phpbbdb<vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.phpbdr+:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.phpbd;vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php bd r/.9vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php#bd#ŽYq:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.phpVbdVIP#>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.phpbdԤFvendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.phpbdh<vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.phpbd(;vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.phpbd8vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.phpbd1:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php5bd52<vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.phpbbdb\|8vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php_bd_Cvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.phpfbdfgNXFvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.phpnbdn^%Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.phpobdo63Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.phpmbdm,CGvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.phppbdpv@Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.phppbdpFvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.phpmbdmBvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.phpdbdd9Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.phplbdlt@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php`bd`1uBvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.phpebdefEvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.phpkbdkY#`2Evendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.phpkbdkiSDvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.phphbdh}@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.phpabda:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.phpbdvl>vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.phpbd+:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.phpbdYA<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.phpbd 89vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.phpbd7̤Bvendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.phpbdLj<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php bd b#tŤ;vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.phpgbdg <Fvendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php8bd87:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.phpbd\<.<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.phpbd=e;vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.phpbd[:ͤ8vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php\bd\e3¤<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.phpbdf줤;vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.phpbd1<9vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php=bd=<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.phpbd{_R;vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.phpSbdSMDvendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.phpbdH>vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php bd :8vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.phpbd B9vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.phpbd'U<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.phpbd+7vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.phpXbdX<5k =vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.phpbdv¤;vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.phpbdjw:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.phpbdk%7vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php^bd^Jƚ<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.phpBbdB/ʤ=vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.phpbd y:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.phpbd]H9vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php[bd[Q9vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.phpbdM5@vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php%bd%O(N:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.phpbdB>vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.phpbdRs:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.phpbdck<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php7bd7>AQ=vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.phpY bdY :n7vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php`bd`Po&:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php!bd!+>vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.phpbddna9vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.phpbdޙ΁=vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php bd L:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.phpbd[; q:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.phpcbdc $Lvendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php_bd_[r֤Qvendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.phpxbdx>vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.phpbd;)?vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php*bd*&ޒG7vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.phpbdH**8vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.phpubduʿ%;vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.phpbdn3@vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.phpbd+<vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php" bd" } ^7vendor/nikic/php-parser/lib/PhpParser/Builder/Param.phpbd5*:vendor/nikic/php-parser/lib/PhpParser/Builder/Property.phpbd&Dvendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.phpbd,vӤ8vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.phpbd[M:vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.phpbd"_ C8vendor/nikic/php-parser/lib/PhpParser/Builder/Method.phpbdO.=vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php bd asפ:vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.phpbd 5դ<vendor/nikic/php-parser/lib/PhpParser/Builder/ClassConst.phpBbdB9% 6vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php*bd*]>vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.phpbdg7vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php bd @p;vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.phpbd8vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php!bd!Ǥ<vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.phpbdT5vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.phpbdSI(vendor/nikic/php-parser/grammar/tokens.y bd C~j2vendor/nikic/php-parser/grammar/rebuildParsers.phpbdפ&vendor/nikic/php-parser/grammar/php7.ybdY,vendor/nikic/php-parser/grammar/phpyLang.phpbd /vendor/nikic/php-parser/grammar/parser.template bd -ɚQ&vendor/nikic/php-parser/grammar/php5.ybd /vendor/nikic/php-parser/grammar/tokens.template*bd*_֤/vendor/symfony/polyfill-intl-normalizer/LICENSE)bd)\5vendor/symfony/polyfill-intl-normalizer/bootstrap.php0bd0xzӤ7vendor/symfony/polyfill-intl-normalizer/bootstrap80.php+bd+N6vendor/symfony/polyfill-intl-normalizer/Normalizer.phpO$bdO$(Tvendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.phpbd2FXvendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.phpbdLvendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php.bd.(QRvendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php=bd='Fvendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.phpbd ~Q(vendor/symfony/polyfill-mbstring/LICENSE)bd)\.vendor/symfony/polyfill-mbstring/bootstrap.php bd el0vendor/symfony/polyfill-mbstring/bootstrap80.phpP%bdP% \р-vendor/symfony/polyfill-mbstring/Mbstring.phppbdp. @vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.phpUbdU(m@vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.phpW[bdW[ۤFvendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.phpbd갤!vendor/symfony/filesystem/LICENSE,bd,U(vendor/symfony/filesystem/Filesystem.php/ubd/u8vendor/symfony/filesystem/Exception/RuntimeException.phpbdH3vendor/symfony/filesystem/Exception/IOException.phpbd8W:vendor/symfony/filesystem/Exception/ExceptionInterface.phpbdޤ@vendor/symfony/filesystem/Exception/InvalidArgumentException.phpbd,<vendor/symfony/filesystem/Exception/IOExceptionInterface.phpbd<#=vendor/symfony/filesystem/Exception/FileNotFoundException.phpbd"vendor/symfony/filesystem/Path.phpfbdfj3vendor/symfony/console/Helper/ProgressIndicator.phpbd6vendor/symfony/console/Helper/DebugFormatterHelper.php` bd` Z^90vendor/symfony/console/Helper/TableSeparator.php)bd)g0vendor/symfony/console/Helper/QuestionHelper.phpNbdN^I(vendor/symfony/console/Helper/Dumper.phpjbdjCʤ2vendor/symfony/console/Helper/InputAwareHelper.php-bd-kgO-vendor/symfony/console/Helper/ProgressBar.php6Hbd6HK#(vendor/symfony/console/Helper/Helper.phpbd;,vendor/symfony/console/Helper/TableStyle.php0bd0> ֤1vendor/symfony/console/Helper/HelperInterface.phpabdaG//vendor/symfony/console/Helper/ProcessHelper.phpbd+vendor/symfony/console/Helper/TableRows.phpZbdZF7vendor/symfony/console/Helper/SymfonyQuestionHelper.phpc bdc _ 'vendor/symfony/console/Helper/Table.phprbdr,+vendor/symfony/console/Helper/HelperSet.phpO bdO oSݤ0vendor/symfony/console/Helper/TableCellStyle.phplbdlV V2vendor/symfony/console/Helper/DescriptorHelper.php bd 3C1vendor/symfony/console/Helper/FormatterHelper.php bd u+vendor/symfony/console/Helper/TableCell.phpbd"(vendor/symfony/console/ConsoleEvents.phpbdv- /vendor/symfony/console/Style/StyleInterface.phpS bdS v-vendor/symfony/console/Style/SymfonyStyle.php&:bd&: ~Τ,vendor/symfony/console/Style/OutputStyle.php` bd` vendor/symfony/console/LICENSE,bd,U8vendor/symfony/console/Command/DumpCompletionCommand.phpbd=vendor/symfony/console/Command/SignalableCommandInterface.phpbd)Jf.vendor/symfony/console/Command/LazyCommand.phpcbdc0vendor/symfony/console/Command/LockableTrait.php;bd;| *vendor/symfony/console/Command/Command.phpPbdPb.vendor/symfony/console/Command/ListCommand.php9 bd9 XNT.vendor/symfony/console/Command/HelpCommand.phpB bdB sY2vendor/symfony/console/Command/CompleteCommand.php!bd!$ӂƤ.vendor/symfony/console/Attribute/AsCommand.phpRbdR;vendor/symfony/console/Completion/CompletionSuggestions.phpvbdv H65vendor/symfony/console/Completion/CompletionInput.phpo bdo L0vendor/symfony/console/Completion/Suggestion.phpbd<.Avendor/symfony/console/Completion/Output/BashCompletionOutput.php!bd!\ǤFvendor/symfony/console/Completion/Output/CompletionOutputInterface.phpbd2vendor/symfony/console/Question/ChoiceQuestion.phpbd8vendor/symfony/console/Question/ConfirmationQuestion.php-bd-_J",vendor/symfony/console/Question/Question.phpbdˉ8<@vendor/symfony/console/Tester/Constraint/CommandIsSuccessful.phpbd9vendor/symfony/console/Tester/CommandCompletionTester.php\bd\dž3vendor/symfony/console/Tester/ApplicationTester.php bd 22Ť-vendor/symfony/console/Tester/TesterTrait.phpbd (T/vendor/symfony/console/Tester/CommandTester.phpV bdV &鯤#vendor/symfony/console/Terminal.phpqbdqnDvendor/symfony/console/DependencyInjection/AddConsoleCommandPass.phpbd9; vendor/symfony/console/Color.phpbbdbwb9j+vendor/symfony/console/Input/ArrayInput.phpbdDF6&vendor/symfony/console/Input/Input.phpHbdHҶ5/vendor/symfony/console/Input/InputInterface.phpbd6},vendor/symfony/console/Input/StringInput.php bd ,vendor/symfony/console/Input/InputOption.php5bd5장f4vendor/symfony/console/Input/InputAwareInterface.phpPbdP0vendor/symfony/console/Input/InputDefinition.php`.bd`.Ⱥ.vendor/symfony/console/Input/InputArgument.php bd 2J{*vendor/symfony/console/Input/ArgvInput.php0bd0qΆ9vendor/symfony/console/Input/StreamableInputInterface.php~bd~ H2vendor/symfony/console/CI/GithubActionReporter.php bd 9j5?vendor/symfony/console/CommandLoader/CommandLoaderInterface.phpbd?vendor/symfony/console/CommandLoader/ContainerCommandLoader.php"bd"I =vendor/symfony/console/CommandLoader/FactoryCommandLoader.phpmbdm8vendor/symfony/console/SignalRegistry/SignalRegistry.phpHbdHX?*=vendor/symfony/console/Formatter/NullOutputFormatterStyle.phpbdf$9vendor/symfony/console/Formatter/OutputFormatterStyle.php bd 'wBvendor/symfony/console/Formatter/OutputFormatterStyleInterface.phpkbdk>vendor/symfony/console/Formatter/OutputFormatterStyleStack.php5 bd5 ;Fvendor/symfony/console/Formatter/WrappableOutputFormatterInterface.phpbd~Z4vendor/symfony/console/Formatter/OutputFormatter.phpbd'A=vendor/symfony/console/Formatter/OutputFormatterInterface.phpHbdH8vendor/symfony/console/Formatter/NullOutputFormatter.phpsbds8tLt!vendor/symfony/console/Cursor.phpGbdGz Q4vendor/symfony/console/Descriptor/TextDescriptor.php.2bd.2 R=<9vendor/symfony/console/Descriptor/DescriptorInterface.phpYbdY~73vendor/symfony/console/Descriptor/XmlDescriptor.phpE'bdE'Z0vendor/symfony/console/Descriptor/Descriptor.php: bd: W~ڤ4vendor/symfony/console/Descriptor/JsonDescriptor.phpbd݀T8vendor/symfony/console/Descriptor/MarkdownDescriptor.phpbd4 <vendor/symfony/console/Descriptor/ApplicationDescription.php4bd4n/vendor/symfony/console/Logger/ConsoleLogger.phpbd)R6vendor/symfony/console/EventListener/ErrorListener.phpy bdy פ1vendor/symfony/console/Output/OutputInterface.php| bd| s`5vendor/symfony/console/Output/TrimmedBufferOutput.phpzbdzaM.vendor/symfony/console/Output/StreamOutput.php bd /vendor/symfony/console/Output/ConsoleOutput.php/bd/e(vendor/symfony/console/Output/Output.phprbdrlHLϤ6vendor/symfony/console/Output/ConsoleSectionOutput.phpbdM?n,vendor/symfony/console/Output/NullOutput.phpD bdD I[5k0vendor/symfony/console/Output/BufferedOutput.phpgbdge~\8vendor/symfony/console/Output/ConsoleOutputInterface.php5bd5)ߤ=vendor/symfony/console/Exception/CommandNotFoundException.phpbdyJ΍;vendor/symfony/console/Exception/InvalidOptionException.phpbd3ɤ:vendor/symfony/console/Exception/MissingInputException.phpbd3sŤ5vendor/symfony/console/Exception/RuntimeException.phpbdY8w7vendor/symfony/console/Exception/ExceptionInterface.phpbdcQ&3vendor/symfony/console/Exception/LogicException.phpbdظm=vendor/symfony/console/Exception/InvalidArgumentException.phpbd{?vendor/symfony/console/Exception/NamespaceNotFoundException.phpbdK3vendor/symfony/console/SingleCommandApplication.phpGbdGA&vendor/symfony/console/Application.phpbdd-vendor/symfony/console/Event/ConsoleEvent.phpbdy" 4vendor/symfony/console/Event/ConsoleCommandEvent.phpbdaѼ2vendor/symfony/console/Event/ConsoleErrorEvent.php1bd1ʤ3vendor/symfony/console/Event/ConsoleSignalEvent.phpbdy6vendor/symfony/console/Event/ConsoleTerminateEvent.phpzbdz_y4vendor/symfony/console/Resources/bin/hiddeninput.exe$bd$v0vendor/symfony/console/Resources/completion.bash bd z(-vendor/symfony/polyfill-intl-grapheme/LICENSE)bd)\2vendor/symfony/polyfill-intl-grapheme/Grapheme.php&bd&Ĥ3vendor/symfony/polyfill-intl-grapheme/bootstrap.php bd 0=x5vendor/symfony/polyfill-intl-grapheme/bootstrap80.phpI bdI _aF%vendor/symfony/polyfill-php73/LICENSE)bd)`e0+vendor/symfony/polyfill-php73/bootstrap.phpbdݕ;'vendor/symfony/polyfill-php73/Php73.phpbd;?vendor/symfony/polyfill-php73/Resources/stubs/JsonException.phphbdhlH8Pvendor/symfony/string/LICENSE,bd,զ_Ϥ)vendor/symfony/string/CodePointString.phpbdb(vendor/symfony/string/AbstractString.php2Obd2O$vendor/symfony/string/ByteString.php<bd< ks/vendor/symfony/string/AbstractUnicodeString.phpribdri[0.vendor/symfony/string/Slugger/AsciiSlugger.phpAbdA7f~;2vendor/symfony/string/Slugger/SluggerInterface.phpbd3VzD4vendor/symfony/string/Inflector/EnglishInflector.php>bd>쨎96vendor/symfony/string/Inflector/InflectorInterface.phpZbdZ3vendor/symfony/string/Inflector/FrenchInflector.php@bd@mm$vendor/symfony/string/LazyString.php|bd|'vendor/symfony/string/UnicodeString.php2bd2LxH4vendor/symfony/string/Exception/RuntimeException.phpbdΤ6vendor/symfony/string/Exception/ExceptionInterface.phpgbdgj@ <vendor/symfony/string/Exception/InvalidArgumentException.phpbd% <vendor/symfony/string/Resources/data/wcswidth_table_wide.phpbd٤<vendor/symfony/string/Resources/data/wcswidth_table_zero.phpbdKS\-vendor/symfony/string/Resources/functions.phptbdt¤1vendor/symfony/deprecation-contracts/function.php4bd4m,vendor/symfony/deprecation-contracts/LICENSE)bd)2%vendor/symfony/polyfill-ctype/LICENSE)bd)`e0+vendor/symfony/polyfill-ctype/bootstrap.php4bd4߈9-vendor/symfony/polyfill-ctype/bootstrap80.phppbdpBB'vendor/symfony/polyfill-ctype/Ctype.phpbd2[Lܤ?vendor/symfony/service-contracts/ServiceSubscriberInterface.phpbdq (vendor/symfony/service-contracts/LICENSE)bd)5古@vendor/symfony/service-contracts/Attribute/SubscribedService.phpBbdB]ɤ7vendor/symfony/service-contracts/Attribute/Required.phpbd<1W;vendor/symfony/service-contracts/ServiceSubscriberTrait.phpbd'R3vendor/symfony/service-contracts/ResetInterface.phpbdRlX8vendor/symfony/service-contracts/ServiceLocatorTrait.phpbdܤ=vendor/symfony/service-contracts/ServiceProviderInterface.phpbdh%vendor/symfony/polyfill-php80/LICENSE$bd$LO! +vendor/symfony/polyfill-php80/bootstrap.phpbd E'vendor/symfony/polyfill-php80/Php80.php bd cH*vendor/symfony/polyfill-php80/PhpToken.phpbd]f<vendor/symfony/polyfill-php80/Resources/stubs/Stringable.phpbdt]\ڤ<vendor/symfony/polyfill-php80/Resources/stubs/ValueError.phpabdaGbEvendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.phpjbdj3::vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.phpwbdw=7T8;vendor/symfony/polyfill-php80/Resources/stubs/Attribute.phpbdMK<$vendor/doctrine/deprecations/LICENSE)bd)"0Uvendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php bd Fvendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php+$bd+$xnR'vendor/dnoegel/php-xdg-base-dir/LICENSE!bd!W&+vendor/dnoegel/php-xdg-base-dir/src/Xdg.php bd Yo-vendor/fidry/cpu-core-counter/bin/execute.phpwbdwș.vendor/fidry/cpu-core-counter/bin/diagnose.phpxbdx~4vendor/fidry/cpu-core-counter/src/CpuCoreCounter.phpwbdw !Ҥ:vendor/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.phpbd1s=?vendor/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.phpbdd~>vendor/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.phpbd^=:vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.phpbds?vendor/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.phpEbdEFΨ<vendor/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.phpzbdzA!W;vendor/fidry/cpu-core-counter/src/Finder/FinderRegistry.phpibdi.>vendor/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.phpbday=vendor/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php~bd~4Avendor/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.phpbd&EѤ8vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php.bd.VΤAvendor/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.phpbd~i@vendor/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php|bd|ߎ=vendor/fidry/cpu-core-counter/src/Finder/NProcessorFinder.phpbd".>vendor/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.phpbdC⑤?vendor/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.phpQbdQؤ@vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php* bd* |Y?vendor/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.phpbdɊ!>vendor/fidry/cpu-core-counter/src/Executor/ProcessExecutor.phpbdSp=vendor/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php(bd(s/vendor/fidry/cpu-core-counter/src/Diagnoser.phpbdadmvendor/sebastian/diff/LICENSE bd a1$vendor/sebastian/diff/src/Differ.php:$bd:$$\$vendor/sebastian/diff/src/Parser.php bd EMvendor/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php? bd? LI"vendor/sebastian/diff/src/Diff.phpybdye#vendor/sebastian/diff/src/Chunk.phpnbdnqlOvendor/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php bd ; Cvendor/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php(bd(QJ}=vendor/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php\bd\?vendor/sebastian/diff/src/Output/AbstractChunkOutputBuilder.phpbdf:vendor/sebastian/diff/src/Output/DiffOnlyOutputBuilder.phpbd4l?vendor/sebastian/diff/src/Output/DiffOutputBuilderInterface.php#bd#֠1vendor/sebastian/diff/src/Exception/Exception.phpybdyî@vendor/sebastian/diff/src/Exception/InvalidArgumentException.phpbdX%K>vendor/sebastian/diff/src/Exception/ConfigurationException.phpLbdL:@vendor/sebastian/diff/src/LongestCommonSubsequenceCalculator.phpbd62"vendor/sebastian/diff/src/Line.php[bd[t 0vendor/phpdocumentor/reflection-docblock/LICENSE8bd8ʤDvendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.phpIbdIʤDvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.phpxbdxYFvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.phpbd+IGvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.phpCbdC~ ͪFvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php bd *{BIvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/InvalidTag.phpJbdJEvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php" bd" JyLvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.phpObdOI(NEvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.phpybdy?=,Fvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.phpxbdxtEvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php bd dEvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php bd fOJvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TagWithType.phpbdҋEHvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php<bd<$^]vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.phpbdnWvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.phpbdaSvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php-bd-cDvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php bd YmCvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.phpbd\Rvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.phpbd75Lvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.phpbdBNvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.phpJbdJk6Fvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php bd q Cvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php bd Kvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.phpQbdQw= Evendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php bd =Cvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php:bd:'y1Ivendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php6 bd6 z!ΤBvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php bd =hLFvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php bd W.Lvendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.phpbdǤEvendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.phpbdgEGvendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.phpJbdJ2ULvendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.phpE2bdE2y0=vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tag.phpbdEtDvendor/phpdocumentor/reflection-docblock/src/DocBlock/TagFactory.phpbd=fIvendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.phpbd] @vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php0%bd0%s7F6vendor/phpdocumentor/reflection-docblock/src/Utils.php bd ܤ9vendor/phpdocumentor/reflection-docblock/src/DocBlock.phpbdjGHvendor/phpdocumentor/reflection-docblock/src/Exception/PcreException.phpbd *vendor/phpdocumentor/type-resolver/LICENSE8bd8ʤ5vendor/phpdocumentor/type-resolver/src/PseudoType.phpbdmf8vendor/phpdocumentor/type-resolver/src/FqsenResolver.php bd ~ڵHvendor/phpdocumentor/type-resolver/src/PseudoTypes/HtmlEscapedString.phpbdE<vendor/phpdocumentor/type-resolver/src/PseudoTypes/List_.phpbd+Cvendor/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyList.phpbd`=vendor/phpdocumentor/type-resolver/src/PseudoTypes/False_.phpbdEäFvendor/phpdocumentor/type-resolver/src/PseudoTypes/ConstExpression.phpbd6ddCvendor/phpdocumentor/type-resolver/src/PseudoTypes/IntegerRange.phpAbdAx@?vendor/phpdocumentor/type-resolver/src/PseudoTypes/Numeric_.php`bd`9Avendor/phpdocumentor/type-resolver/src/PseudoTypes/ArrayShape.phpabdayg֤Nvendor/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyLowercaseString.phpbd(פAvendor/phpdocumentor/type-resolver/src/PseudoTypes/FloatValue.phpbdh Evendor/phpdocumentor/type-resolver/src/PseudoTypes/CallableString.phpbdFBvendor/phpdocumentor/type-resolver/src/PseudoTypes/StringValue.phpbdXѤFvendor/phpdocumentor/type-resolver/src/PseudoTypes/PositiveInteger.phpbdmiBvendor/phpdocumentor/type-resolver/src/PseudoTypes/TraitString.phpbdu[QFvendor/phpdocumentor/type-resolver/src/PseudoTypes/LowercaseString.phpbdԿz!Dvendor/phpdocumentor/type-resolver/src/PseudoTypes/LiteralString.phpbdbEvendor/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyString.phpbdt%Dvendor/phpdocumentor/type-resolver/src/PseudoTypes/NumericString.phpbdEvendor/phpdocumentor/type-resolver/src/PseudoTypes/ArrayShapeItem.phpbd"!CFvendor/phpdocumentor/type-resolver/src/PseudoTypes/NegativeInteger.phpbd^`7<vendor/phpdocumentor/type-resolver/src/PseudoTypes/True_.phpbdPӤCvendor/phpdocumentor/type-resolver/src/PseudoTypes/IntegerValue.phpbdc t/vendor/phpdocumentor/type-resolver/src/Type.phpbd'7vendor/phpdocumentor/type-resolver/src/TypeResolver.phphWbdhWWz:vendor/phpdocumentor/type-resolver/src/Types/Iterable_.phpNbdNϗf7vendor/phpdocumentor/type-resolver/src/Types/Scalar.phpbd|פ;vendor/phpdocumentor/type-resolver/src/Types/Collection.phpbd`8vendor/phpdocumentor/type-resolver/src/Types/Boolean.phpbd4V?vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php,7bd,7n-9vendor/phpdocumentor/type-resolver/src/Types/Nullable.phpubduu$Ǥ7vendor/phpdocumentor/type-resolver/src/Types/Mixed_.phpbdBĤ=vendor/phpdocumentor/type-resolver/src/Types/Intersection.php4bd48vendor/phpdocumentor/type-resolver/src/Types/String_.phpbdț8vendor/phpdocumentor/type-resolver/src/Types/Static_.php#bd#@9,@vendor/phpdocumentor/type-resolver/src/Types/InterfaceString.phpbd9<vendor/phpdocumentor/type-resolver/src/Types/ClassString.phpkbdko6vendor/phpdocumentor/type-resolver/src/Types/Self_.phpbd$f9vendor/phpdocumentor/type-resolver/src/Types/Compound.php%bd%x8vendor/phpdocumentor/type-resolver/src/Types/Integer.phpbdWKBvendor/phpdocumentor/type-resolver/src/Types/CallableParameter.phpobdoHF:vendor/phpdocumentor/type-resolver/src/Types/Resource_.phpbdc7vendor/phpdocumentor/type-resolver/src/Types/Never_.phpbd 8vendor/phpdocumentor/type-resolver/src/Types/Context.php bd 18vendor/phpdocumentor/type-resolver/src/Types/Parent_.phpbdȩؤ5vendor/phpdocumentor/type-resolver/src/Types/This.phpwbdw[ߒ?vendor/phpdocumentor/type-resolver/src/Types/AggregatedType.php bd ==vendor/phpdocumentor/type-resolver/src/Types/AbstractList.phpbdQfA7vendor/phpdocumentor/type-resolver/src/Types/Float_.phpbd8vendor/phpdocumentor/type-resolver/src/Types/Object_.phpbdI7vendor/phpdocumentor/type-resolver/src/Types/Array_.phpbd,MA;vendor/phpdocumentor/type-resolver/src/Types/Expression.phpFbdFs6vendor/phpdocumentor/type-resolver/src/Types/Void_.php%bd%+*9vendor/phpdocumentor/type-resolver/src/Types/ArrayKey.phpbd%wD:vendor/phpdocumentor/type-resolver/src/Types/Callable_.phpbd$6vendor/phpdocumentor/type-resolver/src/Types/Null_.phpbd|nI.vendor/phpdocumentor/reflection-common/LICENSE9bd9*2Ȑ7vendor/phpdocumentor/reflection-common/src/Location.phpbdXJܤ6vendor/phpdocumentor/reflection-common/src/Project.phpbddQݤ6vendor/phpdocumentor/reflection-common/src/Element.phpbd$^=vendor/phpdocumentor/reflection-common/src/ProjectFactory.phpnbdnI3vendor/phpdocumentor/reflection-common/src/File.phpbd%`#4vendor/phpdocumentor/reflection-common/src/Fqsen.phpbdwQo config.xsdSbdSUŞ!dictionaries/CallMap_73_delta.php+bd+|8!dictionaries/CallMap_81_delta.phpbd-?!dictionaries/CallMap_82_delta.php bd [!dictionaries/CallMap_71_delta.phpbd0%dictionaries/InternalTaintSinkMap.phpYbdYa"dictionaries/ManualPropertyMap.phpbd[ۤ!dictionaries/CallMap_83_delta.php6bd6w,Qdictionaries/CallMap.phpLbdLι!dictionaries/CallMap_72_delta.php{Lbd{L1>dictionaries/PropertyMap.phpwEbdwE$_!dictionaries/CallMap_74_delta.phpbd!dictionaries/CallMap_80_delta.phppbdp+r#dictionaries/CallMap_historical.phpbdžZ<dictionaries/scripts/update_signaturemap_from_other_tool.php{bd{.assets/psalm-phar/dot-gitignorebdP sTassets/psalm-phar/README.mdnbdn+Eassets/psalm-phar/composer.jsonbd+ return * * @param null|string|array $allowed_tags */ function strip_tags(string $string, null|string|array $allowed_tags = null) : string {} */ class Generator implements Traversable { /** * @psalm-ignore-nullable-return * @return ?TValue Can return any type. */ public function current() {} /** * @return void Any returned value is ignored. */ public function next() {} /** * @return TKey scalar on success, or null on failure. */ public function key() {} /** * @return bool The return value will be casted to boolean and then evaluated. */ public function valid() {} /** * @return void Any returned value is ignored. */ public function rewind() {} /** * @return TReturn Can return any type. */ public function getReturn() {} /** * @param TSend $value * @psalm-ignore-nullable-return * @return ?TValue Can return any type. */ public function send($value) {} /** * @psalm-ignore-nullable-return * @return ?TValue Can return any type. */ public function throw(Throwable $exception) {} } /** * Interface to provide accessing objects as arrays. * @link http://php.net/manual/en/class.arrayaccess.php * * @template TKey * @template TValue */ interface ArrayAccess { /** * Whether a offset exists * @link http://php.net/manual/en/arrayaccess.offsetexists.php * * @param TKey $offset An offset to check for. * @return bool true on success or false on failure. * The return value will be casted to boolean if non-boolean was returned. * * @since 5.0.0 */ public function offsetExists($offset); /** * Offset to retrieve * @link http://php.net/manual/en/arrayaccess.offsetget.php * * @param TKey $offset The offset to retrieve. * @return TValue|null Can return all value types. * @psalm-ignore-nullable-return * * @since 5.0.0 */ public function offsetGet($offset); /** * Offset to set * @link http://php.net/manual/en/arrayaccess.offsetset.php * * @param TKey|null $offset The offset to assign the value to. * @param TValue $value The value to set. * @return void * * @since 5.0.0 */ public function offsetSet($offset, $value); /** * Offset to unset * @link http://php.net/manual/en/arrayaccess.offsetunset.php * * @param TKey $offset The offset to unset. * @return void * * @since 5.0.0 */ public function offsetUnset($offset); } /** * This class allows objects to work as arrays. * @link http://php.net/manual/en/class.arrayobject.php * * @template TKey * @template TValue * @template-implements IteratorAggregate * @template-implements ArrayAccess */ class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable { /** * Properties of the object have their normal functionality when accessed as list (var_dump, foreach, etc.). */ const STD_PROP_LIST = 1; /** * Entries can be accessed as properties (read and write). */ const ARRAY_AS_PROPS = 2; /** * Construct a new array object * @link http://php.net/manual/en/arrayobject.construct.php * * @param array|object $input The input parameter accepts an array or an Object. * @param int $flags Flags to control the behaviour of the ArrayObject object. * @param string $iterator_class Specify the class that will be used for iteration of the ArrayObject object. ArrayIterator is the default class used. * @psalm-param class-string>|class-string> $iterator_class * * @since 5.0.0 */ public function __construct($input = null, $flags = 0, $iterator_class = "ArrayIterator") { } /** * Returns whether the requested index exists * @link http://php.net/manual/en/arrayobject.offsetexists.php * * @param TKey $index The index being checked. * @return bool true if the requested index exists, otherwise false * * @since 5.0.0 */ public function offsetExists($index) { } /** * Returns the value at the specified index * @link http://php.net/manual/en/arrayobject.offsetget.php * * @param TKey $index The index with the value. * @return TValue The value at the specified index or false. * * @since 5.0.0 */ public function offsetGet($index) { } /** * Sets the value at the specified index to newval * @link http://php.net/manual/en/arrayobject.offsetset.php * * @param TKey $index The index being set. * @param TValue $newval The new value for the index. * @return void * * @since 5.0.0 */ public function offsetSet($index, $newval) { } /** * Unsets the value at the specified index * @link http://php.net/manual/en/arrayobject.offsetunset.php * * @param TKey $index The index being unset. * @return void * * @since 5.0.0 */ public function offsetUnset($index) { } /** * Appends the value * @link http://php.net/manual/en/arrayobject.append.php * * @param TValue $value The value being appended. * @return void * * @since 5.0.0 */ public function append($value) { } /** * Creates a copy of the ArrayObject. * @link http://php.net/manual/en/arrayobject.getarraycopy.php * * @return array a copy of the array. When the ArrayObject refers to an object * an array of the public properties of that object will be returned. * * @since 5.0.0 */ public function getArrayCopy() { } /** * Get the number of public properties in the ArrayObject * When the ArrayObject is constructed from an array all properties are public. * @link http://php.net/manual/en/arrayobject.count.php * * @return int The number of public properties in the ArrayObject. * * @since 5.0.0 */ public function count() { } /** * Gets the behavior flags. * @link http://php.net/manual/en/arrayobject.getflags.php * * @return int the behavior flags of the ArrayObject. * * @since 5.1.0 */ public function getFlags() { } /** * Sets the behavior flags. * * It takes on either a bitmask, or named constants. Using named * constants is strongly encouraged to ensure compatibility for future * versions. * * The available behavior flags are listed below. The actual * meanings of these flags are described in the * predefined constants. * * * ArrayObject behavior flags * * * * * * * * * * * * *
valueconstant
1 * ArrayObject::STD_PROP_LIST *
2 * ArrayObject::ARRAY_AS_PROPS *
* * @link http://php.net/manual/en/arrayobject.setflags.php * * @param int $flags The new ArrayObject behavior. * @return void * * @since 5.1.0 */ public function setFlags($flags) { } /** * Sort the entries by value * @link http://php.net/manual/en/arrayobject.asort.php * * @return void * * @since 5.2.0 */ public function asort() { } /** * Sort the entries by key * @link http://php.net/manual/en/arrayobject.ksort.php * * @return void * * @since 5.2.0 */ public function ksort() { } /** * Sort the entries with a user-defined comparison function and maintain key association * @link http://php.net/manual/en/arrayobject.uasort.php * * Function cmp_function should accept two * parameters which will be filled by pairs of entries. * The comparison function must return an integer less than, equal * to, or greater than zero if the first argument is considered to * be respectively less than, equal to, or greater than the * second. * * @param callable(TValue, TValue):int $cmp_function * @return void * * @since 5.2.0 */ public function uasort($cmp_function) { } /** * Sort the entries by keys using a user-defined comparison function * @link http://php.net/manual/en/arrayobject.uksort.php * * Function cmp_function should accept two * parameters which will be filled by pairs of entry keys. * The comparison function must return an integer less than, equal * to, or greater than zero if the first argument is considered to * be respectively less than, equal to, or greater than the * second. * * @param callable(TKey, TKey):int $cmp_function The callable comparison function. * @return void * * @since 5.2.0 */ public function uksort($cmp_function) { } /** * Sort entries using a "natural order" algorithm * @link http://php.net/manual/en/arrayobject.natsort.php * * @return void * * @since 5.2.0 */ public function natsort() { } /** * Sort an array using a case insensitive "natural order" algorithm * @link http://php.net/manual/en/arrayobject.natcasesort.php * * @return void * * @since 5.2.0 */ public function natcasesort() { } /** * Unserialize an ArrayObject * @link http://php.net/manual/en/arrayobject.unserialize.php * * @param string $serialized The serialized ArrayObject * @return void The unserialized ArrayObject * * @since 5.3.0 */ public function unserialize($serialized) { } /** * Serialize an ArrayObject * @link http://php.net/manual/en/arrayobject.serialize.php * * @return string The serialized representation of the ArrayObject. * * @since 5.3.0 */ public function serialize() { } /** * Create a new iterator from an ArrayObject instance * @link http://php.net/manual/en/arrayobject.getiterator.php * * @return ArrayIterator An iterator from an ArrayObject. * * @since 5.0.0 */ public function getIterator() { } /** * Exchange the array for another one. * @link http://php.net/manual/en/arrayobject.exchangearray.php * * @param mixed $input The new array or object to exchange with the current array. * @return array the old array. * * @since 5.1.0 */ public function exchangeArray($input) { } /** * Sets the iterator classname for the ArrayObject. * @link http://php.net/manual/en/arrayobject.setiteratorclass.php * * @param string $iterator_class The classname of the array iterator to use when iterating over this object. * @psalm-param class-string>|class-string> $iterator_class * @return void * * @since 5.1.0 */ public function setIteratorClass($iterator_class) { } /** * Gets the iterator classname for the ArrayObject. * @link http://php.net/manual/en/arrayobject.getiteratorclass.php * * @return string the iterator class name that is used to iterate over this object. * @psalm-return class-string>|class-string> * * @since 5.1.0 */ public function getIteratorClass() { } } interface Serializable { /** * @return null|string */ public function serialize(); /** * @param string $data * @return void */ public function unserialize($data); } /** * @template-covariant T as object */ final class WeakReference { // always fail public function __construct() {} /** * @template TIn as object * @param TIn $object * @return WeakReference */ public static function create(object $object): WeakReference {} /** @return ?T */ public function get(): ?object {} } /** * @template TKey of object * @template TVal of mixed * @implements ArrayAccess * @implements IteratorAggregate * @implements Traversable * * @since 8.0.0 */ final class WeakMap implements ArrayAccess, Countable, IteratorAggregate, Traversable { /** * @param TKey $offset * @return bool */ public function offsetExists($offset) {} /** * @param TKey $offset * @return TVal|null * @psalm-ignore-nullable-return */ public function offsetGet($offset) {} /** * @param TKey $offset * @param TVal $value * @return void */ public function offsetSet($offset, $value) {} /** * @param TKey $offset * @return void */ public function offsetUnset($offset) {} } class mysqli { /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ function escape_string($string) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ function real_escape_string($string) {} } class SQLite3 { /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ static function escapeString($string) {} } #[Attribute(Attribute::TARGET_METHOD)] final class ReturnTypeWillChange { public function __construct() {} } class DateInterval { /** * Number of years * @var int * @readonly */ public $y; /** * Number of months * @var int * @readonly */ public $m; /** * Number of days * @var int * @readonly */ public $d; /** * Number of hours * @var int * @readonly */ public $h; /** * Number of minutes * @var int * @readonly */ public $i; /** * Number of seconds * @var int * @readonly */ public $s; /** * Number of microseconds * @since 7.1.0 * @var float * @readonly */ public $f; /** * Is 1 if the interval is inverted and 0 otherwise * @var int */ public $invert; /** * Total number of days the interval spans. If this is unknown, days will be FALSE. * @var int|false * @readonly */ public $days; /** * @throws Exception when the $duration cannot be parsed as an interval. * @link https://php.net/manual/en/dateinterval.construct.php */ public function __construct(string $duration = '') {} /** * Formats the interval * @return string * @link https://php.net/manual/en/dateinterval.format.php * @psalm-pure */ public function format(string $format = ''): string {} /** * Sets up a DateInterval from the relative parts of the string * @return DateInterval|false Returns a new {@link https://www.php.net/manual/en/class.dateinterval.php DateInterval} * instance on success, or FALSE on failure. * @link https://php.net/manual/en/dateinterval.createfromdatestring.php * @psalm-ignore-falsable-return */ public static function createFromDateString(string $datetime = ''): DateInterval|false {} } */ public function getTypes(): array {} } /** * @psalm-immutable * * @template-covariant Start of string|DateTimeInterface * @implements IteratorAggregate */ class DatePeriod implements IteratorAggregate { const EXCLUDE_START_DATE = 1; const INCLUDE_END_DATE = 2; /** * @param Start $start * @param (Start is string ? int-mask : DateInterval) $interval * @param (Start is string ? never : (DateTimeInterface|positive-int)) $end * @param (Start is string ? never : int-mask) $options */ public function __construct($start, $interval = 0, $end = 1, $options = 0) {} /** @psalm-return (Start is string ? Iterator : Iterator) */ public function getIterator(): Iterator {} } /** * @psalm-pure * @param positive-int $length * @return list * * @psalm-flow ($string) -> return */ function str_split(string $string, int $length = 1) {} } */ public function getTarget() : int { } /** @psalm-pure */ public function isRepeated() : bool { } public function getArguments() : array { } /** * @return TClass */ public function newInstance() : object { } /** * @return never-return */ private function __clone() { } } /** * @template-covariant T as object * * @property-read class-string $name */ class ReflectionClass implements Reflector { /** * @return non-empty-string|false * @psalm-pure */ public function getFileName(): string|false {} /** * @return positive-int|false * @psalm-pure */ public function getStartLine(): int|false {} /** * @return positive-int|false * @psalm-pure */ public function getEndLine(): int|false {} /** * @return non-empty-string|false * @psalm-pure */ public function getDocComment(): string|false {} /** * @template J as object * @param self|class-string $class * @psalm-assert-if-true self $this * @psalm-pure */ public function isSubclassOf(self|string $class): bool {} /** * @template J as object * @param self|interface-string $interface * @psalm-assert-if-true self $this * @psalm-pure */ public function implementsInterface(self|string $interface): bool {} /** * @return non-empty-string|false * * @psalm-pure */ public function getExtensionName(): string|false {} /** * @param list|array $args * * @return T */ public function newInstanceArgs(array $args): object {} } /** @psalm-immutable */ class ReflectionClassConstant { public const IS_PUBLIC = 1; public const IS_PROTECTED = 2; public const IS_PRIVATE = 4; /** @return non-empty-string|false */ public function getDocComment(): string|false {} } abstract class ReflectionFunctionAbstract implements Reflector { /** * @return non-empty-string|false * * @psalm-pure */ public function getDocComment(): string|false {} /** * @return positive-int|false * * @psalm-pure */ public function getStartLine(): int|false {} /** * @return positive-int|false * * @psalm-pure */ public function getEndLine(): int|false {} /** * @return non-empty-string|false * * @psalm-pure */ public function getFileName(): string|false {} /** * @return non-empty-string|false * * @psalm-pure */ public function getExtensionName(): string|false {} } /** @psalm-immutable */ class Attribute { public int $flags; public const TARGET_CLASS = 1; public const TARGET_FUNCTION = 2; public const TARGET_METHOD = 4; public const TARGET_PROPERTY = 8; public const TARGET_CLASS_CONSTANT = 16; public const TARGET_PARAMETER = 32; public const TARGET_ALL = 63; public const IS_REPEATABLE = 64; /** * @param int-mask-of $flags */ public function __construct(int $flags = self::TARGET_ALL) { } } class ReflectionProperty implements Reflector { /** * @return non-empty-string|false * * @psalm-pure */ public function getDocComment(): string|false {} } /** @psalm-immutable */ class ReflectionUnionType extends ReflectionType { /** @return non-empty-list */ public function getTypes(): array {} } class UnhandledMatchError extends Error {} /** * @psalm-immutable * * @template-covariant Start of string|DateTimeInterface * @implements IteratorAggregate */ class DatePeriod implements IteratorAggregate { const EXCLUDE_START_DATE = 1; /** * @param Start $start * @param (Start is string ? 0|self::EXCLUDE_START_DATE : DateInterval) $interval * @param (Start is string ? never : (DateTimeInterface|positive-int)) $end * @param (Start is string ? never : 0|self::EXCLUDE_START_DATE) $options */ public function __construct($start, $interval = 0, $end = 1, $options = 0) {} /** @psalm-return (Start is string ? Iterator : Iterator) */ public function getIterator(): Iterator {} } /** * @psalm-pure * * @param resource|null $context * * @return ($associative is false|0 ? list : array>)|false * * @psalm-taint-sink ssrf $url */ function get_headers(string $url, bool $associative = false, $context = null) : array|false {} /** * @psalm-pure * * @psalm-flow ($values) -> return */ function pack(string $format, mixed ...$values): string {} final class CurlHandle { private function __construct() { } } final class CurlMultiHandle { private function __construct() { } } final class CurlShareHandle { private function __construct() { } } > : list>) * @psalm-pure */ function array_keys(array $array, $search_value = null, bool $strict = false) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * @param array ...$arrays * * @return array * @psalm-pure */ function array_intersect(array $array, array ...$arrays) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * @param array ...$arrays * * @return array * @psalm-pure */ function array_intersect_key(array $array, array ...$arrays) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * @param array ...$arrays * * @return array * @psalm-pure */ function array_intersect_assoc(array $array, array ...$arrays) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $keys * @param array $values * * @return ( * PHP_MAJOR_VERSION is 8 ? * ($keys is non-empty-array ? non-empty-array : array) : * ($keys is non-empty-array ? non-empty-array|false : array|false) * ) * @psalm-ignore-falsable-return * @psalm-pure */ function array_combine(array $keys, array $values) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * @param array ...$arrays * * @return array * @psalm-pure */ function array_diff(array $array, array ...$arrays) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * @param array ...$arrays * * @return array * @psalm-pure */ function array_diff_key(array $array, array ...$arrays) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * @param array ...$arrays * * @return array * @psalm-pure */ function array_diff_assoc(array $array, array ...$arrays) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * * @return ($array is non-empty-array ? non-empty-array : array) * @psalm-pure */ function array_flip(array $array) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is non-empty-array ? non-empty-array : array) * @psalm-pure */ function array_unique(array $array, int $flags = 0) { } /** * @psalm-template TKey as array-key * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is array ? null : (TArray is non-empty-list ? int<0,max> : (TArray is non-empty-array ? TKey : TKey|null))) * @psalm-pure * @psalm-ignore-nullable-return */ function key($array) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is array ? false : (TArray is non-empty-array ? TValue : TValue|false)) * @psalm-pure */ function current($array) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is array ? false : (TArray is non-empty-array ? TValue : TValue|false)) */ function reset(&$array) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is array ? false : (TArray is non-empty-array ? TValue : TValue|false)) */ function end(&$array) { } /** * @psalm-template TKey as array-key * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is array ? null : (TArray is non-empty-array ? key-of : key-of|null)) * @psalm-pure */ function array_key_first($array) { } /** * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is array ? null : (TArray is non-empty-array ? key-of : key-of|null)) * @psalm-pure */ function array_key_last($array) { } /** * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is non-empty-array ? non-empty-list> : list>) * @psalm-pure */ function array_values($array) { } /** * @psalm-template T * * @param mixed $needle * @param array $haystack * @param bool $strict * * @return T|false * @psalm-pure */ function array_search($needle, array $haystack, bool $strict = false) { } /** * @psalm-template T * @psalm-template TArray as array * * @param TArray $array * @param-out (TArray is non-empty-array ? non-empty-list : list) $array */ function shuffle(array &$array): bool { } /** * @psalm-template T * @psalm-template TArray as array * * @param TArray $array * @param-out (TArray is non-empty-array ? non-empty-list : list) $array */ function sort(array &$array, int $flags = SORT_REGULAR): bool { } /** * @psalm-template T * @psalm-template TArray as array * * @param TArray $array * @param-out (TArray is non-empty-array ? non-empty-list : list) $array */ function rsort(array &$array, int $flags = SORT_REGULAR): bool { } /** * @psalm-template T * @psalm-template TArray as array * * @param TArray $array * @param callable(T,T):int $callback * @param-out (TArray is non-empty-array ? non-empty-list : list) $array */ function usort(array &$array, callable $callback): bool { } /** * @psalm-template TKey * @psalm-template T * @psalm-template TArray as array * * @param TArray $array * @param callable(T,T):int $callback * @param-out (TArray is non-empty-array ? non-empty-array : array) $array */ function uasort(array &$array, callable $callback): bool { } /** * @psalm-template TKey * @psalm-template T * @psalm-template TArray as array * * @param TArray $array * @param callable(TKey,TKey):int $callback * @param-out (TArray is non-empty-array ? non-empty-array : array) $array */ function uksort(array &$array, callable $callback): bool { } /** * @psalm-pure * * @psalm-template K of array-key * @psalm-template T * * @param array $array * * @return array */ function array_change_key_case(array $array, int $case = CASE_LOWER) { } /** * @psalm-pure * * @psalm-template TKey as array-key * * @param TKey $key * @param array $array * * @return bool */ function array_key_exists($key, array $array) : bool { } /** * @psalm-pure * * @no-named-arguments * * @psalm-template TKey as array-key * @psalm-template TValue * * @param array ...$arrays * * @return array */ function array_merge_recursive(array ...$arrays) { } /** * @psalm-pure * * @no-named-arguments * * @psalm-template TKey as array-key * @psalm-template TValue * * @param array ...$arrays * * @return array */ function array_merge(array ...$arrays) { } /** * @psalm-pure * * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $keys * @param TValue $value * * @return array */ function array_fill_keys(array $keys, $value): array { } /** * @psalm-pure * * @psalm-template TKey * * @param non-empty-string $pattern * @param array $array * @param 0|1 $flags 1=PREG_GREP_INVERT * @return array */ function preg_grep($pattern, array $array, $flags = 0) { } /** * @param resource $stream * @param-out closed-resource $stream */ function fclose(&$stream) : bool { } /** * @psalm-pure * @template T as string * @param T $string * @return (T is non-empty-string ? non-empty-string : string) */ function sodium_bin2base64(string $string, int $id): string /** * @psalm-pure * @template T as string * @param T $string * @return (T is non-empty-string ? non-empty-string : string) */ function sodium_bin2hex(string $string): string {} /** * @param string $string * @param-out null $string */ function sodium_memzero(string &$string): void { } /** * @param mixed $value * @param bool $return * @return ($return is true ? string : void) * * @psalm-taint-specialize * @psalm-flow ($value) -> return * @psalm-taint-sink html $value */ function var_export($value, bool $return = false) {} /** * @param mixed $value * @param list $values * @return string * * @psalm-taint-specialize * @psalm-flow ($value, $values) -> return * @psalm-taint-sink html $value * @psalm-taint-sink html $values */ function var_dump($value, ...$values) {} /** * @param mixed $value * @param bool $return * @return ($return is true ? string : true) * * @psalm-taint-specialize * @psalm-flow ($value) -> return * @psalm-taint-sink html $value */ function print_r($value, bool $return = false) {} /** * @psalm-pure * * @psalm-taint-sink file $filename * @param mixed $filename * @return ($return is true ? string : bool) */ function highlight_file($filename, bool $return = false) {} /** * @psalm-pure * * @psalm-taint-sink file $filename * @param mixed $filename * @return ($return is true ? string : bool) */ function show_source($filename, bool $return = false) {} /** * @psalm-pure * * @psalm-taint-sink file $filename */ function php_strip_whitespace(string $filename) : string {} /** * @psalm-pure * * @param mixed $string * @return ($return is true ? string : bool) * * @psalm-flow ($string) -> return */ function highlight_string($string, bool $return = false) {} /** * @psalm-pure * * @return ($as_float is true ? float : string) */ function microtime(bool $as_float = false) {} /** * @psalm-pure * * @return ($as_float is true ? float : array) */ function gettimeofday(bool $as_float = false) {} /** * @psalm-pure * * @param numeric $num * @return ($num is int ? positive-int|0 : ($num is float ? float : positive-int|0|float)) */ function abs($num) {} /** * @psalm-pure * * @template T as string|int|float * @template TStep as int|float * @param T $start * @param T $end * @param TStep $step * @return ( * T is int * ? (TStep is int ? non-empty-list : non-empty-list) * : ( * T is float * ? non-empty-list * : ( * T is string * ? non-empty-list * : ( * T is int|float * ? non-empty-list * : non-empty-list * ) * ) * ) * ) */ function range($start, $end, $step = 1) {} /** * @psalm-pure * * @param mixed $vars * @param-out string|int|float|null $vars * @psalm-flow ($string, $format) -> return * @return (func_num_args() is 2 ? (null|list) : int) */ function sscanf(string $string, string $format, &...$vars) {} /** * @psalm-pure * * @return ( * func_num_args() is 1 * ? array{dirname: string, basename: string, extension?: string, filename: string} * : string * ) */ function pathinfo(string $path, int $flags = \PATHINFO_DIRNAME) {} /** * @psalm-pure * * @return (func_num_args() is 0 ? array : string|false) */ function getenv(string $varname = '', bool $local_only = false) {} /** * @psalm-pure * * @return ( * $string is non-empty-string ? non-empty-lowercase-string : lowercase-string * ) * * @psalm-flow ($string) -> return */ function strtolower(string $string) : string {} /** * @psalm-pure * * @return ( * $string is non-falsy-string * ? non-falsy-string * : ($string is non-empty-string ? non-empty-string : string) * ) * * @psalm-flow ($string) -> return */ function strtoupper(string $string) : string {} /** * @psalm-pure * * @param string|array $string * @param string|array $replace * @param int|array $offset * @param null|int|array $length * * @return ($string is array ? array : string) * * @psalm-flow ($string, $replace) -> return */ function substr_replace($string, $replace, $offset, $length = null) {} /** * @psalm-pure * @param string $haystack * @param string $needle * @param int $offset * @psalm-assert-if-true =non-empty-string $haystack * @psalm-return positive-int|0|false */ function strpos(string $haystack, string $needle, int $offset = 0) {} /** * @psalm-pure * @param string $haystack * @param string $needle * @param int $offset * @psalm-assert-if-true =non-empty-string $haystack * @psalm-return positive-int|0|false */ function stripos(string $haystack, string $needle, int $offset = 0) {} /** * @psalm-pure * * @return ( * $string is class-string * ? ($characters is '\\' ? class-string : string) * : ($string is lowercase-string ? lowercase-string : string) * ) * * @psalm-flow ($string) -> return */ function trim(string $string, string $characters = " \t\n\r\0\x0B") : string {} /** * @psalm-pure * * @return ( * $string is class-string * ? ($characters is '\\' ? class-string : string) * : ($string is lowercase-string ? lowercase-string : string) * ) * * @psalm-flow ($string) -> return */ function ltrim(string $string, string $characters = " \t\n\r\0\x0B") : string {} /** * @psalm-pure * * @return ($string is lowercase-string ? lowercase-string : string) * * @psalm-flow ($string) -> return */ function rtrim(string $string, string $characters = " \t\n\r\0\x0B") : string {} /** * @psalm-pure * * @param string|array $separator * @param array $array * * @return ( * $separator is non-empty-string * ? ($array is non-empty-array * ? ($array is array * ? ($separator is literal-string ? non-empty-literal-string : non-empty-string) * : non-empty-string * ) * : string) * : ($array is non-empty-array * ? ($array is array * ? ($array is array ? non-empty-literal-string : non-empty-string) * : string * ) * : string) * ) * * @psalm-flow ($separator) -> return * @psalm-flow ($array) -(array-fetch)-> return */ function implode($separator, array $array = []) : string {} /** * @psalm-pure * * @param string|array $separator * @param array $array * * @return ( * $separator is non-empty-string * ? ($array is non-empty-array * ? ($array is array * ? ($separator is literal-string ? non-empty-literal-string : non-empty-string) * : non-empty-string * ) * : string) * : ($array is non-empty-array * ? ($array is array * ? ($array is array ? non-empty-literal-string : non-empty-string) * : string * ) * : string) * ) * * @psalm-flow ($separator) -> return * @psalm-flow ($array) -(array-fetch)-> return */ function join($separator, array $array = []): string { } /** * @psalm-pure * * @param non-empty-string $separator * * @return ( * $string is lowercase-string * ? ( * $limit is int * ? list * : ( * $limit is int<0, 1> * ? list{lowercase-string} * : ( * $limit is 2 * ? list{0: lowercase-string, 1?: lowercase-string} * : ( * $limit is 3 * ? list{0: lowercase-string, 1?: lowercase-string, 2?: lowercase-string} * : non-empty-list * ) * ) * ) * ) * : ( * $limit is int * ? list * : ( * $limit is int<0, 1> * ? list{string} * : ( * $limit is 2 * ? list{0: string, 1?: string} * : ( * $limit is 3 * ? list{0: string, 1?: string, 2?: string} * : non-empty-list * ) * ) * ) * ) * ) * * @psalm-flow ($string) -(array-assignment)-> return */ function explode(string $separator, string $string, int $limit = -1) : array {} /** * @psalm-pure * * @param non-empty-string $pattern * * @psalm-flow ($subject) -(array-assignment)-> return * * @template TFlags as int-mask<0, 1, 2, 4> * * @param TFlags $flags * * @return (TFlags is 0|2 ? non-empty-list|false : (TFlags is 1|3 ? list|false : list|false)) * * @psalm-ignore-falsable-return */ function preg_split(string $pattern, string $subject, int $limit = -1, int $flags = 0) {} /** * @param array $array * * @return ( * $array is array * ? int * : ($array is array * ? float * : float|int * ) * ) */ function array_sum(array $array) {} /** * @param array $array * * @return ( * $array is array * ? int * : ($array is array * ? float * : float|int * ) * ) */ function array_product(array $array) {} /** * @psalm-pure * * 257 is FILTER_VALIDATE_INT * @psalm-taint-escape ($filter is 257 ? 'callable' : null) * @psalm-taint-escape ($filter is 257 ? 'unserialize' : null) * @psalm-taint-escape ($filter is 257 ? 'include' : null) * @psalm-taint-escape ($filter is 257 ? 'eval' : null) * @psalm-taint-escape ($filter is 257 ? 'ldap' : null) * @psalm-taint-escape ($filter is 257 ? 'sql' : null) * @psalm-taint-escape ($filter is 257 ? 'html' : null) * @psalm-taint-escape ($filter is 257 ? 'has_quotes' : null) * @psalm-taint-escape ($filter is 257 ? 'shell' : null) * @psalm-taint-escape ($filter is 257 ? 'ssrf' : null) * @psalm-taint-escape ($filter is 257 ? 'file' : null) * @psalm-taint-escape ($filter is 257 ? 'cookie' : null) * @psalm-taint-escape ($filter is 257 ? 'header' : null) * * 258 is FILTER_VALIDATE_BOOLEAN * @psalm-taint-escape ($filter is 258 ? 'callable' : null) * @psalm-taint-escape ($filter is 258 ? 'unserialize' : null) * @psalm-taint-escape ($filter is 258 ? 'include' : null) * @psalm-taint-escape ($filter is 258 ? 'eval' : null) * @psalm-taint-escape ($filter is 258 ? 'ldap' : null) * @psalm-taint-escape ($filter is 258 ? 'sql' : null) * @psalm-taint-escape ($filter is 258 ? 'html' : null) * @psalm-taint-escape ($filter is 258 ? 'has_quotes' : null) * @psalm-taint-escape ($filter is 258 ? 'shell' : null) * @psalm-taint-escape ($filter is 258 ? 'ssrf' : null) * @psalm-taint-escape ($filter is 258 ? 'file' : null) * @psalm-taint-escape ($filter is 258 ? 'cookie' : null) * @psalm-taint-escape ($filter is 258 ? 'header' : null) * * 259 is FILTER_VALIDATE_FLOAT * @psalm-taint-escape ($filter is 259 ? 'callable' : null) * @psalm-taint-escape ($filter is 259 ? 'unserialize' : null) * @psalm-taint-escape ($filter is 259 ? 'include' : null) * @psalm-taint-escape ($filter is 259 ? 'eval' : null) * @psalm-taint-escape ($filter is 259 ? 'ldap' : null) * @psalm-taint-escape ($filter is 259 ? 'sql' : null) * @psalm-taint-escape ($filter is 259 ? 'html' : null) * @psalm-taint-escape ($filter is 259 ? 'has_quotes' : null) * @psalm-taint-escape ($filter is 259 ? 'shell' : null) * @psalm-taint-escape ($filter is 259 ? 'ssrf' : null) * @psalm-taint-escape ($filter is 259 ? 'file' : null) * @psalm-taint-escape ($filter is 259 ? 'cookie' : null) * @psalm-taint-escape ($filter is 259 ? 'header' : null) * * 519 is FILTER_SANITIZE_NUMBER_INT * @psalm-taint-escape ($filter is 519 ? 'callable' : null) * @psalm-taint-escape ($filter is 519 ? 'unserialize' : null) * @psalm-taint-escape ($filter is 519 ? 'include' : null) * @psalm-taint-escape ($filter is 519 ? 'eval' : null) * @psalm-taint-escape ($filter is 519 ? 'ldap' : null) * @psalm-taint-escape ($filter is 519 ? 'sql' : null) * @psalm-taint-escape ($filter is 519 ? 'html' : null) * @psalm-taint-escape ($filter is 519 ? 'has_quotes' : null) * @psalm-taint-escape ($filter is 519 ? 'shell' : null) * @psalm-taint-escape ($filter is 519 ? 'ssrf' : null) * @psalm-taint-escape ($filter is 519 ? 'file' : null) * @psalm-taint-escape ($filter is 519 ? 'cookie' : null) * @psalm-taint-escape ($filter is 519 ? 'header' : null) * * 520 is FILTER_SANITIZE_NUMBER_FLOAT * @psalm-taint-escape ($filter is 520 ? 'callable' : null) * @psalm-taint-escape ($filter is 520 ? 'unserialize' : null) * @psalm-taint-escape ($filter is 520 ? 'include' : null) * @psalm-taint-escape ($filter is 520 ? 'eval' : null) * @psalm-taint-escape ($filter is 520 ? 'ldap' : null) * @psalm-taint-escape ($filter is 520 ? 'sql' : null) * @psalm-taint-escape ($filter is 520 ? 'html' : null) * @psalm-taint-escape ($filter is 520 ? 'has_quotes' : null) * @psalm-taint-escape ($filter is 520 ? 'shell' : null) * @psalm-taint-escape ($filter is 520 ? 'ssrf' : null) * @psalm-taint-escape ($filter is 520 ? 'file' : null) * @psalm-taint-escape ($filter is 520 ? 'cookie' : null) * @psalm-taint-escape ($filter is 520 ? 'header' : null) * * @psalm-flow ($value, $filter, $options) -> return */ function filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed {} /** * @psalm-pure * * @psalm-taint-escape html * @psalm-flow ($string) -> return */ function strip_tags(string $string, ?string $allowed_tags = null) : string {} /** * @psalm-pure * * @psalm-flow ($string) -> return */ function stripcslashes(string $string) : string {} /** * @psalm-pure * * @psalm-flow ($string) -> return */ function stripslashes(string $string) : string {} /** * @psalm-pure * * Tainting is handled in a plugin * * @psalm-flow ($string) -> return */ function htmlentities(string $string, ?int $flags = null, ?string $encoding = null, bool $double_encode = true) : string {} /** * @psalm-pure * * Tainting is handled in a plugin * * @psalm-flow ($string) -> return */ function html_entity_decode(string $string, ?int $flags = null, ?string $encoding = null) : string {} /** * @psalm-pure * * Tainting is handled in a plugin * * @psalm-flow ($string) -> return * @psalm-return ( * $string is non-empty-string * ? non-empty-string * : string * ) */ function htmlspecialchars(string $string, int $flags = ENT_COMPAT | ENT_HTML401, ?string $encoding = 'UTF-8', bool $double_encode = true) : string {} /** * @psalm-pure * * Tainting is handled in a plugin * * @psalm-flow ($string) -> return */ function htmlspecialchars_decode(string $string, ?int $flags = null) : string {} /** * @psalm-pure * * @psalm-taint-escape html * @psalm-taint-escape has_quotes * @psalm-flow ($string) -> return */ function urlencode(string $string) : string {} /** * @psalm-pure * * @psalm-return ( * $string is '' * ? 0 * : ( * $string is non-empty-string * ? positive-int * : (0|positive-int) * ) * ) */ function strlen(string $string) : int {} /** * @psalm-pure * * @template TKey of array-key * * @param string|array $search * @param string|array $replace * @param string|array $subject * @param int<0, max> $count * @return ($subject is array ? array : string) * * @psalm-flow ($replace, $subject) -> return */ function str_replace($search, $replace, $subject, &$count = null) {} /** * @psalm-pure * * @template TKey of array-key * * @param string|array $search * @param string|array $replace * @param string|array $subject * @param int<0, max> $count * @return ($subject is array ? array : string) * * @psalm-flow ($replace, $subject) -> return */ function str_ireplace($search, $replace, $subject, &$count = null) {} /** * @psalm-pure * * @return ($string is non-empty-string ? non-empty-string : ($length is positive-int ? non-empty-string: string)) * * @psalm-flow ($string, $pad_string) -> return */ function str_pad(string $string, int $length, $pad_string = '', int $pad_type = STR_PAD_RIGHT): string {} /** * @psalm-pure * * @todo update $times to be `0|positive-int` * @return ( * $string is non-empty-string * ? ( * $times is positive-int * ? non-empty-string * : ($times is 0 ? '' : string) * ) * : ($times is 0 ? '' : string) * ) * * @psalm-flow ($string) -> return */ function str_repeat(string $string, int $times): string {} /** * @psalm-pure * * @psalm-flow ($string) -> return */ function str_rot13(string $string): string {} /** * @psalm-pure * * @psalm-flow ($string) -> return */ function str_shuffle(string $string): string {} /** * @psalm-pure * @param positive-int $length * @return non-empty-list * * @psalm-flow ($string) -> return */ function str_split(string $string, int $length = 1) {} /** * @psalm-pure * @template T as string * @param T $needle * @psalm-assert-if-true =(T is '' ? string : non-empty-string) $haystack * @return ($needle is '' ? true : ($haystack is '' ? false : bool)) */ function str_starts_with(string $haystack, string $needle): bool {} /** * @psalm-pure * @template T as string * @param T $needle * @psalm-assert-if-true =(T is '' ? string : non-empty-string) $haystack * @return ($needle is '' ? true : ($haystack is '' ? false : bool)) */ function str_ends_with(string $haystack, string $needle): bool {} /** * @psalm-pure * @template T as string * @param T $needle * @psalm-assert-if-true =(T is '' ? string : non-empty-string) $haystack * @return ($needle is '' ? true : ($haystack is '' ? false : bool)) */ function str_contains(string $haystack, string $needle): bool {} /** * @psalm-pure * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($haystack) -> return */ function strstr(string $haystack, string $needle, bool $before_needle = false) {} /** * @psalm-pure * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($haystack) -> return */ function stristr(string $haystack, string $needle, bool $before_needle = false) {} /** * @psalm-pure * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($haystack) -> return */ function strchr(string $haystack, string $needle, bool $before_needle = false) {} /** * @psalm-pure * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($string) -> return */ function strpbrk(string $string, string $characters) {} /** * @psalm-pure * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($haystack) -> return */ function strrchr(string $haystack, string $needle) {} /** * @psalm-pure * * @psalm-flow ($string) -> return */ function strrev(string $string): string {} /** * @psalm-pure * * @param 0|1|2 $format * @return ( * $format is 0 ? * int : * ( * $format is 1 ? * list : * array * ) * ) */ function str_word_count(string $string, int $format = 0, string|null $characters = null) {} /** * @psalm-pure * * @param non-empty-string|non-empty-string[] $pattern * @param string|array $replacement * @param string|array $subject * @param int<0, max> $count * @return ($subject is array ? array : string|null) * * @psalm-flow ($replacement, $subject) -> return */ function preg_filter($pattern, $replacement, $subject, int $limit = -1, &$count = null) {} /** * @psalm-pure * * @template TKey of array-key * * @param non-empty-string|non-empty-string[] $pattern * @param string|array $replacement * @param string|array $subject * @param int<0, max> $count * @return ($subject is array ? array|null : string|null) * * @psalm-ignore-nullable-return * * @psalm-flow ($replacement, $subject) -> return */ function preg_replace($pattern, $replacement, $subject, int $limit = -1, &$count = null) {} /** * @template TKey of array-key * * @param non-empty-string|non-empty-string[] $pattern * @param callable(string[]):string $callback * @param string|array $subject * @param int<0, max> $count * @return ($subject is array ? array|null : string|null) * * @psalm-ignore-nullable-return * * @psalm-taint-specialize * @psalm-flow ($subject) -> return */ function preg_replace_callback($pattern, $callback, $subject, int $limit = -1, &$count = null, int $flags = 0) {} /** * @psalm-pure * @template TFlags as int * * @param non-empty-string $pattern * @param string $subject * @param mixed $matches * @param TFlags $flags * @param-out ( * TFlags is 1 * ? array> * : (TFlags is 2 * ? list> * : (TFlags is 256|257 * ? array> * : (TFlags is 258 * ? list> * : (TFlags is 512|513 * ? array> * : (TFlags is 514 * ? list> * : (TFlags is 770 * ? list> * : array * ) * ) * ) * ) * ) * ) * ) $matches * @return int|false * @psalm-ignore-falsable-return */ function preg_match_all($pattern, $subject, &$matches = [], int $flags = 1, int $offset = 0) {} /** * @psalm-pure * @template TFlags as int-mask<0, 256, 512> * * @param non-empty-string $pattern * @param string $subject * @param mixed $matches * @param TFlags $flags * @param-out (TFlags is 256 ? array : * TFlags is 512 ? array : * TFlags is 768 ? array : * array * ) $matches * @return 1|0|false * @psalm-ignore-falsable-return */ function preg_match($pattern, $subject, &$matches = [], int $flags = 0, int $offset = 0) {} /** * @psalm-pure * * @return (PHP_MAJOR_VERSION is 5|7 ? string|false : string) * @psalm-ignore-falsable-return * * @psalm-flow ($string) -> return */ function substr(string $string, int $offset, ?int $length = null) {} /** * @psalm-pure * * @psalm-flow ($str) -> return */ function preg_quote(string $str, ?string $delimiter = null) : string {} /** * @psalm-pure * * @param string|int|float $values * @return (PHP_MAJOR_VERSION is 8 ? string : string|false) * @psalm-ignore-falsable-return * * @psalm-flow ($format, $values) -> return */ function sprintf(string $format, ...$values) {} /** * @psalm-pure * @param array $values * @return (PHP_MAJOR_VERSION is 8 ? string : string|false) * @psalm-ignore-falsable-return * * @psalm-flow ($format, $values) -> return */ function vsprintf(string $format, array $values) {} /** * @psalm-pure * @return string * * @psalm-flow ($string) -> return */ function wordwrap(string $string, int $width = 75, string $break = "\n", bool $cut_long_words = false) : string {} /** * @psalm-pure * * @param string|int|float $values * @return (PHP_MAJOR_VERSION is 8 ? int<0, max> : int<0, max>|false) * @psalm-ignore-falsable-return * * @psalm-taint-specialize * @psalm-flow ($format, $values) -> return * @psalm-taint-sink html $format * @psalm-taint-sink html $values */ function printf(string $format, ...$values) {} /** * @param array $values * @return (PHP_MAJOR_VERSION is 8 ? int<0, max> : int<0, max>|false) * @psalm-ignore-falsable-return * * @psalm-pure * @psalm-taint-specialize * @psalm-taint-sink html $format * @psalm-taint-sink html $values */ function vprintf(string $format, array $values) {} /** * @psalm-pure * * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($path) -> return */ function realpath(string $path) {} /** * @psalm-pure * * @param numeric-string $num1 * @param numeric-string $num2 * @param int|null $scale * @return (PHP_MAJOR_VERSION is 8 ? numeric-string : ($num2 is "0" ? null : numeric-string)) */ function bcdiv(string $num1, string $num2, ?int $scale = null): ?string {} /** * @psalm-pure * * @param scalar|null|object $value * @return string The string value of var. * * @psalm-flow ($value) -> return */ function strval ($value): string {} /** * @return ($string is non-empty-string ? non-empty-list : non-empty-list|array{null}) * @psalm-pure * * @psalm-flow ($string) -> return */ function str_getcsv(string $string, string $separator = ',', string $enclosure = '"', string $escape = '\\\\') { } /** * @template TKey as array-key * @template TArray as array * * @param TArray $array * * @return (TArray is non-empty-array ? non-empty-array> : array>) * * @psalm-pure */ function array_count_values(array $array): array {} /** * @psalm-pure * * @psalm-flow ($string) -> return */ function addcslashes(string $string, string $characters) : string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function addslashes(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function ucfirst(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string, $separators) -> return */ function ucwords (string $string, string $separators = " \t\r\n\f\v"): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function lcfirst(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function nl2br(string $string, bool $use_xhtml = false): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function quoted_printable_decode(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function quoted_printable_encode(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function quotemeta(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function chop(string $string, string $characters = " \t\n\r\0\x0B"): string { } /** * @psalm-pure * @psalm-flow ($string, $separator) -> return */ function chunk_split(string $string, int $length = 76, string $separator= ''): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function convert_uudecode(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function convert_uuencode(string $string) : string { } /** * @psalm-pure * * @psalm-taint-escape ldap * @psalm-flow ($value) -> return */ function ldap_escape(string $value, string $ignore = "", int $flags = 0) : string {} /** * @psalm-pure * * @param int<1, 2147483647> $depth * @return mixed * @psalm-flow ($json) -> return */ function json_decode(string $json, ?bool $associative = null, int $depth = 512, int $flags = 0) {} /** * The conditional return type below relies on the fact that JSON_THROW_ON_ERROR is * the highest-valued of JSON constants * @psalm-pure * * @param int<1, 2147483647> $depth * @return ($flags is int<4194304, 8388607> ? non-empty-string : non-empty-string|false) * * @psalm-flow ($value) -> return * @psalm-ignore-falsable-return */ function json_encode(mixed $value, int $flags = 0, int $depth = 512) {} /** * @psalm-pure * * @return string|false * * @psalm-flow ($values) -> return * @psalm-ignore-falsable-return */ function pack(string $format, mixed ...$values) {} /** * @psalm-pure * * @param string|int $in_codepage * @param string|int $out_codepage * @psalm-flow ($subject) -> return */ function sapi_windows_cp_conv($in_codepage, $out_codepage, string $subject) : ?string {} /** * @psalm-pure * * @return non-empty-string * * @psalm-flow ($prefix) -> return */ function uniqid(string $prefix = "", bool $more_entropy = false) : string {} /** * @psalm-pure * * @return array|false * @psalm-ignore-falsable-return * * @psalm-flow ($string) -> return */ function unpack(string $format, string $string, int $offset = 0) {} /** * @psalm-pure * * @template T of bool * @param T $strict * @return string|false * @psalm-return (T is false ? string : string|false) * * @psalm-flow ($string) -> return * @psalm-ignore-falsable-return */ function base64_decode(string $string, bool $strict = false) {} /** * @psalm-pure * * @psalm-flow ($string) -> return * @template T as string * @param T $string * @return (T is non-empty-string ? non-empty-string : string) */ function base64_encode(string $string) : string {} /** * @psalm-pure * * @template T as string * @param T $string * @return (T is non-empty-string ? non-empty-string : string) */ function bin2hex(string $string): string {} /** * @psalm-pure * * @param resource|null $context * * @return ($associative is false|0 ? list : array>)|false * * @psalm-taint-sink ssrf $url */ function get_headers(string $url, int $associative = 0, $context = null) : array|false {} /** * @psalm-pure * * @return array|false * * @psalm-taint-sink ssrf $filename */ function get_meta_tags(string $filename, bool $use_include_path = false) : array|false {} /** * @return ($categorize is false ? array : array>) */ function get_defined_constants(bool $categorize = false): array {} /** * @param mixed $object_or_class * @param class-string $class * @param bool $allow_string * @return ($allow_string is false ? ($object_or_class is object ? bool : false) : bool) */ function is_a($object_or_class, string $class, $allow_string = false): bool{} /** * @template T of array|string * @param T $string * @return (T is array ? array : T is array ? array : string|false) * @psalm-ignore-falsable-return */ function mb_convert_encoding(array|string $string, string $to_encoding, array|string|null $from_encoding = null): array|string|false{} /** * @template TRead of null|array * @template TWrite of null|array * @template TExcept of null|array * @param TRead $read * @param TWrite $write * @param TExcept $except * @return false|int<0, max> * @param-out (TRead is null ? null : array) $read * @param-out (TWrite is null ? null : array) $write * @param-out (TExcept is null ? null : array) $except * @psalm-suppress ReferenceConstraintViolation */ function stream_select(null|array &$read, null|array &$write, null|array &$except, null|int $seconds, null|int $microseconds = null) : bool|int {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ function mysqli_escape_string($string) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ function mysqli_real_escape_string($string) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ function db2_escape_string($string) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ function cubrid_real_escape_string($string) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string1, $string2) -> return */ function pg_escape_bytea($string1, $string2 = null) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string1, $string2) -> return */ function pg_escape_identifier($string1, $string2 = null) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string1, $string2) -> return */ function pg_escape_literal($string1, $string2 = null) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string1, $string2) -> return */ function pg_escape_string($string1, $string2 = null) {} if (defined('GLOB_BRACE')) { /** * @psalm-template P of string * @psalm-template F of int-mask * @psalm-param P $pattern * @psalm-param F $flags * @psalm-return ( * P is '' * ? (F is int-mask * ? false|list * : (F is int-mask * ? false|list{0:''} * : false|list * ) * ) * : (F is int-mask * ? false|list * : (F is int-mask * ? false|list{0:non-empty-string, ...} * : false|list * ) * ) * ) * @psalm-ignore-falsable-return */ function glob (string $pattern, int $flags = 0): array|false {} } else { /** * @psalm-template P of string * @psalm-template F of int-mask * @psalm-param P $pattern * @psalm-param F $flags * @psalm-return ( * P is '' * ? (F is int-mask * ? false|list * : (F is int-mask * ? false|list{0:''} * : false|list * ) * ) * : (F is int-mask * ? false|list * : (F is int-mask * ? false|list{0:non-empty-string, ...} * : false|list * ) * ) * ) * @psalm-ignore-falsable-return */ function glob (string $pattern, int $flags = 0): array|false {} } */ class DatePeriod implements Traversable { const EXCLUDE_START_DATE = 1; /** * @param Start $start * @param (Start is string ? 0|self::EXCLUDE_START_DATE : DateInterval) $interval * @param (Start is string ? never : DateTimeInterface|positive-int) $end * @param (Start is string ? never : 0|self::EXCLUDE_START_DATE) $options */ public function __construct($start, $interval = 0, $end = 1, $options = 0) {} } /** * @psalm-taint-specialize */ interface Throwable { /** * @psalm-mutation-free */ public function getMessage() : string; /** * @psalm-mutation-free * * @return int|string https://www.php.net/manual/en/throwable.getcode.php */ public function getCode(); /** * @psalm-mutation-free */ public function getFile() : string; /** * @psalm-mutation-free */ public function getLine() : int; /** * @psalm-mutation-free * @return list',args?:array}> */ public function getTrace() : array; /** * @psalm-mutation-free */ public function getPrevious() : ?Throwable; /** * @psalm-mutation-free * @psalm-taint-source input */ public function getTraceAsString() : string; /** * @return string * @psalm-taint-source input */ public function __toString(); } /** * @psalm-taint-specialize */ class Exception implements Throwable { /** * @var string */ protected $message = ''; /** * @var int */ protected $code = 0; /** * @var string */ protected $file = ''; /** * @var int */ protected $line = 0; /** * @psalm-external-mutation-free * @param string $message * @param int $code * @param Throwable $previous */ public function __construct($message = "", $code = 0, Throwable $previous = null) {} /** * @psalm-mutation-free */ public final function getMessage() : string {} /** * @psalm-mutation-free * * @return int|string https://www.php.net/manual/en/throwable.getcode.php */ public final function getCode() {} /** * @psalm-mutation-free */ public final function getFile(): string {} /** * @psalm-mutation-free */ public final function getLine(): int {} /** * @psalm-mutation-free * @return list',args?:array}> */ public final function getTrace() : array {} /** * @psalm-mutation-free */ public final function getPrevious() : ?Throwable {} /** * @psalm-mutation-free * @psalm-taint-source input */ public final function getTraceAsString() : string {} /** * @return string * @psalm-taint-source input */ public function __toString() {} } /** * @psalm-taint-specialize */ class Error implements Throwable { /** * @var string */ protected $message = ''; /** * @var int */ protected $code = 0; /** * @var string */ protected $file = ''; /** * @var int */ protected $line = 0; /** * @psalm-external-mutation-free * @param string $message * @param int $code * @param Throwable $previous */ public function __construct($message = "", $code = 0, Throwable $previous = null) {} /** * @psalm-mutation-free */ public final function getMessage() : string {} /** * @psalm-mutation-free */ public final function getCode(): int {} /** * @psalm-mutation-free */ public final function getFile(): string {} /** * @psalm-mutation-free */ public final function getLine(): int{} /** * @psalm-mutation-free * @return list',args?:array}> */ public final function getTrace() : array {} /** * @psalm-mutation-free */ public final function getPrevious() : ?Throwable {} /** * @psalm-mutation-free * @psalm-taint-source input */ public final function getTraceAsString() : string {} /** * @return string * @psalm-taint-source input */ public function __toString() {} } * @template-implements ArrayAccess */ class SplDoublyLinkedList implements Iterator, Countable, ArrayAccess, Serializable { public function __construct() {} /** * Add/insert a new value at the specified index * * @param int $index The index where the new value is to be inserted. * @param TValue $newval The new value for the index. * @return void * * @link https://php.net/spldoublylinkedlist.add * @since 5.5.0 */ public function add($index, $newval) {} /** * Pops a node from the end of the doubly linked list * @link https://php.net/manual/en/spldoublylinkedlist.pop.php * * @return TValue The value of the popped node. * * @since 5.3.0 */ public function pop() {} /** * Shifts a node from the beginning of the doubly linked list * @link https://php.net/manual/en/spldoublylinkedlist.shift.php * * @return TValue The value of the shifted node. * * @since 5.3.0 */ public function shift() {} /** * Pushes an element at the end of the doubly linked list * @link https://php.net/manual/en/spldoublylinkedlist.push.php * * @param TValue $value The value to push. * @return void * * @since 5.3.0 */ public function push($value) {} /** * Prepends the doubly linked list with an element * @link https://php.net/manual/en/spldoublylinkedlist.unshift.php * * @param TValue $value The value to unshift. * @return void * * @since 5.3.0 */ public function unshift($value) {} /** * Peeks at the node from the end of the doubly linked list * @link https://php.net/manual/en/spldoublylinkedlist.top.php * * @return TValue The value of the last node. * * @since 5.3.0 */ public function top() {} /** * Peeks at the node from the beginning of the doubly linked list * @link https://php.net/manual/en/spldoublylinkedlist.bottom.php * * @return TValue The value of the first node. * * @since 5.3.0 */ public function bottom() {} /** * Counts the number of elements in the doubly linked list. * @link https://php.net/manual/en/spldoublylinkedlist.count.php * * @return int the number of elements in the doubly linked list. * * @since 5.3.0 */ public function count() {} /** * Checks whether the doubly linked list is empty. * @link https://php.net/manual/en/spldoublylinkedlist.isempty.php * * @return bool whether the doubly linked list is empty. * * @since 5.3.0 */ public function isEmpty() {} /** * Returns whether the requested $index exists * @link https://php.net/manual/en/spldoublylinkedlist.offsetexists.php * * @param int $index The index being checked. * @return bool true if the requested index exists, otherwise false * * @since 5.3.0 */ public function offsetExists($index) {} /** * Returns the value at the specified $index * @link https://php.net/manual/en/spldoublylinkedlist.offsetget.php * * @param int $index The index with the value. * @return TValue The value at the specified index. * * @since 5.3.0 */ public function offsetGet($index) {} /** * Sets the value at the specified $index to $newval * @link https://php.net/manual/en/spldoublylinkedlist.offsetset.php * * @param int $index The index being set. * @param TValue $newval The new value for the index. * @return void * * @since 5.3.0 */ public function offsetSet($index, $newval) {} /** * Unsets the value at the specified $index * @link https://php.net/manual/en/spldoublylinkedlist.offsetunset.php * * @param int $index The index being unset. * @return void * * @since 5.3.0 */ public function offsetUnset($index) {} /** * Return current array entry * @link https://php.net/manual/en/spldoublylinkedlist.current.php * * @return TValue The current node value. * * @since 5.3.0 */ public function current() {} /** * Return current node index * @link https://php.net/manual/en/spldoublylinkedlist.key.php * * @return int The current node index. * * @since 5.3.0 */ public function key() {} } /** * The SplFixedArray class provides the main functionalities of array. * The main differences between a SplFixedArray and a normal PHP array is that * the SplFixedArray is of fixed length and allows only integers within the range as indexes. * The advantage is that it uses less memory than a standard array. * * @link https://php.net/manual/en/class.splfixedarray.php * * @template TValue * @template-implements ArrayAccess * @template-implements Iterator */ class SplFixedArray implements Iterator, ArrayAccess, Countable { /** * Constructs a new fixed array * * Initializes a fixed array with a number of NULL values equal to size. * @link https://php.net/manual/en/splfixedarray.construct.php * * @param int $size The size of the fixed array. This expects a number between 0 and PHP_INT_MAX. * @since 5.3.0 */ public function __construct(int $size = 0) {} /** * Import a PHP array in a new SplFixedArray instance * @link https://php.net/manual/en/splfixedarray.fromarray.php * * @template TInValue * @param array $array The array to import * @param bool $save_indexes [optional] Try to save the numeric indexes used in the original array. * * @return SplFixedArray Instance of SplFixedArray containing the array content * @since 5.3.0 */ public static function fromArray(array $array, bool $save_indexes = true): SplFixedArray {} /** * Returns a PHP array from the fixed array * @link https://php.net/manual/en/splfixedarray.toarray.php * * @return array * @since 5.3.0 */ public function toArray(): array {} /** * Returns the size of the array. * @link https://php.net/manual/en/splfixedarray.getsize.php * * @return int The size of the array * @see SplFixedArray::count() * * @since 5.3.0 */ public function getSize(): int {} /** * Returns the size of the array. * @link https://php.net/manual/en/splfixedarray.count.php * * @return int The size of the array * * @since 5.3.0 */ public function count(): int {} /** * Rewind the iterator back to the start * @link https://php.net/manual/en/splfixedarray.rewind.php * * @return void * * @since 5.3.0 */ public function rewind(): void {} /** * Check whether the array contains more elements * @link https://php.net/manual/en/splfixedarray.valid.php * * @return bool true if the array contains any more elements, false otherwise. * * @since 5.3.0 */ public function valid(): bool {} /** * Returns current array index * @link https://php.net/manual/en/splfixedarray.key.php * * @return int The current array index * * @since 5.3.0 */ public function key(): int {} /** * Returns the current array entry * @link https://php.net/manual/en/splfixedarray.current.php * * @return TValue The current element value * * @since 5.3.0 */ public function current() {} /** * Move to the next entry * @link https://php.net/manual/en/splfixedarray.next.php * * @return void * * @since 5.3.0 */ public function next(): void {} /** * Returns whether the specified index exists * @link https://php.net/manual/en/splfixedarray.offsetexists.php * * @param int $index The index being checked. * @return bool true if the requested index exists, and false otherwise. * * @since 5.3.0 */ public function offsetExists(int $index): bool {} /** * Sets a new value at a specified index * @link https://php.net/manual/en/splfixedarray.offsetset.php * * @param int $index The index being sent. * @param TValue $newval The new value for the index * @return void * * @since 5.3.0 */ public function offsetSet(int $index, $newval): void {} /** * Unsets the value at the specified $index * @link https://php.net/manual/en/splfixedarray.offsetunset.php * * @param int $index The index being unset * @return void * * @since 5.3.0 */ public function offsetUnset(int $index): void {} /** * Returns the value at the specified index * @link https://php.net/manual/en/splfixedarray.offsetget.php * * @param int $index The index with the value * @return TValue The value at the specified index * * @since 5.3.0 */ public function offsetGet(int $index) {} } /** * The SplStack class provides the main functionalities of a stack implemented using a doubly linked list. * @link https://php.net/manual/en/class.splstack.php * * @template TValue * @template-extends SplDoublyLinkedList */ class SplStack extends SplDoublyLinkedList { } /** * The SplQueue class provides the main functionalities of a queue implemented using a doubly linked list. * @link https://php.net/manual/en/class.splqueue.php * * @template TValue * @template-extends SplDoublyLinkedList */ class SplQueue extends SplDoublyLinkedList { /** * Adds an element to the queue. * @link https://php.net/manual/en/splqueue.enqueue.php * * @param TValue $value The value to enqueue. * @return void * * @since 5.3.0 */ public function enqueue($value) {} /** * Dequeues a node from the queue * @link https://php.net/manual/en/splqueue.dequeue.php * * @return TValue The value of the dequeued node. * * @since 5.3.0 */ public function dequeue() {} } /** * The SplHeap class provides the main functionalities of a Heap. * @link https://php.net/manual/en/class.splheap.php * * @template TValue * @template-implements Iterator */ abstract class SplHeap implements Iterator, Countable { public function __construct() {} /** * Compare elements in order to place them correctly in the heap while sifting up * @link https://php.net/manual/en/splheap.compare.php * * @param TValue $value1 The value of the first node being compared. * @param TValue $value2 The value of the second node being compared. * @return int Positive integer if value1 is greater than value2, 0 if they are equal, negative integer otherwise. * * @since 5.3.0 */ protected abstract function compare($value1, $value2): int; /** * Counts the number of elements in the heap * @link https://php.net/manual/en/splheap.count.php * * @return int The number of elements in the heap. * * @since 5.3.0 */ public function count(): int {} /** * Get the current datastructure node. * @link https://php.net/manual/en/splheap.current.php * * @return TValue The current node value * * @since 5.3.0 */ public function current() {} /** * Extracts a node from top of the heap and sift up * @link https://php.net/manual/en/splheap.extract.php * * @return TValue The current node value * * @since 5.3.0 */ public function extract() {} /** * Inserts an element in the heap by sifting it up * @link https://php.net/manual/en/splheap.insert.php * * @param TValue $value The value to insert. * @return void * * @since 5.3.0 */ public function insert($value): void {} /** * Tells if the heap is in a corrupted state * @link https://php.net/manual/en/splheap.isCorrupted.php * * @return bool true if the heap is corrupted, false otherwise. * * @since 7.0.0 */ public function isCorrupted(): bool {} /** * Checks whether the heap is empty * @link https://php.net/manual/en/splheap.isEmpty.php * * @return bool Whether the heap is empty * * @since 5.3.0 */ public function isEmpty(): bool {} /** * Return current node index * @link https://php.net/manual/en/splheap.key.php * * @return int The current node index * * @since 5.3.0 */ public function key() {} /** * Move to the next node. This will delete the top node of the heap. * @link https://php.net/manual/en/splheap.next.php * * @return void * * @since 5.3.0 */ public function next(): void {} /** * Recover from the corrupted state and allow further actions on the heap * @link https://php.net/manual/en/splheap.recoverFromCorruption.php * * @return void * * @since 5.3.0 */ public function recoverFromCorruption(): void {} /** * Rewind iterator back to the start (no-op) * @link https://php.net/manual/en/splheap.rewind.php * * @return void * * @since 5.3.0 */ public function rewind(): void {} /** * Peeks at the node from the top of the heap * @link https://php.net/manual/en/splheap.top.php * * @return TValue The value of the node on the top. * * @since 5.3.0 */ public function top() {} /** * Check whether the heap contains any more nodes * @link https://php.net/manual/en/splheap.valid.php * * @return bool Returns true if the heap contains any more nodes, false otherwise. * * @since 5.3.0 */ public function valid(): bool {} } /** * The SplMaxHeap class provides the main functionalities of a heap, keeping the maximum on the top. * @link https://php.net/manual/en/class.splmaxheap.php * * @template TValue * @template-extends SplHeap */ class SplMaxHeap extends SplHeap { } /** * The SplMinHeap class provides the main functionalities of a heap, keeping the maximum on the top. * @link https://php.net/manual/en/class.splminheap.php * * @template TValue * @template-extends SplHeap */ class SplMinHeap extends SplHeap { } /** * The SplPriorityQueue class provides the main functionalities of a prioritized queue, implemented using a max heap. * @link https://php.net/manual/en/class.splpriorityqueue.php * * @template TPriority * @template TValue * @template-implements Iterator */ class SplPriorityQueue implements Iterator, Countable { /** * Extract the data */ const EXTR_DATA = 0x00000001; /** * Extract the priority */ const EXTR_PRIORITY = 0x00000002; /** * Extract an array containing both */ const EXTR_BOTH = 0x00000003; public function __construct() {} /** * Compare priorities in order to place them correctly in the queue while sifting up * @link https://php.net/manual/en/splpriorityqueue.compare.php * * @param TValue $priority1 The priority of the first node being compared. * @param TValue $priority2 The priority of the second node being compared. * @return int Positive integer if priority1 is greater than priority2, 0 if they are equal, negative integer otherwise. * * @since 5.3.0 */ public function compare($priority1, $priority2): int {} /** * Counts the number of elements in the queue * @link https://php.net/manual/en/splpriorityqueue.count.php * * @return int The number of elements in the queue. * * @since 5.3.0 */ public function count(): int {} /** * Get the current datastructure node. * @link https://php.net/manual/en/splpriorityqueue.current.php * * @return TValue The current node value * * @since 5.3.0 */ public function current() {} /** * Extracts a node from top of the queue and sift up * @link https://php.net/manual/en/splpriorityqueue.extract.php * * @return TValue The current node value * * @since 5.3.0 */ public function extract() {} /** * Get the flags of extraction * @link https://php.net/manual/en/splpriorityqueue.getextractflags.php * * @return SplPriorityQueue::EXTR_* Returns the current extraction mode * * @see SplPriorityQueue::setExtractFlags * * @since 5.3.0 */ public function getExtractFlags(): int {} /** * Inserts an element in the queue by sifting it up * @link https://php.net/manual/en/splpriorityqueue.insert.php * * @param TValue $value The value to insert. * @param TPriority $priority The associated priority. * @return true * * @since 5.3.0 */ public function insert($value, $priority): bool {} /** * Tells if the queue is in a corrupted state * @link https://php.net/manual/en/splpriorityqueue.isCorrupted.php * * @return bool true if the queue is corrupted, false otherwise. * * @since 7.0.0 */ public function isCorrupted(): bool {} /** * Checks whether the queue is empty * @link https://php.net/manual/en/splpriorityqueue.isEmpty.php * * @return bool Whether the queue is empty * * @since 5.3.0 */ public function isEmpty(): bool {} /** * Return current node index * @link https://php.net/manual/en/splpriorityqueue.key.php * * @return int The current node index * * @since 5.3.0 */ public function key() {} /** * Move to the next node. * @link https://php.net/manual/en/splpriorityqueue.next.php * * @return void * * @since 5.3.0 */ public function next(): void {} /** * Recover from the corrupted state and allow further actions on the queue * @link https://php.net/manual/en/splpriorityqueue.recoverFromCorruption.php * * @return void * * @since 5.3.0 */ public function recoverFromCorruption(): void {} /** * Rewind iterator back to the start (no-op) * @link https://php.net/manual/en/splpriorityqueue.rewind.php * * @return void * * @since 5.3.0 */ public function rewind(): void {} /** * Sets the mode of extraction * @link https://php.net/manual/en/splpriorityqueue.setextractflags.php * * @param SplPriorityQueue::EXTR_* $flags Defines what is extracted by SplPriorityQueue::current(), SplPriorityQueue::top() and SplPriorityQueue::extract(). * * @return void * * @since 5.3.0 */ public function setExtractFlags(int $flags): void {} /** * Peeks at the node from the top of the queue * @link https://php.net/manual/en/splpriorityqueue.top.php * * @return TValue The value of the node on the top. * * @since 5.3.0 */ public function top() {} /** * Check whether the queue contains any more nodes * @link https://php.net/manual/en/splpriorityqueue.valid.php * * @return bool Returns true if the queue contains any more nodes, false otherwise. * * @since 5.3.0 */ public function valid(): bool {} } /** * The SplObjectStorage class provides a map from objects to data or, by * ignoring data, an object set. This dual purpose can be useful in many * cases involving the need to uniquely identify objects. * @link https://php.net/manual/en/class.splobjectstorage.php * * @template TObject as object * @template TArrayValue * @template-implements ArrayAccess * @template-implements Iterator */ class SplObjectStorage implements Countable, Iterator, Serializable, ArrayAccess { public function __construct() {} /** * Adds an object in the storage * @link https://php.net/manual/en/splobjectstorage.attach.php * * @param TObject $object The object to add. * @param TArrayValue|null $data [optional] The data to associate with the object. * @return void * * @since 5.1.0 */ public function attach($object, $data = null) {} /** * Removes an object from the storage * @link https://php.net/manual/en/splobjectstorage.detach.php * * @param TObject $object The object to remove. * @return void * * @since 5.1.0 */ public function detach($object) {} /** * Checks if the storage contains a specific object * @link https://php.net/manual/en/splobjectstorage.contains.php * * @param TObject $object The object to look for. * @return bool true if the object is in the storage, false otherwise. * * @since 5.1.0 */ public function contains($object) {} /** * Adds all objects from another storage * @link https://php.net/manual/en/splobjectstorage.addall.php * * @param SplObjectStorage $storage The storage you want to import. * @return void * * @since 5.3.0 */ public function addAll($storage) {} /** * Removes objects contained in another storage from the current storage * @link https://php.net/manual/en/splobjectstorage.removeall.php * * @param SplObjectStorage $storage The storage containing the elements to remove. * @return void * * @since 5.3.0 */ public function removeAll($storage) {} /** * Removes all objects except for those contained in another storage from the current storage * @link https://php.net/manual/en/splobjectstorage.removeallexcept.php * * @param SplObjectStorage $storage The storage containing the elements to retain in the current storage. * @return void * * @since 5.3.6 */ public function removeAllExcept($storage) {} /** * Returns the data associated with the current iterator entry * @link https://php.net/manual/en/splobjectstorage.getinfo.php * * @return TArrayValue The data associated with the current iterator position. * * @since 5.3.0 */ public function getInfo() {} /** * Sets the data associated with the current iterator entry * @link https://php.net/manual/en/splobjectstorage.setinfo.php * * @param TArrayValue $data The data to associate with the current iterator entry. * @return void * * @since 5.3.0 */ public function setInfo($data) {} /** * Returns the number of objects in the storage * @link https://php.net/manual/en/splobjectstorage.count.php * * @return int The number of objects in the storage. * * @since 5.1.0 */ public function count() {} /** * Rewind the iterator to the first storage element * @link https://php.net/manual/en/splobjectstorage.rewind.php * * @return void * * @since 5.1.0 */ public function rewind() {} /** * Returns if the current iterator entry is valid * @link https://php.net/manual/en/splobjectstorage.valid.php * * @return bool true if the iterator entry is valid, false otherwise. * * @since 5.1.0 */ public function valid() {} /** * Returns the index at which the iterator currently is * @link https://php.net/manual/en/splobjectstorage.key.php * * @return int The index corresponding to the position of the iterator. * * @since 5.1.0 */ public function key() {} /** * Returns the current storage entry * @link https://php.net/manual/en/splobjectstorage.current.php * * @return TObject The object at the current iterator position. * * @since 5.1.0 */ public function current() {} /** * Move to the next entry * @link https://php.net/manual/en/splobjectstorage.next.php * * @return void * * @since 5.1.0 */ public function next() {} /** * Unserializes a storage from its string representation * @link https://php.net/manual/en/splobjectstorage.unserialize.php * * @param string $serialized The serialized representation of a storage. * @return void * * @since 5.2.2 */ public function unserialize($serialized) {} /** * Serializes the storage * @link https://php.net/manual/en/splobjectstorage.serialize.php * * @return string A string representing the storage. * * @since 5.2.2 */ public function serialize() {} /** * Checks whether an object exists in the storage * @link https://php.net/manual/en/splobjectstorage.offsetexists.php * * @param TObject $object The object to look for. * @return bool true if the object exists in the storage, and false otherwise. * * @since 5.3.0 */ public function offsetExists($object) {} /** * Associates data to an object in the storage * @link https://php.net/manual/en/splobjectstorage.offsetset.php * * @param TObject $object The object to associate data with. * @param TArrayValue|null $data [optional] The data to associate with the object. * @return void * * @since 5.3.0 */ public function offsetSet($object, $data = null) {} /** * Removes an object from the storage * @link https://php.net/manual/en/splobjectstorage.offsetunset.php * * @param TObject $object The object to remove. * @return void * * @since 5.3.0 */ public function offsetUnset($object) {} /** * Returns the data associated with an object * @link https://php.net/manual/en/splobjectstorage.offsetget.php * * @param TObject $object The object to look for. * @return TArrayValue The data previously associated with the object in the storage. * * @since 5.3.0 */ public function offsetGet($object) {} /** * Calculate a unique identifier for the contained objects * @link https://php.net/manual/en/splobjectstorage.gethash.php * * @param object $object object whose identifier is to be calculated. * @return string A string with the calculated identifier. * * @since 5.4.0 */ public function getHash($object) {} } $name */ class ReflectionClass implements Reflector { /** * @var class-string */ public $name; /** * @param T|class-string|interface-string|trait-string|enum-string $argument * @psalm-pure */ public function __construct($argument) {} /** * @return class-string * @psalm-pure */ public function getName(): string {} /** @psalm-pure */ public function isInternal(): bool {} /** @psalm-pure */ public function isUserDefined(): bool {} /** @psalm-pure */ public function isInstantiable(): bool {} /** @psalm-pure */ public function isCloneable(): bool {} /** * @return non-empty-string|false * @psalm-pure */ public function getFileName() {} /** * @return positive-int|false * @psalm-pure */ public function getStartLine() {} /** * @return positive-int|false * @psalm-pure */ public function getEndLine() {} /** * @return non-empty-string|false * @psalm-pure */ public function getDocComment() {} /** @psalm-pure */ public function getConstructor(): ?ReflectionMethod {} /** @psalm-pure */ public function hasMethod(string $name): bool {} /** * @psalm-pure * @throws ReflectionException */ public function getMethod(string $name): ReflectionMethod {} /** * @param int-mask-of|null $filter * @return list * @psalm-pure */ public function getMethods(?int $filter = null): array {} /** * @psalm-pure * @throws ReflectionException */ public function hasProperty(string $name): bool {} /** * @psalm-pure * @throws ReflectionException */ public function getProperty(string $name): ReflectionProperty {} /** * @param int-mask-of|null $filter * @return list * * @psalm-pure */ public function getProperties(?int $filter = null): array {} /** * @psalm-pure */ public function hasConstant(string $name): bool {} /** * @return mixed * * @psalm-pure * @throws ReflectionException */ public function getConstant(string $name) {} /** * @return ReflectionClassConstant|false * * @psalm-pure * @throws ReflectionException */ public function getReflectionConstant(string $name) {} /** * @param int-mask-of|null $filter * @return array * * @psalm-pure */ public function getConstants(?int $filter = null): array {} /** * @param int-mask-of|null $filter * @return list * * @psalm-pure */ public function getReflectionConstants(?int $filter = null): array {} /** * @return array * @psalm-pure */ public function getInterfaces(): array {} /** * @return list * @psalm-pure */ public function getInterfaceNames(): array {} /** @psalm-pure */ public function isInterface(): bool {} /** * @return array * * @psalm-pure */ public function getTraits(): array {} /** * @return array * * @psalm-pure */ public function getTraitAliases(): array {} /** @psalm-pure */ public function isTrait(): bool {} /** @psalm-pure */ public function isAbstract(): bool {} /** @psalm-pure */ public function isFinal(): bool {} /** * @return int-mask-of * @psalm-pure */ public function getModifiers(): int {} /** * @template J as object * @param J $object * @psalm-assert-if-true T&J $object * @psalm-pure */ public function isInstance(object $object): bool {} /** * @param mixed ...$args * * @return T */ public function newInstance(...$args): object {} /** * @param list $args * * @return T */ public function newInstanceArgs(array $args): object {} /** * @return T */ public function newInstanceWithoutConstructor(): object {} /** * @psalm-pure * * @return ReflectionClass|false */ public function getParentClass() {} /** * @template J as object * @param self|class-string $class * @psalm-assert-if-true self $this * @psalm-pure */ public function isSubclassOf($class): bool {} /** @return array */ public function getStaticProperties(): array {} /** * @return array * * @psalm-pure */ public function getDefaultProperties(): array {} /** @psalm-pure */ public function isIterateable(): bool {} /** @psalm-pure */ public function isIterable(): bool {} /** * @template J as object * @param self|interface-string $interface * @psalm-assert-if-true self $this * @psalm-pure */ public function implementsInterface($interface): bool {} /** @psalm-pure */ public function getExtension(): ?ReflectionExtension {} /** * @return non-empty-string|false * * @psalm-pure */ public function getExtensionName() {} /** @psalm-pure */ public function inNamespace(): bool {} /** @psalm-pure */ public function getNamespaceName(): string {} /** * @return non-empty-string * * @psalm-pure */ public function getShortName(): string {} /** * @return list * @psalm-pure */ public function getTraitNames(): array {} /** * @since 8.0 * @template TClass as object * @param class-string|null $name * @return ($name is null ? list> : list>) * @psalm-pure */ public function getAttributes(?string $name = null, int $flags = 0): array {} } abstract class ReflectionFunctionAbstract implements Reflector { /** @psalm-pure */ public function inNamespace(): bool {} /** @psalm-pure */ public function isClosure(): bool {} /** @psalm-pure */ public function isDeprecated(): bool {} /** @psalm-pure */ public function isInternal(): bool {} /** @psalm-pure */ public function isUserDefined(): bool {} public function getClosureThis(): ?object {} /** @psalm-pure */ public function getClosureScopeClass(): ?ReflectionClass {} /** @psalm-pure */ public function getClosureCalledClass(): ?ReflectionClass {} /** * @return non-empty-string|false * * @psalm-pure */ public function getDocComment() {} /** * @return positive-int|false * * @psalm-pure */ public function getStartLine() {} /** * @return positive-int|false * * @psalm-pure */ public function getEndLine() {} /** @psalm-pure */ public function getExtension(): ?ReflectionExtension {} /** * @return non-empty-string|false * * @psalm-pure */ public function getExtensionName() {} /** * @return non-empty-string|false * * @psalm-pure */ public function getFileName() {} /** * @return non-empty-string * * @psalm-pure */ public function getName(): string {} /** @psalm-pure */ public function getNamespaceName(): string {} /** * @return positive-int|0 * * @psalm-pure */ public function getNumberOfParameters(): int {} /** * @return positive-int|0 * * @psalm-pure */ public function getNumberOfRequiredParameters(): int {} /** * @return list * * @psalm-pure */ public function getParameters(): array {} /** * @psalm-assert-if-true ReflectionType $this->getReturnType() * * @psalm-pure */ public function hasReturnType(): bool {} /** @psalm-pure */ public function getReturnType(): ?ReflectionType {} /** * @return non-empty-string * * @psalm-pure */ public function getShortName(): string {} /** @psalm-pure */ public function returnsReference(): bool {} /** @psalm-pure */ public function isGenerator(): bool {} /** @psalm-pure */ public function isVariadic(): bool {} /** @psalm-pure */ public function isDisabled(): bool {} /** @psalm-pure */ public function getClosure(): Closure {} /** * @since 8.0 * @template TClass as object * @param class-string|null $name * @return ($name is null ? array> : array>) */ public function getAttributes(?string $name = null, int $flags = 0): array {} } class ReflectionFunction extends ReflectionFunctionAbstract { /** * @param callable-string|Closure $function * * @psalm-pure */ public function __construct(callable $function) {} /** * @return non-empty-string * * @psalm-pure */ public function __toString(): string {} } class ReflectionProperty implements Reflector { /** * @var string * @readonly */ public $name; /** * @var class-string * @readonly */ public $class; /** * @return non-empty-string * * @psalm-pure */ public function getName(): string {} /** * @since 8.0 * @template TClass as object * @param class-string|null $name * @return ($name is null ? array> : array>) */ public function getAttributes(?string $name = null, int $flags = 0): array {} /** * @since 7.4 * @psalm-assert-if-true ReflectionType $this->getType() * @psalm-pure */ public function hasType() : bool {} /** * @since 7.4 * @psalm-pure */ public function getType() : ?ReflectionType {} /** @psalm-pure */ public function isPublic(): bool {} /** @psalm-pure */ public function isPrivate(): bool {} /** @psalm-pure */ public function isProtected(): bool {} /** @psalm-pure */ public function isStatic(): bool {} /** @psalm-pure */ public function isDefault(): bool {} /** * @return int-mask-of * @psalm-pure */ public function getModifiers(): int {} /** @psalm-pure */ public function getDeclaringClass(): ReflectionClass {} /** * @return non-empty-string|false * * @psalm-pure */ public function getDocComment() {} /** * @since 8.0 * @psalm-pure */ public function hasDefaultValue(): bool {} /** * @return mixed * * @psalm-pure */ public function getDefaultValue() {} /** * @since 8.0 * @psalm-pure */ public function isPromoted(): bool {} /** * @since 8.1 * @psalm-pure */ public function isReadOnly(): bool {} } class ReflectionMethod extends ReflectionFunctionAbstract { /** * @var string * @readonly */ public $name; /** * @var class-string * @readonly */ public $class; /** @psalm-pure */ public function isStatic(): bool {} /** @psalm-pure */ public function isConstructor(): bool {} /** @psalm-pure */ public function isDestructor(): bool {} /** * @return int-mask-of * @psalm-pure */ public function getModifiers(): int {} /** @psalm-pure */ public function getDeclaringClass(): ReflectionClass {} /** @psalm-pure */ public function getPrototype(): ReflectionMethod {} } /** @psalm-immutable */ class ReflectionClassConstant implements Reflector { /** * @var non-empty-string * @readonly */ public $name; /** * @var class-string * @readonly */ public $class; /** * @var bool * @since 8.1 * @readonly */ public $isFinal; /** * @since 8.0 * @template TClass as object * @param class-string|null $name * @return ($name is null ? array> : array>) */ public function getAttributes(?string $name = null, int $flags = 0): array {} /** @return non-empty-string */ public function getName(): string {} /** @return int-mask-of */ public function getModifiers(): int {} /** @return non-empty-string|false */ public function getDocComment() {} } /** @psalm-immutable */ class ReflectionParameter implements Reflector { /** * @var non-empty-string * @readonly */ public $name; /** @return non-empty-string */ public function getName(): string {} /** * @psalm-assert-if-true ReflectionType $this->getType() */ public function hasType() : bool {} public function getType() : ?ReflectionType {} /** * @since 8.0 * @template TClass as object * @param class-string|null $name * @return ($name is null ? array> : array>) */ public function getAttributes(?string $name = null, int $flags = 0): array {} /** * @since 8.0 */ public function isPromoted(): bool {} /** * @psalm-assert-if-true string $this->getDefaultValueConstantName() */ public function isDefaultValueConstant(): bool {} public function getDefaultValueConstantName(): ?string {} } /** @psalm-immutable */ abstract class ReflectionType { } /** @psalm-immutable */ class ReflectionNamedType extends ReflectionType { /** @return non-empty-string */ public function getName(): string {} /** * @psalm-assert-if-false class-string|'self'|'static' $this->getName() */ public function isBuiltin(): bool {} /** @return non-empty-string */ public function __toString(): string {} } */ abstract public function getRawArgs(): array; public function isFirstClassCallable(): bool {} /** * @psalm-pure * @return list */ public function getArgs(): array {} } namespace PhpParser\Node; use PhpParser\NodeAbstract; class Name extends NodeAbstract { /** * @param string|string[]|self $name * @param array $attributes */ public function __construct($name, array $attributes = []) {} /** * @return non-empty-string */ public function toString(): string {} } */ public static function cases(): array; } interface BackedEnum extends UnitEnum { /** @var non-empty-string $name */ public readonly string $name; public readonly int|string $value; /** * @psalm-pure */ public static function from(string|int $value): static; /** * @psalm-pure */ public static function tryFrom(string|int $value): ?static; /** * @psalm-pure * @return list */ public static function cases(): array; } class ReflectionClass implements Reflector { /** @psalm-pure */ public function isEnum(): bool {} } class ReflectionProperty implements Reflector { /** * Starting from PHP 8.1, this method is pure, and has no effect. * * @psalm-pure */ public function setAccessible(bool $accessible): void {} } class ReflectionMethod extends ReflectionFunctionAbstract { /** * Starting from PHP 8.1, this method is pure, and has no effect. * * @psalm-pure */ public function setAccessible(bool $accessible): void {} } /** @psalm-immutable */ class ReflectionEnum extends ReflectionClass implements Reflector { public function getBackingType(): ?ReflectionType; public function getCase(string $name): ReflectionEnumUnitCase; /** @return list */ public function getCases(): array; public function hasCase(string $name): bool; public function isBacked(): bool; } /** @psalm-immutable */ class ReflectionEnumUnitCase extends ReflectionClassConstant implements Reflector { public function getEnum(): ReflectionEnum; public function getValue(): UnitEnum; } /** @psalm-immutable */ class ReflectionEnumBackedCase extends ReflectionEnumUnitCase implements Reflector { public function getBackingValue(): int|string; } /** @psalm-immutable */ class ReflectionIntersectionType extends ReflectionType { /** @return non-empty-list */ public function getTypes(): array {} /** @return false */ public function allowsNull(): bool {} } } namespace FTP { final class Connection {} } namespace IMAP { final class Connection {} } namespace LDAP { final class Connection {} final class Result {} final class ResultEntry {} } namespace PgSql { final class Connection {} final class Result {} final class Lob {} } namespace PSpell { final class Config {} final class Dictionary {} } ` operator. * * @param mixed $other * * @return int 0 if this decimal is considered is equal to $other, * -1 if this decimal should be placed before $other, * 1 if this decimal should be placed after $other. */ public function compareTo($other): int {} /** * String representation. * * This method is equivalent to a cast to string, as well as `toString`. * * @return string the value of this decimal represented exactly, in either * fixed or scientific form, depending on the value. */ public function __toString(): string {} /** * JSON * * This method is only here to honour the interface, and is equivalent to * `toString`. JSON does not have a decimal type so all decimals are encoded * as strings in the same format as `toString`. * * @return string */ public function jsonSerialize() {} } $class_name * @return SimpleXMLElement|false */ function simplexml_load_file(string $filename, ?string $class_name = SimpleXMLElement::class, int $options = 0, string $namespace_or_prefix = '', bool $is_prefix = false) {} /** * @param class-string $class_name * @return SimpleXMLElement|false */ function simplexml_load_string(string $data, ?string $class_name = 'SimpleXMLElement', int $options = 0, string $namespace_or_prefix = '', bool $is_prefix = false) {} /** * @param class-string $class_name */ function simplexml_import_dom(DOMNode $node, ?string $class_name = 'SimpleXMLElement'): ?SimpleXMLElement {} /** * @param class-string $class_name * @php-from 8.1 */ function simplexml_import_dom(SimpleXMLElement|DOMNode $node, ?string $class_name = 'SimpleXMLElement'): ?SimpleXMLElement {} /** * @implements Traversable * @psalm-no-seal-properties */ class SimpleXMLElement implements Traversable, Countable { /** @return array|null|false */ public function xpath(string $expression) {} public function registerXPathNamespace(string $prefix, string $namespace): bool {} /** @return ($filename is null ? string|false : bool) */ public function asXML(?string $filename = null) {} /** * @return ($filename is null ? string|false : bool) * @alias SimpleXMLElement::asXML */ public function saveXML(?string $filename = null) {} public function getNamespaces(bool $recursive = false): array {} /** @return array|false */ public function getDocNamespaces(bool $recursive = false, bool $fromRoot = true) {} public function children(?string $namespaceOrPrefix = null, bool $isPrefix = false): ?SimpleXMLElement {} public function attributes(?string $namespaceOrPrefix = null, bool $isPrefix = false): ?SimpleXMLElement {} final public function __construct(string $data, int $options = 0, bool $dataIsURL = false, string $namespaceOrPrefix = '', bool $isPrefix = false) {} /** @psalm-ignore-nullable-return */ public function addChild(string $qualifiedName, ?string $value = null, ?string $namespace = null): ?SimpleXMLElement {} public function addAttribute(string $qualifiedName, string $value, ?string $namespace = null): void {} public function getName(): string {} public function __toString(): string {} public function count(): int {} public function __get(string $name): SimpleXMLElement|SimpleXMLIterator|null {} } /** * @implements RecursiveIterator */ class SimpleXMLIterator extends SimpleXMLElement implements RecursiveIterator, Countable { public function count(): int {} public function rewind(): void {} public function valid(): bool {} public function current(): SimpleXMLIterator {} public function key(): ?string {} public function next(): void {} public function hasChildren(): bool {} public function getChildren(): SimpleXMLIterator {} } /** * @implements RecursiveIterator * @php-from 8.0 */ class SimpleXMLElement implements Stringable, Countable, RecursiveIterator { public function count(): int {} public function rewind(): void {} public function valid(): bool {} public function current(): SimpleXMLElement {} public function key(): ?string {} public function next(): void {} public function hasChildren(): bool {} public function getChildren(): ?SimpleXMLElement {} } /** @php-from 8.0 */ class SimpleXMLIterator extends SimpleXMLElement { public function current(): SimpleXMLElement {} public function getChildren(): ?SimpleXMLElement {} } 1 ? bool : (0|1)) */ function db2_autocommit($connection, int $value = null): int|bool {} > */ function xdebug_get_code_coverage() : array { } /** * @param array $configuration */ function xdebug_set_filter(int $group, int $list_type, array $configuration) : array { } function xdebug_start_code_coverage(int $options) : void { } function xdebug_stop_code_coverage(int $cleanup = 1) : void { } |numeric-string */ public int|string $affected_rows; } /** * @template TValue * * @template-implements Traversable */ class mysqli_result implements Traversable { /** * @var int<0, max>|numeric-string */ public int|string $num_rows; /** * @psalm-taint-sink callable $class * * @template T of object * @param class-string $class * @param array $constructor_args * @return T|null|false */ function fetch_object(string $class = stdClass::class, array $constructor_args = []): object|false|null {} } class mysqli_stmt { /** * @var int<-1, max>|numeric-string */ public int|string $affected_rows; public int $errno; /** * @var list */ public $error_list; public string $error; /** * @var 0|positive-int */ public int $field_count; public int|string $insert_id; /** * @var int<0,max>|numeric-string */ public int|string $num_rows; /** * @var 0|positive-int */ public int $param_count; /** * @var non-empty-string */ public string $sqlstate; } /** * @psalm-taint-sink callable $class * * @template T of object * @template TValue * * @param mysqli_result $result * @param class-string $class * @param array $constructor_args * @return T|null|false */ function mysqli_fetch_object(mysqli_result $result, string $class = stdClass::class, array $constructor_args = []): object|false|null {} |null|string $search * @param int $format * @param int $chunk_size * @param int $list * * @return void */ public function __construct($search, $format = APC_ITER_ALL, $chunk_size = 100, $list = APC_LIST_ACTIVE) { } /** * @return void */ public function rewind() { } /** * @return void */ public function next() { } /** * @return bool */ public function valid() { } /** * @return string */ public function key() { } /** * @return mixed */ public function current() { } /** * @return int */ public function getTotalHits() { } /** * @return int */ public function getTotalSize() { } /** * @return int */ public function getTotalCount() { } } */ final class Document implements IteratorAggregate, Serializable { private function __construct() { } final static public function fromBSON(string $bson): Document { } final static public function fromJSON(string $json): Document { } /** @param array|object $value */ final static public function fromPHP($value): Document { } /** @return TValue */ final public function get(string $key) { } /** @return Iterator */ final public function getIterator(): Iterator { } final public function has(string $key): bool { } /** @return array|object */ final public function toPHP(?array $typeMap = null) { } final public function toCanonicalExtendedJSON(): string { } final public function toRelaxedExtendedJSON(): string { } final public function __toString(): string { } final public static function __set_state(array $properties): Document { } final public function serialize(): string { } /** @param string $serialized */ final public function unserialize($serialized): void { } final public function __unserialize(array $data): void { } final public function __serialize(): array { } } /** * @psalm-template TKey of int|string * @psalm-template TValue * $psalm-implements \Iterator */ final class Iterator implements \Iterator { final private function __construct() { } /** @return TValue */ final public function current() { } /** @return TKey */ final public function key() { } final public function next(): void { } final public function rewind(): void { } final public function valid(): bool { } final public function __wakeup(): void { } } /** * @template TValue * @template-implements IteratorAggregate */ final class PackedArray implements IteratorAggregate, Serializable { private function __construct() { } final static public function fromPHP(array $value): PackedArray { } /** @return TValue */ final public function get(int $index) { } /** @return Iterator */ final public function getIterator(): Iterator { } final public function has(int $index): bool { } /** @return array|object */ final public function toPHP(?array $typeMap = null) { } final public function __toString(): string { } final public static function __set_state(array $properties): PackedArray { } final public function serialize(): string { } /** @param string $serialized */ final public function unserialize($serialized): void { } final public function __unserialize(array $data): void { } final public function __serialize(): array { } } } namespace MongoDB\Driver { use Iterator; use Traversable; /** * @template-covariant TKey * @template-covariant TValue * * @template-extends Traversable */ interface CursorInterface extends Traversable { /** * @return array */ public function toArray(); } /** * @template-covariant TValue of array|object * * @template-implements Iterator * @template-implements CursorInterface */ final class Cursor implements CursorInterface, Iterator { /** * @return TValue */ public function current() { } /** * @return void */ public function next() { } /** * @return int */ public function key() { } /** * @return bool */ public function valid() { } /** * @return void */ public function rewind() { } /** * @return array */ public function toArray() { } } } */ class PDOStatement implements Traversable { /** * @psalm-taint-sink callable $class * * @template T of object * @param class-string $class * @param array $ctorArgs * @return false|T */ public function fetchObject($class = \stdclass::class, array $ctorArgs = array()) {} /** * @psalm-taint-sink sql $value */ public function bindValue(string|int $param, mixed $value, int $type = PDO::PARAM_STR): bool {} /** * @psalm-taint-sink sql $var */ public function bindParam(string|int $param, mixed &$var, int $type = PDO::PARAM_STR, int $maxLength = 0, mixed $driverOptions = null): bool {} } class PDOException extends RuntimeException { protected string $code; public ?array $errorInfo = null; } */ interface Collection extends Traversable, Countable, JsonSerializable { /** * @return Collection * @psalm-mutation-free */ public function copy(): Collection; /** * @return array * @psalm-mutation-free */ public function toArray(): array; /** * @psalm-mutation-free */ public function isEmpty(): bool; /** * @psalm-mutation-free */ public function count(): int; } /** * @template TValue * @implements Sequence */ final class Deque implements Sequence { /** * @param iterable $values */ public function __construct(iterable $values = []) { } /** * @return Deque * @psalm-mutation-free */ public function copy(): Deque { } /** * @return list * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @return float|int * @psalm-mutation-free */ public function sum() { } /** * @param TValue ...$values * @psalm-mutation-free */ public function contains(...$values): bool { } /** * @param (callable(TValue): bool)|null $callback * @return Deque * @psalm-mutation-free */ public function filter(callable $callback = null): Deque { } /** * @param TValue $value * @return int|false * @psalm-mutation-free */ public function find($value) { } /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function first() { } /** * @return TValue * @throws \OutOfRangeException * @psalm-mutation-free */ public function get(int $index) { } /** * @psalm-mutation-free */ public function join(?string $glue = null): string { } /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function last() { } /** * @template TNewValue * @param callable(TValue): TNewValue $callback * @return Deque * @psalm-mutation-free */ public function map(callable $callback): Deque { } /** * @template TValue2 * @param iterable $values * @return Deque * @psalm-mutation-free */ public function merge(iterable $values): Deque { } /** * @return TValue * @throws \UnderflowException */ public function pop() { } /** * @template TCarry * @param callable(TCarry, TValue): TCarry $callback * @param TCarry $initial * @return TCarry * @psalm-mutation-free */ public function reduce(callable $callback, $initial = null) { } /** * @return TValue * @throws \OutOfRangeException */ public function remove(int $index) { } /** * @return Deque * @psalm-mutation-free */ public function reversed(): Deque { } /** * @return TValue * @throws \UnderflowException */ public function shift() { } /** * @return Deque * @psalm-mutation-free */ public function slice(int $offset, ?int $length = null): Deque { } /** * @param (callable(TValue, TValue): int)|null $comparator * @return Deque * @psalm-mutation-free */ public function sorted(callable $comparator = null): Deque { } } /** * @template TKey * @template TValue * @implements Collection * @implements ArrayAccess */ final class Map implements Collection, ArrayAccess { /** * @param iterable $values */ public function __construct(iterable $values = []) { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @return Map * @psalm-mutation-free */ public function copy(): Map { } /** * @return array * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @param callable(TKey, TValue): TValue $callback */ public function apply(callable $callback): void { } /** * @return Pair * @throws UnderflowException * @psalm-mutation-free */ public function first(): Pair { } /** * @return Pair * @throws UnderflowException * @psalm-mutation-free */ public function last(): Pair { } /** * @return Pair * @throws OutOfRangeException * @psalm-mutation-free */ public function skip(int $position): Pair { } /** * @template TKey2 * @template TValue2 * @param iterable $values * @return Map * @psalm-mutation-free */ public function merge(iterable $values): Map { } /** * @template TKey2 * @template TValue2 * @param Map $map * @return Map * @psalm-mutation-free */ public function intersect(Map $map): Map { } /** * @template TValue2 * @param Map $map * @return Map * @psalm-mutation-free */ public function diff(Map $map): Map { } /** * @param TKey $key * @psalm-mutation-free */ public function hasKey($key): bool { } /** * @param TValue $value * @psalm-mutation-free */ public function hasValue($value): bool { } /** * @param (callable(TKey, TValue): bool)|null $callback * @return Map * @psalm-mutation-free */ public function filter(callable $callback = null): Map { } /** * @template TDefault * @param TKey $key * @param TDefault $default * @return ( * func_num_args() is 1 * ? TValue * : TValue|TDefault * ) * @throws OutOfBoundsException * @psalm-mutation-free */ public function get($key, $default = null) { } /** * @return Set * @psalm-mutation-free */ public function keys(): Set { } /** * @template TNewValue * @param callable(TKey, TValue): TNewValue $callback * @return Map * @psalm-mutation-free */ public function map(callable $callback): Map { } /** * @return Sequence> * @psalm-mutation-free */ public function pairs(): Sequence { } /** * @param TKey $key * @param TValue $value */ public function put($key, $value) { } /** * @param iterable $values */ public function putAll(iterable $values) { } /** * @template TCarry * @param callable(TCarry, TKey, TValue): TCarry $callback * @param TCarry $initial * @return TCarry * @psalm-mutation-free */ public function reduce(callable $callback, $initial = null) { } /** * @template TDefault * @param TKey $key * @param TDefault $default * @return ( * func_num_args() is 1 * ? TValue * : TValue|TDefault * ) * @throws \OutOfBoundsException */ public function remove($key, $default = null) { } /** * @return Map * @psalm-mutation-free */ public function reversed(): Map { } /** * @return Map * @psalm-mutation-free */ public function slice(int $offset, ?int $length = null): Map { } /** * @param (callable(TValue, TValue): int)|null $comparator */ public function sort(callable $comparator = null) { } /** * @param (callable(TValue, TValue): int)|null $comparator * @return Map * @psalm-mutation-free */ public function sorted(callable $comparator = null): Map { } /** * @param (callable(TKey, TKey): int)|null $comparator */ public function ksort(callable $comparator = null) { } /** * @param (callable(TKey, TKey): int)|null $comparator * @return Map * @psalm-mutation-free */ public function ksorted(callable $comparator = null): Map { } /** * @return Sequence * @psalm-mutation-free */ public function values(): Sequence { } /** * @template TKey2 * @template TValue2 * @param Map $map * @return Map * @psalm-mutation-free */ public function union(Map $map): Map { } /** * @template TKey2 * @template TValue2 * @param Map $map * @return Map * @psalm-mutation-free */ public function xor(Map $map): Map { } } /** * @template-covariant TKey * @template-covariant TValue */ final class Pair implements JsonSerializable { /** * @var TKey */ public $key; /** * @var TValue */ public $value; /** * @param TKey $key * @param TValue $value */ public function __construct($key = null, $value = null) { } /** * @return Pair * @psalm-mutation-free */ public function copy(): Pair { } } /** * @template TValue * @extends Collection * @extends ArrayAccess */ interface Sequence extends Collection, ArrayAccess { /** * @return Sequence * @psalm-mutation-free */ public function copy(): Sequence; /** * @return list * @psalm-mutation-free */ public function toArray(): array; /** * @psalm-mutation-free */ public function isEmpty(): bool; /** * @psalm-mutation-free */ public function count(): int; /** * @psalm-mutation-free */ public function allocate(int $capacity): void; /** * @psalm-mutation-free */ public function capacity(): int; /** * @return float|int * @psalm-mutation-free */ public function sum(); /** * @param callable(TValue): TValue $callback */ public function apply(callable $callback): void; /** * @param TValue ...$values * @psalm-mutation-free */ public function contains(...$values): bool; /** * @param (callable(TValue): bool)|null $callback * @return Sequence * @psalm-mutation-free */ public function filter(callable $callback = null): Sequence; /** * @param TValue $value * @return int|false * @psalm-mutation-free */ public function find($value); /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function first(); /** * @return TValue * @throws \OutOfRangeException * @psalm-mutation-free */ public function get(int $index); /** * @param TValue ...$values * @throws \OutOfRangeException */ public function insert(int $index, ...$values); /** * @psalm-mutation-free */ public function join(?string $glue = null): string; /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function last(); /** * @template TNewValue * @param callable(TValue): TNewValue $callback * @return Sequence * @psalm-mutation-free */ public function map(callable $callback): Sequence; /** * @template TValue2 * @param iterable $values * @return Sequence * @psalm-mutation-free */ public function merge(iterable $values): Sequence; /** * @return TValue * @throws \UnderflowException */ public function pop(); /** * @param TValue ...$values */ public function push(...$values); /** * @template TCarry * @param callable(TCarry, TValue): TCarry $callback * @param TCarry $initial * @return TCarry * @psalm-mutation-free */ public function reduce(callable $callback, $initial = null); /** * @return TValue * @throws \OutOfRangeException */ public function remove(int $index); /** * @return Sequence * @psalm-mutation-free */ public function reversed(): Sequence; /** * @param TValue $value * @throws \OutOfRangeException */ public function set(int $index, $value); /** * @return TValue * @throws \UnderflowException */ public function shift(); /** * @return Sequence * @psalm-mutation-free */ public function slice(int $index, ?int $length = null): Sequence; /** * @param (callable(TValue, TValue): int)|null $comparator */ public function sort(callable $comparator = null); /** * @param (callable(TValue, TValue): int)|null $comparator * @return Sequence * @psalm-mutation-free */ public function sorted(callable $comparator = null): Sequence; /** * @param TValue ...$values */ public function unshift(...$values); } /** * @template TValue * @implements Sequence */ final class Vector implements Sequence { /** * @param iterable $values */ public function __construct(iterable $values = []) { } /** * @return Vector * @psalm-mutation-free */ public function copy(): Vector { } /** * @return list * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @return float|int * @psalm-mutation-free */ public function sum() { } /** * @param TValue ...$values * @psalm-mutation-free */ public function contains(...$values): bool { } /** * @param (callable(TValue): bool)|null $callback * @return Vector * @psalm-mutation-free */ public function filter(callable $callback = null): Vector { } /** * @param TValue $value * @return int|false * @psalm-mutation-free */ public function find($value) { } /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function first() { } /** * @return TValue * @throws \OutOfRangeException * @psalm-mutation-free */ public function get(int $index) { } /** * @psalm-mutation-free */ public function join(?string $glue = null): string { } /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function last() { } /** * @template TNewValue * @param callable(TValue): TNewValue $callback * @return Vector * @psalm-mutation-free */ public function map(callable $callback): Vector { } /** * @template TValue2 * @param iterable $values * @return Vector * @psalm-mutation-free */ public function merge(iterable $values): Sequence { } /** * @return TValue * @throws \UnderflowException */ public function pop() { } /** * @template TCarry * @param callable(TCarry, TValue): TCarry $callback * @param TCarry $initial * @return TCarry * @psalm-mutation-free */ public function reduce(callable $callback, $initial = null) { } /** * @return TValue * @throws \OutOfRangeException */ public function remove(int $index) { } /** * @return Vector * @psalm-mutation-free */ public function reversed(): Vector { } /** * @return TValue * @throws \UnderflowException */ public function shift() { } /** * @return Vector * @psalm-mutation-free */ public function slice(int $offset, ?int $length = null): Vector { } /** * @param (callable(TValue, TValue): int)|null $comparator * @return Vector * @psalm-mutation-free */ public function sorted(callable $comparator = null): Vector { } } /** * @template TValue * @implements Collection * @implements ArrayAccess */ final class Set implements Collection, ArrayAccess { /** * @param iterable $values */ public function __construct(iterable $values = []) { } /** * @return Set * @psalm-mutation-free */ public function copy(): Set { } /** * @return list * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @param TValue ...$values */ public function add(...$values): void { } /** * @param TValue ...$values * @psalm-mutation-free */ public function contains(...$values): bool { } /** * @template TValue2 * @param Set $set * @return Set * @psalm-mutation-free */ public function diff(Set $set): Set { } /** * @param (callable(TValue): bool)|null $callback * @return Set * @psalm-mutation-free */ public function filter(callable $callback = null): Set { } /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function first() { } /** * @return TValue * @throws \OutOfRangeException * @psalm-mutation-free */ public function get(int $index) { } /** * @template TValue2 * @param Set $set * @return Set * @psalm-mutation-free */ public function intersect(Set $set): Set { } /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function last() { } /** * @template TNewValue * @param callable(TValue): TNewValue $callback * @return Set */ public function map(callable $callback): Set { } /** * @template TValue2 * @param iterable $values * @return Set * @psalm-mutation-free */ public function merge(iterable $values): Set { } /** * @param TValue ...$values */ public function remove(...$values): void { } /** * @return Set * @psalm-mutation-free */ public function reversed(): Set { } /** * @return Set * @psalm-mutation-free */ public function slice(int $index, ?int $length = null): Set { } /** * @param (callable(TValue, TValue): int)|null $comparator */ public function sort(callable $comparator = null): void { } /** * @param (callable(TValue, TValue): int)|null $comparator * @return Set * @psalm-mutation-free */ public function sorted(callable $comparator = null): Set { } /** * @template TValue2 * @param Set $set * @return Set * @psalm-mutation-free */ public function union(Set $set): Set { } /** * @template TValue2 * @param Set $set * @return Set * @psalm-mutation-free */ public function xor(Set $set): Set { } } /** * @template TValue * @implements Collection * @implements ArrayAccess */ final class Stack implements Collection, ArrayAccess { /** * @param iterable $values */ public function __construct(iterable $values = []) { } /** * @return Stack * @psalm-mutation-free */ public function copy(): Stack { } /** * @return list * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @return TValue * @throws UnderflowException * @psalm-mutation-free */ public function peek() { } /** * @return TValue * @throws UnderflowException */ public function pop() { } /** * @param TValue ...$values */ public function push(...$values): void { } } /** * @template TValue * @implements Collection * @implements ArrayAccess */ final class Queue implements Collection, ArrayAccess { /** * @param iterable $values */ public function __construct(iterable $values = []) { } /** * @return Queue * @psalm-mutation-free */ public function copy(): Queue { } /** * @return list * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @return TValue * @throws UnderflowException * @psalm-mutation-free */ public function peek() { } /** * @return TValue * @throws UnderflowException */ public function pop() { } /** * @param TValue ...$values */ public function push(...$values): void { } } /** * @template TValue * @implements Collection */ final class PriorityQueue implements Collection { /** * @return PriorityQueue * @psalm-mutation-free */ public function copy(): PriorityQueue { } /** * @return list * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @return TValue * @throws UnderflowException * @psalm-mutation-free */ public function peek() { } /** * @return TValue * @throws UnderflowException */ public function pop() { } /** * @param TValue $value */ public function push($value, int $priority): void { } } * URI of the WSDL file or NULL if working in * non-WSDL mode. *

*

* During development, WSDL caching may be disabled by the * use of the soap.wsdl_cache_ttl php.ini setting * otherwise changes made to the WSDL file will have no effect until * soap.wsdl_cache_ttl is expired. *

* @param array $options [optional]

* An array of options. If working in WSDL mode, this parameter is optional. * If working in non-WSDL mode, the location and * uri options must be set, where location * is the URL of the SOAP server to send the request to, and uri * is the target namespace of the SOAP service. *

*

* The style and use options only work in * non-WSDL mode. In WSDL mode, they come from the WSDL file. *

*

* The soap_version option should be one of either * SOAP_1_1 or SOAP_1_2 to * select SOAP 1.1 or 1.2, respectively. If omitted, 1.1 is used. *

*

* For HTTP authentication, the login and * password options can be used to supply credentials. * For making an HTTP connection through * a proxy server, the options proxy_host, * proxy_port, proxy_login * and proxy_password are also available. * For HTTPS client certificate authentication use * local_cert and passphrase options. An * authentication may be supplied in the authentication * option. The authentication method may be either * SOAP_AUTHENTICATION_BASIC (default) or * SOAP_AUTHENTICATION_DIGEST. *

*

* The compression option allows to use compression * of HTTP SOAP requests and responses. *

*

* The encoding option defines internal character * encoding. This option does not change the encoding of SOAP requests (it is * always utf-8), but converts strings into it. *

*

* The trace option enables tracing of request so faults * can be backtraced. This defaults to FALSE *

*

* The classmap option can be used to map some WSDL * types to PHP classes. This option must be an array with WSDL types * as keys and names of PHP classes as values. *

*

* Setting the boolean trace option enables use of the * methods * SoapClient->__getLastRequest, * SoapClient->__getLastRequestHeaders, * SoapClient->__getLastResponse and * SoapClient->__getLastResponseHeaders. *

*

* The exceptions option is a boolean value defining whether * soap errors throw exceptions of type * SoapFault. *

*

* The connection_timeout option defines a timeout in seconds * for the connection to the SOAP service. This option does not define a timeout * for services with slow responses. To limit the time to wait for calls to finish the * default_socket_timeout setting * is available. *

*

* The typemap option is an array of type mappings. * Type mapping is an array with keys type_name, * type_ns (namespace URI), from_xml * (callback accepting one string parameter) and to_xml * (callback accepting one object parameter). *

*

* The cache_wsdl option is one of * WSDL_CACHE_NONE, * WSDL_CACHE_DISK, * WSDL_CACHE_MEMORY or * WSDL_CACHE_BOTH. *

*

* The user_agent option specifies string to use in * User-Agent header. *

*

* The stream_context option is a resource * for context. *

*

* The features option is a bitmask of * SOAP_SINGLE_ELEMENT_ARRAYS, * SOAP_USE_XSI_ARRAY_TYPE, * SOAP_WAIT_ONE_WAY_CALLS. *

*

* The keep_alive option is a boolean value defining whether * to send the Connection: Keep-Alive header or * Connection: close. *

*

* The ssl_method option is one of * SOAP_SSL_METHOD_TLS, * SOAP_SSL_METHOD_SSLv2, * SOAP_SSL_METHOD_SSLv3 or * SOAP_SSL_METHOD_SSLv23. *

* @throws SoapFault A SoapFault exception will be thrown if the wsdl URI cannot be loaded. * @since 5.0.1 */ public function __construct ($wsdl, array $options = null) {} /** * Calls a SOAP function (deprecated) * @link https://php.net/manual/en/soapclient.call.php * @param string $function_name * @param array $arguments * @return mixed * @since 5.0.1 */ public function __call ($function_name, $arguments) {} /** * Calls a SOAP function * @link https://php.net/manual/en/soapclient.soapcall.php * @param string $function_name

* The name of the SOAP function to call. *

* @param array $arguments

* An array of the arguments to pass to the function. This can be either * an ordered or an associative array. Note that most SOAP servers require * parameter names to be provided, in which case this must be an * associative array. *

* @param array $options [optional]

* An associative array of options to pass to the client. *

*

* The location option is the URL of the remote Web service. *

*

* The uri option is the target namespace of the SOAP service. *

*

* The soapaction option is the action to call. *

* @param mixed $input_headers [optional]

* An array of headers to be sent along with the SOAP request. *

* @param array $output_headers [optional]

* If supplied, this array will be filled with the headers from the SOAP response. *

* @return mixed SOAP functions may return one, or multiple values. If only one value is returned * by the SOAP function, the return value of __soapCall will be * a simple value (e.g. an integer, a string, etc). If multiple values are * returned, __soapCall will return * an associative array of named output parameters. *

*

* On error, if the SoapClient object was constructed with the exceptions * option set to FALSE, a SoapFault object will be returned. * @since 5.0.1 */ public function __soapCall (string $function_name, array $arguments, array $options = null, $input_headers = null, &$output_headers = null) {} /** * Returns last SOAP request * @link https://php.net/manual/en/soapclient.getlastrequest.php * @return string|null The last SOAP request, as an XML string. * @since 5.0.1 */ public function __getLastRequest () {} /** * Returns last SOAP response * @link https://php.net/manual/en/soapclient.getlastresponse.php * @return string|null The last SOAP response, as an XML string. * @since 5.0.1 */ public function __getLastResponse () {} /** * Returns the SOAP headers from the last request * @link https://php.net/manual/en/soapclient.getlastrequestheaders.php * @return string|null The last SOAP request headers. * @since 5.0.1 */ public function __getLastRequestHeaders () {} /** * Returns the SOAP headers from the last response * @link https://php.net/manual/en/soapclient.getlastresponseheaders.php * @return string|null The last SOAP response headers. * @since 5.0.1 */ public function __getLastResponseHeaders () {} /** * Returns list of available SOAP functions * @link https://php.net/manual/en/soapclient.getfunctions.php * @return array|null The array of SOAP function prototypes, detailing the return type, * the function name and type-hinted parameters. * @since 5.0.1 */ public function __getFunctions () {} /** * Returns a list of SOAP types * @link https://php.net/manual/en/soapclient.gettypes.php * @return array|null The array of SOAP types, detailing all structures and types. * @since 5.0.1 */ public function __getTypes () {} /** * Returns a list of all cookies * @link https://php.net/manual/en/soapclient.getcookies.php * @return array The array of all cookies * @since 5.4.3 */ public function __getCookies () {} /** * The __setCookie purpose * @link https://php.net/manual/en/soapclient.setcookie.php * @param string $name

* The name of the cookie. *

* @param string $value [optional]

* The value of the cookie. If not specified, the cookie will be deleted. *

* @return void No value is returned. * @since 5.0.4 */ public function __setCookie ($name, $value = null) {} /** * Sets the location of the Web service to use * @link https://php.net/manual/en/soapclient.setlocation.php * @param string $new_location [optional]

* The new endpoint URL. *

* @return string The old endpoint URL. * @since 5.0.1 */ public function __setLocation ($new_location = null) {} /** * Sets SOAP headers for subsequent calls * @link https://php.net/manual/en/soapclient.setsoapheaders.php * @param mixed $soapheaders [optional]

* The headers to be set. It could be SoapHeader * object or array of SoapHeader objects. * If not specified or set to NULL, the headers will be deleted. *

* @return bool TRUE on success or FALSE on failure. * @since 5.0.5 */ public function __setSoapHeaders ($soapheaders = null) {} } class SoapFault extends Exception { /** * @param array|string|null $code */ public function __construct( $code, string $string, ?string $actor = null, mixed $details = null, ?string $name = null, mixed $headerFault = null ) {} } class SoapHeader { public function __construct( string $namespace, string $name, // Actually doesn't have a default, not specifying results in no SoapHeader::$data property. Specifying null // results in a SoapHeader::$data property with null as the value. This probably makes no difference. mixed $data = null, bool $mustUnderstand = false, // Same as $data, no default. The documentation specifies this as a `string` but it accepts null. ?string $actor = null ) {} } |Redis */ public function mget(array $keys) {} public function migrate(string $host, int $port, string $key, string $dst, int $timeout, bool $copy = false, bool $replace = false): bool {} public function move(string $key, int $index): bool {} /** * @param array */ public function mset($key_values): Redis|bool {} /** * @param array */ public function msetnx($key_values): Redis|bool {} public function multi(int $value = Redis::MULTI): bool|Redis {} public function object(string $subcommand, string $key): Redis|int|string|false {} /** * @deprecated * @alias Redis::connect */ public function open(string $host, int $port = 6379, float $timeout = 0, string $persistent_id = NULL, int $retry_interval = 0, float $read_timeout = 0, array $context = NULL): bool {} public function pconnect(string $host, int $port = 6379, float $timeout = 0, string $persistent_id = NULL, int $retry_interval = 0, float $read_timeout = 0, array $context = NULL): bool {} public function persist(string $key): bool {} public function pexpire(string $key, int $timeout): bool {} public function pexpireAt(string $key, int $timestamp): bool {} public function pfadd(string $key, array $elements): int {} public function pfcount(string $key): int {} public function pfmerge(string $dst, array $keys): bool {} /** @return false|string|Redis */ public function ping(string $key = NULL) {} public function pipeline(): bool|Redis {} /** * @deprecated * @alias Redis::pconnect */ public function popen(string $host, int $port = 6379, float $timeout = 0, string $persistent_id = NULL, int $retry_interval = 0, float $read_timeout = 0, array $context = NULL): bool {} /** @return bool|Redis */ public function psetex(string $key, int $expire, string $value) {} public function psubscribe(array $patterns): void {} public function pttl(string $key): Redis|int|false {} public function publish(string $channel, string $message): mixed {} public function pubsub(string $command, mixed $arg = null): mixed {} public function punsubscribe(array $patterns): array|false {} /** @return false|string|Redis */ public function rPop(string $key) {} /** @return false|string|Redis */ public function randomKey() {} public function rawcommand(string $command, mixed ...$args): mixed {} /** @return bool|Redis */ public function rename(string $key_src, string $key_dst) {} /** @return bool|Redis */ public function renameNx(string $key_src, string $key_dst) {} public function restore(string $key, int $timeout, string $value): bool {} public function role(): mixed {} public function rpoplpush(string $src, string $dst): Redis|string|false {} public function sAdd(string $key, string $value, mixed ...$other_values): Redis|int|false {} public function sAddArray(string $key, array $values): int {} public function sDiff(string $key, string ...$other_keys): Redis|array|false {} public function sDiffStore(string $dst, string $key, string ...$other_keys): Redis|int|false {} public function sInter(array|string $key, string ...$other_keys): Redis|array|false {} public function sInterStore(array|string $key, string ...$other_keys): Redis|int|false {} public function sMembers(string $key): Redis|array|false {} public function sMisMember(string $key, string $member, string ...$other_members): array|false {} public function sMove(string $src, string $dst, string $value): Redis|bool {} public function sPop(string $key, int $count = 0): Redis|string|array|false {} public function sRandMember(string $key, int $count = 0): Redis|string|array|false {} public function sUnion(string $key, string ...$other_keys): Redis|array|false {} public function sUnionStore(string $dst, string $key, string ...$other_keys): Redis|int|false {} public function save(): bool {} public function scan(?int &$iterator, ?string $pattern = null, int $count = 0, string $type = NULL): array|false {} public function scard(string $key): Redis|int|false {} public function script(string $command, mixed ...$args): mixed {} public function select(int $db): bool {} /** @return bool|Redis */ public function set(string $key, string $value, mixed $opt = NULL) {} /** @return false|int|Redis */ public function setBit(string $key, int $idx, bool $value) {} /** @return false|int|Redis */ public function setRange(string $key, int $start, string $value) {} public function setOption(int $option, mixed $value): bool {} /** @return bool|Redis */ public function setex(string $key, int $expire, string $value) {} /** @return bool|array|Redis */ public function setnx(string $key, string $value) {} public function sismember(string $key, string $value): Redis|bool {} public function slaveof(string $host = null, int $port = 6379): bool {} public function slowlog(string $mode, int $option = 0): mixed {} public function sort(string $key, array $options = null): mixed {} /** * @deprecated */ public function sortAsc(string $key, ?string $pattern = null, mixed $get = null, int $offset = -1, int $count = -1, ?string $store = null): array {} /** * @deprecated */ public function sortAscAlpha(string $key, ?string $pattern = null, mixed $get = null, int $offset = -1, int $count = -1, ?string $store = null): array {} /** * @deprecated */ public function sortDesc(string $key, ?string $pattern = null, mixed $get = null, int $offset = -1, int $count = -1, ?string $store = null): array {} /** * @deprecated */ public function sortDescAlpha(string $key, ?string $pattern = null, mixed $get = null, int $offset = -1, int $count = -1, ?string $store = null): array {} public function srem(string $key, string $value, mixed ...$other_values): Redis|int|false {} public function sscan(string $key, int &$iterator, ?string $pattern = null, int $count = 0): array|false {} /** @return false|int|Redis */ public function strlen(string $key) {} public function subscribe(string $channel, string ...$other_channels): array|false {} public function swapdb(string $src, string $dst): bool {} public function time(): array|false {} public function ttl(string $key): Redis|int|false {} /** @return false|int|Redis */ public function type(string $key) {} /** * @return false|int|Redis */ public function unlink(array|string $key, string ...$other_keys) {} public function unsubscribe(string $channel, string ...$other_channels): array|false {} /** @return bool|Redis */ public function unwatch() {} /** * @return bool|Redis */ public function watch(array|string $key, string ...$other_keys) {} public function wait(int $count, int $timeout): int|false {} public function xack(string $key, string $group, array $ids): int|false {} public function xadd(string $key, string $id, array $values, int $maxlen = 0, bool $approx = false): string|false {} public function xclaim(string $key, string $group, string $consumer, int $min_iddle, array $ids, array $options): string|array|false {} public function xdel(string $key, array $ids): Redis|int|false {} public function xgroup(string $operation, string $key = null, string $arg1 = null, string $arg2 = null, bool $arg3 = false): mixed {} public function xinfo(string $operation, ?string $arg1 = null, ?string $arg2 = null, int $count = -1): mixed {} public function xlen(string $key): int {} public function xpending(string $key, string $group, string $start = null, string $end = null, int $count = -1, string $consumer = null): Redis|array|false {} public function xrange(string $key, string $start, string $end, int $count = -1): bool|array {} public function xread(array $streams, int $count = -1, int $block = -1): bool|array {} public function xreadgroup(string $group, string $consumer, array $streams, int $count = 1, int $block = 1): bool|array {} public function xrevrange(string $key, string $start, string $end, int $count = -1): bool|array {} public function xtrim(string $key, int $maxlen, bool $approx = false): int {} public function zAdd(string $key, array|float $score_or_options, mixed ...$more_scores_and_mems): Redis|int|false {} public function zCard(string $key): Redis|int|false {} public function zCount(string $key, string $start , string $end): Redis|int|false {} public function zIncrBy(string $key, float $value, mixed $member): Redis|float|false {} public function zLexCount(string $key, string $min, string $max): Redis|int|false {} public function zMscore(string $key, string $member, string ...$other_members): array|false {} public function zPopMax(string $key, int $value = null): array|false {} public function zPopMin(string $key, int $value = null): array|false {} public function zRange(string $key, int $start, int $end, mixed $scores = null): Redis|array|false {} public function zRangeByLex(string $key, string $min, string $max, int $offset = -1, int $count = -1): array|false {} public function zRangeByScore(string $key, string $start, string $end, array $options = []): Redis|array|false {} public function zRandMember(string $key, array $options = null): string|array|false {} public function zRank(string $key, mixed $member): Redis|int|false {} public function zRem(mixed $key, mixed $member, mixed ...$other_members): Redis|int|false {} public function zRemRangeByLex(string $key, string $min, string $max): int|false {} public function zRemRangeByRank(string $key, int $start, int $end): Redis|int|false {} public function zRemRangeByScore(string $key, string $start, string $end): Redis|int|false {} public function zRevRange(string $key, int $start, int $end, mixed $scores = null): Redis|array|false {} public function zRevRangeByLex(string $key, string $min, string $max, int $offset = -1, int $count = -1): array|false {} public function zRevRangeByScore(string $key, string $start, string $end, array $options = []): array|false {} public function zRevRank(string $key, mixed $member): Redis|int|false {} public function zScore(string $key, mixed $member): Redis|float|false {} public function zdiff(array $keys, array $options = null): array|false {} public function zdiffstore(string $dst, array $keys, array $options = null): int {} public function zinter(array $keys, ?array $weights = null, ?array $options = null): Redis|array|false {} public function zinterstore(string $dst, array $keys, ?array $weights = null, ?string $aggregate = null): Redis|int|false {} public function zscan(string $key, ?int &$iterator, ?string $pattern = null, int $count = 0): bool|array {} public function zunion(array $keys, ?array $weights = null, ?array $options = null): Redis|array|false {} public function zunionstore(string $dst, array $keys, ?array $weights = NULL, ?string $aggregate = NULL): Redis|int|false {} } */ public DOMNodeList $childNodes; /** @readonly */ public ?DOMNode $firstChild; /** @readonly */ public ?DOMNode $lastChild; /** @readonly */ public ?DOMNode $previousSibling; /** @readonly */ public ?DOMNode $nextSibling; /** * @readonly * @var DOMNamedNodeMap|null */ public ?DOMNamedNodeMap $attributes; /** @readonly */ public ?DOMDocument $ownerDocument; /** @readonly */ public ?string $namespaceURI; public string $prefix; /** @readonly */ public ?string $localName; /** @readonly */ public ?string $baseURI; public string $textContent; /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function appendChild(DOMNode $node) {} /** * @return string|false * @psalm-ignore-falsable-return */ public function C14N(bool $exclusive = false, bool $withComments = false, ?array $xpath = null, ?array $nsPrefixes = null) {} /** * @return int|false * @psalm-ignore-falsable-return */ public function C14NFile(string $uri, bool $exclusive = false, bool $withComments = false, ?array $xpath = null, ?array $nsPrefixes = null) {} /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function cloneNode(bool $deep = false) {} public function getLineNo(): int {} public function getNodePath(): ?string {} public function hasAttributes(): bool {} public function hasChildNodes(): bool {} /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function insertBefore(DOMNode $node, ?DOMNode $child = null) {} public function isDefaultNamespace(string $namespace): bool {} public function isSameNode(DOMNode $otherNode): bool {} public function isSupported(string $feature, string $version): bool {} public function lookupNamespaceURI(?string $prefix): ?string {} public function lookupPrefix(string $namespace): ?string {} public function normalize(): void {} /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function removeChild(DOMNode $child) {} /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function replaceChild(DOMNode $node, DOMNode $child) {} } class DOMNameSpaceNode { /** @readonly */ public string $nodeName; /** @readonly */ public ?string $nodeValue; /** @readonly */ public int $nodeType; /** @readonly */ public string $prefix; /** @readonly */ public ?string $localName; /** @readonly */ public ?string $namespaceURI; /** @readonly */ public ?DOMDocument $ownerDocument; /** @readonly */ public ?DOMNode $parentNode; } class DOMDocumentFragment extends DOMNode implements DOMParentNode { /** @readonly */ public ?DOMElement $firstElementChild; /** @readonly */ public ?DOMElement $lastElementChild; /** @readonly */ public int $childElementCount; public function __construct() {} public function appendXML(string $data): bool {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function append(...$nodes): void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function prepend(...$nodes): void {} } class DOMDocument extends DOMNode implements DOMParentNode { /** @readonly */ public ?DOMDocumentType $doctype; /** @readonly */ public DOMImplementation $implementation; /** @readonly */ public ?DOMElement $documentElement; /** * @deprecated * @readonly */ public ?string $actualEncoding; /** * @var ?string */ public $encoding; /** @readonly */ public ?string $xmlEncoding; /** * @var bool */ public $standalone; /** * @var bool */ public $xmlStandalone; /** * @var ?string */ public $version; /** * @var ?string */ public $xmlVersion; /** * @var bool */ public $strictErrorChecking; /** * @var ?string */ public $documentURI; /** * @var mixed * @readonly * @deprecated */ public $config; /** * @var bool */ public $formatOutput; /** * @var bool */ public $validateOnParse; /** * @var bool */ public $resolveExternals; /** * @var bool */ public $preserveWhiteSpace; /** * @var bool */ public $recover; /** * @var bool */ public $substituteEntities; /** @readonly */ public ?DOMElement $firstElementChild; /** @readonly */ public ?DOMElement $lastElementChild; /** @readonly */ public int $childElementCount; public function __construct(string $version = '1.0', string $encoding = '') {} /** * @return DOMAttr|false * @psalm-ignore-falsable-return */ public function createAttribute(string $localName) {} /** * @return DOMAttr|false * @psalm-ignore-falsable-return */ public function createAttributeNS(?string $namespace, string $qualifiedName) {} /** * @return DOMCdataSection|false * @psalm-ignore-falsable-return */ public function createCDATASection(string $data) {} /** * @return DOMComment|false * @psalm-ignore-falsable-return */ public function createComment(string $data) {} /** * @throws DOMException * @php-from 8.1 */ public function createComment(string $data): DOMComment {} /** * @return DOMDocumentFragment|false * @psalm-ignore-falsable-return */ public function createDocumentFragment() {} /** * @throws DOMException * @php-from 8.1 */ public function createDocumentFragment(): DOMDocumentFragment {} /** * @return DOMElement|false * @psalm-ignore-falsable-return */ public function createElement(string $localName, string $value = '') {} /** * @return DOMElement|false * @psalm-ignore-falsable-return */ public function createElementNS(?string $namespace, string $qualifiedName, string $value = '') {} /** * @return DOMEntityReference|false * @psalm-ignore-falsable-return */ public function createEntityReference(string $name) {} /** * @return DOMProcessingInstruction|false * @psalm-ignore-falsable-return */ public function createProcessingInstruction(string $target, string $data = '') {} /** * @return DOMText|false * @psalm-ignore-falsable-return */ public function createTextNode(string $data) {} /** * @throws DOMException * @php-from 8.1 */ public function createTextNode(string $data): DOMText {} public function getElementById(string $elementId): ?DOMElement {} /** @return DOMNodeList */ public function getElementsByTagName(string $qualifiedName): DOMNodeList {} /** @return DOMNodeList */ public function getElementsByTagNameNS(string $namespace, string $localName): DOMNodeList {} /** * @return DOMNodeList * @php-from 8.0.3 */ public function getElementsByTagNameNS(?string $namespace, string $localName): DOMNodeList {} /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function importNode(DOMNode $node, bool $deep = false) {} /** * @return bool * @psalm-ignore-falsable-return **/ public function load(string $filename, int $options = 0) {} /** * @return bool * @psalm-ignore-falsable-return */ public function loadXML(string $source, int $options = 0) {} public function normalizeDocument(): void {} public function registerNodeClass(string $baseClass, ?string $extendedClass): bool {} /** * @return int|false * @psalm-ignore-falsable-return */ public function save(string $filename, int $options = 0) {} /** @return bool */ public function loadHTML(string $source, int $options = 0) {} /** @return bool */ public function loadHTMLFile(string $filename, int $options = 0) {} /** * @return string|false * @psalm-ignore-falsable-return */ public function saveHTML(?DOMNode $node = null) {} /** * @return int|false * @psalm-ignore-falsable-return */ public function saveHTMLFile(string $filename) {} /** * @return string|false * @psalm-ignore-falsable-return */ public function saveXML(?DOMNode $node = null, int $options = 0) {} public function schemaValidate(string $filename, int $flags = 0): bool {} public function schemaValidateSource(string $source, int $flags = 0): bool {} public function relaxNGValidate(string $filename): bool {} public function relaxNGValidateSource(string $source): bool {} public function validate(): bool {} /** * @return int|false * @psalm-ignore-falsable-return */ public function xinclude(int $options = 0) {} /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function adoptNode(DOMNode $node) {} /** * @return DOMNode|string ...$nodes * @php-from 8.0 */ public function append(...$nodes) : void {} /** * @return DOMNode|string ...$nodes * @php-from 8.0 */ public function prepend(...$nodes) : void {} } /** * @template-covariant TNode as DOMNode * @template-implements Traversable */ class DOMNodeList implements Traversable { /** @readonly */ public int $length; /** * @return TNode|null * @psalm-ignore-nullable-return */ public function item(int $index) {} } /** * @template-covariant TNode as DOMNode * @template-implements Traversable * * @php-from 7.2 */ class DOMNodeList implements Traversable, Countable { /** @readonly */ public int $length; public function count(): int {} /** * @return TNode|null * @psalm-ignore-nullable-return */ public function item(int $index) {} } /** * @template-covariant TNode as DOMNode * @template-implements IteratorAggregate * * @php-from 8.0 */ class DOMNodeList implements IteratorAggregate, Countable { /** @readonly */ public int $length; public function count(): int {} /** @return Iterator */ public function getIterator() : Iterator {} /** * @return TNode|null * @psalm-ignore-nullable-return */ public function item(int $index) {} } /** * @template-covariant TNode as DOMNode * @template-implements Traversable */ class DOMNamedNodeMap implements Traversable, Countable { /** @readonly */ public int $length; /** @return TNode|null */ public function getNamedItem(string $qualifiedName): ?DOMNode {} /** @return TNode|null */ public function getNamedItemNS(?string $namespace, string $localName): ?DOMNode {} /** * @return TNode|null * @psalm-ignore-nullable-return */ public function item(int $index): ?DOMNode {} public function count(): int {} } /** * @template-covariant TNode as DOMNode * @template-implements IteratorAggregate * * @php-from 8.0 */ class DOMNamedNodeMap implements IteratorAggregate, Countable { /** @readonly */ public int $length; /** @return TNode|null */ public function getNamedItem(string $qualifiedName): ?DOMNode {} /** @return TNode|null */ public function getNamedItemNS(?string $namespace, string $localName): ?DOMNode {} /** * @return TNode|null * @psalm-ignore-nullable-return */ public function item(int $index): ?DOMNode {} public function count(): int {} /** @return Iterator */ public function getIterator() : Iterator {} } class DOMCharacterData extends DOMNode implements DOMChildNode { public string $data; /** @readonly */ public int $length; /** @readonly */ public ?DOMElement $previousElementSibling; /** @readonly */ public ?DOMElement $nextElementSibling; public function appendData(string $data): bool {} /** * @return string|false * @psalm-ignore-falsable-return */ public function substringData(int $offset, int $count) {} public function insertData(int $offset, string $data): bool {} public function deleteData(int $offset, int $count): bool {} public function replaceData(int $offset, int $count, string $data): bool {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function replaceWith(...$nodes) : void {} /** @php-from 8.0 */ public function remove() : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function before(...$nodes) : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function after(...$nodes) : void {} } class DOMAttr extends DOMNode { /** @readonly */ public string $name; /** @readonly */ public bool $specified; public string $value; /** @readonly */ public ?DOMElement $ownerElement; /** @readonly */ public mixed $schemaTypeInfo; /** * Inherited from DOMNode, but always non-null * @readonly */ public string $localName; public function __construct(string $name, string $value = '') {} public function isId(): bool {} } class DOMElement extends DOMNode implements DOMParentNode, DOMChildNode { /** @readonly */ public string $tagName; /** @readonly */ public mixed $schemaTypeInfo; /** @readonly */ public ?DOMElement $firstElementChild; /** @readonly */ public ?DOMElement $lastElementChild; /** @readonly */ public int $childElementCount; /** @readonly */ public ?DOMElement $previousElementSibling; /** @readonly */ public ?DOMElement $nextElementSibling; /** * Inherited from DOMNode, but always non-null. * * @readonly * @var DOMNamedNodeMap */ public DOMNamedNodeMap $attributes; /** * Inherited from DOMNode, but always non-null * @readonly */ public string $localName; public function __construct(string $qualifiedName, ?string $value = null, string $namespace = '') {} public function getAttribute(string $qualifiedName): string {} public function getAttributeNS(?string $namespace, string $localName): string {} /** * @return DOMAttr|DOMNameSpaceNode|false * @psalm-ignore-falsable-return */ public function getAttributeNode(string $qualifiedName) {} /** * @return DOMAttr|DOMNameSpaceNode|false * @psalm-ignore-falsable-return */ public function getAttributeNodeNS(?string $namespace, string $localName) {} /** @return DOMNodeList */ public function getElementsByTagName(string $qualifiedName): DOMNodeList {} /** @return DOMNodeList */ public function getElementsByTagNameNS(string $namespace, string $localName): DOMNodeList {} /** * @return DOMNodeList * @php-from 8.0.3 */ public function getElementsByTagNameNS(?string $namespace, string $localName): DOMNodeList {} public function hasAttribute(string $qualifiedName): bool {} public function hasAttributeNS(?string $namespace, string $localName): bool {} public function removeAttribute(string $qualifiedName): bool {} public function removeAttributeNS(?string $namespace, string $localName): void {} /** * @return DOMAttr|false * @psalm-ignore-falsable-return */ public function removeAttributeNode(DOMAttr $attr) {} /** * @return DOMAttr|false * @psalm-ignore-falsable-return */ public function setAttribute(string $qualifiedName, string $value) {} public function setAttributeNS(?string $namespace, string $qualifiedName, string $value): void {} /** * @return DOMAttr|null|false * @psalm-ignore-falsable-return */ public function setAttributeNode(DOMAttr $attr) {} /** * @return DOMAttr|null|false * @psalm-ignore-falsable-return */ public function setAttributeNodeNS(DOMAttr $attr) {} public function setIdAttribute(string $qualifiedName, bool $isId): void {} public function setIdAttributeNS(string $namespace, string $qualifiedName, bool $isId): void {} public function setIdAttributeNode(DOMAttr $attr, bool $isId): void {} /** @php-from 8.0 */ public function remove() : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function before(...$nodes) : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function after(...$nodes) : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function replaceWith(...$nodes) : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function append(...$nodes) : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function prepend(...$nodes) : void {} } class DOMText extends DOMCharacterData { /** @readonly */ public string $wholeText; public function __construct(string $data = '') {} public function isWhitespaceInElementContent(): bool {} /** * @alias DOMText::isWhitespaceInElementContent */ public function isElementContentWhitespace(): bool {} /** * @return DOMText|false * @psalm-ignore-falsable-return */ public function splitText(int $offset) {} } class DOMComment extends DOMCharacterData { public function __construct(string $data = '') {} } class DOMCdataSection extends DOMText { public function __construct(string $data) {} } class DOMDocumentType extends DOMNode { /** @readonly */ public string $name; /** @readonly */ public DOMNamedNodeMap $entities; /** @readonly */ public DOMNamedNodeMap $notations; /** @readonly */ public string $publicId; /** @readonly */ public string $systemId; /** @readonly */ public ?string $internalSubset; } class DOMNotation extends DOMNode { /** @readonly */ public string $publicId; /** @readonly */ public string $systemId; } class DOMEntity extends DOMNode { /** @readonly */ public ?string $publicId; /** @readonly */ public ?string $systemId; /** @readonly */ public ?string $notationName; /** * @readonly * @deprecated */ public ?string $actualEncoding; /** * @readonly * @deprecated */ public ?string $encoding; /** * @readonly * @deprecated */ public ?string $version; } class DOMEntityReference extends DOMNode { public function __construct(string $name) {} } class DOMProcessingInstruction extends DOMNode { /** @readonly */ public string $target; public string $data; public function __construct(string $name, string $value = '') {} } class DOMXPath { /** @readonly */ public DOMDocument $document; public bool $registerNodeNamespaces; public function __construct(DOMDocument $document, bool $registerNodeNS = true) {} public function evaluate(string $expression, ?DOMNode $contextNode = null, bool $registerNodeNS = true): mixed {} /** * @return DOMNodeList|false */ public function query(string $expression, ?DOMNode $contextNode = null, bool $registerNodeNS = true): mixed {} public function registerNamespace(string $prefix, string $namespace): bool {} public function registerPhpFunctions(string|array|null $restrict = null): void {} } > $dimensions */ public static function arrayType(\FFI\CType $type, array $dimensions): \FFI\CType { } public static function addr(\FFI\CData $ptr): \FFI\CData { } /** * @param \FFI\CData|\FFI\CType $ptr * @return int<0,max> */ public static function sizeof($ptr): int { } /** * @param \FFI\CData|\FFI\CType $ptr * @return positive-int */ public static function alignof($ptr): int { } /** * @param \FFI\CData|string $from * @param int<0,max> $size */ public static function memcpy(\FFI\CData $to, $from, int $size): void { } /** * @param string|\FFI\CData $ptr1 * @param string|\FFI\CData $ptr2 * @param int<0,max> $size */ public static function memcmp(&$ptr1, &$ptr2, int $size): int { } /** * @param int<0,max> $size */ public static function memset(\FFI\CData $ptr, int $value, int $size): void { } /** * @param int<0,max>|null $size */ public static function string(\FFI\CData $ptr, ?int $size = null): string { } public static function isNull(\FFI\CData $ptr): bool { } public function __call(...$values) { } /** * @param mixed $value * @return mixed $value */ public function __set(string $key, $value) { } /** * @return string|int|float|\FFI\CData|null */ public function __get(string $key) { } } } namespace FFI { /** * @since 7.4.0 */ final class CData implements \Countable, \ArrayAccess, \Countable, \Traversable { /** * @return bool */ public function offsetExists($offset) { } /** * @return mixed|null */ public function offsetGet($offset) { } /** * @param mixed|null $value * @return void */ public function offsetSet($offset, $value) { } /** * @return void */ public function offsetUnset($offset) { } } /** * @since 7.4.0 */ final class CType { /** * @since 8.1 */ public const TYPE_VOID = 0; /** * @since 8.1 */ public const TYPE_FLOAT = 1; /** * @since 8.1 */ public const TYPE_DOUBLE = 2; /** * @since 8.1 */ public const TYPE_LONGDOUBLE = 3; /** * @since 8.1 */ public const TYPE_UINT8 = 4; /** * @since 8.1 */ public const TYPE_SINT8 = 5; /** * @since 8.1 */ public const TYPE_UINT16 = 6; /** * @since 8.1 */ public const TYPE_SINT16 = 7; /** * @since 8.1 */ public const TYPE_UINT32 = 8; /** * @since 8.1 */ public const TYPE_SINT32 = 9; /** * @since 8.1 */ public const TYPE_UINT64 = 10; /** * @since 8.1 */ public const TYPE_SINT64 = 11; /** * @since 8.1 */ public const TYPE_ENUM = 12; /** * @since 8.1 */ public const TYPE_BOOL = 13; /** * @since 8.1 */ public const TYPE_CHAR = 14; /** * @since 8.1 */ public const TYPE_POINTER = 15; /** * @since 8.1 */ public const TYPE_FUNC = 16; /** * @since 8.1 */ public const TYPE_ARRAY = 17; /** * @since 8.1 */ public const TYPE_STRUCT = 18; /** * @since 8.1 */ public const ATTR_CONST = 1; /** * @since 8.1 */ public const ATTR_INCOMPLETE_TAG = 2; /** * @since 8.1 */ public const ATTR_VARIADIC = 4; /** * @since 8.1 */ public const ATTR_INCOMPLETE_ARRAY = 8; /** * @since 8.1 */ public const ATTR_VLA = 16; /** * @since 8.1 */ public const ATTR_UNION = 32; /** * @since 8.1 */ public const ATTR_PACKED = 64; /** * @since 8.1 */ public const ATTR_MS_STRUCT = 128; /** * @since 8.1 */ public const ATTR_GCC_STRUCT = 256; /** * @since 8.1 */ public const ABI_DEFAULT = 0; /** * @since 8.1 */ public const ABI_CDECL = 1; /** * @since 8.1 */ public const ABI_FASTCALL = 2; /** * @since 8.1 */ public const ABI_THISCALL = 3; /** * @since 8.1 */ public const ABI_STDCALL = 4; /** * @since 8.1 */ public const ABI_PASCAL = 5; /** * @since 8.1 */ public const ABI_REGISTER = 6; /** * @since 8.1 */ public const ABI_MS = 7; /** * @since 8.1 */ public const ABI_SYSV = 8; /** * @since 8.1 */ public const ABI_VECTORCALL = 9; public function getName(): string { } /** * @since 8.1.0 * @return self::TYPE_* */ public function getKind(): int { } /** * @since 8.1.0 * @return int<0,max> */ public function getSize(): int { } /** * @since 8.1.0 * @return int<0,max> */ public function getAlignment(): int { } /** * @since 8.1.0 */ public function getAttributes(): int { } /** * @since 8.1.0 * @return self::TYPE_UINT32|self::TYPE_UINT64 */ public function getEnumKind(): int { } /** * @since 8.1.0 */ public function getArrayElementType(): CType { } /** * @since 8.1.0 * @return int<0,max> */ public function getArrayLength(): int { } /** * @since 8.1.0 */ public function getPointerType(): CType { } /** * @since 8.1.0 * @return string[] */ public function getStructFieldNames(): array { } /** * @since 8.1.0 * @return int<0,max> */ public function getStructFieldOffset(string $name): int { } /** * @since 8.1.0 */ public function getStructFieldType(string $name): CType { } /** * @since 8.1.0 * @return self::ABI_* */ public function getFuncABI(): int { } /** * @since 8.1.0 */ public function getFuncReturnType(): CType { } /** * @since 8.1.0 * @return int<0,max> */ public function getFuncParameterCount(): int { } /** * @param int<0,max> $index * @since 8.1.0 */ public function getFuncParameterType(int $index): CType { } } /** * @since 7.4.0 */ class Exception extends \Error { } /** * @since 7.4.0 */ final class ParserException extends Exception { } } */ interface IteratorAggregate extends Traversable { /** * @return Traversable An instance of an object implementing Iterator or Traversable */ public function getIterator(); } /** * @template-covariant TKey * @template-covariant TValue * * @template-extends Traversable */ interface Iterator extends Traversable { /** * @return TValue|null returns current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current(); /** * @return void Any returned value is ignored. */ public function next(); /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key(); /** * @return bool The return value will be casted to boolean and then evaluated. * Returns true on success or false on failure. */ public function valid(); /** * @return void Any returned value is ignored. */ public function rewind(); } /** * @template-covariant TKey * @template-covariant TValue * * @template-extends Iterator */ interface OuterIterator extends Iterator { /** * @return Iterator */ public function getInnerIterator(); } /** * @template-covariant TKey * @template-covariant TValue * * @template-extends Iterator */ interface RecursiveIterator extends Iterator { /** * @return bool true if the current entry can be iterated over, otherwise returns false. */ public function hasChildren(); /** * @return RecursiveIterator An iterator for the current entry. */ public function getChildren(); } /** * @template-covariant TKey * @template-covariant TValue * @template-extends Iterator */ interface SeekableIterator extends Iterator { /** * Seeks to a position * @link https://php.net/manual/en/seekableiterator.seek.php * * @param int $position The position to seek to. * @return void * * @since 5.1.0 */ public function seek($position); } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Traversable * * @template-implements OuterIterator * * @mixin TIterator */ class IteratorIterator implements OuterIterator { /** * @param TIterator $iterator */ public function __construct(Traversable $iterator, ?string $class = null) {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key value or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template TKey * @template TValue * @template TIterator as Iterator * * @template-extends IteratorIterator */ class AppendIterator extends IteratorIterator { public function __construct(){} /** * @param TIterator $iterator * @return void */ public function append(Iterator $iterator) {} /** * @return ArrayIterator */ public function getArrayIterator() {} /** * @return int */ public function getIteratorIndex() {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template TKey as array-key * @template TValue * @template-implements SeekableIterator * @template-implements ArrayAccess */ class ArrayIterator implements SeekableIterator, ArrayAccess, Serializable, Countable { const STD_PROP_LIST = 1; const ARRAY_AS_PROPS = 2; /** * @param array $array The array or object to be iterated on. * @param int-mask-of $flags Flags to control the behaviour of the ArrayObject object. */ public function __construct($array = array(), $flags = 0) { } /** * @param TKey $index The offset being checked. * @return bool true if the offset exists, otherwise false */ public function offsetExists($index) { } /** * @param TKey $index The offset to get the value from. * @return TValue|null The value at offset index, null when accessing invalid indexes * @psalm-ignore-nullable-return */ public function offsetGet($index) { } /** * @param TKey $index The index to set for. * @param TValue $newval The new value to store at the index. * @return void */ public function offsetSet($index, $newval) { } /** * @param TKey $index The offset to unset. * @return void */ public function offsetUnset($index) { } /** * @param TValue $value The value to append. * @return void */ public function append($value) { } /** * @return array A copy of the array, or array of public properties * if ArrayIterator refers to an object. */ public function getArrayCopy() { } /** * @return int The number of elements or public properties in the associated * array or object, respectively. */ public function count() { } /** * @return int-mask-of The current flags. */ public function getFlags() { } /** * @param int-mask-of $flags bitmask * @return void */ public function setFlags($flags) { } /** * @return void */ public function asort() { } /** * @return void */ public function ksort() { } /** * @param callable(TValue,TValue):int $cmp_function The compare function used for the sort. * @return void */ public function uasort($cmp_function) { } /** * @param callable(TKey,TKey):int $cmp_function The compare function used for the sort. * @return void */ public function uksort($cmp_function) { } /** * @return void */ public function natsort() { } /** * @return void */ public function natcasesort() { } /** * @param string $serialized The serialized ArrayIterator object to be unserialized. * @return void */ public function unserialize($serialized) { } /** * @return string The serialized ArrayIterator */ public function serialize() { } /** * @return void */ public function rewind() { } /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() { } /** * @return TKey|null The current array key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() { } /** * @return void */ public function next() { } /** * @return bool */ public function valid() { } /** * @param int $position The position to seek to. * @return void */ public function seek($position) { } } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Traversable * * @template-extends IteratorIterator */ abstract class FilterIterator extends IteratorIterator { /** @return bool */ abstract public function accept(); /** * @return TValue Can return any type. */ public function current() {} /** * @return TKey scalar on success, or null on failure. */ public function key() {} } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Iterator * * @template-implements OuterIterator * @template-implements ArrayAccess * * @template-extends IteratorIterator */ class CachingIterator extends IteratorIterator implements OuterIterator , ArrayAccess , Countable { const CALL_TOSTRING = 1 ; const CATCH_GET_CHILD = 16 ; const TOSTRING_USE_KEY = 2 ; const TOSTRING_USE_CURRENT = 4 ; const TOSTRING_USE_INNER = 8 ; const FULL_CACHE = 256 ; /** * @param TIterator $iterator * @param int-mask-of $flags */ public function __construct(Iterator $iterator, int $flags = self::CALL_TOSTRING) {} /** @return bool */ public function hasNext () {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} /** * @return array */ public function getCache() {} } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Iterator * * @template-implements OuterIterator * * @template-extends FilterIterator */ class CallbackFilterIterator extends FilterIterator implements OuterIterator { /** * @param TIterator $iterator * @param callable(TValue, TKey, TIterator): bool $callback */ public function __construct(Iterator $iterator, callable $callback) {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template-implements SeekableIterator */ class DirectoryIterator extends SplFileInfo implements SeekableIterator { public function __construct(string $path){} /** * @return self */ public function current() {} /** * @return int|false * @psalm-ignore-falsable-return */ public function key() {} /** * @return void */ public function next(){} /** * @return void */ public function rewind(){} /** * @param int $position */ public function seek($position) {} /** * @return bool */ public function valid(){} } /** * @template-implements Iterator */ class EmptyIterator implements Iterator { /** * @return never */ public function current() {} /** * @return never */ public function key() {} /** * @return void */ public function next() {} /** * @return void */ public function rewind() {} /** * @return false */ public function valid() {} } /** * @template-extends SeekableIterator */ class FilesystemIterator extends DirectoryIterator { const CURRENT_AS_PATHNAME = 32; const CURRENT_AS_FILEINFO = 0; const CURRENT_AS_SELF = 16; const CURRENT_MODE_MASK = 240; const KEY_AS_PATHNAME = 0; const KEY_AS_FILENAME = 256; const FOLLOW_SYMLINKS = 512; const KEY_MODE_MASK = 3840; const NEW_CURRENT_AND_KEY = 256; const SKIP_DOTS = 4096; const UNIX_PATHS = 8192; /** * @param int-mask $flags */ public function __construct(string $path, int $flags = self::KEY_AS_PATHNAME|self::CURRENT_AS_FILEINFO|self::SKIP_DOTS) {} /** * @return FilesystemIterator|SplFileInfo|string|null * @psalm-ignore-nullable-return */ public function current() {} /** * @return int-mask */ public function getFlags() {} /** * @param int-mask $flags * @return void */ public function setFlags($flags) {} /** * @return string|null * @psalm-ignore-nullable-return */ public function key() {} } /** * @template-extends SeekableIterator */ class GlobIterator extends FilesystemIterator implements Countable { /** * @return int */ public function count() {} } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Iterator * * @template-extends IteratorIterator */ class InfiniteIterator extends IteratorIterator { /** * @param TIterator $iterator */ public function __construct(Iterator $iterator) {} /** * @return TValue|null current value or null if iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Iterator * * @template-implements OuterIterator * * @template-extends IteratorIterator */ class LimitIterator extends IteratorIterator implements OuterIterator { /** * @param TIterator $iterator */ public function __construct(Iterator $iterator, int $offset = 0, int $limit = -1) {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Iterator * * @template-extends IteratorIterator */ class NoRewindIterator extends IteratorIterator { /** * @param TIterator $iterator */ public function __construct(Iterator $iterator) {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * * @template-covariant TKey * @template-covariant TValue * * @template-implements Iterator */ class MultipleIterator implements Iterator { const MIT_NEED_ANY = 0 ; const MIT_NEED_ALL = 1 ; const MIT_KEYS_NUMERIC = 0 ; const MIT_KEYS_ASSOC = 2 ; /** * @param int-mask-of $flags */ public function __construct (int $flags = 0) {} /** * @param Iterator $iterator * @param string|int $infos * @return void */ public function attachIterator(Iterator $iterator, $infos = '') {} /** * @param Iterator $iterator * @return bool */ public function containsIterator(Iterator $iterator) {} /** * @return int */ public function countIterators() {} /** * nullable values are returned when MIT_NEED_ANY is set * and one of the iterators is already drained. * When MIT_NEED_ALL is set and one of the iterators * is already drained, `current()` throws * * @return array */ public function current() {} /** * @param Iterator $iterator * @return void */ public function detachIterator(Iterator $iterator) {} /** * @return int-mask-of */ public function getFlags() {} /** * @return array */ public function key() {} /** * @param int-mask-of $flags * @return void */ public function setFlags( int $flags ) {} } /** * @template TKey * @template TValue * @template TIterator as RecursiveIterator * * @template-extends FilterIterator * @template-implements RecursiveIterator */ abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator { /** * @param TIterator $iterator */ public function __construct(RecursiveIterator $iterator) {} /** * @return TIterator */ public function getChildren() {} /** * @return bool */ public function hasChildren() {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template TKey * @template TValue * @template TIterator as RecursiveIterator * * @template-extends RecursiveFilterIterator */ class ParentIterator extends RecursiveFilterIterator implements RecursiveIterator, OuterIterator { /** * @return bool */ public function accept() {} /** * @param TIterator $iterator */ public function __construct(RecursiveIterator $iterator) {} /** * @return ParentIterator */ public function getChildren() {} /** * @return bool */ public function hasChildren() {} /** * @return void */ public function next() {} /** * @return void */ public function rewind() {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template TKey * @template TValue * * @template-implements RecursiveIterator * @template-extends ArrayIterator */ class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator { const STD_PROP_LIST = 1 ; const ARRAY_AS_PROPS = 2 ; const CHILD_ARRAYS_ONLY = 4 ; /** * @return RecursiveArrayIterator */ public function getChildren() {} /** * @return bool */ public function hasChildren() {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template TKey * @template TValue * @template TIterator as Iterator * * @template-implements RecursiveIterator * @template-extends CachingIterator */ class RecursiveCachingIterator extends CachingIterator implements RecursiveIterator { /** * @return RecursiveCachingIterator */ public function getChildren() {} /** * @return bool */ public function hasChildren() {} } /** * @template TKey * @template TValue * @template TIterator as RecursiveIterator * * @template-implements RecursiveIterator * @template-extends CallbackFilterIterator */ class RecursiveCallbackFilterIterator extends CallbackFilterIterator implements RecursiveIterator { /** * @param TIterator $iterator * @param callable(TValue, TKey, TIterator): bool $callback */ public function __construct(RecursiveIterator $iterator, callable $callback) {} /** * @return RecursiveCallbackFilterIterator */ public function getChildren() {} /** * @return bool */ public function hasChildren() {} /** * @return TValue|null current value or null when iterator is drained */ public function current() {} /** * @return TKey|null current value or null when iterator is drained */ public function key() {} } /** * @template-implements RecursiveIterator * @template-implements SeekableIterator */ class RecursiveDirectoryIterator extends FilesystemIterator implements RecursiveIterator, SeekableIterator { const CURRENT_AS_PATHNAME = 32 ; const CURRENT_AS_FILEINFO = 0 ; const CURRENT_AS_SELF = 16 ; const CURRENT_MODE_MASK = 240 ; const KEY_AS_PATHNAME = 0 ; const KEY_AS_FILENAME = 256 ; const FOLLOW_SYMLINKS = 512 ; const KEY_MODE_MASK = 3840 ; const NEW_CURRENT_AND_KEY = 256 ; const SKIP_DOTS = 4096 ; const UNIX_PATHS = 8192 ; /** * @param string $path * @param int-mask $flags */ public function __construct(string $path, int $flags = self::KEY_AS_PATHNAME|self::CURRENT_AS_FILEINFO) {} /** * @return string */ public function getSubPath() {} /** * @return string */ public function getSubPathname() {} /** * @return RecursiveDirectoryIterator|string|SplFileInfo|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return string|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template TIterator as RecursiveIterator|IteratorAggregate * @mixin TIterator */ class RecursiveIteratorIterator implements OuterIterator { /** * @param TIterator $iterator * @param int $mode * @param int $flags * * @return void */ public function __construct($iterator, $mode = 0, $flags = 0) {} } /** * @template TKey * @template TValue * @template TIterator as RecursiveIterator * * @template-implements RecursiveIterator * @template-extends RegexIterator */ class RecursiveRegexIterator extends RegexIterator implements RecursiveIterator { const MATCH = 0 ; const GET_MATCH = 1 ; const ALL_MATCHES = 2 ; const SPLIT = 3 ; const REPLACE = 4 ; const USE_KEY = 1 ; /** * @param TIterator $iterator * @param string $regex * @param self::MATH|self::GET_MATCH|self::ALL_MATCHES|self::SPLIT|self::REPLACE $mode * @param self::USE_KEY|0 $flags * @param int $preg_flags */ public function __construct(RecursiveIterator $iterator, string $regex, int $mode = self::MATCH, int $flags = 0, int $preg_flags = 0) {} /** * @return RecursiveRegexIterator */ public function getChildren() {} } /** * @template TKey * @template TValue * * @template-extends RecursiveIteratorIterator * @template-implements OuterIterator */ class RecursiveTreeIterator extends RecursiveIteratorIterator implements OuterIterator { const LEAVES_ONLY = 0 ; const SELF_FIRST = 1 ; const CHILD_FIRST = 2 ; const CATCH_GET_CHILD = 16 ; const BYPASS_CURRENT = 4 ; const BYPASS_KEY = 8 ; const PREFIX_LEFT = 0 ; const PREFIX_MID_HAS_NEXT = 1 ; const PREFIX_MID_LAST = 2 ; const PREFIX_END_HAS_NEXT = 3 ; const PREFIX_END_LAST = 4 ; const PREFIX_RIGHT = 5 ; /** * @return void */ public function beginChildren() {} /** * @return RecursiveIterator */ public function beginIteration() {} /** * @return RecursiveIterator */ public function callGetChildren() {} /** * @return bool */ public function callHasChildren() {} /** * @param RecursiveIterator|IteratorAggregate $it * @param int-mask $flags * @param int-mask $cit_flags * @param self::LEAVES_ONLY|self::SELF_FIRST|self::CHILD_FIRST $mode */ public function __construct($it, int $flags = self::BYPASS_KEY, int $cit_flags = self::CATCH_GET_CHILD, int $mode = self::SELF_FIRST) {} /** * @return string */ public function current() {} /** * @return void */ public function endChildren() {} /** * @return void */ public function endIteration() {} /** * @return string */ public function getEntry() {} /** * @return string */ public function getPostfix() {} /** * @return string */ public function getPrefix() {} /** * @return string */ public function key() {} /** * @return void */ public function next() {} /** * @return void */ public function nextElement() {} /** * @return void */ public function rewind() {} /** * @return void */ public function setPostfix(string $postfix ) {} /** * @param self::PREFIX_* $part * @param string $value * @return void */ public function setPrefixPart(int $part , string $value ) {} /** * @return bool */ public function valid() {} } /** * @template TKey * @template TValue * @template TIterator as Iterator * * @template-extends FilterIterator */ class RegexIterator extends FilterIterator { const MATCH = 0 ; const GET_MATCH = 1 ; const ALL_MATCHES = 2 ; const SPLIT = 3 ; const REPLACE = 4 ; const USE_KEY = 1 ; /** * @param TIterator $iterator * @param string $regex * @param self::MATCH|self::GET_MATCH|self::ALL_MATCHES|self::SPLIT|self::REPLACE $mode * @param int-mask $flags * @param int $preg_flags */ public function __construct(Iterator $iterator, string $regex, int $mode = self::MATCH, int $flags = 0, int $preg_flags = 0) {} /** * @return TValue Can return any type. */ public function current() {} /** * @return TKey scalar on success, or null on failure. */ public function key() {} } '5.15.0@5c774aca4746caf3d239d9c8cadb9f882ca29352', 'nikic/php-parser' => 'v4.17.1@a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d'); getText(), $docblock->getStartFilePos()); foreach ($parsed_docblock->tags as $special_key => $_) { if (strpos($special_key, 'psalm-') === 0) { $special_key = substr($special_key, 6); if (!in_array($special_key, self::PSALM_ANNOTATIONS, \true)) { throw new DocblockParseException('Unrecognised annotation @psalm-' . $special_key); } } } return $parsed_docblock; } /** * @psalm-pure * @return array */ public static function parseSuppressList(string $suppress_entry) : array { preg_match('/ (?(DEFINE) # either a single issue or comma separated list of issues (? (?&issue) \\s* , \\s* (?&issue_list) | (?&issue) ) # definition of a single issue (? [A-Za-z0-9_-]+ ) ) ^ (?P (?&issue_list) ) (?P .* ) $ /xm', $suppress_entry, $matches); if (!isset($matches['issues'])) { return []; } $issue_offset = 0; $ret = []; foreach (explode(',', $matches['issues']) as $suppressed_issue) { $issue_offset += strspn($suppressed_issue, "\t\n\f\r "); $ret[$issue_offset] = trim($suppressed_issue); $issue_offset += strlen($suppressed_issue) + 1; } return $ret; } } */ public function getAliasedClassesFlipped() : array; /** * @return array */ public function getAliasedClassesFlippedReplaceable() : array; public function getFQCLN() : ?string; public function getClassName() : ?string; public function getParentFQCLN() : ?string; /** * @return array>|null */ public function getTemplateTypeMap() : ?array; public function setRootFilePath(string $file_path, string $file_name) : void; public function hasParentFilePath(string $file_path) : bool; public function hasAlreadyRequiredFilePath(string $file_path) : bool; public function getRequireNesting() : int; public function isStatic() : bool; public function getSource() : \Psalm\StatementsSource; public function getCodebase() : \Psalm\Codebase; /** * Get a list of suppressed issues * * @return array */ public function getSuppressedIssues() : array; /** * @param list $new_issues */ public function addSuppressedIssues(array $new_issues) : void; /** * @param list $new_issues */ public function removeSuppressedIssues(array $new_issues) : void; public function getNodeTypeProvider() : \Psalm\NodeTypeProvider; } start = $start; $this->end = $end; $this->insertion_text = $insertion_text; $this->preserve_indentation = $preserve_indentation; $this->remove_trailing_newline = $remove_trailing_newline; } public function getKey() : string { return $this->start === $this->end ? $this->start . ':' . sha1($this->insertion_text) : $this->start . ':' . $this->end; } public function transform(string $existing_contents) : string { if ($this->preserve_indentation) { $newline_pos = strrpos($existing_contents, "\n", $this->start - strlen($existing_contents)); $newline_pos = $newline_pos !== \false ? $newline_pos + 1 : 0; $indentation = substr($existing_contents, $newline_pos, $this->start - $newline_pos); if (trim($indentation) === '') { $this->insertion_text .= $indentation; } } if ($this->remove_trailing_newline && strlen($existing_contents) > $this->end && $existing_contents[$this->end] === "\n") { $newline_pos = strrpos($existing_contents, "\n", $this->start - strlen($existing_contents)); $newline_pos = $newline_pos !== \false ? $newline_pos + 1 : 0; $indentation = substr($existing_contents, $newline_pos, $this->start - $newline_pos); if (trim($indentation) === '') { $this->start -= strlen($indentation); $this->end++; } } return substr($existing_contents, 0, $this->start) . $this->insertion_text . substr($existing_contents, $this->end); } } file_start = (int) $stmt->getAttribute('startFilePos'); /** @psalm-suppress ImpureMethodCall Actually mutation-free just not marked */ $this->file_end = (int) $stmt->getAttribute('endFilePos'); $this->raw_file_start = $this->file_start; $this->raw_file_end = $this->file_end; $this->file_path = $file_source->getFilePath(); $this->file_name = $file_source->getFileName(); $this->single_line = $single_line; $this->regex_type = $regex_type; $this->previous_location = $previous_location; $this->text = $selected_text; /** @psalm-suppress ImpureMethodCall Actually mutation-free just not marked */ $doc_comment = $stmt->getDocComment(); $this->docblock_start = $doc_comment ? $doc_comment->getStartFilePos() : null; $this->docblock_start_line_number = $doc_comment ? $doc_comment->getStartLine() : null; $this->preview_start = $this->docblock_start ?: $this->file_start; /** @psalm-suppress ImpureMethodCall Actually mutation-free just not marked */ $this->raw_line_number = $stmt->getLine(); $this->docblock_line_number = $comment_line; } /** * @psalm-suppress PossiblyUnusedMethod Part of public API * @return static */ public function setCommentLine(?int $line) : self { if ($line === $this->docblock_line_number) { return $this; } $cloned = clone $this; $cloned->docblock_line_number = $line; return $cloned; } /** * @psalm-external-mutation-free * @psalm-suppress InaccessibleProperty Mainly used for caching */ private function calculateRealLocation() : void { if ($this->have_recalculated) { return; } $this->have_recalculated = \true; $this->selection_start = $this->file_start; $this->selection_end = $this->file_end + 1; $project_analyzer = ProjectAnalyzer::getInstance(); $codebase = $project_analyzer->getCodebase(); /** @psalm-suppress ImpureMethodCall */ $file_contents = $codebase->getFileContents($this->file_path); $file_length = strlen($file_contents); $search_limit = $this->single_line ? $this->selection_start : $this->selection_end; if ($search_limit <= $file_length) { $preview_end = strpos($file_contents, "\n", $search_limit); } else { $preview_end = \false; } // if the string didn't contain a newline if ($preview_end === \false) { $preview_end = $this->selection_end; } $this->preview_end = $preview_end; if ($this->docblock_line_number && $this->docblock_start_line_number && $this->preview_start < $this->selection_start) { $preview_lines = explode("\n", mb_strcut($file_contents, $this->preview_start, $this->selection_start - $this->preview_start - 1)); $preview_offset = 0; $comment_line_offset = $this->docblock_line_number - $this->docblock_start_line_number; for ($i = 0; $i < $comment_line_offset; ++$i) { $preview_offset += strlen($preview_lines[$i]) + 1; } if (!isset($preview_lines[$i])) { throw new Exception('Should have offset'); } $key_line = $preview_lines[$i]; $indentation = (int) strpos($key_line, '@'); $key_line = trim(preg_replace('@\\**/\\s*@', '', mb_strcut($key_line, $indentation))); $this->selection_start = $preview_offset + $indentation + $this->preview_start; $this->selection_end = $this->selection_start + strlen($key_line); } if ($this->regex_type !== null) { switch ($this->regex_type) { case self::VAR_TYPE: $regex = '/@(?:psalm-)?var[ \\t]+' . CommentAnalyzer::TYPE_REGEX . '/'; break; case self::FUNCTION_RETURN_TYPE: $regex = '/\\:\\s+(\\??\\s*[A-Za-z0-9_\\\\\\[\\]]+)/'; break; case self::FUNCTION_PARAM_TYPE: $regex = '/^(\\??\\s*[A-Za-z0-9_\\\\\\[\\]]+)\\s/'; break; case self::FUNCTION_PHPDOC_RETURN_TYPE: $regex = '/@(?:psalm-)?return[ \\t]+' . CommentAnalyzer::TYPE_REGEX . '/'; break; case self::FUNCTION_PHPDOC_METHOD: $regex = '/@(?:psalm-)?method[ \\t]+(.*)/'; break; case self::FUNCTION_PHPDOC_PARAM_TYPE: $regex = '/@(?:psalm-)?param[ \\t]+' . CommentAnalyzer::TYPE_REGEX . '/'; break; case self::FUNCTION_PARAM_VAR: $regex = '/(\\$[^ ]*)/'; break; case self::CATCH_VAR: $regex = '/(\\$[^ ^\\)]*)/'; break; default: throw new UnexpectedValueException('Unrecognised regex type ' . $this->regex_type); } $preview_snippet = mb_strcut($file_contents, $this->selection_start, $this->selection_end - $this->selection_start); if ($this->text) { $regex = '/(' . str_replace(',', ',[ ]*', preg_quote($this->text, '/')) . ')/'; } if (preg_match($regex, $preview_snippet, $matches, PREG_OFFSET_CAPTURE)) { if (!isset($matches[1]) || $matches[1][1] === -1) { throw new LogicException("Failed to match anything to 1st capturing group, " . "or regex doesn't contain 1st capturing group, regex type " . $this->regex_type); } $this->selection_start = $this->selection_start + $matches[1][1]; $this->selection_end = $this->selection_start + strlen($matches[1][0]); } } // reset preview start to beginning of line $this->preview_start = (int) strrpos($file_contents, "\n", min($this->preview_start, $this->selection_start) - strlen($file_contents)) + 1; $this->selection_start = max($this->preview_start, $this->selection_start); $this->selection_end = min($this->preview_end, $this->selection_end); if ($this->preview_end - $this->selection_end > 200) { $this->preview_end = (int) strrpos($file_contents, "\n", $this->selection_end + 200 - strlen($file_contents)); // if the line is over 200 characters long if ($this->preview_end < $this->selection_end) { $this->preview_end = $this->selection_end + 50; } } $this->snippet = mb_strcut($file_contents, $this->preview_start, $this->preview_end - $this->preview_start); // text is within snippet. It's 50% faster to cut it from the snippet than from the full text $selection_length = $this->selection_end - $this->selection_start; $this->text = mb_strcut($this->snippet, $this->selection_start - $this->preview_start, $selection_length); // reset preview start to beginning of line if ($file_contents !== '') { $this->column_from = $this->selection_start - (int) strrpos($file_contents, "\n", $this->selection_start - strlen($file_contents)); } else { $this->column_from = $this->selection_start; } $newlines = substr_count($this->text, "\n"); if ($newlines) { $last_newline_pos = strrpos($file_contents, "\n", $this->selection_end - strlen($file_contents) - 1); $this->column_to = $this->selection_end - (int) $last_newline_pos; } else { $this->column_to = $this->column_from + strlen($this->text); } $this->end_line_number = $this->getLineNumber() + $newlines; } public function getLineNumber() : int { return $this->docblock_line_number ?: $this->raw_line_number; } public function getEndLineNumber() : int { $this->calculateRealLocation(); return $this->end_line_number; } public function getSnippet() : string { $this->calculateRealLocation(); return $this->snippet; } public function getSelectedText() : string { $this->calculateRealLocation(); return (string) $this->text; } public function getColumn() : int { $this->calculateRealLocation(); return $this->column_from; } public function getEndColumn() : int { $this->calculateRealLocation(); return $this->column_to; } /** * @return array{0: int, 1: int} */ public function getSelectionBounds() : array { $this->calculateRealLocation(); return [$this->selection_start, $this->selection_end]; } /** * @return array{0: int, 1: int} */ public function getSnippetBounds() : array { $this->calculateRealLocation(); return [$this->preview_start, $this->preview_end]; } public function getHash() : string { return $this->file_name . ' ' . $this->raw_file_start . $this->raw_file_end; } public function getShortSummary() : string { return $this->file_name . ':' . $this->getLineNumber() . ':' . $this->getColumn(); } } */ public $vars_in_scope = []; /** * @var array */ public $vars_possibly_in_scope = []; /** * Keeps track of how many times a var_in_scope has been referenced. May not be set for all $vars_in_scope. * * @var array> */ public $referenced_counts = []; /** * Maps references to referenced variables for the current scope. * With `$b = &$a`, this will contain `['$b' => '$a']`. * * All keys and values in this array are guaranteed to be set in $vars_in_scope. * * To check if a variable was passed or returned by reference, or * references an object property or array item, see Union::$by_ref. * * @var array */ public $references_in_scope = []; /** * Set of references to variables in another scope. These references will be marked as used if they are assigned to. * * @var array */ public $references_to_external_scope = []; /** * A set of globals that are referenced somewhere. * * @var array */ public $referenced_globals = []; /** * A set of references that might still be in scope from a scope likely to cause confusion. This applies * to references set inside a loop or if statement, since it's easy to forget about PHP's weird scope * rules, and assinging to a reference will change the referenced variable rather than shadowing it. * * @var array */ public $references_possibly_from_confusing_scope = []; /** * Whether or not we're inside the conditional of an if/where etc. * * This changes whether or not the context is cloned * * @var bool */ public $inside_conditional = \false; /** * Whether or not we're inside an isset call * * Inside issets Psalm is more lenient about certain things * * @var bool */ public $inside_isset = \false; /** * Whether or not we're inside an unset call, where * we don't care about possibly undefined variables * * @var bool */ public $inside_unset = \false; /** * Whether or not we're inside an class_exists call, where * we don't care about possibly undefined classes * * @var bool */ public $inside_class_exists = \false; /** * Whether or not we're inside a function/method call * * @var bool */ public $inside_call = \false; /** * Whether or not we're inside any other situation that treats a variable as used * * @var bool */ public $inside_general_use = \false; /** * Whether or not we're inside a return expression * * @var bool */ public $inside_return = \false; /** * Whether or not we're inside a throw * * @var bool */ public $inside_throw = \false; /** * Whether or not we're inside an assignment * * @var bool */ public $inside_assignment = \false; /** * Whether or not we're inside a try block. * * @var bool */ public $inside_try = \false; /** * @var null|CodeLocation */ public $include_location; /** * @var string|null * The name of the current class. Null if outside a class. */ public $self; /** * @var string|null */ public $parent; /** * @var bool */ public $check_classes = \true; /** * @var bool */ public $check_variables = \true; /** * @var bool */ public $check_methods = \true; /** * @var bool */ public $check_consts = \true; /** * @var bool */ public $check_functions = \true; /** * A list of classes checked with class_exists * * @var array */ public $phantom_classes = []; /** * A list of files checked with file_exists * * @var array */ public $phantom_files = []; /** * A list of clauses in Conjunctive Normal Form * * @var list */ public $clauses = []; /** * A list of hashed clauses that have already been factored in * * @var list */ public $reconciled_expression_clauses = []; /** * Whether or not to do a deep analysis and collect mutations to this context * * @var bool */ public $collect_mutations = \false; /** * Whether or not to do a deep analysis and collect initializations from private or final methods * * @var bool */ public $collect_initializations = \false; /** * Whether or not to do a deep analysis and collect initializations from public non-final methods * * @var bool */ public $collect_nonprivate_initializations = \false; /** * Stored to prevent re-analysing methods when checking for initialised properties * * @var array|null */ public $initialized_methods; /** * @var array */ public $constants = []; /** * Whether or not to track exceptions * * @var bool */ public $collect_exceptions = \false; /** * A list of variables that have been referenced in conditionals * * @var array */ public $cond_referenced_var_ids = []; /** * A list of variables that have been passed by reference (where we know their type) * * @var array */ public $byref_constraints = []; /** * A list of vars that have been assigned to * * @var array */ public $assigned_var_ids = []; /** * A list of vars that have been may have been assigned to * * @var array */ public $possibly_assigned_var_ids = []; /** * A list of classes or interfaces that may have been thrown * * @var array> */ public $possibly_thrown_exceptions = []; /** * @var bool */ public $is_global = \false; /** * @var array */ public $protected_var_ids = []; /** * If we've branched from the main scope, a byte offset for where that branch happened * * @var int|null */ public $branch_point; /** * What does break mean in this context? * * 'loop' means we're breaking out of a loop, * 'switch' means we're breaking out of a switch * * @var list<'loop'|'switch'> */ public $break_types = []; /** * @var bool */ public $inside_loop = \false; /** * @var LoopScope|null */ public $loop_scope; /** * @var CaseScope|null */ public $case_scope; /** * @var FinallyScope|null */ public $finally_scope; /** * @var Context|null */ public $if_body_context; /** * @var bool */ public $strict_types = \false; /** * @var string|null */ public $calling_function_id; /** * @var lowercase-string|null */ public $calling_method_id; /** * @var bool */ public $inside_negation = \false; /** * @var bool */ public $ignore_variable_property = \false; /** * @var bool */ public $ignore_variable_method = \false; /** * @var bool */ public $pure = \false; /** * @var bool * Set by @psalm-immutable */ public $mutation_free = \false; /** * @var bool * Set by @psalm-external-mutation-free */ public $external_mutation_free = \false; /** * @var bool */ public $error_suppressing = \false; /** * @var bool */ public $has_returned = \false; /** * @var array */ public $parent_remove_vars = []; /** @internal */ public function __construct(?string $self = null) { $this->self = $self; } public function __destruct() { $this->case_scope = null; } /** * Updates the parent context, looking at the changes within a block and then applying those changes, where * necessary, to the parent context * * @param bool $has_leaving_statements whether or not the parent scope is abandoned between * $start_context and $end_context * @param array $updated_vars */ public function update(\Psalm\Context $start_context, \Psalm\Context $end_context, bool $has_leaving_statements, array $vars_to_update, array &$updated_vars) : void { foreach ($start_context->vars_in_scope as $var_id => $old_type) { // this is only true if there was some sort of type negation if (in_array($var_id, $vars_to_update, \true)) { // if we're leaving, we're effectively deleting the possibility of the if types $new_type = !$has_leaving_statements && $end_context->hasVariable($var_id) ? $end_context->vars_in_scope[$var_id] : null; $existing_type = $this->vars_in_scope[$var_id] ?? null; if (!$existing_type) { if ($new_type) { $this->vars_in_scope[$var_id] = $new_type; $updated_vars[$var_id] = \true; } continue; } // if the type changed within the block of statements, process the replacement // also never allow ourselves to remove all types from a union if ((!$new_type || !$old_type->equals($new_type)) && ($new_type || count($existing_type->getAtomicTypes()) > 1)) { $existing_type = $existing_type->getBuilder()->substitute($old_type, $new_type); if ($new_type && $new_type->from_docblock) { $existing_type = $existing_type->setFromDocblock(); } $existing_type = $existing_type->freeze(); $updated_vars[$var_id] = \true; } $this->vars_in_scope[$var_id] = $existing_type; } } } /** * Updates the list of possible references from a confusing scope, * such as a reference created in an if that might later be reused. */ public function updateReferencesPossiblyFromConfusingScope(\Psalm\Context $confusing_scope_context, StatementsAnalyzer $statements_analyzer) : void { $references = $confusing_scope_context->references_in_scope + $confusing_scope_context->references_to_external_scope; foreach ($references as $reference_id => $_) { if (!isset($this->references_in_scope[$reference_id]) && !isset($this->references_to_external_scope[$reference_id]) && ($reference_location = $statements_analyzer->getFirstAppearance($reference_id))) { $this->references_possibly_from_confusing_scope[$reference_id] = $reference_location; } } $this->references_possibly_from_confusing_scope += $confusing_scope_context->references_possibly_from_confusing_scope; } /** * @param array $new_vars_in_scope * @return array */ public function getRedefinedVars(array $new_vars_in_scope, bool $include_new_vars = \false) : array { $redefined_vars = []; foreach ($this->vars_in_scope as $var_id => $this_type) { if (!isset($new_vars_in_scope[$var_id])) { if ($include_new_vars) { $redefined_vars[$var_id] = $this_type; } continue; } $new_type = $new_vars_in_scope[$var_id]; if (!$this_type->equals($new_type, \true, !($this_type->propagate_parent_nodes || $new_type->propagate_parent_nodes))) { $redefined_vars[$var_id] = $this_type; } } return $redefined_vars; } /** * @return list */ public static function getNewOrUpdatedVarIds(\Psalm\Context $original_context, \Psalm\Context $new_context) : array { $redefined_var_ids = []; foreach ($new_context->vars_in_scope as $var_id => $context_type) { if (!isset($original_context->vars_in_scope[$var_id]) || ($original_context->assigned_var_ids[$var_id] ?? 0) !== ($new_context->assigned_var_ids[$var_id] ?? 0) || !$original_context->vars_in_scope[$var_id]->equals($context_type)) { $redefined_var_ids[] = $var_id; } } return $redefined_var_ids; } public function remove(string $remove_var_id, bool $removeDescendents = \true) : void { if (isset($this->vars_in_scope[$remove_var_id])) { $existing_type = $this->vars_in_scope[$remove_var_id]; unset($this->vars_in_scope[$remove_var_id]); if ($removeDescendents) { $this->removeDescendents($remove_var_id, $existing_type); } } $this->removePossibleReference($remove_var_id); unset($this->vars_possibly_in_scope[$remove_var_id]); } /** * Remove a variable from the context which might be a reference to another variable, or * referenced by another variable. Leaves the variable as possibly-in-scope, unlike remove(). */ public function removePossibleReference(string $remove_var_id) : void { if (isset($this->referenced_counts[$remove_var_id]) && $this->referenced_counts[$remove_var_id] > 0) { // If a referenced variable goes out of scope, we need to update the references. // All of the references to this variable are still references to the same value, // so we pick the first one and make the rest of the references point to it. $references = []; foreach ($this->references_in_scope as $reference => $referenced) { if ($referenced === $remove_var_id) { $references[] = $reference; unset($this->references_in_scope[$reference]); } } assert(!empty($references)); $first_reference = array_shift($references); if (!empty($references)) { $this->referenced_counts[$first_reference] = count($references); foreach ($references as $reference) { $this->references_in_scope[$reference] = $first_reference; } } } if (isset($this->references_in_scope[$remove_var_id])) { $this->decrementReferenceCount($remove_var_id); } unset($this->vars_in_scope[$remove_var_id], $this->cond_referenced_var_ids[$remove_var_id], $this->referenced_counts[$remove_var_id], $this->references_in_scope[$remove_var_id], $this->references_to_external_scope[$remove_var_id]); } /** * Decrement the reference count of the variable that $ref_id is referring to. This needs to * be done before $ref_id is changed to no longer reference its currently referenced variable, * for example by unsetting, reassigning to another reference, or being shadowed by a global. */ public function decrementReferenceCount(string $ref_id) : void { if (!isset($this->referenced_counts[$this->references_in_scope[$ref_id]])) { throw new InvalidArgumentException("{$ref_id} is not a reference"); } $reference_count = $this->referenced_counts[$this->references_in_scope[$ref_id]]; if ($reference_count < 1) { throw new RuntimeException("Incorrect referenced count found"); } --$reference_count; $this->referenced_counts[$this->references_in_scope[$ref_id]] = $reference_count; } /** * @param Clause[] $clauses * @param array $changed_var_ids * @return array{list, list} * @psalm-pure */ public static function removeReconciledClauses(array $clauses, array $changed_var_ids) : array { $included_clauses = []; $rejected_clauses = []; foreach ($clauses as $c) { if ($c->wedge) { $included_clauses[] = $c; continue; } foreach ($c->possibilities as $key => $_) { if (isset($changed_var_ids[$key])) { $rejected_clauses[] = $c; continue 2; } } $included_clauses[] = $c; } return [$included_clauses, $rejected_clauses]; } /** * @param Clause[] $clauses * @return list */ public static function filterClauses(string $remove_var_id, array $clauses, ?Union $new_type = null, ?StatementsAnalyzer $statements_analyzer = null) : array { $new_type_string = $new_type ? $new_type->getId() : ''; $clauses_to_keep = []; foreach ($clauses as $clause) { $clause = $clause->calculateNegation(); $quoted_remove_var_id = preg_quote($remove_var_id, '/'); foreach ($clause->possibilities as $var_id => $_) { if (preg_match('/' . $quoted_remove_var_id . '[\\]\\[\\-]/', $var_id)) { break 2; } } if (!isset($clause->possibilities[$remove_var_id]) || count($clause->possibilities[$remove_var_id]) === 1 && array_keys($clause->possibilities[$remove_var_id])[0] === $new_type_string) { $clauses_to_keep[] = $clause; } elseif ($statements_analyzer && $new_type && !$new_type->hasMixed()) { $type_changed = \false; // if the clause contains any possibilities that would be altered // by the new type foreach ($clause->possibilities[$remove_var_id] as $assertion) { // if we're negating a type, we generally don't need the clause anymore if ($assertion->isNegation()) { $type_changed = \true; break; } $result_type = AssertionReconciler::reconcile($assertion, $new_type, null, $statements_analyzer, \false, [], null, [], $failed_reconciliation); if ($result_type->getId() !== $new_type_string) { $type_changed = \true; break; } } if (!$type_changed) { $clauses_to_keep[] = $clause; } } } return $clauses_to_keep; } public function removeVarFromConflictingClauses(string $remove_var_id, ?Union $new_type = null, ?StatementsAnalyzer $statements_analyzer = null) : void { $this->clauses = self::filterClauses($remove_var_id, $this->clauses, $new_type, $statements_analyzer); $this->parent_remove_vars[$remove_var_id] = \true; } /** * This method is used after assignments to variables to remove any existing * items in $vars_in_scope that are now made redundant by an update to some data */ public function removeDescendents(string $remove_var_id, Union $existing_type, ?Union $new_type = null, ?StatementsAnalyzer $statements_analyzer = null) : void { $this->removeVarFromConflictingClauses($remove_var_id, $existing_type->hasMixed() || $new_type && $existing_type->from_docblock !== $new_type->from_docblock ? null : $new_type, $statements_analyzer); foreach ($this->vars_in_scope as $var_id => &$type) { if (preg_match('/' . preg_quote($remove_var_id, '/') . '[\\]\\[\\-]/', $var_id)) { $this->remove($var_id, \false); } $builder = null; foreach ($type->getAtomicTypes() as $atomic_type) { if ($atomic_type instanceof DependentType && $atomic_type->getVarId() === $remove_var_id) { $builder ??= $type->getBuilder(); $builder->addType($atomic_type->getReplacement()); } } if ($builder) { $type = $builder->freeze(); } } } public function removeMutableObjectVars(bool $methods_only = \false) : void { $vars_to_remove = []; foreach ($this->vars_in_scope as $var_id => $type) { if ($type->has_mutations && (strpos($var_id, '->') !== \false || strpos($var_id, '::') !== \false) && (!$methods_only || strpos($var_id, '()'))) { $vars_to_remove[] = $var_id; } } if (!$vars_to_remove) { return; } foreach ($vars_to_remove as $var_id) { $this->remove($var_id, \false); } $clauses_to_keep = []; foreach ($this->clauses as $clause) { $abandon_clause = \false; foreach (array_keys($clause->possibilities) as $key) { if ((strpos($key, '->') !== \false || strpos($key, '::') !== \false) && (!$methods_only || strpos($key, '()'))) { $abandon_clause = \true; break; } } if (!$abandon_clause) { $clauses_to_keep[] = $clause; } } $this->clauses = $clauses_to_keep; } public function updateChecks(\Psalm\Context $op_context) : void { $this->check_classes = $this->check_classes && $op_context->check_classes; $this->check_variables = $this->check_variables && $op_context->check_variables; $this->check_methods = $this->check_methods && $op_context->check_methods; $this->check_functions = $this->check_functions && $op_context->check_functions; $this->check_consts = $this->check_consts && $op_context->check_consts; } public function isPhantomClass(string $class_name) : bool { return isset($this->phantom_classes[strtolower($class_name)]); } public function hasVariable(string $var_name) : bool { if (!$var_name) { return \false; } $stripped_var = preg_replace('/(->|\\[).*$/', '', $var_name, 1); if ($stripped_var !== '$this' || $var_name !== $stripped_var) { $this->cond_referenced_var_ids[$var_name] = \true; } return isset($this->vars_in_scope[$var_name]); } public function getScopeSummary() : string { $summary = []; foreach ($this->vars_possibly_in_scope as $k => $_) { $summary[$k] = \true; } foreach ($this->vars_in_scope as $k => $v) { $summary[$k] = $v->getId(); } return json_encode($summary, JSON_THROW_ON_ERROR); } public function defineGlobals() : void { $globals = [ // not sure why this is declared here again, see VariableFetchAnalyzer '$argv' => new Union([\Psalm\Type::getNonEmptyListAtomic(\Psalm\Type::getString()), new TNull()], ['ignore_nullable_issues' => \true]), '$argc' => new Union([new TIntRange(1, null), new TNull()], ['ignore_nullable_issues' => \true]), ]; $config = \Psalm\Config::getInstance(); foreach ($config->globals as $global_id => $type_string) { $globals[$global_id] = \Psalm\Type::parseString($type_string); } foreach ($globals as $global_id => $type) { $this->vars_in_scope[$global_id] = $type; $this->vars_possibly_in_scope[$global_id] = \true; } } public function mergeExceptions(\Psalm\Context $other_context) : void { foreach ($other_context->possibly_thrown_exceptions as $possibly_thrown_exception => $codelocations) { foreach ($codelocations as $hash => $codelocation) { $this->possibly_thrown_exceptions[$possibly_thrown_exception][$hash] = $codelocation; } } } public function isSuppressingExceptions(StatementsAnalyzer $statements_analyzer) : bool { if (!$this->collect_exceptions) { return \true; } $issue_type = $this->is_global ? 'UncaughtThrowInGlobalScope' : 'MissingThrowsDocblock'; $suppressed_issues = $statements_analyzer->getSuppressedIssues(); $suppressed_issue_position = array_search($issue_type, $suppressed_issues, \true); if ($suppressed_issue_position !== \false) { if (is_int($suppressed_issue_position)) { $file = $statements_analyzer->getFileAnalyzer()->getFilePath(); \Psalm\IssueBuffer::addUsedSuppressions([$file => [$suppressed_issue_position => \true]]); } return \true; } return \false; } public function mergeFunctionExceptions(FunctionLikeStorage $function_storage, \Psalm\CodeLocation $codelocation) : void { $hash = $codelocation->getHash(); foreach ($function_storage->throws as $possibly_thrown_exception => $_) { $this->possibly_thrown_exceptions[$possibly_thrown_exception][$hash] = $codelocation; } } public function insideUse() : bool { return $this->inside_assignment || $this->inside_return || $this->inside_call || $this->inside_general_use || $this->inside_conditional || $this->inside_throw || $this->inside_isset; } } file_start = (int) $error->getAttributes()['startFilePos']; /** @psalm-suppress PossiblyUndefinedStringArrayOffset, ImpureMethodCall */ $this->file_end = (int) $error->getAttributes()['endFilePos']; $this->raw_file_start = $this->file_start; $this->raw_file_end = $this->file_end; $this->file_path = $file_path; $this->file_name = $file_name; $this->single_line = \false; $this->preview_start = $this->file_start; $this->raw_line_number = substr_count(substr($file_contents, 0, $this->file_start), "\n") + 1; } } file_start = $file_start; // matches how CodeLocation works $this->file_end = $file_end - 1; $this->raw_file_start = $file_start; $this->raw_file_end = $file_end; $this->raw_line_number = $line_number; $this->file_path = $file_source->getFilePath(); $this->file_name = $file_source->getFileName(); $this->single_line = \false; $this->preview_start = $this->file_start; $this->docblock_line_number = $line_number; } } file_start = $file_start; $this->file_end = $file_end; $this->raw_file_start = $this->file_start; $this->raw_file_end = $this->file_end; $this->file_path = $file_path; $this->file_name = $file_name; $this->single_line = \false; $this->preview_start = $this->file_start; $this->raw_line_number = substr_count(substr($file_contents, 0, $this->file_start), "\n") + 1; } } defining_class = $defining_class; } /** * If {@see DynamicFunctionStorage} requires template params this method can create it. */ public function createTemplate(string $param_name, Union $as = null) : TTemplateParam { return new TTemplateParam($param_name, $as ?? Type::getMixed(), $this->defining_class); } } */ public static function addTaints(AddRemoveTaintsEvent $event) : array; } */ public static function getClassLikeNames() : array; /** * Use this hook for informing whether or not a method exists on a given object. If you know the method does * not exist, return false. If you aren't sure if it exists or not, return null and the default analysis will * continue to determine if the method actually exists. */ public static function doesMethodExist(MethodExistenceProviderEvent $event) : ?bool; } */ public static function removeTaints(AddRemoveTaintsEvent $event) : array; } */ public static function getFunctionIds() : array; public static function getFunctionStorage(DynamicFunctionStorageProviderEvent $event) : ?DynamicFunctionStorage; } */ public static function getFunctionIds() : array; /** * Use this hook for providing custom return type logic. If this plugin does not know what a function should * return but another plugin may be able to determine the type, return null. Otherwise return a mixed union type * if something should be returned, but can't be more specific. */ public static function getFunctionReturnType(FunctionReturnTypeProviderEvent $event) : ?Union; } */ public static function getClassLikeNames() : array; /** * @return ?array */ public static function getMethodParams(MethodParamsProviderEvent $event) : ?array; } */ public static function getClassLikeNames() : array; public static function isPropertyVisible(PropertyVisibilityProviderEvent $event) : ?bool; } */ public static function getClassLikeNames() : array; public static function getPropertyType(PropertyTypeProviderEvent $event) : ?Union; } */ public static function getClassLikeNames() : array; public static function isMethodVisible(MethodVisibilityProviderEvent $event) : ?bool; } */ public static function getClassLikeNames() : array; /** * Use this hook for informing whether or not a property exists on a given object. If you know the property does * not exist, return false. If you aren't sure if it exists or not, return null and the default analysis will * continue to determine if the property actually exists. */ public static function doesPropertyExist(PropertyExistenceProviderEvent $event) : ?bool; } */ public static function getFunctionIds() : array; /** * @return ?array */ public static function getFunctionParams(FunctionParamsProviderEvent $event) : ?array; } statements_source = $statements_source; $this->function_id = $function_id; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getFunctionId() : string { return $this->function_id; } } expr = $expr; $this->context = $context; $this->statements_source = $statements_source; $this->codebase = $codebase; $this->file_replacements = $file_replacements; } public function getExpr() : Expr { return $this->expr; } public function getContext() : Context { return $this->context; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getCodebase() : Codebase { return $this->codebase; } /** * @return FileManipulation[] */ public function getFileReplacements() : array { return $this->file_replacements; } /** * @param FileManipulation[] $file_replacements */ public function setFileReplacements(array $file_replacements) : void { $this->file_replacements = $file_replacements; } } expr = $expr; $this->context = $context; $this->statements_source = $statements_source; $this->codebase = $codebase; } public function getExpr() : Expr { return $this->expr; } public function getContext() : Context { return $this->context; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getCodebase() : Codebase { return $this->codebase; } } stmt = $stmt; $this->context = $context; $this->statements_source = $statements_source; $this->codebase = $codebase; $this->file_replacements = $file_replacements; } public function getStmt() : Stmt { return $this->stmt; } public function getContext() : Context { return $this->context; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getCodebase() : Codebase { return $this->codebase; } /** * @return FileManipulation[] */ public function getFileReplacements() : array { return $this->file_replacements; } /** * @param FileManipulation[] $file_replacements */ public function setFileReplacements(array $file_replacements) : void { $this->file_replacements = $file_replacements; } } */ private array $file_replacements; /** * Called before an expression is checked * * @param list $file_replacements * @internal */ public function __construct(Expr $expr, Context $context, StatementsSource $statements_source, Codebase $codebase, array $file_replacements = []) { $this->expr = $expr; $this->context = $context; $this->statements_source = $statements_source; $this->codebase = $codebase; $this->file_replacements = $file_replacements; } public function getExpr() : Expr { return $this->expr; } public function getContext() : Context { return $this->context; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getCodebase() : Codebase { return $this->codebase; } /** * @return list */ public function getFileReplacements() : array { return $this->file_replacements; } /** * @param list $file_replacements */ public function setFileReplacements(array $file_replacements) : void { $this->file_replacements = $file_replacements; } } statement_source = $statements_source; $this->function_id = $function_id; $this->func_call = $func_call; $this->context = $context; $this->code_location = $code_location; $this->arg_type_inferer = $arg_type_inferer; $this->template_provider = $template_provider; } public function getArgTypeInferer() : ArgTypeInferer { return $this->arg_type_inferer; } public function getTemplateProvider() : DynamicTemplateProvider { return $this->template_provider; } public function getCodebase() : Codebase { return $this->statement_source->getCodebase(); } public function getStatementSource() : StatementsSource { return $this->statement_source; } public function getFunctionId() : string { return $this->function_id; } /** * @return list */ public function getArgs() : array { return $this->func_call->getArgs(); } public function getContext() : Context { return $this->context; } public function getCodeLocation() : CodeLocation { return $this->code_location; } } source = $source; $this->fq_classlike_name = $fq_classlike_name; $this->property_name = $property_name; $this->read_mode = $read_mode; $this->context = $context; $this->code_location = $code_location; } public function getSource() : StatementsSource { return $this->source; } public function getFqClasslikeName() : string { return $this->fq_classlike_name; } public function getPropertyName() : string { return $this->property_name; } public function isReadMode() : bool { return $this->read_mode; } public function getContext() : Context { return $this->context; } public function getCodeLocation() : CodeLocation { return $this->code_location; } } statements_source = $statements_source; $this->function_id = $function_id; $this->stmt = $stmt; $this->context = $context; $this->code_location = $code_location; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } /** * @return non-empty-string */ public function getFunctionId() : string { return $this->function_id; } /** * @return list */ public function getCallArgs() : array { return $this->stmt->getArgs(); } public function getContext() : Context { return $this->context; } public function getCodeLocation() : CodeLocation { return $this->code_location; } public function getStmt() : FuncCall { return $this->stmt; } } fq_classlike_name = $fq_classlike_name; $this->property_name = $property_name; $this->read_mode = $read_mode; $this->source = $source; $this->context = $context; $this->code_location = $code_location; } public function getFqClasslikeName() : string { return $this->fq_classlike_name; } public function getPropertyName() : string { return $this->property_name; } public function isReadMode() : bool { return $this->read_mode; } public function getSource() : ?StatementsSource { return $this->source; } public function getContext() : ?Context { return $this->context; } public function getCodeLocation() : ?CodeLocation { return $this->code_location; } } expr = $expr; $this->function_id = $function_id; $this->context = $context; $this->statements_source = $statements_source; $this->codebase = $codebase; $this->return_type_candidate = $return_type_candidate; $this->file_replacements = $file_replacements; } public function getExpr() : FuncCall { return $this->expr; } /** * @return non-empty-string */ public function getFunctionId() : string { return $this->function_id; } public function getContext() : Context { return $this->context; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getCodebase() : Codebase { return $this->codebase; } public function getReturnTypeCandidate() : Union { return $this->return_type_candidate; } /** * @return FileManipulation[] */ public function getFileReplacements() : array { return $this->file_replacements; } /** * @param FileManipulation[] $file_replacements */ public function setFileReplacements(array $file_replacements) : void { $this->file_replacements = $file_replacements; } } stmt = $stmt; $this->classlike_storage = $classlike_storage; $this->statements_source = $statements_source; $this->codebase = $codebase; $this->file_replacements = $file_replacements; } public function getStmt() : Node\Stmt\ClassLike { return $this->stmt; } public function getClasslikeStorage() : ClassLikeStorage { return $this->classlike_storage; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getCodebase() : Codebase { return $this->codebase; } /** * @return FileManipulation[] */ public function getFileReplacements() : array { return $this->file_replacements; } /** * @param FileManipulation[] $file_replacements */ public function setFileReplacements(array $file_replacements) : void { $this->file_replacements = $file_replacements; } } codebase = $codebase; } public function getCodebase() : Codebase { return $this->codebase; } } value = $value; $this->codebase = $codebase; } public function getValue() : string { return $this->value; } public function getCodebase() : Codebase { return $this->codebase; } } stmt = $stmt; $this->storage = $storage; $this->statements_source = $statements_source; $this->codebase = $codebase; $this->file_replacements = $file_replacements; } public function getStmt() : ClassLike { return $this->stmt; } public function getStorage() : ClassLikeStorage { return $this->storage; } public function getStatementsSource() : FileSource { return $this->statements_source; } public function getCodebase() : Codebase { return $this->codebase; } /** * @return FileManipulation[] */ public function getFileReplacements() : array { return $this->file_replacements; } /** * @param FileManipulation[] $file_replacements */ public function setFileReplacements(array $file_replacements) : void { $this->file_replacements = $file_replacements; } } |null */ private ?array $template_type_parameters; private ?string $called_fq_classlike_name; /** * @var lowercase-string|null */ private ?string $called_method_name_lowercase; /** * Use this hook for providing custom return type logic. If this plugin does not know what a method should return * but another plugin may be able to determine the type, return null. Otherwise return a mixed union type if * something should be returned, but can't be more specific. * * @param PhpParser\Node\Expr\MethodCall|PhpParser\Node\Expr\StaticCall $stmt * @param non-empty-list|null $template_type_parameters * @param lowercase-string $method_name_lowercase * @param lowercase-string $called_method_name_lowercase * @internal */ public function __construct(StatementsSource $source, string $fq_classlike_name, string $method_name_lowercase, $stmt, Context $context, CodeLocation $code_location, ?array $template_type_parameters = null, ?string $called_fq_classlike_name = null, ?string $called_method_name_lowercase = null) { $this->source = $source; $this->fq_classlike_name = $fq_classlike_name; $this->method_name_lowercase = $method_name_lowercase; $this->context = $context; $this->code_location = $code_location; $this->stmt = $stmt; $this->template_type_parameters = $template_type_parameters; $this->called_fq_classlike_name = $called_fq_classlike_name; $this->called_method_name_lowercase = $called_method_name_lowercase; } public function getSource() : StatementsSource { return $this->source; } public function getFqClasslikeName() : string { return $this->fq_classlike_name; } /** * @return lowercase-string */ public function getMethodNameLowercase() : string { return $this->method_name_lowercase; } /** * @return list */ public function getCallArgs() : array { return $this->stmt->getArgs(); } public function getContext() : Context { return $this->context; } public function getCodeLocation() : CodeLocation { return $this->code_location; } /** * @return non-empty-list|null */ public function getTemplateTypeParameters() : ?array { return $this->template_type_parameters; } public function getCalledFqClasslikeName() : ?string { return $this->called_fq_classlike_name; } /** * @return lowercase-string|null */ public function getCalledMethodNameLowercase() : ?string { return $this->called_method_name_lowercase; } /** * @return PhpParser\Node\Expr\MethodCall|PhpParser\Node\Expr\StaticCall */ public function getStmt() { return $this->stmt; } } source = $source; $this->fq_classlike_name = $fq_classlike_name; $this->method_name_lowercase = $method_name_lowercase; $this->context = $context; $this->code_location = $code_location; } public function getSource() : StatementsSource { return $this->source; } public function getFqClasslikeName() : string { return $this->fq_classlike_name; } public function getMethodNameLowercase() : string { return $this->method_name_lowercase; } public function getContext() : Context { return $this->context; } public function getCodeLocation() : ?CodeLocation { return $this->code_location; } } expr = $expr; $this->method_id = $method_id; $this->appearing_method_id = $appearing_method_id; $this->declaring_method_id = $declaring_method_id; $this->context = $context; $this->statements_source = $statements_source; $this->codebase = $codebase; $this->file_replacements = $file_replacements; $this->return_type_candidate = $return_type_candidate; } /** * @return MethodCall|StaticCall */ public function getExpr() : Expr { return $this->expr; } public function getMethodId() : string { return $this->method_id; } public function getAppearingMethodId() : string { return $this->appearing_method_id; } public function getDeclaringMethodId() : string { return $this->declaring_method_id; } public function getContext() : Context { return $this->context; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getCodebase() : Codebase { return $this->codebase; } /** * @return FileManipulation[] */ public function getFileReplacements() : array { return $this->file_replacements; } public function getReturnTypeCandidate() : ?Union { return $this->return_type_candidate; } /** * @param FileManipulation[] $file_replacements */ public function setFileReplacements(array $file_replacements) : void { $this->file_replacements = $file_replacements; } public function setReturnTypeCandidate(?Union $return_type_candidate) : void { $this->return_type_candidate = $return_type_candidate; } } fq_classlike_name = $fq_classlike_name; $this->property_name = $property_name; $this->read_mode = $read_mode; $this->source = $source; $this->context = $context; } public function getFqClasslikeName() : string { return $this->fq_classlike_name; } public function getPropertyName() : string { return $this->property_name; } public function isReadMode() : bool { return $this->read_mode; } public function getSource() : ?StatementsSource { return $this->source; } public function getContext() : ?Context { return $this->context; } } expr = $expr; $this->function_id = $function_id; $this->context = $context; $this->statements_source = $statements_source; $this->codebase = $codebase; } public function getExpr() : FuncCall { return $this->expr; } public function getFunctionId() : string { return $this->function_id; } public function getContext() : Context { return $this->context; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getCodebase() : Codebase { return $this->codebase; } } > where string key is a filepath */ private array $issues; private array $build_info; private ?SourceControlInfo $source_control_info; /** * Called after analysis is complete * * @param array> $issues where string key is a filepath * @internal */ public function __construct(Codebase $codebase, array $issues, array $build_info, ?SourceControlInfo $source_control_info = null) { $this->codebase = $codebase; $this->issues = $issues; $this->build_info = $build_info; $this->source_control_info = $source_control_info; } public function getCodebase() : Codebase { return $this->codebase; } /** * @return array> where string key is a filepath */ public function getIssues() : array { return $this->issues; } public function getBuildInfo() : array { return $this->build_info; } public function getSourceControlInfo() : ?SourceControlInfo { return $this->source_control_info; } } fq_classlike_name = $fq_classlike_name; $this->method_name_lowercase = $method_name_lowercase; $this->source = $source; $this->code_location = $code_location; } public function getFqClasslikeName() : string { return $this->fq_classlike_name; } public function getMethodNameLowercase() : string { return $this->method_name_lowercase; } public function getSource() : ?StatementsSource { return $this->source; } public function getCodeLocation() : ?CodeLocation { return $this->code_location; } } |null */ private ?array $call_args; private ?StatementsSource $statements_source; private ?Context $context; private ?CodeLocation $code_location; /** * @param list $call_args * @internal */ public function __construct(string $fq_classlike_name, string $method_name_lowercase, ?array $call_args = null, ?StatementsSource $statements_source = null, ?Context $context = null, ?CodeLocation $code_location = null) { $this->fq_classlike_name = $fq_classlike_name; $this->method_name_lowercase = $method_name_lowercase; $this->call_args = $call_args; $this->statements_source = $statements_source; $this->context = $context; $this->code_location = $code_location; } public function getFqClasslikeName() : string { return $this->fq_classlike_name; } public function getMethodNameLowercase() : string { return $this->method_name_lowercase; } /** * @return list|null */ public function getCallArgs() : ?array { return $this->call_args; } public function getStatementsSource() : ?StatementsSource { return $this->statements_source; } public function getContext() : ?Context { return $this->context; } public function getCodeLocation() : ?CodeLocation { return $this->code_location; } } $stmts * @internal */ public function __construct(StatementsSource $statements_source, Context $file_context, FileStorage $file_storage, Codebase $codebase, array $stmts) { $this->statements_source = $statements_source; $this->file_context = $file_context; $this->file_storage = $file_storage; $this->codebase = $codebase; $this->stmts = $stmts; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getFileContext() : Context { return $this->file_context; } public function getFileStorage() : FileStorage { return $this->file_storage; } public function getCodebase() : Codebase { return $this->codebase; } /** * @return Stmt[] */ public function getStmts() : array { return $this->stmts; } } $call_args * @internal */ public function __construct(StatementsSource $statements_source, string $function_id, array $call_args, ?Context $context = null, ?CodeLocation $code_location = null) { $this->statements_source = $statements_source; $this->function_id = $function_id; $this->call_args = $call_args; $this->context = $context; $this->code_location = $code_location; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getFunctionId() : string { return $this->function_id; } /** * @return PhpParser\Node\Arg[] */ public function getCallArgs() : array { return $this->call_args; } public function getContext() : ?Context { return $this->context; } public function getCodeLocation() : ?CodeLocation { return $this->code_location; } } issue = $issue; $this->fixable = $fixable; $this->codebase = $codebase; } public function getIssue() : CodeIssue { return $this->issue; } public function isFixable() : bool { return $this->fixable; } public function getCodebase() : Codebase { return $this->codebase; } } stmt = $stmt; $this->functionlike_storage = $functionlike_storage; $this->statements_source = $statements_source; $this->codebase = $codebase; $this->file_replacements = $file_replacements; $this->node_type_provider = $node_type_provider; $this->context = $context; } public function getStmt() : Node\FunctionLike { return $this->stmt; } public function getFunctionlikeStorage() : FunctionLikeStorage { return $this->functionlike_storage; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getCodebase() : Codebase { return $this->codebase; } /** * @return FileManipulation[] */ public function getFileReplacements() : array { return $this->file_replacements; } /** * @param FileManipulation[] $file_replacements */ public function setFileReplacements(array $file_replacements) : void { $this->file_replacements = $file_replacements; } public function getNodeTypeProvider() : NodeTypeProvider { return $this->node_type_provider; } public function getContext() : Context { return $this->context; } } statements_source = $statements_source; $this->file_context = $file_context; $this->file_storage = $file_storage; $this->codebase = $codebase; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getFileContext() : Context { return $this->file_context; } public function getFileStorage() : FileStorage { return $this->file_storage; } public function getCodebase() : Codebase { return $this->codebase; } } fq_class_name = $fq_class_name; $this->code_location = $code_location; $this->statements_source = $statements_source; $this->codebase = $codebase; $this->file_replacements = $file_replacements; } public function getFqClassName() : string { return $this->fq_class_name; } public function getCodeLocation() : CodeLocation { return $this->code_location; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getCodebase() : Codebase { return $this->codebase; } /** * @return FileManipulation[] */ public function getFileReplacements() : array { return $this->file_replacements; } /** * @param FileManipulation[] $file_replacements */ public function setFileReplacements(array $file_replacements) : void { $this->file_replacements = $file_replacements; } } */ private array $file_replacements; /** * Called after a statement has been checked * * @param list $file_replacements * @internal */ public function __construct(Stmt $stmt, Context $context, StatementsSource $statements_source, Codebase $codebase, array $file_replacements = []) { $this->stmt = $stmt; $this->context = $context; $this->statements_source = $statements_source; $this->codebase = $codebase; $this->file_replacements = $file_replacements; } public function getStmt() : Stmt { return $this->stmt; } public function setStmt(Stmt $stmt) : void { $this->stmt = $stmt; } public function getContext() : Context { return $this->context; } public function getStatementsSource() : StatementsSource { return $this->statements_source; } public function getCodebase() : Codebase { return $this->codebase; } /** * @return list */ public function getFileReplacements() : array { return $this->file_replacements; } /** * @param list $file_replacements */ public function setFileReplacements(array $file_replacements) : void { $this->file_replacements = $file_replacements; } } */ public static function getFunctionIds() : array; /** * Use this hook for informing whether or not a global function exists. If you know the function does * not exist, return false. If you aren't sure if it exists or not, return null and the default analysis * will continue to determine if the function actually exists. */ public static function doesFunctionExist(FunctionExistenceProviderEvent $event) : ?bool; } */ public static function getClassLikeNames() : array; /** * Use this hook for providing custom return type logic. If this plugin does not know what a method should return * but another plugin may be able to determine the type, return null. Otherwise return a mixed union type if * something should be returned, but can't be more specific. */ public static function getMethodReturnType(MethodReturnTypeProviderEvent $event) : ?Union; } $className */ public function addFileTypeScanner(string $fileExtension, string $className) : void; /** * @param string $fileExtension e.g. `'html'` * @param class-string $className */ public function addFileTypeAnalyzer(string $fileExtension, string $className) : void; } */ public array $params = []; /** * A function return type. Maybe null. * That means we can infer it in {@see FunctionReturnTypeProviderInterface} hook. */ public ?Union $return_type = null; /** * A function can have template args or return type. * Plugin hook must fill all used templates here. * * @var list */ public array $templates = []; /** * Determines if a function can be called with named arguments. */ public bool $allow_named_arg_calls = \true; /** * Function purity. * If function is pure then plugin hook should set it to true. */ public bool $pure = \false; /** * Determines if a function can be called with a various number of arguments. */ public bool $variadic = \false; /** * @internal */ public function toFunctionStorage(string $function_cased_name) : FunctionStorage { $storage = new FunctionStorage(); $storage->cased_name = $function_cased_name; $storage->setParams($this->params); $storage->return_type = $this->return_type; $storage->allow_named_arg_calls = $this->allow_named_arg_calls; $storage->pure = $this->pure; $storage->variadic = $this->variadic; if (!empty($this->templates)) { $storage->template_types = []; foreach ($this->templates as $template) { $storage->template_types[$template->param_name] = [$template->defining_class => $template->as]; } } return $storage; } } getCodebase()->config; /** * Deprecated logic, in Psalm 6 just use $config->shepherd_endpoint * '#' here is just a hack/marker to use a custom endpoint instead just a custom domain * case 1: empty option (use https://shepherd.dev/hooks/psalm/) * case 2: custom domain (/hooks/psalm should be appended) (use https://custom.domain/hooks/psalm) * case 3: custom endpoint (/hooks/psalm should be appended) (use custom endpoint) */ if (substr_compare($config->shepherd_endpoint, '#', -1) === 0) { $shepherd_endpoint = $config->shepherd_endpoint; } else { /** @psalm-suppress DeprecatedProperty, DeprecatedMethod */ $shepherd_endpoint = self::buildShepherdUrlFromHost($config->shepherd_host); } self::sendPayload($shepherd_endpoint, $rawPayload); } /** * @psalm-pure * @deprecated Will be removed in Psalm 6 */ private static function buildShepherdUrlFromHost(string $host) : string { if (parse_url($host, PHP_URL_SCHEME) === null) { $host = 'https://' . $host; } return $host . '/hooks/psalm'; } /** * @return array{ * build: array, * git: array, * issues: array, * coverage: list, * level: int<1, 8>, * versions: array * }|null */ private static function collectPayloadToSend(AfterAnalysisEvent $event) : ?array { /** @see \Psalm\Internal\ExecutionEnvironment\BuildInfoCollector::collect */ $build_info = $event->getBuildInfo(); $is_ci_env = array_key_exists('CI_NAME', $build_info); // 'git' key always presents if (!$is_ci_env) { return null; } $source_control_info = $event->getSourceControlInfo(); $source_control_data = $source_control_info ? $source_control_info->toArray() : []; if ($source_control_data === [] && isset($build_info['git']) && is_array($build_info['git'])) { $source_control_data = $build_info['git']; } unset($build_info['git']); if ($build_info === []) { return null; } $issues_grouped_by_filename = $event->getIssues(); $normalized_data = $issues_grouped_by_filename === [] ? [] : array_values(array_filter( array_merge(...array_values($issues_grouped_by_filename)), // flatten an array static fn(IssueData $i): bool => $i->severity === IssueData::SEVERITY_ERROR )); $codebase = $event->getCodebase(); return ['build' => $build_info, 'git' => $source_control_data, 'issues' => $normalized_data, 'coverage' => $codebase->analyzer->getTotalTypeCoverage($codebase), 'level' => Config::getInstance()->level, 'versions' => ['psalm' => VersionUtils::getPsalmVersion(), 'parser' => VersionUtils::getPhpParserVersion()]]; } private static function sendPayload(string $endpoint, array $rawPayload) : void { $payload = json_encode($rawPayload, JSON_THROW_ON_ERROR); // Prepare new cURL resource $ch = curl_init($endpoint); curl_setopt($ch, CURLOPT_RETURNTRANSFER, \true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, \true); curl_setopt($ch, CURLINFO_HEADER_OUT, \true); curl_setopt($ch, CURLOPT_POST, \true); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); // Set HTTP Header for POST request curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Content-Length: ' . strlen($payload)]); // Submit the POST request $curl_result = curl_exec($ch); /** @var array{http_code: int, ssl_verify_result: int} $curl_info */ $curl_info = curl_getinfo($ch); // Close cURL session handle curl_close($ch); $response_status_code = $curl_info['http_code']; if ($response_status_code >= 200 && $response_status_code < 300) { $shepherd_host = parse_url($endpoint, PHP_URL_HOST); fwrite(STDERR, "🐑 results sent to {$shepherd_host} 🐑" . PHP_EOL); return; } $is_ssl_error = $curl_info['ssl_verify_result'] > 1; if ($is_ssl_error) { fwrite(STDERR, self::getCurlSslErrorMessage($curl_info['ssl_verify_result']) . PHP_EOL); return; } $output = "Shepherd error: {$endpoint} endpoint responded with {$response_status_code} HTTP status code.\n"; $response_content = is_string($curl_result) ? strip_tags($curl_result) : 'n/a'; $output .= "Shepherd response: {$response_content}\n"; if ($response_status_code === 0) { $output .= "Please check shepherd endpoint — it should be a valid URL.\n"; } $output .= sprintf("cURL Debug info:\n%s\n", var_export($curl_info, \true)); fwrite(STDERR, $output); } /** * @param mixed $ch * @psalm-pure * @deprecated Will be removed in Psalm 6 */ public static function getCurlErrorMessage($ch) : string { /** * @psalm-suppress MixedArgument * @var array */ $curl_info = curl_getinfo($ch); /** @psalm-suppress MixedAssignment */ $ssl_verify_result = $curl_info['ssl_verify_result'] ?? null; if (is_int($ssl_verify_result) && $ssl_verify_result > 1) { return self::getCurlSslErrorMessage($ssl_verify_result); } return ''; } /** * @psalm-pure */ private static function getCurlSslErrorMessage(int $ssl_verify_result) : string { switch ($ssl_verify_result) { case 1: throw new BadMethodCallException('code 1 means a successful SSL response, there is no error to parse'); case 2: return 'unable to get issuer certificate'; case 3: return 'unable to get certificate CRL'; case 4: return 'unable to decrypt certificate’s signature'; case 5: return 'unable to decrypt CRL’s signature'; case 6: return 'unable to decode issuer public key'; case 7: return 'certificate signature failure'; case 8: return 'CRL signature failure'; case 9: return 'certificate is not yet valid'; case 10: return 'certificate has expired'; case 11: return 'CRL is not yet valid'; case 12: return 'CRL has expired'; case 13: return 'format error in certificate’s notBefore field'; case 14: return 'format error in certificate’s notAfter field'; case 15: return 'format error in CRL’s lastUpdate field'; case 16: return 'format error in CRL’s nextUpdate field'; case 17: return 'out of memory'; case 18: return 'self signed certificate'; case 19: return 'self signed certificate in certificate chain'; case 20: return 'unable to get local issuer certificate'; case 21: return 'unable to verify the first certificate'; case 22: return 'certificate chain too long'; case 23: return 'certificate revoked'; case 24: return 'invalid CA certificate'; case 25: return 'path length constraint exceeded'; case 26: return 'unsupported certificate purpose'; case 27: return 'certificate not trusted'; case 28: return 'certificate rejected'; case 29: return 'subject issuer mismatch'; case 30: return 'authority and subject key identifier mismatch'; case 31: return 'authority and issuer serial number mismatch'; case 32: return 'key usage does not include certificate signing'; case 50: return 'application verification failure'; default: return "unknown cURL SSL error {$ssl_verify_result}"; } } } context = $context; $this->statements_analyzer = $statements_analyzer; } /** * @return false|Union */ public function infer(PhpParser\Node\Arg $arg) { $already_inferred_type = $this->statements_analyzer->node_data->getType($arg->value); if ($already_inferred_type) { return $already_inferred_type; } if (ExpressionAnalyzer::analyze($this->statements_analyzer, $arg->value, $this->context) === \false) { return \false; } return $this->statements_analyzer->node_data->getType($arg->value) ?? Type::getMixed(); } } config = $config; $this->codebase = $codebase; } public function addStubFile(string $file_name) : void { $this->config->addStubFile($file_name); } public function registerHooksFromClass(string $handler) : void { if (!class_exists($handler, \false)) { throw new InvalidArgumentException('Plugins must be loaded before registration'); } $this->config->eventDispatcher->registerClass($handler); if (is_subclass_of($handler, PropertyExistenceProviderInterface::class)) { $this->codebase->properties->property_existence_provider->registerClass($handler); } if (is_subclass_of($handler, PropertyVisibilityProviderInterface::class)) { $this->codebase->properties->property_visibility_provider->registerClass($handler); } if (is_subclass_of($handler, PropertyTypeProviderInterface::class)) { $this->codebase->properties->property_type_provider->registerClass($handler); } if (is_subclass_of($handler, MethodExistenceProviderInterface::class)) { $this->codebase->methods->existence_provider->registerClass($handler); } if (is_subclass_of($handler, MethodVisibilityProviderInterface::class)) { $this->codebase->methods->visibility_provider->registerClass($handler); } if (is_subclass_of($handler, MethodReturnTypeProviderInterface::class)) { $this->codebase->methods->return_type_provider->registerClass($handler); } if (is_subclass_of($handler, MethodParamsProviderInterface::class)) { $this->codebase->methods->params_provider->registerClass($handler); } if (is_subclass_of($handler, FunctionExistenceProviderInterface::class)) { $this->codebase->functions->existence_provider->registerClass($handler); } if (is_subclass_of($handler, FunctionParamsProviderInterface::class)) { $this->codebase->functions->params_provider->registerClass($handler); } if (is_subclass_of($handler, FunctionReturnTypeProviderInterface::class)) { $this->codebase->functions->return_type_provider->registerClass($handler); } if (is_subclass_of($handler, DynamicFunctionStorageProviderInterface::class)) { $this->codebase->functions->dynamic_storage_provider->registerClass($handler); } } } issues_data as $issue_data) { $output .= sprintf('%s:%s:%s:%s - %s: %s', $issue_data->file_path, $issue_data->line_from, $issue_data->column_from, $issue_data->severity === IssueData::SEVERITY_ERROR ? 'error' : 'warning', $issue_data->type, $issue_data->message) . "\n"; } return $output; } } []]; foreach ($this->issues_data as $issue_data) { $report['issues'][] = ['engineId' => 'Psalm', 'ruleId' => $issue_data->type, 'primaryLocation' => ['message' => $issue_data->message, 'filePath' => $issue_data->file_name, 'textRange' => [ 'startLine' => $issue_data->line_from, 'endLine' => $issue_data->line_to, // Columns in external issue reports are indexed from 0 'startColumn' => max(0, $issue_data->column_from - 1), 'endColumn' => max(0, $issue_data->column_to - 1), ]], 'type' => 'CODE_SMELL', 'severity' => $issue_data->severity === Config::REPORT_ERROR ? 'CRITICAL' : 'MINOR']; } $options = $this->pretty ? Json::PRETTY : Json::DEFAULT; return Json::encode($report, $options) . "\n"; } } issues_data as $i => $issue_data) { if (!$this->show_info && $issue_data->severity === IssueData::SEVERITY_INFO) { continue; } if ($current_file === null || $current_file !== $issue_data->file_name) { // If we're processing a new file, then wrap up the last table and render it out. if ($buffer !== null) { $table->render(); $output[] = $buffer->fetch(); } $output[] = 'FILE: ' . $issue_data->file_name . "\n"; $buffer = new BufferedOutput(); $table = new Table($buffer); $table->setHeaders(['SEVERITY', 'LINE', 'ISSUE', 'DESCRIPTION']); } $is_error = $issue_data->severity === Config::REPORT_ERROR; if ($is_error) { $severity = $this->use_color ? "\x1b[0;31mERROR\x1b[0m" : 'ERROR'; } else { $severity = strtoupper($issue_data->severity); } // Since `Table::setColumnMaxWidth` is only available in symfony/console 4.2+ we need do something similar // so we have clean tables. $message = $issue_data->message; if (strlen($message) > 70) { $message = implode("\n", str_split($message, 70)); } $table->addRow([$severity, $issue_data->line_from, $issue_data->type, $message]); $current_file = $issue_data->file_name; // If we're at the end of the issue sets, then wrap up the last table and render it out. if ($i === count($this->issues_data) - 1) { $table->render(); $output[] = $buffer->fetch(); } } return implode("\n", $output); } } array_map(static function (IssueData $issue_data) : array { $issue_data = get_object_vars($issue_data); unset($issue_data['dupe_key']); if (null !== $issue_data['taint_trace']) { $issue_data['taint_trace'] = array_map(static fn($trace): array => (array) $trace, $issue_data['taint_trace']); } // replace null values, as XML serializers tend to have problems with them $issue_data['taint_trace'] ??= ''; if (null !== $issue_data['other_references']) { $issue_data['other_references'] = array_map(static fn(DataFlowNodeData $reference): array => (array) $reference, $issue_data['other_references']); } // replace null values, as XML serializers tend to have problems with them $issue_data['other_references'] ??= ''; return $issue_data; }, $this->issues_data)], 'report', \true, 'UTF-8', '1.0', ['preserveWhiteSpace' => \false, 'formatOutput' => \true]); return $xml; } } */ final class CodeClimateReport extends Report { public function create() : string { $options = $this->pretty ? Json::PRETTY : Json::DEFAULT; $issues_data = array_map([$this, 'mapToNewStructure'], $this->issues_data); return Json::encode(array_values($issues_data), $options) . "\n"; } /** * convert our own severity to CodeClimate format * Values can be : info, minor, major, critical, or blocker */ protected function convertSeverity(string $input) : string { if (Config::REPORT_INFO === $input) { return 'info'; } if (Config::REPORT_ERROR === $input) { return 'critical'; } if (Config::REPORT_SUPPRESS === $input) { return 'minor'; } // unknown cases ? fallback return 'critical'; } /** * calculate a unique fingerprint for a given issue */ protected function calculateFingerprint(IssueData $issue) : string { return md5($issue->type . $issue->message . $issue->file_name . $issue->from . $issue->to); } /** * map fields to new structure. * Expected fields: * - type * - check_name * - description* * - content * - categories[] * - severity * - fingerprint* * - location.path* * - location.lines.begin* * * Fields with * are the one used by Gitlab for Code Quality */ private function mapToNewStructure(IssueData $issue) : array { return ['type' => 'issue', 'check_name' => $issue->type, 'description' => $issue->message, 'categories' => [$issue->type], 'severity' => $this->convertSeverity($issue->severity), 'fingerprint' => $this->calculateFingerprint($issue), 'location' => ['path' => $issue->file_name, 'lines' => ['begin' => $issue->line_from, 'end' => $issue->line_to]]]; } } issues_data as $issue_data) { $issue_reference = $issue_data->link ? ' (see ' . $issue_data->link . ')' : ''; $properties = sprintf('file=%1$s,line=%2$d,col=%3$d,title=%4$s', $this->escapeProperty($issue_data->file_name), $this->escapeProperty($issue_data->line_from), $this->escapeProperty($issue_data->column_from), $this->escapeProperty($issue_data->type)); $data = $this->escapeData(sprintf('%1$s:%2$d:%3$d: %4$s: %5$s', $issue_data->file_name, $issue_data->line_from, $issue_data->column_from, $issue_data->type, $issue_data->message . $issue_reference)); $output .= sprintf('::%1$s %2$s::%3$s', $issue_data->severity === IssueData::SEVERITY_ERROR ? 'error' : 'warning', $properties, $data) . "\n"; } return $output; } private function escapeData(string $data) : string { return strtr($data, ['%' => '%25', "\r" => '%0D', "\n" => '%0A']); } /** @param mixed $value */ private function escapeProperty($value) : string { return strtr((string) $value, ['%' => '%25', "\r" => '%0D', "\n" => '%0A', ':' => '%3A', ',' => '%2C']); } } sortIssuesByLevelAndType(); $output = <<