From 995e3ff4019f4b3e566f5e90051a199599abac83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Noord?= <13665637+DanielNoord@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:59:25 +0200 Subject: [PATCH] Promote most dunder definitions on ``FunctionModel`` to ``ObjectModel`` --- astroid/interpreter/objectmodel.py | 48 ++++++++++++++++-------------- tests/unittest_object_model.py | 11 +++++-- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/astroid/interpreter/objectmodel.py b/astroid/interpreter/objectmodel.py index 5dbc9b2083..d9c289ea76 100644 --- a/astroid/interpreter/objectmodel.py +++ b/astroid/interpreter/objectmodel.py @@ -155,6 +155,28 @@ def attr___init__(self) -> bases.BoundMethod: return bases.BoundMethod(proxy=node, bound=_get_bound_node(self)) + # These are here just for completion. + @property + def attr___ne__(self): + return node_classes.Unknown() + + attr___subclasshook__ = attr___ne__ + attr___str__ = attr___ne__ + attr___sizeof__ = attr___ne__ + attr___setattr___ = attr___ne__ + attr___repr__ = attr___ne__ + attr___reduce__ = attr___ne__ + attr___reduce_ex__ = attr___ne__ + attr___lt__ = attr___ne__ + attr___eq__ = attr___ne__ + attr___gt__ = attr___ne__ + attr___format__ = attr___ne__ + attr___delattr___ = attr___ne__ + attr___getattribute__ = attr___ne__ + attr___hash__ = attr___ne__ + attr___dir__ = attr___ne__ + attr___class__ = attr___ne__ + class ModuleModel(ObjectModel): def _builtins(self): @@ -412,29 +434,9 @@ def test(self): return DescriptorBoundMethod(proxy=self._instance, bound=self._instance) # These are here just for completion. - @property - def attr___ne__(self): - return node_classes.Unknown() - - attr___subclasshook__ = attr___ne__ - attr___str__ = attr___ne__ - attr___sizeof__ = attr___ne__ - attr___setattr___ = attr___ne__ - attr___repr__ = attr___ne__ - attr___reduce__ = attr___ne__ - attr___reduce_ex__ = attr___ne__ - attr___lt__ = attr___ne__ - attr___eq__ = attr___ne__ - attr___gt__ = attr___ne__ - attr___format__ = attr___ne__ - attr___delattr___ = attr___ne__ - attr___getattribute__ = attr___ne__ - attr___hash__ = attr___ne__ - attr___dir__ = attr___ne__ - attr___call__ = attr___ne__ - attr___class__ = attr___ne__ - attr___closure__ = attr___ne__ - attr___code__ = attr___ne__ + attr___call__ = ObjectModel.attr___ne__ + attr___closure__ = ObjectModel.attr___ne__ + attr___code__ = ObjectModel.attr___ne__ class ClassModel(ObjectModel): diff --git a/tests/unittest_object_model.py b/tests/unittest_object_model.py index 2b0237f31c..3d8771c309 100644 --- a/tests/unittest_object_model.py +++ b/tests/unittest_object_model.py @@ -262,7 +262,6 @@ def test_module_model(self) -> None: xml.__repr__ #@ xml.__reduce__ #@ - xml.__setattr__ #@ xml.__reduce_ex__ #@ xml.__lt__ #@ xml.__eq__ #@ @@ -272,6 +271,8 @@ def test_module_model(self) -> None: xml.__getattribute__ #@ xml.__hash__ #@ xml.__dir__ #@ + + xml.__setattr__ #@ xml.__call__ #@ xml.__closure__ #@ """ @@ -316,9 +317,13 @@ def test_module_model(self) -> None: # The following nodes are just here for theoretical completeness, # and they either return Uninferable or raise InferenceError. - for ast_node in ast_nodes[11:28]: + for ast_node in ast_nodes[11:25]: + inferred = next(ast_node.infer()) + assert inferred is util.Uninferable + + for ast_node in ast_nodes[25:28]: with pytest.raises(InferenceError): - next(ast_node.infer()) + inferred = next(ast_node.infer()) class FunctionModelTest(unittest.TestCase):