Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LogEntryInterface::getObjectClass() @phpstan-return is missing null #2789

Open
mustanggb opened this issue Apr 19, 2024 · 2 comments · May be fixed by #2790
Open

LogEntryInterface::getObjectClass() @phpstan-return is missing null #2789

mustanggb opened this issue Apr 19, 2024 · 2 comments · May be fixed by #2790

Comments

@mustanggb
Copy link

Environment

Package

show

$ composer show --latest gedmo/doctrine-extensions
name     : gedmo/doctrine-extensions
descrip. : Doctrine behavioral extensions
keywords : Blameable, behaviors, doctrine, extensions, gedmo, loggable, nestedset, odm, orm, sluggable, sortable, timestampable, translatable, tree, uploadable
versions : * v3.14.0
released : 2023-12-03, 4 months ago
latest   : v3.15.0 released 2024-02-12, 2 months ago
type     : library
license  : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
homepage : http://gediminasm.org/
source   : [git] https://github.com/doctrine-extensions/DoctrineExtensions.git 3b5b5cba476b4ae32a55ef69ef2e59d64d5893cf
dist     : [zip] https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/3b5b5cba476b4ae32a55ef69ef2e59d64d5893cf 3b5b5cba476b4ae32a55ef69ef2e59d64d5893cf
path     : /srv/www/vendor/gedmo/doctrine-extensions
names    : gedmo/doctrine-extensions

support
email : gediminas.morkevicius@gmail.com
issues : https://github.com/doctrine-extensions/DoctrineExtensions/issues
source : https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.14.0
wiki : https://github.com/Atlantic18/DoctrineExtensions/tree/main/doc

autoload
psr-4
Gedmo\ => src/

requires
behat/transliterator ^1.2
doctrine/annotations ^1.13 || ^2.0
doctrine/collections ^1.2 || ^2.0
doctrine/common ^2.13 || ^3.0
doctrine/event-manager ^1.2 || ^2.0
doctrine/persistence ^2.2 || ^3.0
php ^7.4 || ^8.0
psr/cache ^1 || ^2 || ^3
symfony/cache ^5.4 || ^6.0 || ^7.0
symfony/deprecation-contracts ^2.1 || ^3.0

requires (dev)
doctrine/cache ^1.11 || ^2.0
doctrine/dbal ^3.2
doctrine/doctrine-bundle ^2.3
doctrine/mongodb-odm ^2.3
doctrine/orm ^2.14.0
friendsofphp/php-cs-fixer ^3.14.0
nesbot/carbon ^2.71 || 3.x-dev as 3.0
phpstan/phpstan ^1.10.2
phpstan/phpstan-doctrine ^1.0
phpstan/phpstan-phpunit ^1.0
phpunit/phpunit ^9.6
rector/rector ^0.18
symfony/console ^5.4 || ^6.0 || ^7.0
symfony/phpunit-bridge ^6.0 || ^7.0
symfony/yaml ^5.4 || ^6.0 || ^7.0

suggests
doctrine/mongodb-odm to use the extensions with the MongoDB ODM
doctrine/orm to use the extensions with the ORM

conflicts
doctrine/dbal <3.2
doctrine/mongodb-odm <2.3
doctrine/orm <2.14.0 || 2.16.0 || 2.16.1
sebastian/comparator <2.0

Doctrine packages

show

$ composer show --latest 'doctrine/*'
Color legend:
- patch or minor release available - update recommended
- major release available - update possible
- up to date version

Direct dependencies required in composer.json:
doctrine/annotations                2.0.1  2.0.1  Docblock Annotations Parser
doctrine/doctrine-bundle            2.12.0 2.12.0 Symfony DoctrineBundle
doctrine/doctrine-migrations-bundle 3.3.0  3.3.0  Symfony DoctrineMigrationsBundle
doctrine/mongodb-odm-bundle         5.0.1  5.0.1  Symfony Doctrine MongoDB Bundle
doctrine/orm                        3.1.1  3.1.2  Object-Relational-Mapper for PHP

Transitive dependencies not required in composer.json:
doctrine/cache                      2.2.0  2.2.0  PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.
doctrine/collections                2.2.1  2.2.2  PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.
doctrine/common                     3.4.3  3.4.4  PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and muc...
doctrine/dbal                       4.0.1  4.0.1  Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.
doctrine/deprecations               1.1.3  1.1.3  A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.
doctrine/event-manager              2.0.0  2.0.0  The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.
doctrine/inflector                  2.0.10 2.0.10 PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.
doctrine/instantiator               2.0.0  2.0.0  A small, lightweight utility to instantiate objects in PHP without invoking their constructors
doctrine/lexer                      3.0.1  3.0.1  PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.
doctrine/migrations                 3.7.4  3.7.4  PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying c...
doctrine/mongodb-odm                2.7.0  2.7.0  PHP Doctrine MongoDB Object Document Mapper (ODM) provides transparent persistence for PHP objects to MongoDB.
doctrine/persistence                3.3.2  3.3.2  The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.
doctrine/sql-formatter              1.2.0  1.2.0  a PHP SQL highlighting library

PHP version

$ php -v
PHP 8.3.6 (cli) (built: Apr 11 2024 15:12:15) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.6, Copyright (c), by Zend Technologies

Subject

It appears that Loggable's LogEntryInterface::getObjectClass() is missing a null type from the @phpstan-return annotation.

    /**
     * @return string|null
     *
     * @phpstan-return class-string<T>
     */
    public function getObjectClass();

https://github.com/doctrine-extensions/DoctrineExtensions/blob/main/src/Loggable/LogEntryInterface.php#L61

This is backed up by:

    /**
     * @var string|null
     *
     * @phpstan-var class-string<T>|null
     *
     * @ORM\Column(name="object_class", type="string", length=191)
     */
    #[ORM\Column(name: 'object_class', type: Types::STRING, length: 191)]
    protected $objectClass;

https://github.com/doctrine-extensions/DoctrineExtensions/blob/main/src/Loggable/Entity/MappedSuperclass/AbstractLogEntry.php#L68

And:

    /**
     * @var string|null
     *
     * @phpstan-var class-string<T>|null
     *
     * @MongoODM\Field(type="string")
     */
    #[MongoODM\Field(type: Type::STRING)]
    protected $objectClass;

https://github.com/doctrine-extensions/DoctrineExtensions/blob/main/src/Loggable/Document/MappedSuperclass/AbstractLogEntry.php#L64

This can be highlighted by running psalm.

Minimal repository with the bug

https://github.com/doctrine-extensions/DoctrineExtensions/tree/main

Steps to reproduce

  • Implement LogEntryInterface
  • Run psalm

Expected results

------------------------------
                              
       No errors found!       
                              
------------------------------

Actual results

ERROR: ImplementedReturnTypeMismatch - The inherited return type 'class-string<T:MyClass as object>' for
Gedmo\Loggable\LogEntryInterface::getObjectClass is different to the implemented return type for
App\Document\Log::getobjectclass '(class-string<T:MyClass as object>)|null' (see https://psalm.dev/123)
     * @return class-string<T>|null


------------------------------
1 errors found
------------------------------

Suggested fix

      /**
       * @return string|null
       *
-      * @phpstan-return class-string<T>
+      * @phpstan-return class-string<T>|null
       */
      public function getObjectClass();

https://github.com/doctrine-extensions/DoctrineExtensions/blob/main/src/Loggable/LogEntryInterface.php#L61

@mbabker
Copy link
Contributor

mbabker commented Apr 22, 2024

A PR adding the missing types would definitely be welcome!

@mustanggb
Copy link
Author

Done #2790.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants