]> git.lizzy.rs Git - rust.git/commit
'Fill match arms' should work with existing match arms
authorSteffen Lyngbaek <steffenlyngbaek@gmail.com>
Tue, 17 Mar 2020 06:30:25 +0000 (23:30 -0700)
committerSteffen Lyngbaek <steffenlyngbaek@gmail.com>
Thu, 19 Mar 2020 18:47:33 +0000 (11:47 -0700)
commit6087c014608108e2b971608e214a74759743e95e
treee85c417d692b496fe1e0f50309e05afc72773915
parent1ba03c6995015b3143a417ed07437f0c9028a97d
'Fill match arms' should work with existing match arms

Addresses #3039

This essentially adds missing match arms. The algorithm for this
can get complicated rather quickly so bail in certain conditions
and rely on a PlaceholderPat.

The algorighm works as such:
- Iterate through the Enum Def Variants
- Attempt to see if the variant already exists as a match arm
- If yes, skip the enum variant. If no, include it.
- If it becomes complicated, rather than exhaustively deal with every
  branch, mark it as a "partial match" and simply include the
  placeholder.

  Conditions for "complication":
  - The match arm contains a match guard
  - Any kind of nested destrucuring

Order the resulting merged match branches as such:
1. Provided match arms
2. Missing enum variant branch arms
3. End with Placeholder if required

- Add extra tests
crates/ra_assists/src/handlers/fill_match_arms.rs