mypy icon indicating copy to clipboard operation
mypy copied to clipboard

Wording in `mypy.plugin.Plugin.get_method[_signature]_hook` docstring

Open bzoracler opened this issue 7 months ago • 2 comments

Documentation

The docstring of these plugin hook methods currently say:

https://github.com/python/mypy/blob/057508b4cb405fbc22e26b44f764b142352fcce5/mypy/plugin.py#L647-L648

...

https://github.com/python/mypy/blob/057508b4cb405fbc22e26b44f764b142352fcce5/mypy/plugin.py#L664

I understand this to mean that the argument to fullname will be "__main__.Base.method", because __main__.Base defines method.

However, this doesn't seem to be the case. Setting up the same example in the docstring:

  • mypy.ini
    [mypy]
    plugins = plugin.py
    files = test.py
    
  • plugin.py
    from mypy.plugin import Plugin
    
    def plugin(version):
        return TestPlugin
    
    class TestPlugin(Plugin):
        def get_method_signature_hook(self, fullname):
            if fullname.startswith("test."):
                print(f"Hook will be called with `{fullname}`")
    
  • test.py
    from typing import Any
    
    class Base:
        def method(self, arg: Any) -> Any: ...
    
    class Derived(Base): ...
    
    var: Derived
    var.method(42)
    
$ mypy
Hook will be called with `test.Derived.method`

I installed as far back as mypy 0.9x and it was the same behaviour as described above, displaying test.Derived.method (not test.Base.method).


Is there something wrong with the docstring (perhaps from outdated behaviour that no longer applies), or have I misunderstood something?

bzoracler avatar May 31 '25 02:05 bzoracler

Hm, this is problematic. IIRC the intention was to actually pass Base names there. But changing the logic now may be risky, as many plugins will break. @JukkaL what do you think?

ilevkivskyi avatar Jun 03 '25 18:06 ilevkivskyi

We could provide a flag to enable the new behavior to make it easier for plugins to switch to the new semantics. We'd then switch the default for the flag after at least a few releases. We don't promise that the plugin system remains backward compatible.

JukkaL avatar Jun 05 '25 14:06 JukkaL