scalameta / metals-feature-requests

Issue tracker for Metals feature requests
37 stars 4 forks source link

Exhaustive match completion for tuples of enums #400

Open spamegg1 opened 2 months ago

spamegg1 commented 2 months ago

Is your feature request related to a problem? Please describe.

When I use tuples of enums, the exhaustive completion that is offered looks like case Tuple2(_1, _2) =>.

Describe the solution you'd like

It would be nice if Metals can offer the "Cartesian product" of all the possible pairs. For example

enum Rotate:
  case L, R
enum Dir:
  case N, S, E, W

def spam(r: Rotate, d: Dir) = (r, d) match
  case (Rotate.L, Dir.N) => 
  // Metals completes all 8 possibilities in "match (exhaustive)"

Describe alternatives you've considered

n/a

Additional context

n/a

Search terms

enum match exhaustive completion

spamegg1 commented 1 month ago

Just came to my mind... would it be possible to complete them with ??? on all the right sides (so it still compiles)? Just a little comfort / luxury thing.

tgodzik commented 1 month ago

It would be possible, we could even use the snippet syntax to be able to go over each ($1 $2 etc. will allow user to use tab to move to next), though not sure about the case where someone might want an empty case :thinking:

It's worth experimenting, what will be most user friendly.