summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSylvain Thénault <sylvain.thenault@logilab.fr>2009-03-18 09:31:14 +0100
committerSylvain Thénault <sylvain.thenault@logilab.fr>2009-03-18 09:31:14 +0100
commit7bc1c0efee0f361fcd7d2042a440ba5fecb67f2a (patch)
tree0915ec85c6dc66e2c5427c980c8c975335f169d4
parentdca3244ac7681fff5246af523deb0e8bbd848b04 (diff)
downloadastroid-git-7bc1c0efee0f361fcd7d2042a440ba5fecb67f2a.tar.gz
test and fix Function.argnames
--HG-- branch : _ast_compat
-rw-r--r--scoped_nodes.py15
-rw-r--r--test/unittest_scoped_nodes.py5
2 files changed, 13 insertions, 7 deletions
diff --git a/scoped_nodes.py b/scoped_nodes.py
index 3a856992..145868d2 100644
--- a/scoped_nodes.py
+++ b/scoped_nodes.py
@@ -351,11 +351,12 @@ class FunctionNG(object):
def argnames(self):
"""return argument names if there are any arguments"""
- if not self.args.args: # can be None for builtins
- return []
- else:
- #return [arg.name for arg in self.args.args]
- return _get_names(self.args.args)
+ names = _rec_get_names(self.args.args)
+ if self.args.vararg:
+ names.append(self.args.vararg)
+ if self.args.kwarg:
+ names.append(self.args.kwarg)
+ return names
def is_bound(self):
"""return true if the function is bound to an Instance or a class"""
@@ -399,13 +400,13 @@ Lambda.argnames = FunctionNG.argnames.im_func
# XXX need to cleanup these args / arguments methods
-def _get_names(args, names=None):
+def _rec_get_names(args, names=None):
"""return a list of all argument names"""
if names is None:
names = []
for arg in args:
if isinstance(arg, Tuple):
- _get_names(arg.elts, names)
+ _rec_get_names(arg.elts, names)
else:
names.append(arg.name)
return names
diff --git a/test/unittest_scoped_nodes.py b/test/unittest_scoped_nodes.py
index 00654327..0529e0e9 100644
--- a/test/unittest_scoped_nodes.py
+++ b/test/unittest_scoped_nodes.py
@@ -181,6 +181,11 @@ def f():
g = list(astng['f'].ilookup('g'))[0]
self.failUnlessEqual(g.pytype(), '__builtin__.function')
+ def test_argnames(self):
+ code = 'def f(a, (b, c), *args, **kwargs): pass'
+ astng = abuilder.string_build(code, __name__, __file__)
+ self.assertEquals(astng['f'].argnames(), ['a', 'b', 'c', 'args', 'kwargs'])
+
class ClassNodeTC(TestCase):