<?xml version="1.0"?>
<psalm
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="https://getpsalm.org/schema/config"
        xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
        xmlns:xi="http://www.w3.org/2001/XInclude"
        reportMixedIssues="false"
        useDocblockTypes="true"
        usePhpDocMethodsWithoutMagicCall="false"
        strictBinaryOperands="true"
        rememberPropertyAssignmentsAfterCall="true"
        allowStringToStandInForClass="false"
        memoizeMethodCallResults="false"
        hoistConstants="false"
        addParamDefaultToDocblockType="false"
        checkForThrowsDocblock="true"
        checkForThrowsInGlobalScope="false"
        ignoreInternalFunctionFalseReturn="false"
        ignoreInternalFunctionNullReturn="false"
        throwExceptionOnError="false"
        hideExternalErrors="true"
        allowFileIncludes="true"
		errorBaseline="psalm-baseline.xml"
>
    <projectFiles>
        <directory name="api"/>
        <directory name="src"/>
		<directory name="modules" />
		<file name="bootstrap.php" />
		<file name="woocommerce-paypal-payments.php" />
    </projectFiles>

    <stubs>
    	<file name=".psalm/stubs.php"/>
    	<file name=".psalm/wcblocks.php"/>
    	<file name=".psalm/wcs.php"/>
    	<file name=".psalm/gzd.php"/>
    	<file name=".psalm/wpcli.php"/>
		<file name="vendor/php-stubs/wordpress-stubs/wordpress-stubs.php"/>
		<file name="vendor/php-stubs/woocommerce-stubs/woocommerce-stubs.php"/>
    </stubs>


    <issueHandlers>
        <ConflictingReferenceConstraint errorLevel="error"/>
        <ContinueOutsideLoop errorLevel="error"/>
        <DuplicateArrayKey errorLevel="error"/>
        <DuplicateClass errorLevel="error"/>
        <DuplicateFunction errorLevel="error"/>
        <DuplicateMethod errorLevel="error"/>
        <DuplicateParam errorLevel="error"/>
        <EmptyArrayAccess errorLevel="error"/>
        <FalsableReturnStatement errorLevel="error"/>
        <FalseOperand errorLevel="error"/>
        <ForbiddenCode errorLevel="error"/>
        <ForbiddenEcho errorLevel="error"/>
        <InaccessibleClassConstant errorLevel="error"/>
        <InaccessibleMethod errorLevel="error"/>
        <InterfaceInstantiation errorLevel="error"/>
        <InaccessibleProperty errorLevel="error"/>
        <InternalClass errorLevel="error"/>
        <InternalMethod errorLevel="error"/>
        <InternalProperty errorLevel="error"/>
        <InvalidArgument errorLevel="error"/>
        <InvalidArrayAccess errorLevel="error"/>
        <InvalidArrayAssignment errorLevel="error"/>
        <InvalidArrayOffset errorLevel="error"/>
        <InvalidCast errorLevel="error"/>
        <InvalidCatch errorLevel="error"/>
        <InvalidClass errorLevel="error"/>
        <InvalidClone errorLevel="error"/>
        <InvalidFalsableReturnType errorLevel="error"/>
        <InvalidThrow errorLevel="error"/>
        <InvalidToString errorLevel="error"/>
        <LoopInvalidation errorLevel="error"/>
        <InvalidNullableReturnType errorLevel="error"/>
        <LessSpecificReturnType errorLevel="error"/>
        <InvalidGlobal errorLevel="error"/>
        <InvalidIterator errorLevel="error"/>
        <InvalidMethodCall errorLevel="error"/>
        <InvalidFunctionCall errorLevel="error"/>
        <ImplicitToStringCast errorLevel="error"/>
        <ImplementedReturnTypeMismatch errorLevel="error"/>
        <InvalidParamDefault errorLevel="error"/>
        <InvalidPassByReference errorLevel="error"/>
        <InvalidPropertyAssignment errorLevel="error"/>
        <InvalidPropertyAssignmentValue errorLevel="error"/>
        <InvalidPropertyFetch errorLevel="error"/>
        <InvalidReturnStatement errorLevel="error"/>
        <InvalidReturnType errorLevel="error"/>
        <InvalidScalarArgument errorLevel="error"/>
        <InvalidScope errorLevel="error"/>
        <InvalidStaticInvocation errorLevel="error"/>
        <MissingConstructor errorLevel="error"/>
        <MissingDependency errorLevel="error"/>
        <MissingFile errorLevel="error"/>
        <MixedArgument errorLevel="error"/>
        <MoreSpecificImplementedParamType errorLevel="error"/>
        <MoreSpecificReturnType errorLevel="error"/>
        <NoValue errorLevel="error"/>
        <NoInterfaceProperties errorLevel="error"/>
        <NonStaticSelfCall errorLevel="error"/>
        <NullableReturnStatement errorLevel="error"/>
        <NullArgument errorLevel="error"/>
        <NullArrayAccess errorLevel="error"/>
        <NullArrayOffset errorLevel="error"/>
        <NullFunctionCall errorLevel="error"/>
        <NullIterator errorLevel="error"/>
        <NullOperand errorLevel="error"/>
        <NullPropertyAssignment errorLevel="error"/>
        <NullPropertyFetch errorLevel="error"/>
        <NullReference errorLevel="error"/>
        <OverriddenMethodAccess errorLevel="error"/>
        <OverriddenPropertyAccess errorLevel="error"/>
        <ParadoxicalCondition errorLevel="error"/>
        <ParentNotFound errorLevel="error"/>
        <LessSpecificImplementedReturnType errorLevel="error"/>
        <MissingParamType errorLevel="error"/>
        <MissingClosureParamType errorLevel="error"/>
        <MissingClosureReturnType errorLevel="error"/>
        <MissingPropertyType errorLevel="error"/>
        <UndefinedConstant errorLevel="error"/>

        <AssignmentToVoid errorLevel="info"/>
        <DeprecatedClass errorLevel="info"/>
        <DeprecatedConstant errorLevel="info"/>
        <DeprecatedTrait errorLevel="info"/>
        <DocblockTypeContradiction errorLevel="info"/>
        <InvalidDocblock errorLevel="info"/>
        <InvalidDocblockParamName errorLevel="info"/>
        <InvalidTemplateParam errorLevel="info"/>
        <DeprecatedInterface errorLevel="info"/>
        <DeprecatedMethod errorLevel="info"/>
        <DeprecatedProperty errorLevel="info"/>
        <MethodSignatureMustOmitReturnType errorLevel="info"/>
        <MismatchingDocblockParamType errorLevel="info"/>
        <MismatchingDocblockReturnType errorLevel="info"/>
        <MissingDocblockType errorLevel="info"/>
        <MissingParamType errorLevel="info"/>
        <MissingTemplateParam errorLevel="info"/>
        <MissingThrowsDocblock errorLevel="info"/>
        <MixedArgumentTypeCoercion errorLevel="info"/>
        <MixedArrayAccess errorLevel="info"/>
        <MixedArrayAssignment errorLevel="info"/>
        <MixedArrayOffset errorLevel="info"/>
        <MixedArrayTypeCoercion errorLevel="info"/>
        <MixedAssignment errorLevel="info"/>
        <MixedFunctionCall errorLevel="info"/>
        <MixedInferredReturnType errorLevel="info"/>
        <MixedMethodCall errorLevel="info"/>
        <MixedOperand errorLevel="info"/>
        <MixedPropertyAssignment errorLevel="info"/>
        <MixedPropertyFetch errorLevel="info"/>
        <MixedPropertyTypeCoercion errorLevel="info"/>
        <MixedReturnStatement errorLevel="info"/>
        <MixedReturnTypeCoercion errorLevel="info"/>
		<MixedStringOffsetAssignment errorLevel="info"/>
		<ParamNameMismatch errorLevel="info"/>
		<RedundantCastGivenDocblockType errorLevel="info"/>
		<RiskyCast errorLevel="info"/>

		<TooManyArguments>
			<errorLevel type="suppress">
				<referencedFunction name="apply_filters" />
			</errorLevel>
		</TooManyArguments>
    </issueHandlers>
</psalm>
