try fix for non ABC base class, abstract method with NotImplementedError be infer as Never then in an inconsistent manner #2456#2489
Conversation
f7a5f6e to
72eeef2
Compare
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Pull request overview
This pull request fixes issue #2456 where abstract methods decorated with @abstractmethod in non-ABC base classes were incorrectly inferred as returning Never instead of Any, causing spurious type errors in subclasses that override these methods.
Changes:
- Extended abstract method detection to recognize
@abstractmethoddecorator in addition to ABC inheritance - Added
is_abstract_methodfield tracking through the binding pipeline to solve.rs - Added regression test for non-ABC classes using
@abstractmethodwithNotImplementedError
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| pyrefly/lib/test/abstract_methods.rs | Added test case test_abstract_method_non_abc to verify the fix for non-ABC classes with @abstractmethod decorator |
| pyrefly/lib/binding/function.rs | Added is_abstract_method parameter to analyze_return_type() and threaded it through all call sites |
| pyrefly/lib/binding/binding.rs | Added is_abstract_method field to ReturnTypeKind::ShouldInferType enum variant with documentation |
| pyrefly/lib/alt/solve.rs | Updated return type inference logic to check both @abstractmethod decorator and ABC inheritance when determining if a method should return Any instead of Never |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| let is_abstract_method = *body_is_trivial | ||
| && return_ty.is_never() | ||
| && class_metadata_key.is_some_and(|key| self.get_idx(key).extends_abc()); | ||
| && (*is_abstract_method | ||
| || class_metadata_key.is_some_and(|key| self.get_idx(key).extends_abc())); |
There was a problem hiding this comment.
Variable shadowing: the local variable is_abstract_method shadows the parameter of the same name from the pattern match on line 3131. This makes the code confusing and error-prone. Consider renaming the local variable to something like should_treat_as_abstract or is_abstract_with_trivial_body to clearly distinguish it from the decorator flag.
|
Diff from mypy_primer, showing the effect of this PR on open source code: psycopg (https://github.com/psycopg/psycopg)
- ERROR tests/test_psycopg_dbapi20.py:29:9-27: Class member `PsycopgTests.test_setoutputsize` overrides parent class `DatabaseAPI20Test` in an inconsistent manner [bad-override]
tornado (https://github.com/tornadoweb/tornado)
- ERROR tornado/httpclient.py:182:9-26: Class member `AsyncHTTPClient.configurable_base` overrides parent class `Configurable` in an inconsistent manner [bad-override]
- ERROR tornado/httpclient.py:186:9-29: Class member `AsyncHTTPClient.configurable_default` overrides parent class `Configurable` in an inconsistent manner [bad-override]
- ERROR tornado/httpserver.py:209:9-26: Class member `HTTPServer.configurable_base` overrides parent class `Configurable` in an inconsistent manner [bad-override]
- ERROR tornado/httpserver.py:213:9-29: Class member `HTTPServer.configurable_default` overrides parent class `Configurable` in an inconsistent manner [bad-override]
- ERROR tornado/ioloop.py:352:9-26: Class member `IOLoop.configurable_base` overrides parent class `Configurable` in an inconsistent manner [bad-override]
- ERROR tornado/ioloop.py:356:9-29: Class member `IOLoop.configurable_default` overrides parent class `Configurable` in an inconsistent manner [bad-override]
- ERROR tornado/netutil.py:349:9-26: Class member `Resolver.configurable_base` overrides parent class `Configurable` in an inconsistent manner [bad-override]
- ERROR tornado/netutil.py:353:9-29: Class member `Resolver.configurable_default` overrides parent class `Configurable` in an inconsistent manner [bad-override]
- ERROR tornado/test/iostream_test.py:921:9-30: Class member `TestIOStreamWebHTTP._make_client_iostream` overrides parent class `TestIOStreamWebMixin` in an inconsistent manner [bad-override]
- ERROR tornado/test/iostream_test.py:929:9-30: Class member `TestIOStreamWebHTTPS._make_client_iostream` overrides parent class `TestIOStreamWebMixin` in an inconsistent manner [bad-override]
- ERROR tornado/test/iostream_test.py:937:9-30: Class member `TestIOStream._make_server_iostream` overrides parent class `TestIOStreamMixin` in an inconsistent manner [bad-override]
- ERROR tornado/test/iostream_test.py:940:9-30: Class member `TestIOStream._make_client_iostream` overrides parent class `TestIOStreamMixin` in an inconsistent manner [bad-override]
- ERROR tornado/test/iostream_test.py:945:9-30: Class member `TestIOStreamSSL._make_server_iostream` overrides parent class `TestIOStreamMixin` in an inconsistent manner [bad-override]
- ERROR tornado/test/iostream_test.py:954:9-30: Class member `TestIOStreamSSL._make_client_iostream` overrides parent class `TestIOStreamMixin` in an inconsistent manner [bad-override]
- ERROR tornado/test/iostream_test.py:964:9-30: Class member `TestIOStreamSSLContext._make_server_iostream` overrides parent class `TestIOStreamMixin` in an inconsistent manner [bad-override]
- ERROR tornado/test/iostream_test.py:975:9-30: Class member `TestIOStreamSSLContext._make_client_iostream` overrides parent class `TestIOStreamMixin` in an inconsistent manner [bad-override]
- ERROR tornado/test/simple_httpclient_test.py:572:9-22: Class member `SimpleHTTPClientTestCase.create_client` overrides parent class `SimpleHTTPClientTestMixin` in an inconsistent manner [bad-override]
- ERROR tornado/test/simple_httpclient_test.py:584:9-22: Class member `SimpleHTTPSClientTestCase.create_client` overrides parent class `SimpleHTTPClientTestMixin` in an inconsistent manner [bad-override]
- ERROR tornado/test/util_test.py:45:9-26: Class member `TestConfigurable.configurable_base` overrides parent class `Configurable` in an inconsistent manner [bad-override]
- ERROR tornado/test/util_test.py:49:9-29: Class member `TestConfigurable.configurable_default` overrides parent class `Configurable` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:91:9-21: Class member `SimpleHandlerTestCase.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:226:9-21: Class member `FinalReturnTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:273:9-21: Class member `CookieTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:446:9-21: Class member `AuthRedirectTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:487:9-21: Class member `ConnectionCloseTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:538:9-21: Class member `RequestEncodingTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:785:9-21: Class member `WSGISafeWebTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:1027:9-21: Class member `NonWSGIWebTests.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:1036:9-21: Class member `ErrorResponseTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:1110:9-21: Class member `StaticFileTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:1492:9-21: Class member `StaticDefaultFilenameTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:1514:9-21: Class member `StaticDefaultFilenameRootTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:1550:9-21: Class member `StaticFileWithPathTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:1559:9-21: Class member `CustomStaticFileTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:1633:9-21: Class member `HostMatchingTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:1668:9-21: Class member `DefaultHostMatchingTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:1702:9-21: Class member `NamedURLSpecGroupsTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:1846:9-21: Class member `ErrorHandlerXSRFTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:1931:9-21: Class member `PathArgsInPrepareTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:2142:9-21: Class member `GetCurrentUserTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:2292:9-21: Class member `Default404Test.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:2307:9-21: Class member `Custom404Test.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:2325:9-21: Class member `DefaultHandlerArgumentsTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:2340:9-21: Class member `HandlerByNameTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:2358:9-21: Class member `StreamingRequestBodyTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:2567:9-21: Class member `DecoratedStreamingRequestFlowControlTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:2580:9-21: Class member `NativeStreamingRequestFlowControlTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:3155:9-21: Class member `DecoratorTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:3188:9-21: Class member `CacheTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:3314:9-21: Class member `RedirectHandlerTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/web_test.py:3345:9-21: Class member `AcceptLanguageTest.get_handlers` overrides parent class `WebTestCase` in an inconsistent manner [bad-override]
- ERROR tornado/test/wsgi_test.py:64:9-21: Class member `WSGIContainerDummyExecutorTest.get_executor` overrides parent class `WSGIAppMixin` in an inconsistent manner [bad-override]
- ERROR tornado/test/wsgi_test.py:93:9-21: Class member `WSGIContainerThreadPoolTest.get_executor` overrides parent class `WSGIAppMixin` in an inconsistent manner [bad-override]
- ERROR tornado/util.py:306:29-33: `type[Self@Configurable] | None` is not assignable to attribute `__impl_class` with type `Never` [bad-assignment]
- ERROR tornado/util.py:307:30-36: `dict[str, Unknown]` is not assignable to attribute `__impl_kwargs` with type `Never` [bad-assignment]
alerta (https://github.com/alerta/alerta)
- ERROR alerta/database/backends/mongodb/base.py:22:9-22: Class member `Backend.create_engine` overrides parent class `Database` in an inconsistent manner [bad-override]
- ERROR alerta/database/backends/mongodb/base.py:100:9-14: Class member `Backend.close` overrides parent class `Database` in an inconsistent manner [bad-override]
- ERROR alerta/database/backends/mongodb/base.py:103:9-16: Class member `Backend.destroy` overrides parent class `Database` in an inconsistent manner [bad-override]
- ERROR alerta/database/backends/postgres/base.py:65:9-22: Class member `Backend.create_engine` overrides parent class `Database` in an inconsistent manner [bad-override]
- ERROR alerta/database/backends/postgres/base.py:93:9-16: Class member `Backend.connect` overrides parent class `Database` in an inconsistent manner [bad-override]
- ERROR alerta/database/backends/postgres/base.py:145:9-14: Class member `Backend.close` overrides parent class `Database` in an inconsistent manner [bad-override]
- ERROR alerta/database/backends/postgres/base.py:148:9-16: Class member `Backend.destroy` overrides parent class `Database` in an inconsistent manner [bad-override]
apprise (https://github.com/caronc/apprise)
- ERROR apprise/attachment/file.py:85:9-17: Class member `AttachFile.download` overrides parent class `AttachBase` in an inconsistent manner [bad-override]
- ERROR apprise/attachment/http.py:95:9-17: Class member `AttachHTTP.download` overrides parent class `AttachBase` in an inconsistent manner [bad-override]
- ERROR apprise/attachment/memory.py:125:9-17: Class member `AttachMemory.download` overrides parent class `AttachBase` in an inconsistent manner [bad-override]
asynq (https://github.com/quora/asynq)
- ERROR asynq/batching.py:254:9-33: Class member `DebugBatch._try_switch_active_batch` overrides parent class `BatchBase` in an inconsistent manner [bad-override]
- ERROR asynq/batching.py:260:9-15: Class member `DebugBatch._flush` overrides parent class `BatchBase` in an inconsistent manner [bad-override]
- ERROR asynq/futures.py:197:9-17: Class member `Future._compute` overrides parent class `FutureBase` in an inconsistent manner [bad-override]
- ERROR asynq/tests/caching.py:71:9-12: Class member `LocalCache.set` overrides parent class `CacheBase` in an inconsistent manner [bad-override]
- ERROR asynq/tests/caching.py:137:9-12: Class member `ExternalCacheBase.get` overrides parent class `CacheBase` in an inconsistent manner [bad-override]
- ERROR asynq/tests/caching.py:144:9-12: Class member `ExternalCacheBase.set` overrides parent class `CacheBase` in an inconsistent manner [bad-override]
- ERROR asynq/tests/debug_cache.py:29:9-15: Class member `DebugExternalCache._flush` overrides parent class `ExternalCacheBase` in an inconsistent manner [bad-override]
dd-trace-py (https://github.com/DataDog/dd-trace-py)
- ERROR ddtrace/vendor/jsonpath_ng/jsonpath.py:208:9-15: Class member `Root.filter` overrides parent class `JSONPath` in an inconsistent manner [bad-override]
- ERROR ddtrace/vendor/jsonpath_ng/jsonpath.py:235:9-15: Class member `This.filter` overrides parent class `JSONPath` in an inconsistent manner [bad-override]
- ERROR ddtrace/vendor/jsonpath_ng/jsonpath.py:350:9-13: Class member `Where.find` overrides parent class `JSONPath` in an inconsistent manner [bad-override]
- ERROR tests/contrib/django/soap/models.py:37:9-15: Class member `LeaveStatusModel.fields` overrides parent class `OrderedModel` in an inconsistent manner [bad-override]
- ERROR tests/contrib/django/soap/models.py:43:9-20: Class member `LeaveStatusModel.model_names` overrides parent class `OrderedModel` in an inconsistent manner [bad-override]
- ERROR tests/tracer/test_encoders.py:140:9-18: Class member `RefMsgpackEncoderV05.normalize` overrides parent class `RefMsgpackEncoder` in an inconsistent manner [bad-override]
cloud-init (https://github.com/canonical/cloud-init)
- ERROR cloudinit/sources/helpers/vmware/imc/nic.py:41:9-16: Class member `Nic.primary` overrides parent class `NicBase` in an inconsistent manner [bad-override]
- ERROR cloudinit/sources/helpers/vmware/imc/nic.py:50:9-15: Class member `Nic.onboot` overrides parent class `NicBase` in an inconsistent manner [bad-override]
- ERROR cloudinit/sources/helpers/vmware/imc/nic.py:59:9-18: Class member `Nic.bootProto` overrides parent class `NicBase` in an inconsistent manner [bad-override]
- ERROR cloudinit/sources/helpers/vmware/imc/nic.py:67:9-18: Class member `Nic.ipv4_mode` overrides parent class `NicBase` in an inconsistent manner [bad-override]
- ERROR cloudinit/sources/helpers/vmware/imc/nic.py:75:9-19: Class member `Nic.staticIpv4` overrides parent class `NicBase` in an inconsistent manner [bad-override]
- ERROR cloudinit/sources/helpers/vmware/imc/nic.py:86:9-19: Class member `Nic.staticIpv6` overrides parent class `NicBase` in an inconsistent manner [bad-override]
- ERROR cloudinit/sources/helpers/vmware/imc/nic.py:114:9-17: Class member `StaticIpv4Addr.gateways` overrides parent class `StaticIpv4Base` in an inconsistent manner [bad-override]
paasta (https://github.com/yelp/paasta)
- ERROR paasta_tools/cli/cmds/logs.py:708:9-18: Class member `ScribeLogReader.tail_logs` overrides parent class `LogReader` in an inconsistent manner [bad-override]
- ERROR paasta_tools/cli/cmds/logs.py:855:9-27: Class member `ScribeLogReader.print_logs_by_time` overrides parent class `LogReader` in an inconsistent manner [bad-override]
- ERROR paasta_tools/cli/cmds/logs.py:913:9-26: Class member `ScribeLogReader.print_last_n_logs` overrides parent class `LogReader` in an inconsistent manner [bad-override]
- ERROR paasta_tools/cli/cmds/logs.py:1214:9-27: Class member `VectorLogsReader.print_logs_by_time` overrides parent class `LogReader` in an inconsistent manner [bad-override]
- ERROR paasta_tools/cli/cmds/logs.py:1265:9-18: Class member `VectorLogsReader.tail_logs` overrides parent class `LogReader` in an inconsistent manner [bad-override]
mitmproxy (https://github.com/mitmproxy/mitmproxy)
- ERROR mitmproxy/tools/console/grideditor/col_bytes.py:32:9-17: Class member `Display.get_data` overrides parent class `Cell` in an inconsistent manner [bad-override]
- ERROR mitmproxy/tools/console/grideditor/col_bytes.py:43:9-17: Class member `Edit.get_data` overrides parent class `Cell` in an inconsistent manner [bad-override]
- ERROR mitmproxy/tools/console/grideditor/col_subgrid.py:39:9-17: Class member `Display.get_data` overrides parent class `Cell` in an inconsistent manner [bad-override]
parso (https://github.com/davidhalter/parso)
- ERROR parso/python/errors.py:541:9-17: Class member `_InvalidSyntaxRule.is_issue` overrides parent class `SyntaxRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:714:9-17: Class member `_BytesAndStringMix.is_issue` overrides parent class `SyntaxRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:727:9-17: Class member `_TrailingImportComma.is_issue` overrides parent class `SyntaxRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:736:9-17: Class member `_ImportStarInFunction.is_issue` overrides parent class `SyntaxRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:744:9-17: Class member `_FutureImportRule.is_issue` overrides parent class `SyntaxRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:768:9-17: Class member `_StarExprRule.is_issue` overrides parent class `SyntaxRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:803:9-17: Class member `_StarExprParentRule.is_issue` overrides parent class `SyntaxRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:842:9-17: Class member `_AnnotatorRule.is_issue` overrides parent class `SyntaxRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:872:9-17: Class member `_ArgumentRule.is_issue` overrides parent class `SyntaxRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:900:9-17: Class member `_NonlocalModuleLevelRule.is_issue` overrides parent class `SyntaxRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:913:9-17: Class member `_ArglistRule.is_issue` overrides parent class `SyntaxRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:964:9-17: Class member `_ParameterRule.is_issue` overrides parent class `SyntaxRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:1186:9-17: Class member `_CompForRule.is_issue` overrides parent class `_CheckAssignmentRule` in an inconsistent manner [bad-override]
- ERROR parso/python/errors.py:1200:9-17: Class member `_ExprStmtRule.is_issue` overrides parent class `_CheckAssignmentRule` in an inconsistent manner [bad-override]
- ERROR parso/python/tree.py:833:9-26: Class member `ImportFrom.get_defined_names` overrides parent class `Import` in an inconsistent manner [bad-override]
- ERROR parso/python/tree.py:904:9-26: Class member `ImportName.get_defined_names` overrides parent class `Import` in an inconsistent manner [bad-override]
aioredis (https://github.com/aio-libs/aioredis)
- ERROR aioredis/connection.py:373:9-19: Class member `PythonParser.on_connect` overrides parent class `BaseParser` in an inconsistent manner [bad-override]
- ERROR aioredis/connection.py:384:9-22: Class member `PythonParser.on_disconnect` overrides parent class `BaseParser` in an inconsistent manner [bad-override]
- ERROR aioredis/connection.py:458:9-19: Class member `HiredisParser.on_connect` overrides parent class `BaseParser` in an inconsistent manner [bad-override]
- ERROR aioredis/connection.py:472:9-22: Class member `HiredisParser.on_disconnect` overrides parent class `BaseParser` in an inconsistent manner [bad-override]
pip (https://github.com/pypa/pip)
- ERROR src/pip/_vendor/pygments/filter.py:68:9-15: Class member `FunctionFilter.filter` overrides parent class `Filter` in an inconsistent manner [bad-override]
- ERROR src/pip/_vendor/pygments/filters/__init__.py:86:9-15: Class member `CodeTagFilter.filter` overrides parent class `Filter` in an inconsistent manner [bad-override]
- ERROR src/pip/_vendor/pygments/filters/__init__.py:679:9-15: Class member `SymbolFilter.filter` overrides parent class `Filter` in an inconsistent manner [bad-override]
- ERROR src/pip/_vendor/pygments/filters/__init__.py:707:9-15: Class member `KeywordCaseFilter.filter` overrides parent class `Filter` in an inconsistent manner [bad-override]
- ERROR src/pip/_vendor/pygments/filters/__init__.py:748:9-15: Class member `NameHighlightFilter.filter` overrides parent class `Filter` in an inconsistent manner [bad-override]
- ERROR src/pip/_vendor/pygments/filters/__init__.py:782:9-15: Class member `RaiseOnErrorTokenFilter.filter` overrides parent class `Filter` in an inconsistent manner [bad-override]
- ERROR src/pip/_vendor/pygments/filters/__init__.py:836:9-15: Class member `VisibleWhitespaceFilter.filter` overrides parent class `Filter` in an inconsistent manner [bad-override]
- ERROR src/pip/_vendor/pygments/filters/__init__.py:892:9-15: Class member `GobbleFilter.filter` overrides parent class `Filter` in an inconsistent manner [bad-override]
- ERROR src/pip/_vendor/pygments/filters/__init__.py:916:9-15: Class member `TokenMergeFilter.filter` overrides parent class `Filter` in an inconsistent manner [bad-override]
python-htmlgen (https://github.com/srittau/python-htmlgen)
- ERROR htmlgen/element.py:236:9-17: Class member `NonVoidElement.generate` overrides parent class `ElementBase` in an inconsistent manner [bad-override]
- ERROR htmlgen/element.py:318:9-26: Class member `Element.generate_children` overrides parent class `NonVoidElement` in an inconsistent manner [bad-override]
- ERROR htmlgen/element.py:340:9-17: Class member `VoidElement.generate` overrides parent class `ElementBase` in an inconsistent manner [bad-override]
- ERROR htmlgen/generator.py:71:9-17: Class member `NullGenerator.generate` overrides parent class `Generator` in an inconsistent manner [bad-override]
- ERROR htmlgen/generator.py:89:9-17: Class member `IteratorGenerator.generate` overrides parent class `Generator` in an inconsistent manner [bad-override]
- ERROR htmlgen/generator.py:152:9-17: Class member `ChildGenerator.generate` overrides parent class `Generator` in an inconsistent manner [bad-override]
- ERROR htmlgen/generator.py:285:9-17: Class member `HTMLChildGenerator.generate` overrides parent class `Generator` in an inconsistent manner [bad-override]
sockeye (https://github.com/awslabs/sockeye)
- ERROR sockeye/decoder.py:177:9-27: Class member `TransformerDecoder.set_inference_only` overrides parent class `Decoder` in an inconsistent manner [bad-override]
- ERROR sockeye/decoder.py:321:9-23: Class member `TransformerDecoder.get_num_hidden` overrides parent class `Decoder` in an inconsistent manner [bad-override]
pywin32 (https://github.com/mhammond/pywin32)
- ERROR Pythonwin/pywin/Demos/openGLDemo.py:240:9-13: Class member `TestView.Init` overrides parent class `OpenGLView` in an inconsistent manner [bad-override]
- ERROR Pythonwin/pywin/Demos/openGLDemo.py:243:9-18: Class member `TestView.DrawScene` overrides parent class `OpenGLView` in an inconsistent manner [bad-override]
- ERROR Pythonwin/pywin/Demos/openGLDemo.py:307:9-13: Class member `CubeView.Init` overrides parent class `OpenGLView` in an inconsistent manner [bad-override]
- ERROR Pythonwin/pywin/Demos/openGLDemo.py:320:9-18: Class member `CubeView.DrawScene` overrides parent class `OpenGLView` in an inconsistent manner [bad-override]
- ERROR Pythonwin/pywin/framework/editor/editor.py:488:9-27: Class member `EditorTemplate._CreateDocTemplate` overrides parent class `EditorTemplateBase` in an inconsistent manner [bad-override]
- ERROR com/win32comext/axdebug/codecontainer.py:239:9-16: Class member `SourceModuleContainer.GetName` overrides parent class `SourceCodeContainer` in an inconsistent manner [bad-override]
- ERROR isapi/samples/redirector.py:55:9-17: Class member `Extension.Dispatch` overrides parent class `ThreadPoolExtension` in an inconsistent manner [bad-override]
- ERROR isapi/samples/redirector_asynch.py:43:9-17: Class member `Extension.Dispatch` overrides parent class `ThreadPoolExtension` in an inconsistent manner [bad-override]
- ERROR isapi/samples/redirector_with_filter.py:63:9-17: Class member `Extension.Dispatch` overrides parent class `ThreadPoolExtension` in an inconsistent manner [bad-override]
- ERROR isapi/samples/redirector_with_filter.py:90:9-23: Class member `Filter.HttpFilterProc` overrides parent class `SimpleFilter` in an inconsistent manner [bad-override]
- ERROR isapi/test/extension_simple.py:28:9-17: Class member `Extension.Dispatch` overrides parent class `ThreadPoolExtension` in an inconsistent manner [bad-override]
- ERROR isapi/threaded_extension.py:92:9-26: Class member `ThreadPoolExtension.HttpExtensionProc` overrides parent class `SimpleExtension` in an inconsistent manner [bad-override]
pycryptodome (https://github.com/Legrandin/pycryptodome)
- ERROR lib/Crypto/SelfTest/Math/test_Numbers.py:743:9-14: Class member `TestIntegerInt.setUp` overrides parent class `TestIntegerBase` in an inconsistent manner [bad-override]
- ERROR lib/Crypto/SelfTest/Math/test_Numbers.py:812:17-22: Class member `TestIntegerGMP.setUp` overrides parent class `TestIntegerBase` in an inconsistent manner [bad-override]
- ERROR lib/Crypto/SelfTest/Math/test_Numbers.py:826:17-22: Class member `TestIntegerCustomModexp.setUp` overrides parent class `TestIntegerBase` in an inconsistent manner [bad-override]
- ERROR lib/Crypto/Signature/DSS.py:241:9-20: Class member `DeterministicDsaSigScheme._valid_hash` overrides parent class `DssSigScheme` in an inconsistent manner [bad-override]
- ERROR lib/Crypto/Signature/DSS.py:290:9-20: Class member `FipsEcDsaSigScheme._valid_hash` overrides parent class `DssSigScheme` in an inconsistent manner [bad-override]
pwndbg (https://github.com/pwndbg/pwndbg)
- ERROR pwndbg/aglib/heap/ptmalloc.py:1725:9-23: Class member `DebugSymsHeap.is_initialized` overrides parent class `GlibcMemoryAllocator` in an inconsistent manner [bad-override]
- ERROR pwndbg/aglib/heap/ptmalloc.py:2279:9-23: Class member `HeuristicHeap.is_initialized` overrides parent class `GlibcMemoryAllocator` in an inconsistent manner [bad-override]
- ERROR pwndbg/dbg_mod/gdb/__init__.py:1121:9-18: Class member `GDBProcess.trace_ret` overrides parent class `Process` in an inconsistent manner [bad-override]
- ERROR pwndbg/dbg_mod/gdb/__init__.py:1212:9-38: Class member `GDBProcess.dispatch_execution_controller` overrides parent class `Process` in an inconsistent manner [bad-override]
- ERROR pwndbg/dbg_mod/lldb/__init__.py:1938:9-18: Class member `LLDBProcess.trace_ret` overrides parent class `Process` in an inconsistent manner [bad-override]
- ERROR pwndbg/dbg_mod/lldb/__init__.py:2043:9-38: Class member `LLDBProcess.dispatch_execution_controller` overrides parent class `Process` in an inconsistent manner [bad-override]
|
Summary
Fixes #2456
Treat trivial raise NotImplementedError() bodies as abstract when either
@abstractmethodis present or the class extends ABC, so inference returns Any instead of Never.Test Plan
Added a regression test for non-ABC classes using
@abstractmethodwith NotImplementedError.