summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--astroid/brain/brain_six.py1
-rw-r--r--tests/unittest_inference.py28
2 files changed, 28 insertions, 1 deletions
diff --git a/astroid/brain/brain_six.py b/astroid/brain/brain_six.py
index a998213f..ed46d872 100644
--- a/astroid/brain/brain_six.py
+++ b/astroid/brain/brain_six.py
@@ -221,7 +221,6 @@ def transform_six_with_metaclass(node):
"""
call = node.bases[0]
node._metaclass = call.args[0]
- node.bases = call.args[1:]
register_module_extender(MANAGER, "six", six_moves_transform)
diff --git a/tests/unittest_inference.py b/tests/unittest_inference.py
index c107eadb..10dd49d7 100644
--- a/tests/unittest_inference.py
+++ b/tests/unittest_inference.py
@@ -3793,6 +3793,34 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
self.assertIsInstance(inferred, nodes.ClassDef)
self.assertEqual(inferred.name, "B")
+ def test_With_metaclass_subclasses_inheritance(self):
+ ast_node = extract_node(
+ """
+ class A(type):
+ def test(cls):
+ return cls
+
+ class C:
+ pass
+
+ import six
+ class B(six.with_metaclass(A, C)):
+ pass
+
+ B #@
+ """
+ )
+ inferred = next(ast_node.infer())
+ self.assertIsInstance(inferred, nodes.ClassDef)
+ self.assertEqual(inferred.name, "B")
+ bases = inferred.bases
+ self.assertIsInstance(bases[0], nodes.Call)
+ ancestors = tuple(inferred.ancestors())
+ self.assertIsInstance(ancestors[0], nodes.ClassDef)
+ self.assertEqual(ancestors[0].name, "C")
+ self.assertIsInstance(ancestors[1], nodes.ClassDef)
+ self.assertEqual(ancestors[1].name, "object")
+
def test_With_metaclass_with_partial_imported_name(self):
ast_node = extract_node(
"""