-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
never patterns: suggest !
patterns on non-exhaustive matches
#121823
Conversation
@@ -1020,6 +1020,14 @@ fn report_non_exhaustive_match<'p, 'tcx>( | |||
|
|||
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why < 4?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There were actually three places using this magic threshold ^^' Fixed in the last commit
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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