From 4df3e1fb382ec4c185701ef4ea4014d9b5a757b2 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sat, 24 Nov 2012 22:06:29 +0100 Subject: [PATCH 1/5] Fix type error in BaseOutput.full_name The previous version was doing list + string. --- jedi/api_classes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jedi/api_classes.py b/jedi/api_classes.py index 3dbfbc2b..249ee2e5 100644 --- a/jedi/api_classes.py +++ b/jedi/api_classes.py @@ -97,7 +97,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) From 3349721d75bb26ce39d71ef9d86bac93e98e9b33 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sat, 24 Nov 2012 22:07:53 +0100 Subject: [PATCH 2/5] Fix BaseOutput._tuple_mapping Also, let Python do the split. --- jedi/api_classes.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jedi/api_classes.py b/jedi/api_classes.py index 249ee2e5..8956f7d3 100644 --- a/jedi/api_classes.py +++ b/jedi/api_classes.py @@ -19,9 +19,9 @@ 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', + }.items()) def __init__(self, definition, start_pos): self.start_pos = start_pos From 2ce4a1876225dbb2d168332e9e867b1992e93bea Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sat, 24 Nov 2012 22:08:30 +0100 Subject: [PATCH 3/5] Add BaseOutput._tuple_mapping for regex objects --- jedi/api_classes.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jedi/api_classes.py b/jedi/api_classes.py index 8956f7d3..f7d4c9de 100644 --- a/jedi/api_classes.py +++ b/jedi/api_classes.py @@ -21,6 +21,8 @@ class BaseOutput(object): _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): From fe43ce9042df552c9a00dfaaf6db24a4229dc63d Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sat, 24 Nov 2012 22:32:59 +0100 Subject: [PATCH 4/5] Add test_full_name_tuple_mapping --- test/regression.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/regression.py b/test/regression.py index 9022bf08..3a8e3b1c 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 argparse + parser = argparse.ArgumentParser() + parser.add_argument""" + lines = s.splitlines() + defs = self.get_def(s, (len(lines), len(lines[-1]))) + self.assertEqual(defs[0].full_name, + 'argparse.ArgumentParser.add_argument') + class TestSpeed(Base): def _check_speed(time_per_run, number=4, run_warm=True): From 5308f657d3a9e9f92ba2077322fbf982be819a33 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sat, 24 Nov 2012 22:44:04 +0100 Subject: [PATCH 5/5] Use re module in full_name test instead of argparse for Python 2.5 and 2.6. --- test/regression.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/regression.py b/test/regression.py index 3a8e3b1c..52a70209 100755 --- a/test/regression.py +++ b/test/regression.py @@ -236,13 +236,13 @@ class TestFeature(Base): def test_full_name_tuple_mapping(self): s = """ - import argparse - parser = argparse.ArgumentParser() - parser.add_argument""" + 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, - 'argparse.ArgumentParser.add_argument') + 're.RegexObject') class TestSpeed(Base):