Skip to content

Commit afcfb20

Browse files
improved refactor extract variable
1 parent 0257eca commit afcfb20

File tree

4 files changed

+84
-46
lines changed

4 files changed

+84
-46
lines changed

_generated_2018_02_03_at_04_10_17.py renamed to _generated_2018_02_03_at_21_46_10.py

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6531,35 +6531,54 @@ def run(self, edit, **args):
65316531
if result[0]:
65326532
if "body" in result[1]:
65336533
body = result[1]["body"]
6534-
items = Util.nested_lookup("type", ["VariableDeclaration"], body)
6534+
items = Util.nested_lookup("type", ["BlockStatement"], body)
6535+
last_block_statement = None
6536+
last_item = None
6537+
region = None
6538+
65356539
for item in items:
65366540
region = sublime.Region(int(item["range"][0]), int(item["range"][1]))
65376541
if region.contains(selection):
6542+
last_block_statement = region
6543+
last_item = item
6544+
6545+
if last_block_statement:
6546+
for item in last_item["body"]:
6547+
r = sublime.Region(int(item["range"][0]), int(item["range"][1]))
6548+
if r.contains(selection):
6549+
region = r
6550+
break
6551+
else:
6552+
for item in body:
6553+
r = sublime.Region(int(item["range"][0]), int(item["range"][1]))
6554+
if r.contains(selection):
6555+
region = r
6556+
break
6557+
6558+
if region:
6559+
prev_line_is_empty = Util.prev_line_is_empty(view, region)
65386560

6539-
prev_line_is_empty = Util.prev_line_is_empty(view, region)
6540-
6541-
space = Util.get_whitespace_from_line_begin(view, region)
6542-
str_assignement = ("\n" + space if not prev_line_is_empty else "") + "let " + variable_name + " = " + content + "\n" + space
6561+
space = Util.get_whitespace_from_line_begin(view, region)
6562+
str_assignement = ("\n" + space if not prev_line_is_empty else "") + "let " + variable_name + " = " + content + "\n" + space
65436563

6544-
view.erase(edit, selection)
6545-
view.insert(edit, selection.begin(), variable_name)
6546-
view.insert(edit, region.begin(), str_assignement)
6564+
view.erase(edit, selection)
6565+
view.insert(edit, selection.begin(), variable_name)
6566+
view.insert(edit, region.begin(), str_assignement)
65476567

6548-
view.sel().clear()
6549-
view.sel().add_all([
6568+
view.sel().clear()
6569+
view.sel().add_all([
65506570

6551-
sublime.Region(
6552-
selection.begin()+len(str_assignement),
6553-
selection.begin()+len(str_assignement)+len(variable_name)
6554-
),
6571+
sublime.Region(
6572+
selection.begin()+len(str_assignement),
6573+
selection.begin()+len(str_assignement)+len(variable_name)
6574+
),
65556575

6556-
sublime.Region(
6557-
region.begin() + len(("\n" + space if not prev_line_is_empty else "") + "let "), region.begin() + len(("\n" + space if not prev_line_is_empty else "") + "let ") + len(variable_name)
6558-
)
6576+
sublime.Region(
6577+
region.begin() + len(("\n" + space if not prev_line_is_empty else "") + "let "), region.begin() + len(("\n" + space if not prev_line_is_empty else "") + "let ") + len(variable_name)
6578+
)
65596579

6560-
])
6580+
])
65616581

6562-
break
65636582
else:
65646583
sublime.error_message("Cannot introduce variable. Some problems occured.")
65656584

helper/can_i_use/can_i_use_data.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

helper/refactor/refactor_extract_variable_command.py

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -59,35 +59,54 @@ def run(self, edit, **args):
5959
if result[0]:
6060
if "body" in result[1]:
6161
body = result[1]["body"]
62-
items = Util.nested_lookup("type", ["VariableDeclaration"], body)
62+
items = Util.nested_lookup("type", ["BlockStatement"], body)
63+
last_block_statement = None
64+
last_item = None
65+
region = None
66+
6367
for item in items:
6468
region = sublime.Region(int(item["range"][0]), int(item["range"][1]))
6569
if region.contains(selection):
70+
last_block_statement = region
71+
last_item = item
72+
73+
if last_block_statement:
74+
for item in last_item["body"]:
75+
r = sublime.Region(int(item["range"][0]), int(item["range"][1]))
76+
if r.contains(selection):
77+
region = r
78+
break
79+
else:
80+
for item in body:
81+
r = sublime.Region(int(item["range"][0]), int(item["range"][1]))
82+
if r.contains(selection):
83+
region = r
84+
break
85+
86+
if region:
87+
prev_line_is_empty = Util.prev_line_is_empty(view, region)
88+
89+
space = Util.get_whitespace_from_line_begin(view, region)
90+
str_assignement = ("\n" + space if not prev_line_is_empty else "") + "let " + variable_name + " = " + content + "\n" + space
91+
92+
view.erase(edit, selection)
93+
view.insert(edit, selection.begin(), variable_name)
94+
view.insert(edit, region.begin(), str_assignement)
95+
96+
view.sel().clear()
97+
view.sel().add_all([
98+
99+
sublime.Region(
100+
selection.begin()+len(str_assignement),
101+
selection.begin()+len(str_assignement)+len(variable_name)
102+
),
103+
104+
sublime.Region(
105+
region.begin() + len(("\n" + space if not prev_line_is_empty else "") + "let "), region.begin() + len(("\n" + space if not prev_line_is_empty else "") + "let ") + len(variable_name)
106+
)
107+
108+
])
66109

67-
prev_line_is_empty = Util.prev_line_is_empty(view, region)
68-
69-
space = Util.get_whitespace_from_line_begin(view, region)
70-
str_assignement = ("\n" + space if not prev_line_is_empty else "") + "let " + variable_name + " = " + content + "\n" + space
71-
72-
view.erase(edit, selection)
73-
view.insert(edit, selection.begin(), variable_name)
74-
view.insert(edit, region.begin(), str_assignement)
75-
76-
view.sel().clear()
77-
view.sel().add_all([
78-
79-
sublime.Region(
80-
selection.begin()+len(str_assignement),
81-
selection.begin()+len(str_assignement)+len(variable_name)
82-
),
83-
84-
sublime.Region(
85-
region.begin() + len(("\n" + space if not prev_line_is_empty else "") + "let "), region.begin() + len(("\n" + space if not prev_line_is_empty else "") + "let ") + len(variable_name)
86-
)
87-
88-
])
89-
90-
break
91110
else:
92111
sublime.error_message("Cannot introduce variable. Some problems occured.")
93112

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"caption": "Tools", "children": [{"caption": "Npm/Yarn Scripts", "children": [], "id": "npm_scripts"}], "id": "tools"}]
1+
[{"caption": "Tools", "id": "tools", "children": [{"caption": "Npm/Yarn Scripts", "id": "npm_scripts", "children": []}]}]

0 commit comments

Comments
 (0)