diff --git a/src/cleanup_rules/swift/edges.toml b/src/cleanup_rules/swift/edges.toml index 70e0500e9..0d86bf278 100644 --- a/src/cleanup_rules/swift/edges.toml +++ b/src/cleanup_rules/swift/edges.toml @@ -36,3 +36,8 @@ to = ["if_cleanup"] scope = "Parent" from = "statement_cleanup" to = ["guard_cleanup"] + +[[edges]] +scope = "Class" +from = "enum_entry_cleanup" +to = ["enum_entry_cleanup_from_variable"] diff --git a/src/cleanup_rules/swift/rules.toml b/src/cleanup_rules/swift/rules.toml index dd3ec4432..0d1f34659 100644 --- a/src/cleanup_rules/swift/rules.toml +++ b/src/cleanup_rules/swift/rules.toml @@ -431,6 +431,137 @@ query = """( groups = ["guard_cleanup"] replace_node = "guard_block" replace = "@else_block" + +# Next 3 rules cleanup an enum entry from all variables of the enum +# These 3 rules depend on order of the rules in this file + +# +# for @stale_flag = one +# Before +# enum TestEnum { +# var v1: String { +# switch self { +# case .one: +# return "one" +# } +# } +# } +# +# After +# enum TestEnum { +# var v1: String { +# switch self { +# } +# } +# } +[[rules]] +name = "delete_enum_variable_switch" +query = """( +(enum_class_body + (property_declaration + computed_value: (computed_property + (statements + (switch_statement + expr: (self_expression) + (switch_entry + (switch_pattern + (pattern + (simple_identifier) @switch_case))@switch_pattern)@switch_entry))))) + +(#eq? @switch_case "@stale_flag") +)""" +replace_node = "switch_entry" +replace = "" +holes = ["stale_flag"] +groups = ["enum_entry_cleanup_from_variable"] +is_seed_rule = false + +# +# for @stale_flag = one +# Before +# enum TestEnum { +# var v1: String { +# switch self { +# case .two, .one: +# return "one" +# } +# } +# } +# +# After +# enum TestEnum { +# var v1: String { +# switch self { +# case .two, .two: +# return "one" +# } +# } +# } +[[rules]] +name = "delete_enum_variable_switch_previous_available" +query = """( +(enum_class_body + (property_declaration + computed_value: (computed_property + (statements + (switch_statement + expr: (self_expression) + (switch_entry + .(switch_pattern) @previous_pattern + (switch_pattern + (pattern + (simple_identifier) @switch_case))@switch_pattern)))))) + +(#eq? @switch_case "@stale_flag") +)""" +replace_node = "switch_pattern" +replace = "" +holes = ["stale_flag"] +groups = ["enum_entry_cleanup_from_variable"] +is_seed_rule = false + +# +# for @stale_flag = one +# Before +# enum TestEnum { +# var v1: String { +# switch self { +# case .one, .two: +# return "one" +# } +# } +# } +# +# After +# enum TestEnum { +# var v1: String { +# switch self { +# case .two: +# return "one" +# } +# } +# } +[[rules]] +name = "delete_enum_variable_switch_next_available" +query = """( +(enum_class_body + (property_declaration + computed_value: (computed_property + (statements + (switch_statement + expr: (self_expression) + (switch_entry + (switch_pattern + (pattern + (simple_identifier) @switch_case))@switch_pattern + .(switch_pattern) @next_pattern)))))) + +(#eq? @switch_case "@stale_flag") +)""" +replace_node = "switch_pattern" +replace = "" +holes = ["stale_flag"] +groups = ["enum_entry_cleanup_from_variable"] is_seed_rule = false # Dummy rule that acts as a junction for all boolean based cleanups diff --git a/src/tests/test_piranha_swift.rs b/src/tests/test_piranha_swift.rs index a66562a7c..94c4ad198 100644 --- a/src/tests/test_piranha_swift.rs +++ b/src/tests/test_piranha_swift.rs @@ -32,7 +32,7 @@ create_rewrite_tests! { cleanup_comments = true, global_tag_prefix ="universal_tag.".to_string(), cleanup_comments_buffer = 3, delete_file_if_empty= false; - test_cleanup_rules_file: "cleanup_rules", 1, + test_cleanup_rules_file: "cleanup_rules", 2, substitutions = substitutions! { "stale_flag" => "stale_flag_one", "treated" => "true", diff --git a/test-resources/swift/cleanup_rules/configurations/rules.toml b/test-resources/swift/cleanup_rules/configurations/rules.toml index 925b2dc5d..878691032 100644 --- a/test-resources/swift/cleanup_rules/configurations/rules.toml +++ b/test-resources/swift/cleanup_rules/configurations/rules.toml @@ -79,3 +79,15 @@ query = """( replace_node = "variable" replace = "false" groups = ["replace_expression_with_boolean_literal"] + +[[rules]] +name = "delete_enum_entry" +query = """( +(enum_entry + name: (simple_identifier) @enum_case)@enum_entry +(#eq? @enum_case "@stale_flag") +)""" +replace_node = "enum_entry" +replace = "" +holes = ["stale_flag"] +groups = ["enum_entry_cleanup"] diff --git a/test-resources/swift/cleanup_rules/expected/TestEnum.swift b/test-resources/swift/cleanup_rules/expected/TestEnum.swift new file mode 100644 index 000000000..e509e1958 --- /dev/null +++ b/test-resources/swift/cleanup_rules/expected/TestEnum.swift @@ -0,0 +1,83 @@ +enum TestFlag { + case stale_flag_two + case stale_flag_three + + var var1: String { + switch self { + case .stale_flag_two, .stale_flag_three: + return "test" + } + } + + var var2: String { + switch self { + case .stale_flag_three, .stale_flag_two: + return "test" + } + } +} + +enum TestFlag2 { + case stale_flag_two + case stale_flag_three + + var var1: String { + switch self { + case .stale_flag_two, .stale_flag_three: + return "test" + } + } + + var var2: String { + switch self { + case .stale_flag_two, .stale_flag_three: + return "test" + } + } +} + +enum TestFlag3 { + case stale_flag_two + case stale_flag_three + + var var1: String { + switch self { + case .stale_flag_three, .stale_flag_two: + return "test" + } + } + + var var2: String { + switch self { + case .stale_flag_two, .stale_flag_three: + return "test" + } + } +} + + +enum TestFlag4 { + case stale_flag_two + case stale_flag_three + + var var1: String { + switch self { + case .stale_flag_three, .stale_flag_two: + return "test" + } + } + + var var2: String { + switch self { + case .stale_flag_three, .stale_flag_two: + return "test" + } + } + + var var3: String { + switch self { + case .stale_flag_three, .stale_flag_two: + return "test" + } + } +} diff --git a/test-resources/swift/cleanup_rules/input/TestEnum.swift b/test-resources/swift/cleanup_rules/input/TestEnum.swift new file mode 100644 index 000000000..c45c03e79 --- /dev/null +++ b/test-resources/swift/cleanup_rules/input/TestEnum.swift @@ -0,0 +1,93 @@ +enum TestFlag { + case stale_flag_one + case stale_flag_two + case stale_flag_three + + var var1: String { + switch self { + case .stale_flag_two, .stale_flag_one, .stale_flag_three: + return "test" + } + } + + var var2: String { + switch self { + case .stale_flag_one, .stale_flag_three, .stale_flag_two: + return "test" + } + } +} + +enum TestFlag2 { + case stale_flag_one + case stale_flag_two + case stale_flag_three + + var var1: String { + switch self { + case .stale_flag_two, .stale_flag_three, .stale_flag_one: + return "test" + } + } + + var var2: String { + switch self { + case .stale_flag_two, .stale_flag_one, .stale_flag_three: + return "test" + } + } +} + +enum TestFlag3 { + case stale_flag_one + case stale_flag_two + case stale_flag_three + + var var1: String { + switch self { + case .stale_flag_one, .stale_flag_three, .stale_flag_two: + return "test" + } + } + + var var2: String { + switch self { + case .stale_flag_two, .stale_flag_three, .stale_flag_one: + return "test" + } + } +} + + +enum TestFlag4 { + case stale_flag_one + case stale_flag_two + case stale_flag_three + + var var1: String { + switch self { + case .stale_flag_one: + return "test2" + case .stale_flag_three, .stale_flag_two: + return "test" + } + } + + var var2: String { + switch self { + case .stale_flag_one: + return "test2" + case .stale_flag_three, .stale_flag_two: + return "test" + } + } + + var var3: String { + switch self { + case .stale_flag_one: + return "test2" + case .stale_flag_three, .stale_flag_two: + return "test" + } + } +}