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

Psalm types do not allow the use of static factories #239

Open
gsteel opened this issue Sep 18, 2024 · 0 comments
Open

Psalm types do not allow the use of static factories #239

gsteel opened this issue Sep 18, 2024 · 0 comments
Labels
Bug Something isn't working

Comments

@gsteel
Copy link
Member

gsteel commented Sep 18, 2024

Bug Report

Q A
Version(s) 4.x

Summary

I often create what I call "static factories" along the lines of

class SomeFactory {
    public function __construct(private string $key) {
    }

    public static function __callStatic(string $method, array $arguments): Whatever
    {
        $container = $arguments[0] ?? null;
        assert($container instanceof ContainerInterface);

        return (new self($method))->__invoke($container);
    }

    public function __invoke(ContainerInterface $container): Whatever
    {
        $config = $this->key;
        
        return new Whatever(
            $container->get(SomeDependency::class)
            $config,
        );
    }
}

and then refer to these in config as:

return [
    'factories' => [
        Whatever::class => [SomeFactory::class, 'some-key'],
    ],
];

Current behavior

Adding callables like this is causing SA issues in projects

Expected behavior

No SA issues listing regular callables

Can we simply add callable to the psalm-type unions on ServiceManager for factories, delegators etc?

@gsteel gsteel added the Bug Something isn't working label Sep 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant