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