import pytest from ..helpers import test_dir def test_import_references(Script): 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): def get(include): references = Script(source).get_references(include_builtins=include) return [(d.line, d.column) for d in references] source = '''import sys\nsys.setprofile''' places = get(include=True) assert len(places) >= 3 # Includes stubs, the reference itself and the builtin places = get(include=False) # Just the reference assert places == [(2, 4)] @pytest.mark.parametrize('code, places', [ ('', [(1, 7), (4, 6)]), ('', [(2, 5)]), ('', [(2, 24), (7, 10), (11, 10)]), ('', [(6, 4), (14, 0)]), ('', [(7, 4), (8, 11)]), ('', [(7, 22), (11, 22)]), ('', [(11, 4), (12, 11)]), ('from datetime', [(1, 5)]), ('''from datetime import datetime d1 = datetime.now() d2 = datetime.now() ''', [(2, 14), (3, 14)]), ('''from datetime import timedelta t1 = timedelta(seconds=1) t2 = timedelta(seconds=2) ''', [(2, 15), (3, 15)]) ]) def test_references_scope(Script, code, places): if not code: code = '''import sys from collections import defaultdict print(sys.path) def foo(bar): baz = defaultdict(int) return baz def bar(foo): baz = defaultdict(int) return baz foo() ''' from jedi.api.project import Project project = Project('', sys_path=[], smart_sys_path=False) script = Script(code, project=project) for place in places: assert places == [(n.line, n.column) for n in script.get_references(scope='file', *place)]