mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
7fc2b33722
Point at `const` definition when used instead of a binding in a `let` statement Modify `PatKind::InlineConstant` to be `ExpandedConstant` standing in not only for inline `const` blocks but also for `const` items. This allows us to track named `const`s used in patterns when the pattern is a single binding. When we detect that there is a refutable pattern involving a `const` that could have been a binding instead, we point at the `const` item, and suggest renaming. We do this for both `let` bindings and `match` expressions missing a catch-all arm if there's at least one single binding pattern referenced. After: ``` error[E0005]: refutable pattern in local binding --> $DIR/bad-pattern.rs:19:13 | LL | const PAT: u32 = 0; | -------------- missing patterns are not covered because `PAT` is interpreted as a constant pattern, not a new variable ... LL | let PAT = v1; | ^^^ pattern `1_u32..=u32::MAX` not covered | = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html = note: the matched value is of type `u32` help: introduce a variable instead | LL | let PAT_var = v1; | ~~~~~~~ ``` Before: ``` error[E0005]: refutable pattern in local binding --> $DIR/bad-pattern.rs:19:13 | LL | let PAT = v1; | ^^^ | | | pattern `1_u32..=u32::MAX` not covered | missing patterns are not covered because `PAT` is interpreted as a constant pattern, not a new variable | help: introduce a variable instead: `PAT_var` | = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html = note: the matched value is of type `u32` ``` CC #132582. |
||
---|---|---|
.. | ||
auxiliary | ||
bindings-after-at | ||
deref-patterns | ||
move-ref-patterns | ||
rfc-3627-match-ergonomics-2024 | ||
usefulness | ||
at-in-struct-patterns.rs | ||
at-in-struct-patterns.stderr | ||
box-pattern-type-mismatch.rs | ||
box-pattern-type-mismatch.stderr | ||
by-move-pattern-binding.rs | ||
by-move-pattern-binding.stderr | ||
byte-string-inference.rs | ||
complexity_limit.rs | ||
complexity_limit.stderr | ||
fn-in-pat.rs | ||
fn-in-pat.stderr | ||
for-loop-bad-item.rs | ||
for-loop-bad-item.stderr | ||
ignore-all-the-things.rs | ||
inc-range-pat.rs | ||
incorrect-placement-of-pattern-modifiers.fixed | ||
incorrect-placement-of-pattern-modifiers.rs | ||
incorrect-placement-of-pattern-modifiers.stderr | ||
integer-range-binding.rs | ||
issue-6449.rs | ||
issue-8351-1.rs | ||
issue-8351-2.rs | ||
issue-10392.rs | ||
issue-11577.rs | ||
issue-12582.rs | ||
issue-14221.rs | ||
issue-14221.stderr | ||
issue-15080.rs | ||
issue-17718-patterns.rs | ||
issue-17718-patterns.stderr | ||
issue-22546.rs | ||
issue-22546.stderr | ||
issue-27320.rs | ||
issue-28992-empty.rs | ||
issue-28992-empty.stderr | ||
issue-52240.rs | ||
issue-52240.stderr | ||
issue-66270-pat-struct-parser-recovery.rs | ||
issue-66270-pat-struct-parser-recovery.stderr | ||
issue-67037-pat-tup-scrut-ty-diff-less-fields.rs | ||
issue-67037-pat-tup-scrut-ty-diff-less-fields.stderr | ||
issue-67776-match-same-name-enum-variant-refs.rs | ||
issue-67776-match-same-name-enum-variant-refs.stderr | ||
issue-72565.rs | ||
issue-72565.stderr | ||
issue-72574-1.rs | ||
issue-72574-1.stderr | ||
issue-72574-2.rs | ||
issue-72574-2.stderr | ||
issue-74539.rs | ||
issue-74539.stderr | ||
issue-74702.rs | ||
issue-74702.stderr | ||
issue-74954.rs | ||
issue-80186-mut-binding-help-suggestion.rs | ||
issue-80186-mut-binding-help-suggestion.stderr | ||
issue-88074-pat-range-type-inference-err.rs | ||
issue-88074-pat-range-type-inference-err.stderr | ||
issue-88074-pat-range-type-inference.rs | ||
issue-92074-macro-ice.rs | ||
issue-92074-macro-ice.stderr | ||
issue-94866.rs | ||
issue-94866.stderr | ||
issue-95878.rs | ||
issue-95878.stderr | ||
issue-106552.rs | ||
issue-106552.stderr | ||
issue-106862.fixed | ||
issue-106862.rs | ||
issue-106862.stderr | ||
issue-110508.rs | ||
issue-115599.rs | ||
issue-115599.stderr | ||
issue-117626.rs | ||
missing_lifetime.rs | ||
missing_lifetime.stderr | ||
mut_preserve_binding_mode_2021.rs | ||
mut_preserve_binding_mode_2021.stderr | ||
mut_preserve_binding_mode_2024.rs | ||
mut-ref-mut-2021.rs | ||
mut-ref-mut-2021.stderr | ||
no_ref_mut_behind_and.rs | ||
no-match-tuple-variant-self-ctor.rs | ||
no-match-tuple-variant-self-ctor.struct_.stderr | ||
no-match-tuple-variant-self-ctor.tuple.stderr | ||
no-patterns-in-args-2.rs | ||
no-patterns-in-args-2.stderr | ||
no-patterns-in-args.rs | ||
no-patterns-in-args.stderr | ||
non-constant-in-const-path.rs | ||
non-constant-in-const-path.stderr | ||
non-structural-match-types.rs | ||
non-structural-match-types.stderr | ||
pat-shadow-in-nested-binding.rs | ||
pat-shadow-in-nested-binding.stderr | ||
pat-struct-field-expr-has-type.rs | ||
pat-struct-field-expr-has-type.stderr | ||
pat-tuple-bad-type.rs | ||
pat-tuple-bad-type.stderr | ||
pat-tuple-field-count-cross.rs | ||
pat-tuple-field-count-cross.stderr | ||
pat-tuple-overfield.rs | ||
pat-tuple-overfield.stderr | ||
pat-tuple-underfield.rs | ||
pat-tuple-underfield.stderr | ||
pat-type-err-formal-param.rs | ||
pat-type-err-formal-param.stderr | ||
pat-type-err-let-stmt.rs | ||
pat-type-err-let-stmt.stderr | ||
patkind-litrange-no-expr.rs | ||
patkind-litrange-no-expr.stderr | ||
patkind-ref-binding-issue-114896.fixed | ||
patkind-ref-binding-issue-114896.rs | ||
patkind-ref-binding-issue-114896.stderr | ||
patkind-ref-binding-issue-122415.fixed | ||
patkind-ref-binding-issue-122415.rs | ||
patkind-ref-binding-issue-122415.stderr | ||
pattern-bad-ref-box-order.fixed | ||
pattern-bad-ref-box-order.rs | ||
pattern-bad-ref-box-order.stderr | ||
pattern-binding-disambiguation.rs | ||
pattern-binding-disambiguation.stderr | ||
pattern-error-continue.rs | ||
pattern-error-continue.stderr | ||
pattern-ident-path-generics.rs | ||
pattern-ident-path-generics.stderr | ||
pattern-tyvar-2.rs | ||
pattern-tyvar-2.stderr | ||
pattern-tyvar.rs | ||
pattern-tyvar.stderr | ||
patterns-dont-match-nt-statement.rs | ||
range-pattern-meant-to-be-slice-rest-pattern.rs | ||
range-pattern-meant-to-be-slice-rest-pattern.stderr | ||
rest-pat-semantic-disallowed.rs | ||
rest-pat-semantic-disallowed.stderr | ||
rest-pat-syntactic.rs | ||
rest-pat-syntactic.stderr | ||
size-and-align.rs | ||
skipped-ref-pats-issue-125058.rs | ||
skipped-ref-pats-issue-125058.stderr | ||
slice-array-infer.rs | ||
slice-pattern-refutable.rs | ||
slice-pattern-refutable.stderr | ||
slice-patterns-ambiguity.rs | ||
slice-patterns-ambiguity.stderr | ||
slice-patterns-irrefutable.rs | ||
slice-patterns-irrefutable.stderr | ||
slice-patterns-nested.rs | ||
struct-parser-recovery-issue-126344.rs | ||
struct-parser-recovery-issue-126344.stderr | ||
suggest-adding-appropriate-missing-pattern-excluding-comments.fixed | ||
suggest-adding-appropriate-missing-pattern-excluding-comments.rs | ||
suggest-adding-appropriate-missing-pattern-excluding-comments.stderr | ||
type_mismatch.rs | ||
type_mismatch.stderr |