summary refs log tree commit diff
path: root/tests/ui/pattern
AgeCommit message (Collapse)AuthorLines
2024-11-20Rollup merge of #132708 - estebank:const-as-binding, r=NadrierilMatthias Krüger-0/+84
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.
2024-11-17Unify expanded constants and named constants in `PatKind`Esteban Küber-0/+84
2024-11-16Also check if let chains with multiple lets in these two testsest31-5/+15
2024-11-08Get rid of check_opaque_type_well_formedMichael Goulet-28/+28
2024-10-24add third help hint to diagnostic error E0027Duncan Proctor-0/+24
2024-10-16Rollup merge of #131381 - Nadrieril:min-match-ergonomics, r=pnkfelixMatthias Krüger-211/+699
Implement edition 2024 match ergonomics restrictions This implements the minimalest version of [match ergonomics for edition 2024](https://rust-lang.github.io/rfcs/3627-match-ergonomics-2024.html). This minimal version makes it an error to ever reset the default binding mode. The implemented proposal is described precisely [here](https://hackmd.io/zUqs2ISNQ0Wrnxsa9nhD0Q#RFC-3627-nano), where it is called "RFC 3627-nano". Rules: - Rule 1C: When the DBM (default binding mode) is not `move` (whether or not behind a reference), writing `mut`, `ref`, or `ref mut` on a binding is an error. - Rule 2C: Reference patterns can only match against references in the scrutinee when the DBM is `move`. This minimal version is forward-compatible with the main proposals for match ergonomics 2024: [RFC3627](https://rust-lang.github.io/rfcs/3627-match-ergonomics-2024.html) itself, the alternative [rule 4-early variant](https://rust-lang.github.io/rfcs/3627-match-ergonomics-2024.html), and [others](https://hackmd.io/zUqs2ISNQ0Wrnxsa9nhD0Q). The idea is to give us more time to iron out a final proposal. This includes a migration lint that desugars any offending pattern into one that doesn't make use of match ergonomics. Such patterns have identical meaning across editions. This PR insta-stabilizes the proposed behavior onto edition 2024. r? `@ghost` Tracking: - https://github.com/rust-lang/rust/issues/123076
2024-10-08Change error messageNadrieril-53/+53
2024-10-08Stabilize `min_match_ergonomics_2024`Nadrieril-36/+101
2024-10-08Also disallow `ref`/`ref mut` overriding the binding modeNadrieril-18/+54
2024-10-08Error on resetted binding mode in edition 2024Nadrieril-23/+225
2024-10-07Prepare testsNadrieril-71/+256
2024-09-24Move existing rfc3627 tests to a dedicated folderNadrieril-21/+21
2024-09-23Parser: better error messages for `@` in struct patternsPavel Grigorenko-0/+83
2024-09-13Add a machine-applicable suggestion to "unreachable pattern"Nadrieril-84/+433
2024-09-11Revert warning empty patterns as unreachableNadrieril-427/+57
2024-08-26Don't make pattern nonterminals match statement nonterminalsMichael Goulet-0/+19
2024-08-20Move the "matches no value" note to be a span labelNadrieril-248/+124
2024-08-19Cap the number of patterns pointed to by the lintNadrieril-9/+52
2024-08-19Add a note with a link to explain empty typesNadrieril-17/+148
2024-08-19Reword the "unreachable pattern" explanationsNadrieril-392/+392
2024-08-13Remove a no-longer-true `assert`Nadrieril-95/+132
2024-08-10Test that 0/unknown-length arrays are nonemptyNadrieril-47/+144
2024-08-10Update testsNadrieril-451/+612
2024-08-10Stabilize `min_exhaustive_patterns`Nadrieril-1/+0
2024-08-03Revert "Rollup merge of #126618 - mu001999-contrib:dead/enhance, r=pnkfelix"Michael Goulet-1/+11
This reverts commit 2724aeaaeb127a8073e39461caacbe21a128ce7b, reversing changes made to d929a42a664c026167800801b26d734db925314f.
2024-07-26Peel off explicit (or implicit) deref before suggesting clone on move error ↵Michael Goulet-16/+0
in borrowck
2024-07-24Improve "covered_by_many" errorNadrieril-21/+102
2024-07-24Explain why a given pattern is considered unreachableNadrieril-122/+824
2024-07-21Explain why we require `_` for empty patternsNadrieril-0/+10
2024-07-18avoid creating an Instance only to immediately disassemble it againRalf Jung-41/+0
2024-07-12Make parse error suggestions verbose and fix spansEsteban Küber-6/+32
Go over all structured parser suggestions and make them verbose style. When suggesting to add or remove delimiters, turn them into multiple suggestion parts.
2024-07-11report pat no field error no recoverd struct variantyukang-0/+60
2024-07-04More accurate mutability suggestionEsteban Küber-4/+10
2024-07-04Better span for "make binding mutable" suggestionEsteban Küber-8/+8
2024-06-27Tighten spans for async blocksMichael Goulet-1/+1
2024-06-26Rollup merge of #126925 - surechen:fix_125631, r=compiler-errorsMatthias Krüger-0/+5
Change E0369 to give note informations for foreign items. Change E0369 to give note informations for foreign items. Make it easy for developers to understand why the binop cannot be applied. fixes #125631
2024-06-25Rollup merge of #126618 - mu001999-contrib:dead/enhance, r=pnkfelixMatthias Krüger-11/+1
Mark assoc tys live only if the corresponding trait is live r? ````@pnkfelix````
2024-06-25Change E0369 diagnostic give note information for foreign items.surechen-0/+5
Make it easy for developers to understand why the binop cannot be applied. fixes #125631
2024-06-23Replace `f16` and `f128` pattern matching stubs with real implementationsTrevor Gross-23/+97
This section of code depends on `rustc_apfloat` rather than our internal types, so this is one potential ICE that we should be able to melt now. This also fixes some missing range and match handling in `rustc_middle`.
2024-06-18Mark assoc tys live only if the trait is livemu001999-11/+1
2024-06-13Replace some `Option<Diag>` with `Result<(), Diag>`Oli Scherer-0/+38
2024-06-13Avoid follow-up errors on erroneous patternsOli Scherer-0/+91
2024-06-06Rollup merge of #125168 - ↵Matthias Krüger-49/+13
Jules-Bertholet:match-ergonomics-2024-align-with-rfc, r=Nadrieril Match ergonomics 2024: align implementation with RFC - Remove eat-two-layers (`ref_pat_everywhere`) - Consolidate `mut_preserve_binding_mode_2024` into `ref_pat_eat_one_layer_2024` - `&mut` no longer peels off `&` - Apply "no `ref mut` behind `&`" rule on all editions with `ref_pat_eat_one_layer_2024` - Require `mut_ref` feature gate for all mutable by-reference bindings r? ``@Nadrieril`` cc https://github.com/rust-lang/rust/issues/123076 ``@rustbot`` label A-edition-2024 A-patterns
2024-05-26Auto merge of #124661 - RalfJung:only-structural-consts-in-patterns, r=pnkfelixbors-176/+24
Turn remaining non-structural-const-in-pattern lints into hard errors This completes the implementation of https://github.com/rust-lang/rust/issues/120362 by turning our remaining future-compat lints into hard errors: indirect_structural_match and pointer_structural_match. They have been future-compat lints for a while (indirect_structural_match for many years, pointer_structural_match since Rust 1.75 (released Dec 28, 2023)), and have shown up in dependency breakage reports since Rust 1.78 (just released on May 2, 2024). I don't expect a lot of code will still depend on them, but we will of course do a crater run. A lot of cleanup is now possible in const_to_pat, but that is deferred to a later PR. Fixes https://github.com/rust-lang/rust/issues/70861
2024-05-20Move 100 entries from tests/ui into subdirsJubilee Young-0/+205
- Move super-fast-paren-parsing test into ui/parser - Move stmt_expr_attrs test into ui/feature-gates - Move macro tests into ui/macros - Move global_asm tests into ui/asm - Move env tests into ui/process - Move xcrate tests into ui/cross-crate - Move unop tests into ui/unop - Move backtrace tests into ui/backtrace - Move check-static tests into ui/statics - Move expr tests into ui/expr - Move optimization fuel tests into ui/fuel - Move ffi attribute tests into ui/ffi-attrs - Move suggestion tests into ui/suggestions - Move main tests into ui/fn-main - Move lint tests into ui/lint - Move repr tests into ui/repr - Move intrinsics tests into ui/intrinsics - Move tool lint tests into ui/tool-attributes - Move return tests into ui/return - Move pattern tests into ui/patttern - Move range tests into ui/range - Move foreign-fn tests into ui/foreign - Move orphan-check tests into ui/coherence - Move inference tests into ui/inference - Reduce ROOT_ENTRY_LIMIT
2024-05-15"No `ref mut` behind `&`" on all editionsJules Bertholet-0/+9
2024-05-15Gate implicit mutable by-reference bindings behind `mut ref`Jules Bertholet-49/+4
2024-05-13`rustc_hir_typeck`: Account for `skipped_ref_pats` in `expr_use_visitor`Jules Bertholet-0/+42
Fixes #125058
2024-05-12Match ergonomics 2024: migration lintJules Bertholet-47/+223
Unfortunately, we can't always offer a machine-applicable suggestion when there are subpatterns from macro expansion. Co-Authored-By: Guillaume Boisseau <Nadrieril@users.noreply.github.com>
2024-05-03turn pointer_structural_match into a hard errorRalf Jung-164/+24