forked from VimPlug/jedi
working extract refactorings, affects #103
This commit is contained in:
@@ -106,11 +106,41 @@ def extract(script, new_name):
|
|||||||
positions = [s] + call.execution.arr_el_pos + [exe.end_pos]
|
positions = [s] + call.execution.arr_el_pos + [exe.end_pos]
|
||||||
start_pos = positions[index]
|
start_pos = positions[index]
|
||||||
end_pos = positions[index + 1][0], positions[index + 1][1] - 1
|
end_pos = positions[index + 1][0], positions[index + 1][1] - 1
|
||||||
text = new_lines[start_pos[0] - 1][start_pos[1]:end_pos[1]]
|
|
||||||
|
# take full line if the start line is different from end line
|
||||||
|
e = end_pos[1] if end_pos[0] == start_pos[0] else None
|
||||||
|
start_line = new_lines[start_pos[0] - 1]
|
||||||
|
text = start_line[start_pos[1]:e]
|
||||||
for l in range(start_pos[0], end_pos[0] - 1):
|
for l in range(start_pos[0], end_pos[0] - 1):
|
||||||
text
|
text += '\n' + l
|
||||||
new_lines[start_pos[0]:end_pos[0]-1]
|
if e is None:
|
||||||
text = user_stmt.start_pos[1], user_stmt.end_pos[1]
|
end_line = new_lines[end_pos[0] - 1]
|
||||||
|
text += '\n' + end_line[:end_pos[1]]
|
||||||
|
|
||||||
|
|
||||||
|
# remove code from new lines
|
||||||
|
t = text.lstrip()
|
||||||
|
del_start = start_pos[1] + len(text) - len(t)
|
||||||
|
|
||||||
|
text = t.rstrip()
|
||||||
|
del_end = len(t) - len(text)
|
||||||
|
if e is None:
|
||||||
|
new_lines[end_pos[0] - 1] = end_line[end_pos[1] - del_end:]
|
||||||
|
e = len(start_line)
|
||||||
|
else:
|
||||||
|
e = e - del_end
|
||||||
|
start_line = start_line[:del_start] + new_name + start_line[e:]
|
||||||
|
new_lines[start_pos[0] - 1] = start_line
|
||||||
|
new_lines[start_pos[0]:end_pos[0]-1] = []
|
||||||
|
|
||||||
|
# add parentheses in multiline case
|
||||||
|
open_brackets = ['(', '[', '{']
|
||||||
|
close_brackets = [')', ']', '}']
|
||||||
|
if '\n' in text and not (text[0] in open_brackets and text[-1] ==
|
||||||
|
close_brackets[open_brackets.index(text[0])]):
|
||||||
|
text = '(%s)' % text
|
||||||
|
|
||||||
|
# add new line before statement
|
||||||
new = "%s%s = %s" % (' ' * indent, new_name, text)
|
new = "%s%s = %s" % (' ' * indent, new_name, text)
|
||||||
new_lines.insert(line_index, new)
|
new_lines.insert(line_index, new)
|
||||||
dct[script.source_path] = script.source_path, old_lines, new_lines
|
dct[script.source_path] = script.source_path, old_lines, new_lines
|
||||||
|
|||||||
@@ -1,18 +1,21 @@
|
|||||||
# --- simple
|
# --- simple
|
||||||
def test():
|
def test():
|
||||||
#? 25 a
|
#? 25 a
|
||||||
return test(1, (30 + b, c) + 1)
|
return test(100, (30 + b, c) + 1)
|
||||||
|
|
||||||
# +++
|
# +++
|
||||||
def test():
|
def test():
|
||||||
a = (30 + b, c) + 1
|
a = (30 + b, c) + 1
|
||||||
return test(a)
|
return test(100, a)
|
||||||
|
|
||||||
# --- multiline
|
# --- multiline
|
||||||
def test():
|
def test():
|
||||||
#? 30 x
|
#? 30 x
|
||||||
return test(1, (30 + b, c) + 1)
|
return test(1, (30 + b, c)
|
||||||
|
+ 1)
|
||||||
# +++
|
# +++
|
||||||
def test():
|
def test():
|
||||||
x = (30 + b, c) + 1
|
x = ((30 + b, c) + 1
|
||||||
return test(x)
|
+ 1)
|
||||||
|
return test(x
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user