Add `is_explicit_override` flag to `common.add_method` for plugins
diff --git a/mypy/plugins/common.py b/mypy/plugins/common.py index 807dc7f..26f4bde 100644 --- a/mypy/plugins/common.py +++ b/mypy/plugins/common.py
@@ -342,6 +342,7 @@ is_explicit_override: bool, ) -> tuple[FuncDef | Decorator, SymbolTableNode]: args, return_type, self_type, tvar_defs = spec + has_base_method = info.get(name) is not None assert not ( is_classmethod is True and is_staticmethod is True @@ -380,7 +381,7 @@ func.is_static = is_staticmethod func._fullname = info.fullname + "." + name func.line = info.line - func.is_explicit_override = is_explicit_override + func.is_explicit_override = is_explicit_override and has_base_method # Add decorator for is_staticmethod. It's unnecessary for is_classmethod. if is_staticmethod:
diff --git a/test-data/unit/check-custom-plugin.test b/test-data/unit/check-custom-plugin.test index 70be1aa..def0526 100644 --- a/test-data/unit/check-custom-plugin.test +++ b/test-data/unit/check-custom-plugin.test
@@ -1035,15 +1035,14 @@ # flags: --config-file tmp/mypy.ini class BaseWithFoo: pass class ChildWithFoo(BaseWithFoo): pass - class SomeWithFoo(ChildWithFoo): pass reveal_type(SomeWithFoo.foo1) reveal_type(SomeWithFoo.foo2) [out] -main:5: error: Method "foo2" is not using @override but is overriding a method in class "__main__.ChildWithFoo" +main:4: error: Method "foo2" is not using @override but is overriding a method in class "__main__.ChildWithFoo" +main:6: note: Revealed type is "def (self: __main__.SomeWithFoo)" main:7: note: Revealed type is "def (self: __main__.SomeWithFoo)" -main:8: note: Revealed type is "def (self: __main__.SomeWithFoo)" [file mypy.ini] \[mypy] plugins=<ROOT>/test-data/unit/plugins/add_method.py