From d7b9bba8fdf46129a41e0c44ce479cd925971d2d Mon Sep 17 00:00:00 2001 From: satyam1749 Date: Tue, 28 Feb 2023 02:31:07 +0530 Subject: [PATCH] Rules for enum cleanup --- src/cleanup_rules/swift/edges.toml | 5 + src/cleanup_rules/swift/rules.toml | 131 ++++++++++++++++++ src/tests/test_piranha_swift.rs | 4 +- .../cleanup_rules/configurations/rules.toml | 12 ++ .../cleanup_rules/expected/TestEnum.swift | 83 +++++++++++ .../swift/cleanup_rules/input/TestEnum.swift | 93 +++++++++++++ 6 files changed, 326 insertions(+), 2 deletions(-) create mode 100644 test-resources/swift/cleanup_rules/expected/TestEnum.swift create mode 100644 test-resources/swift/cleanup_rules/input/TestEnum.swift diff --git a/src/cleanup_rules/swift/edges.toml b/src/cleanup_rules/swift/edges.toml index b81b03e4d5..73da53a0d3 100644 --- a/src/cleanup_rules/swift/edges.toml +++ b/src/cleanup_rules/swift/edges.toml @@ -31,3 +31,8 @@ to = ["boolean_literal_cleanup"] scope = "File" from = "statement_cleanup" to = ["if_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 f995691fa9..7e8fcfdb2e 100644 --- a/src/cleanup_rules/swift/rules.toml +++ b/src/cleanup_rules/swift/rules.toml @@ -382,6 +382,137 @@ replace_node = "if_else_block" replace = "@alternatives" is_seed_rule = false +# 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_namespace" +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_namespace_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 = "@previous_pattern" +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_namespace_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 # Let's say you want to define rules from A -> B, A -> C, D -> B, D -> C, ... diff --git a/src/tests/test_piranha_swift.rs b/src/tests/test_piranha_swift.rs index 1a853a3140..94a622371e 100644 --- a/src/tests/test_piranha_swift.rs +++ b/src/tests/test_piranha_swift.rs @@ -32,11 +32,11 @@ 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", "treated_complement" => "false" }, - cleanup_comments = true, delete_file_if_empty= false; + cleanup_comments = true, delete_file_if_empty = false; } diff --git a/test-resources/swift/cleanup_rules/configurations/rules.toml b/test-resources/swift/cleanup_rules/configurations/rules.toml index 97febc5a3e..5315d889db 100644 --- a/test-resources/swift/cleanup_rules/configurations/rules.toml +++ b/test-resources/swift/cleanup_rules/configurations/rules.toml @@ -81,3 +81,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 0000000000..18d61e65c8 --- /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, .stale_flag_two: + 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, .stale_flag_two: + 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 0000000000..c45c03e795 --- /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" + } + } +}