never patterns: suggest ! patterns on non-exhaustive matches#121823
never patterns: suggest ! patterns on non-exhaustive matches#121823bors merged 5 commits intorust-lang:masterfrom
! patterns on non-exhaustive matches#121823Conversation
|
|
||
| let mut suggestion = None; | ||
| let sm = cx.tcx.sess.source_map(); | ||
| let suggested_arm = if witnesses.len() < 4 |
There was a problem hiding this comment.
Because that's also the limit used above to choose whether to report patterns or _. You're right this should be made clear, let me clean this
There was a problem hiding this comment.
I just find it strange that this applies to only the never branch, since the other half of the if could suffer from the same problem?
There was a problem hiding this comment.
There were actually three places using this magic threshold ^^' Fixed in the last commit
There was a problem hiding this comment.
If there are more than 4 witnesses we suggest _ => todo!(), it doesn't make sense to remove the todo!() then. And I can't just suggest ! either because the type might not be empty.
d49229f to
1b31e14
Compare
|
@bors r+ |
…ler-errors never patterns: suggest `!` patterns on non-exhaustive matches When a match is non-exhaustive we now suggest never patterns whenever it makes sense. r? `@compiler-errors`
…iaskrgr Rollup of 12 pull requests Successful merges: - rust-lang#121258 (Reject overly generic assoc const binding types) - rust-lang#121823 (never patterns: suggest `!` patterns on non-exhaustive matches) - rust-lang#122060 (Stabilize `imported_main`) - rust-lang#122158 (Provide structured suggestion for `#![feature(foo)]`) - rust-lang#122642 (Improve wording of `Vec::swap_remove`) - rust-lang#122675 (core: document default attribute stabilization) - rust-lang#122687 (`NormalizesTo`: return nested goals to caller) - rust-lang#122691 (Fix ICE: `global_asm!()` Don't Panic When Unable to Evaluate Constant) - rust-lang#122693 (Fix heading anchors in doc pages.) - rust-lang#122699 (Fix a typo in the 1.77.0 relnotes) - rust-lang#122700 (Remove redundant files, rename base riscv32 file) - rust-lang#122701 (Detect allocator for box in `must_not_suspend` lint) r? `@ghost` `@rustbot` modify labels: rollup
…iaskrgr Rollup of 11 pull requests Successful merges: - rust-lang#121258 (Reject overly generic assoc const binding types) - rust-lang#121823 (never patterns: suggest `!` patterns on non-exhaustive matches) - rust-lang#122060 (Stabilize `imported_main`) - rust-lang#122158 (Provide structured suggestion for `#![feature(foo)]`) - rust-lang#122642 (Improve wording of `Vec::swap_remove`) - rust-lang#122675 (core: document default attribute stabilization) - rust-lang#122687 (`NormalizesTo`: return nested goals to caller) - rust-lang#122693 (Fix heading anchors in doc pages.) - rust-lang#122699 (Fix a typo in the 1.77.0 relnotes) - rust-lang#122700 (Remove redundant files, rename base riscv32 file) - rust-lang#122701 (Detect allocator for box in `must_not_suspend` lint) r? `@ghost` `@rustbot` modify labels: rollup
Rollup merge of rust-lang#121823 - Nadrieril:never-witnesses, r=compiler-errors never patterns: suggest `!` patterns on non-exhaustive matches When a match is non-exhaustive we now suggest never patterns whenever it makes sense. r? ``@compiler-errors``
|
This caused a small regression. I'm surprised because a far as I can tell this only touches error paths (except when |
When a match is non-exhaustive we now suggest never patterns whenever it makes sense.
r? @compiler-errors