Skip to content

Commit 2960610

Browse files
committed
Rules for enum cleanup
1 parent 2b8301d commit 2960610

6 files changed

Lines changed: 325 additions & 1 deletion

File tree

src/cleanup_rules/swift/edges.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,8 @@ to = ["if_cleanup"]
3636
scope = "Parent"
3737
from = "statement_cleanup"
3838
to = ["guard_cleanup"]
39+
40+
[[edges]]
41+
scope = "Class"
42+
from = "enum_entry_cleanup"
43+
to = ["enum_entry_cleanup_from_variable"]

src/cleanup_rules/swift/rules.toml

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,137 @@ query = """(
431431
groups = ["guard_cleanup"]
432432
replace_node = "guard_block"
433433
replace = "@else_block"
434+
435+
# Next 3 rules cleanup an enum entry from all variables of the enum
436+
# These 3 rules depend on order of the rules in this file
437+
438+
#
439+
# for @stale_flag = one
440+
# Before
441+
# enum TestEnum {
442+
# var v1: String {
443+
# switch self {
444+
# case .one:
445+
# return "one"
446+
# }
447+
# }
448+
# }
449+
#
450+
# After
451+
# enum TestEnum {
452+
# var v1: String {
453+
# switch self {
454+
# }
455+
# }
456+
# }
457+
[[rules]]
458+
name = "delete_enum_variable_switch"
459+
query = """(
460+
(enum_class_body
461+
(property_declaration
462+
computed_value: (computed_property
463+
(statements
464+
(switch_statement
465+
expr: (self_expression)
466+
(switch_entry
467+
(switch_pattern
468+
(pattern
469+
(simple_identifier) @switch_case))@switch_pattern)@switch_entry)))))
470+
471+
(#eq? @switch_case "@stale_flag")
472+
)"""
473+
replace_node = "switch_entry"
474+
replace = ""
475+
holes = ["stale_flag"]
476+
groups = ["enum_entry_cleanup_from_variable"]
477+
is_seed_rule = false
478+
479+
#
480+
# for @stale_flag = one
481+
# Before
482+
# enum TestEnum {
483+
# var v1: String {
484+
# switch self {
485+
# case .two, .one:
486+
# return "one"
487+
# }
488+
# }
489+
# }
490+
#
491+
# After
492+
# enum TestEnum {
493+
# var v1: String {
494+
# switch self {
495+
# case .two, .two:
496+
# return "one"
497+
# }
498+
# }
499+
# }
500+
[[rules]]
501+
name = "delete_enum_variable_switch_previous_available"
502+
query = """(
503+
(enum_class_body
504+
(property_declaration
505+
computed_value: (computed_property
506+
(statements
507+
(switch_statement
508+
expr: (self_expression)
509+
(switch_entry
510+
.(switch_pattern) @previous_pattern
511+
(switch_pattern
512+
(pattern
513+
(simple_identifier) @switch_case))@switch_pattern))))))
514+
515+
(#eq? @switch_case "@stale_flag")
516+
)"""
517+
replace_node = "switch_pattern"
518+
replace = ""
519+
holes = ["stale_flag"]
520+
groups = ["enum_entry_cleanup_from_variable"]
521+
is_seed_rule = false
522+
523+
#
524+
# for @stale_flag = one
525+
# Before
526+
# enum TestEnum {
527+
# var v1: String {
528+
# switch self {
529+
# case .one, .two:
530+
# return "one"
531+
# }
532+
# }
533+
# }
534+
#
535+
# After
536+
# enum TestEnum {
537+
# var v1: String {
538+
# switch self {
539+
# case .two:
540+
# return "one"
541+
# }
542+
# }
543+
# }
544+
[[rules]]
545+
name = "delete_enum_variable_switch_next_available"
546+
query = """(
547+
(enum_class_body
548+
(property_declaration
549+
computed_value: (computed_property
550+
(statements
551+
(switch_statement
552+
expr: (self_expression)
553+
(switch_entry
554+
(switch_pattern
555+
(pattern
556+
(simple_identifier) @switch_case))@switch_pattern
557+
.(switch_pattern) @next_pattern))))))
558+
559+
(#eq? @switch_case "@stale_flag")
560+
)"""
561+
replace_node = "switch_pattern"
562+
replace = ""
563+
holes = ["stale_flag"]
564+
groups = ["enum_entry_cleanup_from_variable"]
434565
is_seed_rule = false
435566

436567
# Dummy rule that acts as a junction for all boolean based cleanups

src/tests/test_piranha_swift.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ create_rewrite_tests! {
3232
cleanup_comments = true,
3333
global_tag_prefix ="universal_tag.".to_string(),
3434
cleanup_comments_buffer = 3, delete_file_if_empty= false;
35-
test_cleanup_rules_file: "cleanup_rules", 1,
35+
test_cleanup_rules_file: "cleanup_rules", 2,
3636
substitutions = substitutions! {
3737
"stale_flag" => "stale_flag_one",
3838
"treated" => "true",

test-resources/swift/cleanup_rules/configurations/rules.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,15 @@ query = """(
7979
replace_node = "variable"
8080
replace = "false"
8181
groups = ["replace_expression_with_boolean_literal"]
82+
83+
[[rules]]
84+
name = "delete_enum_entry"
85+
query = """(
86+
(enum_entry
87+
name: (simple_identifier) @enum_case)@enum_entry
88+
(#eq? @enum_case "@stale_flag")
89+
)"""
90+
replace_node = "enum_entry"
91+
replace = ""
92+
holes = ["stale_flag"]
93+
groups = ["enum_entry_cleanup"]
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
enum TestFlag {
2+
case stale_flag_two
3+
case stale_flag_three
4+
5+
var var1: String {
6+
switch self {
7+
case .stale_flag_two, .stale_flag_three:
8+
return "test"
9+
}
10+
}
11+
12+
var var2: String {
13+
switch self {
14+
case .stale_flag_three, .stale_flag_two:
15+
return "test"
16+
}
17+
}
18+
}
19+
20+
enum TestFlag2 {
21+
case stale_flag_two
22+
case stale_flag_three
23+
24+
var var1: String {
25+
switch self {
26+
case .stale_flag_two, .stale_flag_three:
27+
return "test"
28+
}
29+
}
30+
31+
var var2: String {
32+
switch self {
33+
case .stale_flag_two, .stale_flag_three:
34+
return "test"
35+
}
36+
}
37+
}
38+
39+
enum TestFlag3 {
40+
case stale_flag_two
41+
case stale_flag_three
42+
43+
var var1: String {
44+
switch self {
45+
case .stale_flag_three, .stale_flag_two:
46+
return "test"
47+
}
48+
}
49+
50+
var var2: String {
51+
switch self {
52+
case .stale_flag_two, .stale_flag_three:
53+
return "test"
54+
}
55+
}
56+
}
57+
58+
59+
enum TestFlag4 {
60+
case stale_flag_two
61+
case stale_flag_three
62+
63+
var var1: String {
64+
switch self {
65+
case .stale_flag_three, .stale_flag_two:
66+
return "test"
67+
}
68+
}
69+
70+
var var2: String {
71+
switch self {
72+
case .stale_flag_three, .stale_flag_two:
73+
return "test"
74+
}
75+
}
76+
77+
var var3: String {
78+
switch self {
79+
case .stale_flag_three, .stale_flag_two:
80+
return "test"
81+
}
82+
}
83+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
enum TestFlag {
2+
case stale_flag_one
3+
case stale_flag_two
4+
case stale_flag_three
5+
6+
var var1: String {
7+
switch self {
8+
case .stale_flag_two, .stale_flag_one, .stale_flag_three:
9+
return "test"
10+
}
11+
}
12+
13+
var var2: String {
14+
switch self {
15+
case .stale_flag_one, .stale_flag_three, .stale_flag_two:
16+
return "test"
17+
}
18+
}
19+
}
20+
21+
enum TestFlag2 {
22+
case stale_flag_one
23+
case stale_flag_two
24+
case stale_flag_three
25+
26+
var var1: String {
27+
switch self {
28+
case .stale_flag_two, .stale_flag_three, .stale_flag_one:
29+
return "test"
30+
}
31+
}
32+
33+
var var2: String {
34+
switch self {
35+
case .stale_flag_two, .stale_flag_one, .stale_flag_three:
36+
return "test"
37+
}
38+
}
39+
}
40+
41+
enum TestFlag3 {
42+
case stale_flag_one
43+
case stale_flag_two
44+
case stale_flag_three
45+
46+
var var1: String {
47+
switch self {
48+
case .stale_flag_one, .stale_flag_three, .stale_flag_two:
49+
return "test"
50+
}
51+
}
52+
53+
var var2: String {
54+
switch self {
55+
case .stale_flag_two, .stale_flag_three, .stale_flag_one:
56+
return "test"
57+
}
58+
}
59+
}
60+
61+
62+
enum TestFlag4 {
63+
case stale_flag_one
64+
case stale_flag_two
65+
case stale_flag_three
66+
67+
var var1: String {
68+
switch self {
69+
case .stale_flag_one:
70+
return "test2"
71+
case .stale_flag_three, .stale_flag_two:
72+
return "test"
73+
}
74+
}
75+
76+
var var2: String {
77+
switch self {
78+
case .stale_flag_one:
79+
return "test2"
80+
case .stale_flag_three, .stale_flag_two:
81+
return "test"
82+
}
83+
}
84+
85+
var var3: String {
86+
switch self {
87+
case .stale_flag_one:
88+
return "test2"
89+
case .stale_flag_three, .stale_flag_two:
90+
return "test"
91+
}
92+
}
93+
}

0 commit comments

Comments
 (0)