Fix string completions with quote prefixes, fixes #1503

This commit is contained in:
Dave Halter
2020-03-11 19:26:42 +01:00
parent 91857c2c0a
commit 9c77113e21
3 changed files with 8 additions and 3 deletions

View File

@@ -131,7 +131,7 @@ class Completion:
if string is not None and not prefixed_completions: if string is not None and not prefixed_completions:
prefixed_completions = list(complete_file_name( prefixed_completions = list(complete_file_name(
self._inference_state, self._module_context, start_leaf, string, self._inference_state, self._module_context, start_leaf, quote, string,
self._like_name, self._signatures_callback, self._like_name, self._signatures_callback,
self._code_lines, self._original_position, self._code_lines, self._original_position,
self._fuzzy self._fuzzy

View File

@@ -11,7 +11,7 @@ class PathName(StringName):
api_type = u'path' api_type = u'path'
def complete_file_name(inference_state, module_context, start_leaf, string, def complete_file_name(inference_state, module_context, start_leaf, quote, string,
like_name, signatures_callback, code_lines, position, fuzzy): like_name, signatures_callback, code_lines, position, fuzzy):
# First we want to find out what can actually be changed as a name. # First we want to find out what can actually be changed as a name.
like_name_length = len(os.path.basename(string)) like_name_length = len(os.path.basename(string))
@@ -40,11 +40,12 @@ def complete_file_name(inference_state, module_context, start_leaf, string,
# OSError: [Errno 36] File name too long: '...' # OSError: [Errno 36] File name too long: '...'
except (FileNotFoundError, OSError): except (FileNotFoundError, OSError):
return return
quote_ending = get_quote_ending(quote, code_lines, position)
for entry in listed: for entry in listed:
name = entry.name name = entry.name
if match(name, must_start_with, fuzzy=fuzzy): if match(name, must_start_with, fuzzy=fuzzy):
if is_in_os_path_join or not entry.is_dir(): if is_in_os_path_join or not entry.is_dir():
name += get_quote_ending(start_leaf.value, code_lines, position) name += quote_ending
else: else:
name += os.path.sep name += os.path.sep

View File

@@ -299,6 +299,10 @@ def test_file_path_completions(Script, file, code, column, expected):
assert [c.complete for c in comps] == expected assert [c.complete for c in comps] == expected
def test_file_path_should_have_completions(Script):
assert Script('r"').complete() # See GH #1503
_dict_keys_completion_tests = [ _dict_keys_completion_tests = [
('ints[', 5, ['1', '50', Ellipsis]), ('ints[', 5, ['1', '50', Ellipsis]),
('ints[]', 5, ['1', '50', Ellipsis]), ('ints[]', 5, ['1', '50', Ellipsis]),