mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-06 22:14:27 +08:00
Merge 8f3292a4d6 into e53359ad88
This commit is contained in:
@@ -65,12 +65,15 @@ def _must_be_kwarg(signatures, positional_count, used_kwargs):
|
|||||||
return must_be_kwarg
|
return must_be_kwarg
|
||||||
|
|
||||||
|
|
||||||
def filter_names(inference_state, completion_names, stack, like_name, fuzzy, cached_name):
|
def filter_names(inference_state, completion_names, stack, like_name, fuzzy,
|
||||||
|
imported_names, cached_name):
|
||||||
comp_dct = set()
|
comp_dct = set()
|
||||||
if settings.case_insensitive_completion:
|
if settings.case_insensitive_completion:
|
||||||
like_name = like_name.lower()
|
like_name = like_name.lower()
|
||||||
for name in completion_names:
|
for name in completion_names:
|
||||||
string = name.string_name
|
string = name.string_name
|
||||||
|
if string in imported_names and string != like_name:
|
||||||
|
continue
|
||||||
if settings.case_insensitive_completion:
|
if settings.case_insensitive_completion:
|
||||||
string = string.lower()
|
string = string.lower()
|
||||||
if helpers.match(string, like_name, fuzzy=fuzzy):
|
if helpers.match(string, like_name, fuzzy=fuzzy):
|
||||||
@@ -174,9 +177,13 @@ class Completion:
|
|||||||
|
|
||||||
cached_name, completion_names = self._complete_python(leaf)
|
cached_name, completion_names = self._complete_python(leaf)
|
||||||
|
|
||||||
|
imported_names = []
|
||||||
|
if leaf.parent is not None and leaf.parent.type in ['import_as_names', 'dotted_as_names']:
|
||||||
|
imported_names.extend(extract_imported_names(leaf.parent))
|
||||||
|
|
||||||
completions = list(filter_names(self._inference_state, completion_names,
|
completions = list(filter_names(self._inference_state, completion_names,
|
||||||
self.stack, self._like_name,
|
self.stack, self._like_name,
|
||||||
self._fuzzy, cached_name=cached_name))
|
self._fuzzy, imported_names, cached_name=cached_name))
|
||||||
|
|
||||||
return (
|
return (
|
||||||
# Removing duplicates mostly to remove False/True/None duplicates.
|
# Removing duplicates mostly to remove False/True/None duplicates.
|
||||||
@@ -670,3 +677,16 @@ def search_in_module(inference_state, module_context, names, wanted_names,
|
|||||||
def_ = classes.Name(inference_state, n2)
|
def_ = classes.Name(inference_state, n2)
|
||||||
if not wanted_type or wanted_type == def_.type:
|
if not wanted_type or wanted_type == def_.type:
|
||||||
yield def_
|
yield def_
|
||||||
|
|
||||||
|
|
||||||
|
def extract_imported_names(node):
|
||||||
|
imported_names = []
|
||||||
|
|
||||||
|
if node.type in ['import_as_names', 'dotted_as_names', 'import_as_name']:
|
||||||
|
for child in node.children:
|
||||||
|
if child.type == 'name':
|
||||||
|
imported_names.append(child.value)
|
||||||
|
elif child.type == 'import_as_name':
|
||||||
|
imported_names.extend(extract_imported_names(child))
|
||||||
|
|
||||||
|
return imported_names
|
||||||
|
|||||||
@@ -307,6 +307,25 @@ def test_os_issues(Script):
|
|||||||
assert 'path' in import_names(s, column=len(s) - 3)
|
assert 'path' in import_names(s, column=len(s) - 3)
|
||||||
|
|
||||||
|
|
||||||
|
def test_duplicated_import(Script):
|
||||||
|
def import_names(*args, **kwargs):
|
||||||
|
return [d.name for d in Script(*args).complete(**kwargs)]
|
||||||
|
|
||||||
|
s = 'import os, o'
|
||||||
|
assert 'os' not in import_names(s)
|
||||||
|
assert 'os' in import_names(s, column=len(s) - 3)
|
||||||
|
|
||||||
|
s = 'from os import path, p'
|
||||||
|
assert 'path' not in import_names(s)
|
||||||
|
assert 'path' in import_names(s, column=len(s) - 3)
|
||||||
|
|
||||||
|
s = 'import path as pp, p'
|
||||||
|
assert 'path' not in import_names(s)
|
||||||
|
|
||||||
|
s = 'from os import path as pp, p'
|
||||||
|
assert 'path' not in import_names(s)
|
||||||
|
|
||||||
|
|
||||||
def test_path_issues(Script):
|
def test_path_issues(Script):
|
||||||
"""
|
"""
|
||||||
See pull request #684 for details.
|
See pull request #684 for details.
|
||||||
|
|||||||
Reference in New Issue
Block a user