Skip to content

Code action for merging case clauses #4983

@matiascr

Description

@matiascr

To create a code action that merges two or more case clauses if their right-hand sides are equivalent:

pub type CaseVariants {
  Variant1
  Variant2
  Variant3(String)
  Variant4(String, Int)
}

pub fn main(case_variant) {
  case case_variant {
    Variant1 -> first_variants()
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    Variant2 -> first_variants()
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    Variant3(a) -> a
    Variant4(a, _) -> a
  }
}

Turns into:

pub fn main(case_variant) {
  case case_variant {
    Variant1 | Variant2 -> first_variants()
    Variant3(a) -> a
    Variant4(a, _) -> a
  }
}

A more complicated (and optimistic 😄) example

pub type CaseVariants {
  Variant1
  Variant2
  Variant3(String)
  Variant4(String, Int)
}

pub fn main(case_variant) {
  case case_variant {
    Variant1 -> "Variant1"
    Variant2 -> "Variant2"
    Variant3(a) -> a
    ^^^^^^^^^^^^^^^^
    Variant4(string_value, _int_value) -> string_value
    ^^^^^^^^^^^^^^^^^^^
  }
}

Turns into:

pub fn main(case_variant) {
  case case_variant {
    Variant1 -> "Variant1"
    Variant2 -> "Variant2"
    Variant3(a) | Variant4(a, _) -> a
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedContributions encouraged

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions