includes:
    - ../vendor/phpstan/phpstan-phpunit/extension.neon
    - ../vendor/phpstan/phpstan-deprecation-rules/rules.neon
    - ../vendor/phpstan/phpstan-strict-rules/rules.neon
    - ./baseline.neon

parameters:
    level: 8

    excludePaths:
       - '../tests/Composer/Test/Fixtures/*'
       - '../tests/Composer/Test/Autoload/Fixtures/*'
       - '../tests/Composer/Test/Plugin/Fixtures/*'
       - '../tests/Composer/Test/PolyfillTestCase.php'
       # TODO Remove in 2.3
       - '../src/Composer/Console/HtmlOutputFormatter.php'

    reportUnmatchedIgnoredErrors: false

    ignoreErrors:
        # unused parameters
        - '~^Constructor of class Composer\\Repository\\VcsRepository has an unused parameter \$dispatcher\.$~'
        - '~^Constructor of class Composer\\Util\\Http\\CurlDownloader has an unused parameter \$disableTls\.$~'
        - '~^Constructor of class Composer\\Util\\Http\\CurlDownloader has an unused parameter \$options\.$~'

        # ion cube is not installed
        - '~^Function ioncube_loader_\w+ not found\.$~'

        # variables from global scope
        - '~^Undefined variable: \$vendorDir$~'
        - '~^Undefined variable: \$baseDir$~'

        # variable defined in eval
        - '~^Undefined variable: \$res$~'

        # we don't have different constructors for parent/child
        - '~^Unsafe usage of new static\(\)\.$~'

        # BC with older PHPUnit
        - '~^Call to an undefined static method Composer\\Test\\PolyfillTestCase::setExpectedException\(\)\.$~'
        - '~^Call to an undefined method Composer\\Test\\[a-zA-Z0-9\\]+::(assertFileDoesNotExist|assertMatchesRegularExpression)\(\)\.$~'

        # Mock errors
        - '~^Call to an undefined method (PHPUnit\\Framework\\MockObject\\MockObject|Prophecy\\Prophecy\\ObjectProphecy)::.*$~'

        # Ignore some irrelevant errors in test files
        - '~Method Composer\\Test\\[^:]+::(setUp(BeforeClass)?|tearDown(AfterClass)?|test[^(]+)\(\) has no return type specified.~'
        - '~Method Composer\\Test\\[^:]+::(data\w+|provide\w+|\w+?Provider)\(\) has no return type specified.~'

        # PHPUnit assertions as instance methods
        - '~Dynamic call to static method PHPUnit\\Framework\\Assert::\w+\(\)~'
        - '~Dynamic call to static method PHPUnit\\Framework\\TestCase::(once|at|exactly|will|exactly|returnValue|returnCallback|any|atLeastOnce|throwException|onConsecutiveCalls|never|returnValueMap)\(\)~'

    bootstrapFiles:
        - ../tests/bootstrap.php

    paths:
        - ../src
        - ../tests

    dynamicConstantNames:
        - Composer\Composer::BRANCH_ALIAS_VERSION
        - Composer\Composer::VERSION
        - Composer\Composer::RELEASE_DATE
        - Composer\Composer::SOURCE_VERSION

rules:
    - Composer\PHPStanRules\AnonymousFunctionWithThisRule