diff --git a/jedi/api_classes.py b/jedi/api_classes.py index 3dbfbc2b..f7d4c9de 100644 --- a/jedi/api_classes.py +++ b/jedi/api_classes.py @@ -19,9 +19,11 @@ class BaseOutput(object): '_io': 'io' } - _tuple_mapping = { - ('argparse', '_ActionsContainer'): 'argparse._ActionsContainer' - } + _tuple_mapping = dict((tuple(k.split('.')), v) for (k, v) in { + 'argparse._ActionsContainer': 'argparse.ArgumentParser', + '_sre.SRE_Match': 're.MatchObject', + '_sre.SRE_Pattern': 're.RegexObject', + }.items()) def __init__(self, definition, start_pos): self.start_pos = start_pos @@ -97,7 +99,7 @@ class BaseOutput(object): pass for key, repl in self._tuple_mapping.items(): if tuple(path[:len(key)]) == key: - path = [repl] + path[len(key)] + path = [repl] + path[len(key):] return '.'.join(path) diff --git a/test/regression.py b/test/regression.py index 9022bf08..52a70209 100755 --- a/test/regression.py +++ b/test/regression.py @@ -234,6 +234,16 @@ class TestFeature(Base): assert self.complete('import os; os.path.join')[0].full_name \ == 'os.path.join' + def test_full_name_tuple_mapping(self): + s = """ + import re + any_re = re.compile('.*') + any_re""" + lines = s.splitlines() + defs = self.get_def(s, (len(lines), len(lines[-1]))) + self.assertEqual(defs[0].full_name, + 're.RegexObject') + class TestSpeed(Base): def _check_speed(time_per_run, number=4, run_warm=True):