summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog1
-rw-r--r--inference.py2
-rw-r--r--rebuilder.py2
-rw-r--r--test/unittest_inference.py14
4 files changed, 16 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index c246480a..c8dafdc3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,6 +9,7 @@ Change log for the astng package
in lambdas.
* #123068: Make sure .as_string() returns valid code for yields in
expressions.
+ * #47957: Set literals are now correctly treated as inference leaves.
2013-02-27 -- 0.24.2
* pylint-brain: more subprocess.Popen faking (see #46273)
diff --git a/inference.py b/inference.py
index e33ea492..49d2424a 100644
--- a/inference.py
+++ b/inference.py
@@ -137,7 +137,7 @@ nodes.Const.infer = infer_end
nodes.List.infer = infer_end
nodes.Tuple.infer = infer_end
nodes.Dict.infer = infer_end
-
+nodes.Set.infer = infer_end
def infer_name(self, context=None):
"""infer a Name: use name lookup rules"""
diff --git a/rebuilder.py b/rebuilder.py
index c4ce726b..5e2ed99f 100644
--- a/rebuilder.py
+++ b/rebuilder.py
@@ -698,7 +698,7 @@ class TreeRebuilder(object):
return newnode
def visit_set(self, node, parent):
- """visit a Tuple node by returning a fresh instance of it"""
+ """visit a Set node by returning a fresh instance of it"""
newnode = new.Set()
_lineno_parent(node, newnode, parent)
newnode.elts = [self.visit(child, newnode) for child in node.elts]
diff --git a/test/unittest_inference.py b/test/unittest_inference.py
index aacca461..3853e353 100644
--- a/test/unittest_inference.py
+++ b/test/unittest_inference.py
@@ -1,4 +1,4 @@
-# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
#
# This file is part of logilab-astng.
@@ -432,6 +432,18 @@ s2 = '_'
infered = n.infer().next()
self.assertEqual(infered.getitem(0).value, '_')
+ def test_builtin_types_py27(self):
+ if sys.version_info < (2, 7):
+ self.skipTest('set literal introduced in python 2.7')
+ code = 's = {1}'
+ astng = builder.string_build(code, __name__, __file__)
+ n = astng['s']
+ infered = n.infer().next()
+ self.assertIsInstance(infered, nodes.Set)
+ self.assertIsInstance(infered, Instance)
+ self.assertEqual(infered.name, 'set')
+ self.assertIn('remove', infered._proxied.locals)
+
def test_unicode_type(self):
if sys.version_info >= (3, 0):
self.skipTest('unicode removed on py >= 3.0')