Merge pull request #1684 from davidhalter/relative-import

Relative imports should work even if they are not within the project
This commit is contained in:
Dave Halter
2020-12-22 23:18:46 +01:00
committed by GitHub
3 changed files with 61 additions and 3 deletions

View File

@@ -1,9 +1,11 @@
import pytest
from ..helpers import test_dir
def test_import_references(Script):
s = Script("from .. import foo", path="foo.py")
assert [usage.line for usage in s.get_references(line=1, column=18)] == [1]
s = Script("from .. import foo", path=test_dir.joinpath("foo.py"))
assert [usage.line for usage in s.get_references()] == [1]
def test_exclude_builtin_modules(Script):

View File

@@ -8,6 +8,7 @@ from pathlib import Path
import pytest
import jedi
from jedi.file_io import FileIO
from jedi.inference import compiled
from jedi.inference import imports
@@ -473,6 +474,26 @@ def test_relative_import_star(Script):
assert script.complete(3, len("furl.c"))
@pytest.mark.parametrize('with_init', [False, True])
def test_relative_imports_without_path_and_setup_py(
Script, inference_state, environment, tmpdir, with_init):
# Contrary to other tests here we create a temporary folder that is not
# part of a folder with a setup.py that signifies
tmpdir.join('file1.py').write('do_foo = 1')
other_path = tmpdir.join('other_files')
other_path.join('file2.py').write('def do_nothing():\n pass', ensure=True)
if with_init:
other_path.join('__init__.py').write('')
for name, code in [('file2', 'from . import file2'),
('file1', 'from .. import file1')]:
for func in (jedi.Script.goto, jedi.Script.infer):
n, = func(Script(code, path=other_path.join('test1.py').strpath))
assert n.name == name
assert n.type == 'module'
assert n.line == 1
def test_import_recursion(Script):
path = get_example_dir('import-recursion', "cq_example.py")
for c in Script(path=path).complete(3, 3):