phpstan.neon.dist 7.87 KB
parameters:
    level: 7
    paths:
        - %currentWorkingDirectory%/src
    autoload_files:
        - %currentWorkingDirectory%/tests/phpstan-polyfill.php
    treatPhpDocTypesAsCertain: false
    reportUnmatchedIgnoredErrors: false
    checkMissingIterableValueType: false
    checkGenericClassInNonGenericObjectType: false
    ignoreErrors:
        # extension not available
        - '~^(Used )?(Function|Constant) sasql_\S+ not found\.\z~i'

        # removing it would be BC break
        - '~^Constructor of class Doctrine\\DBAL\\Schema\\Table has an unused parameter \$idGeneratorType\.\z~'

        # declaring $tableName in AbstractSchemaManager::_getPortableTableIndexesList() non-optional will be a BC break
        - '~^Parameter #2 \$table of class Doctrine\\DBAL\\Event\\SchemaIndexDefinitionEventArgs constructor expects string, string\|null given\.\z~'

        # changing these would be a BC break, to be done in next major
        - "~^Casting to bool something that's already bool.~"
        - "~^Casting to int something that's already int.~"
        - '~^Method Doctrine\\DBAL\\Driver\\IBMDB2\\DB2Connection::exec\(\) should return int but returns bool\.\z~'
        - '~^Property Doctrine\\DBAL\\Schema\\Table::\$_primaryKeyName \(string\) does not accept (default value of type )?false\.\z~'
        - '~^Property Doctrine\\DBAL\\Schema\\Schema::\$_schemaConfig \(Doctrine\\DBAL\\Schema\\SchemaConfig\) does not accept default value of type false\.\z~'
        - '~^Method Doctrine\\DBAL\\Schema\\ForeignKeyConstraint::onEvent\(\) should return string\|null but returns false\.\z~'
        - '~^Method Doctrine\\DBAL\\Schema\\(Oracle|PostgreSql|SQLServer)SchemaManager::_getPortableTableDefinition\(\) should return array but returns string\.\z~'
        - '~^Method Doctrine\\DBAL\\Driver\\OCI8\\OCI8Connection::lastInsertId\(\) should return string but returns (int|false)\.\z~'

        # https://bugs.php.net/bug.php?id=78126
        - '~^Call to an undefined method PDO::sqliteCreateFunction\(\)\.\z~'

        # https://github.com/phpstan/phpstan/issues/1847
        - '~^Parameter #2 \$registeredAliases of static method Doctrine\\DBAL\\Query\\QueryException::unknownAlias\(\) expects array<string>, array<int, int\|string> given\.\z~'
        - '~^Parameter #2 \$registeredAliases of static method Doctrine\\DBAL\\Query\\QueryException::nonUniqueAlias\(\) expects array<string>, array<int, int\|string> given\.\z~'

        # PHPStan is too strict about preg_replace(): https://phpstan.org/r/993dc99f-0d43-4b51-868b-d01f982c1463
        - '~^Method Doctrine\\DBAL\\Platforms\\AbstractPlatform::escapeStringForLike\(\) should return string but returns string\|null\.\z~'

        # legacy variadic-like signature
        - '~^Method Doctrine\\DBAL(\\.*)?Connection::query\(\) invoked with \d+ parameters?, 0 required\.\z~'

        # some drivers actually do accept 2nd parameter...
        - '~^Method Doctrine\\DBAL\\Platforms\\AbstractPlatform::getListTableForeignKeysSQL\(\) invoked with \d+ parameters, 1 required\.\z~'

        # legacy remnants from doctrine/common
        - '~^Class Doctrine\\Common\\(Collections\\Collection|Persistence\\Proxy) not found\.\z~'
        - '~^.+ on an unknown class Doctrine\\Common\\(Collections\\Collection|Persistence\\Proxy)\.\z~'

        # inheritance variance inference issue
        - '~^Method Doctrine\\DBAL\\Driver\\PDOConnection::\w+\(\) should return Doctrine\\DBAL\\Driver\\Statement but returns PDOStatement\.\z~'

        # may not exist when pdo_sqlsrv is not loaded but PDO is
        - '~^Access to undefined constant PDO::SQLSRV_ENCODING_BINARY\.\z~'

        # weird class name, represented in stubs as OCI_(Lob|Collection)
        - '~unknown class OCI-(Lob|Collection)~'

        # https://github.com/JetBrains/phpstorm-stubs/pull/766
        -
            message: '~^Strict comparison using === between true and null will always evaluate to false\.$~'
            path: %currentWorkingDirectory%/src/Driver/Mysqli/Result.php

        # The ReflectionException in the case when the class does not exist is acceptable and does not need to be handled
        - '~^Parameter #1 \$argument of class ReflectionClass constructor expects class-string<T of object>\|T of object, string given\.$~'

        # https://github.com/phpstan/phpstan/issues/3132
        -
            message: '~^Call to function in_array\(\) with arguments Doctrine\\DBAL\\Schema\\Column, array<string> and true will always evaluate to false\.$~'
            path: %currentWorkingDirectory%/src/Schema/Table.php

        # https://github.com/phpstan/phpstan/issues/3133
        -
            message: '~^Cannot cast array<string>\|bool\|string\|null to int\.$~'
            path: %currentWorkingDirectory%/src/Tools/Console/Command/RunSqlCommand.php

        # Requires a release of https://github.com/JetBrains/phpstorm-stubs/pull/732
        -
            message: '~^Access to undefined constant PDO::PGSQL_ATTR_DISABLE_PREPARES\.$~'
            path: %currentWorkingDirectory%/src/Driver/PDOPgSql/Driver.php

        # False Positive
        - '~Strict comparison using === between 1 and 2 will always evaluate to false~'

        # Needs Generics
        - '~Method Doctrine\\DBAL\\Schema\\SchemaDiff::getNewTablesSortedByDependencies\(\) should return array<Doctrine\\DBAL\\Schema\\Table> but returns array<object>.~'

        # https://github.com/phpstan/phpstan/issues/3134
        -
            message: '~^Call to static method PHPUnit\\Framework\\Assert::assertSame\(\) with Doctrine\\DBAL\\Types\\Type and Doctrine\\DBAL\\Types\\Type will always evaluate to true\.$~'
            path: %currentWorkingDirectory%/tests/Types/TypeRegistryTest.php

        # https://github.com/phpstan/phpstan-strict-rules/issues/103
        -
            message: '~^Construct empty\(\) is not allowed. Use more strict comparison\.~'
            paths:
                - %currentWorkingDirectory%/src/Driver/*/*Connection.php
                - %currentWorkingDirectory%/src/Driver/*/Driver.php
                - %currentWorkingDirectory%/src/Driver/AbstractOracleDriver/EasyConnectString.php
                - %currentWorkingDirectory%/src/Platforms/*Platform.php
                - %currentWorkingDirectory%/src/Schema/*SchemaManager.php

        # In some namespaces, we use array<string,mixed>, some elements of which are actually boolean
        -
            message: '~^Only booleans are allowed in .*, mixed given~'
            paths:
                - %currentWorkingDirectory%/src/Driver/*/Driver.php
                - %currentWorkingDirectory%/src/Platforms/*Platform.php
                - %currentWorkingDirectory%/src/Query/QueryBuilder.php
                - %currentWorkingDirectory%/src/Schema/*SchemaManager.php

        # Some APIs use variable method calls internally
        -
            message: '~^Variable method call on .*~'
            paths:
                - %currentWorkingDirectory%/src/Schema/AbstractSchemaManager.php
                - %currentWorkingDirectory%/src/Schema/Column.php

        # https://github.com/phpstan/phpstan/issues/3146
        -
            message: '~^Only numeric types are allowed in -, int<1, max>\|false given on the left side\.~'
            paths:
                - %currentWorkingDirectory%/src/Platforms/SQLServer2012Platform.php

        # Caused by phpdoc annotations intended for Psalm
        -
            message: '~Unable to resolve the template type T in call to method static method Doctrine\\DBAL\\DriverManager::getConnection\(\)~'
            paths:
                - %currentWorkingDirectory%/src/Id/TableGenerator.php
                - %currentWorkingDirectory%/src/Schema/SqliteSchemaManager.php

        -
            message: '~Method Doctrine\\DBAL\\Driver\\PDOSqlsrv\\Connection\:\:lastInsertId\(\) should return string but returns string\|false\|null\.~'
            paths:
                - %currentWorkingDirectory%/src/Driver/PDOSqlsrv/Connection.php

includes:
    - vendor/phpstan/phpstan-strict-rules/rules.neon