1
0
forked from VimPlug/jedi

Make most dict completions possible

This commit is contained in:
Dave Halter
2019-12-30 14:15:32 +01:00
parent 9fa4811425
commit 46ac4371df
4 changed files with 23 additions and 14 deletions

View File

@@ -432,22 +432,31 @@ def _gather_nodes(stack):
return nodes
_string_start = re.compile(r'^\w*(\'{3}|"{3}|\'|")')
def _extract_string_while_in_string(leaf, position):
def return_part_of_leaf(leaf):
kwargs = {}
if leaf.line == position[0]:
kwargs['endpos'] = position[1] - leaf.column
match = _string_start.match(leaf.value, **kwargs)
start = match.group(0)
if leaf.line == position[0] and position[1] < leaf.column + match.end():
return None, None, None
return cut_value_at_position(leaf, position)[match.end():], leaf, start
if position < leaf.start_pos:
return None, None, None
if leaf.type == 'string':
match = re.match(r'^\w*(\'{3}|"{3}|\'|")', leaf.value)
start = match.group(0)
if leaf.line == position[0] and position[1] < leaf.column + match.end():
return None, None, None
if leaf.end_pos[0] == position[0] and position[1] > leaf.end_pos[1] - len(start):
return None, None, None
return cut_value_at_position(leaf, position)[match.end():], leaf, start
return return_part_of_leaf(leaf)
leaves = []
while leaf is not None and leaf.line == position[0]:
if leaf.type == 'error_leaf' and ('"' in leaf.value or "'" in leaf.value):
if len(leaf.value) > 1:
return return_part_of_leaf(leaf)
prefix_leaf = None
if not leaf.prefix:
prefix_leaf = leaf.get_previous_leaf()

View File

@@ -14,7 +14,7 @@ class PathName(StringName):
def complete_file_name(inference_state, module_context, start_leaf, string,
like_name, signatures_callback, code_lines, position, fuzzy):
# First we want to find out what can actually be changed as a name.
like_name_length = len(os.path.basename(string) + like_name)
like_name_length = len(os.path.basename(string))
addition = _get_string_additions(module_context, start_leaf)
if addition is None:
@@ -23,7 +23,7 @@ def complete_file_name(inference_state, module_context, start_leaf, string,
# Here we use basename again, because if strings are added like
# `'foo' + 'bar`, it should complete to `foobar/`.
must_start_with = os.path.basename(string) + like_name
must_start_with = os.path.basename(string)
string = os.path.dirname(string)
sigs = signatures_callback(*position)