1
0
forked from VimPlug/jedi

Add :attr:Definition.names

This commit is contained in:
Takafumi Arakaki
2013-02-13 22:48:06 +01:00
parent 39feecee04
commit cbcaa85108
2 changed files with 38 additions and 5 deletions

View File

@@ -271,6 +271,40 @@ class Definition(BaseDefinition):
def __init__(self, definition):
super(Definition, self).__init__(definition, definition.start_pos)
@property
def names(self):
"""
Name of variable/function/class/module.
For example, for ``isinstance`` it returns ``['isinstance']``.
As it is possible to have multiple definition in a statement,
this attribute returns a list of string.
:rtype: list of str
"""
d = self.definition
if isinstance(d, er.InstanceElement):
d = d.var
if isinstance(d, pr.Name):
d = d.parent
if isinstance(d, er.Array):
return [unicode(d.type)]
elif isinstance(d, (pr.Class, er.Class, er.Instance,
er.Function, pr.Function)):
return [unicode(d.name)]
elif isinstance(d, pr.Module):
return [self.module_name]
elif isinstance(d, pr.Import):
return [n.names[-1] for n in d.get_defined_names()]
elif isinstance(d, pr.Statement):
try:
return [a.values[0][0].name.names[-1]
for (_, a) in d.assignment_details]
except IndexError:
pass
return []
@property
def description(self):
"""

View File

@@ -402,11 +402,10 @@ class TestGetDefinitions(TestBase):
pass
data = None
""")
desc = lambda i: definitions[i].description
assert desc(0) == 'import module'
assert desc(1) == 'class Class'
assert desc(2) == 'def func'
assert desc(3) == 'data=None'
assert definitions[0].names == ['module']
assert definitions[1].names == ['Class']
assert definitions[2].names == ['func']
assert definitions[3].names == ['data']
class TestSpeed(TestBase):