I’d like to highlight that confusion around let applies to all the examples cited so far. I’d be interested to know whether this is due to the discussion centering around individual patterns, or whether it’s common to think of let as a more strict language construct.
Personally, I share @CAD97’s opinion–I think of destructuring let as an explicit construct, and match as its more powerful (and implicit) cousin. My “inner type checker” wants if let to work the same way, for consistency, but due to its suspension between let and match, I fully expect neither approach to be a perfect fit.
Spitballing how I’d bridge the gap, I’d probably want something like a warn-level lint saying the idiom for let is explicit, and have the lint output the compiler-inferred ergonomics. For if let, I might introduce a “hint” or “info” lint that highlights ergonomics apply without “taking sides”. In terms of RLS support, a refactoring would be presented that switches between ergonomic modes. The warn lint would present the refactoring as a one-way code fix, while the “hint” lint would be bidirectional.