parameters:
    level: 3

    inferPrivatePropertyTypeFromConstructor: true

    paths:
        - %currentWorkingDirectory%/src
        - %currentWorkingDirectory%/tests

    excludes_analyse:
        # Ported from dms/phpunit-arraysubset-asserts
        - tests/PHPUnit/ArraySubsetAsserts.php
        - tests/PHPUnit/Constraint/ArraySubset.php

    ignoreErrors:
        # Since this is a library that is supposed to be flexible, we don't
        # want to lock down every possible extension point.
        - "~Unsafe usage of new static\\(\\)~"

        # This class uses magic methods to reduce a whole lot of boilerplate required to
        # allow partial parsing of language fragments.
        - "~Variable method call on GraphQL\\\\Language\\\\Parser\\.~"

        # Those come from graphql-php\tests\Language\VisitorTest.php
        - "~Access to an undefined property GraphQL\\\\Language\\\\AST\\\\.+::\\$didEnter~"
        - "~Access to an undefined property GraphQL\\\\Language\\\\AST\\\\.+::\\$didLeave~"
        - "~Access to an undefined property GraphQL\\\\Language\\\\AST\\\\Node::\\$value~"

        # TODO convert to less magical code
        - "~Variable method call on static\\(GraphQL\\\\Server\\\\ServerConfig\\)~"

includes:
    - phpstan-baseline.neon

services:
    -
        class: GraphQL\Tests\PhpStan\Type\Definition\Type\IsInputTypeStaticMethodTypeSpecifyingExtension
        tags:
            - phpstan.typeSpecifier.staticMethodTypeSpecifyingExtension
    -
        class: GraphQL\Tests\PhpStan\Type\Definition\Type\IsOutputTypeStaticMethodTypeSpecifyingExtension
        tags:
            - phpstan.typeSpecifier.staticMethodTypeSpecifyingExtension
    -
        class: GraphQL\Tests\PhpStan\Type\Definition\Type\IsCompositeTypeStaticMethodTypeSpecifyingExtension
        tags:
            - phpstan.typeSpecifier.staticMethodTypeSpecifyingExtension
