From 9d19b060a92a422a1b21a6139bb994dfa2b1e1bb Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Mon, 4 Mar 2019 09:34:17 +0100 Subject: [PATCH] Add a better comment for imports --- jedi/evaluate/imports.py | 11 +++++++++-- test/test_evaluate/test_imports.py | 14 +++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/jedi/evaluate/imports.py b/jedi/evaluate/imports.py index 7fd6ad55..49d888b2 100644 --- a/jedi/evaluate/imports.py +++ b/jedi/evaluate/imports.py @@ -221,8 +221,15 @@ class Importer(object): base = module_context.py__package__().split('.') if base == [''] or base == ['__main__']: base = [] - # We need to care for two cases, the second is if it's a valid - # Python + # We need to care for two cases, the first one is if it's a valid + # Python import. This import has a properly defined module name + # chain like `foo.bar.baz` and an import in baz is made for + # `..lala.` It can then resolve to `foo.bar.lala`. + # The else here is a heuristic for all other cases, if for example + # in `foo` you search for `...bar`, it's obviously out of scope. + # However since Jedi tries to just do it's best, we help the user + # here, because he might have specified something wrong in his + # project. if level <= len(base): # Here we basically rewrite the level to 0. base = tuple(base) diff --git a/test/test_evaluate/test_imports.py b/test/test_evaluate/test_imports.py index 1e95b0f6..96e8e23f 100644 --- a/test/test_evaluate/test_imports.py +++ b/test/test_evaluate/test_imports.py @@ -280,18 +280,14 @@ def test_get_modules_containing_name(evaluator, path, goal): @pytest.mark.parametrize('empty_sys_path', (False, True)) def test_relative_imports_with_multiple_similar_directories(Script, path, empty_sys_path): dir = get_example_dir('issue1209') + script = Script( + "from .", + path=os.path.join(dir, path), + ) + # TODO pass this project to the script as a param once that's possible. if empty_sys_path: - script = Script( - "from .", - path=os.path.join(dir, path), - ) script._evaluator.project = Project(dir, smart_sys_path=False) else: - script = Script( - "from .", - path=os.path.join(dir, path), - ) - # TODO pass this project to the script as a param once that's possible. script._evaluator.project = Project(dir) name, import_ = script.completions() assert import_.name == 'import'