pytest-dev / pluggy

A minimalist production ready plugin system
https://pluggy.readthedocs.io/en/latest/
MIT License
1.24k stars 121 forks source link

Why `pluggy` ignore `hookimpl` kwargsnames? #522

Open noklam opened 4 weeks ago

noklam commented 4 weeks ago

Description

I try to set default argument for a hook and find it does not work.

class SomeClass:
  @hookimpl
  def my_func(self, a=1):
     ...

It seems like if I use a kwargs, pluggy will ignore this argument and won't call it anymore. I can see that HookImpl stores both kwargsnames and argnames but only argnames are called. Is this intentional or bug? I try to search in the docs but couldn't find anything related.

Context

https://github.com/pytest-dev/pluggy/blob/5c16e15a963d5e66f37d05b1ccfb90adf71e8e0f/src/pluggy/_callers.py#L71-L73

In docs, it said:

naming markers: HookSpecMarker and HookImplMarker must be initialized with the name of the host project (the name parameter in setup()) - so eggsample in our case.

But it never mentioned keywords arguments cannot be used.

p.s. I did a bit more digging, it seems that kwargnames is never used anywhere in the source code other than saving it as an attribute.

image
RonnyPfannschmidt commented 3 weeks ago

Currently default args are ignored

The discussion on support for them for forward or backward compatibility has not yet yielded implementations

noklam commented 3 weeks ago

@RonnyPfannschmidt Where can I find the related discussion? If it's not going to be implemented soon, does it makes sense to document this behavior for the time being? It would be great to get a view from pluggy standpoint as our users thought this is a bug on our side. We can add a few sentences in our own docs, but it will be nicer to reference pluggy's doc directly.

Something like `keyword arguments is not supported yet" is good enough.