Commit Graph

12 Commits

Author SHA1 Message Date
dianne
8dc64a405d "classic2021" and "structural2021" rulesets: add eat-inherited-ref-alone deref rules 2025-02-18 17:44:28 -08:00
dianne
e24833a4a8 add test revisions for old-edition behavior of feature gates
This also adds `#[cfg]` attributes to tests for bindings' types,
to make it visually clearer which revisions type successfully.
2025-02-18 17:44:28 -08:00
dianne
4ed44c9bd6 add a stable edition 2021 revision to pattern typing tests
This serves two purposes.

First, they're additional tests that stable Rust behavior hasn't been
messed with. There's plenty of other pattern tests, so this is less
important, but these at least are targeted at what's being changed.

Second, this helps document exactly where the new rulesets agree and
disagree with stable pattern typing. This will be especially important
after the new rules for old editions are updated, since they need to be
strictly more permissive; any patterns well-typed on stable should also
be well-typed with the same resultant bindings on the (upcoming) new new
old-edition rules.

The unusual test ordering on `borrowck-errors.rs` and
`ref-binding-on-inh-ref-errors.rs` are to hopefully reduce how much
adding new tests will mess with line numbers in their stderr.
2025-01-21 05:17:22 -08:00
dianne
afd976b2b0 add more information to old tests 2025-01-21 05:17:22 -08:00
dianne
fdcbd7111b minor test cleanup
- Removes some excess parens

- Removes 3 duplicated tests
2025-01-21 05:17:22 -08:00
dianne
3f9b198dcb rename tests' revisions to allow testing multiple editions 2025-01-20 20:19:11 -08:00
dianne
586ff158a2 "structural" ruleset: match against the inherited ref when a reference pattern doesn't match the mutability of an inner reference
This is the `Deref(EatInner, FallbackToOuter)` rule in Typing Rust Patterns.
2025-01-20 16:03:37 -08:00
dianne
f8315ae3b5 "structural" ruleset: use the "classic" ruleset's diagnostic and fallback for inherited ref mutability mismatches
I think the diagnostic could use some work, but it's more helpful than
the alternative. The previous error was misleading, since it ignored the
inherited reference altogether.
2025-01-20 16:03:37 -08:00
dianne
c03769524b "structural" ruleset: account for dbm mutability cap in Deref(EatInner) rules 2025-01-20 16:03:37 -08:00
dianne
c57708a58d add more tests where the rulesets disagree
These come directly from the "Compare" tab of Typing Rust Patterns,
though they had to be split across multiple files. They're not
comprehensive, but they do provide some previously-missing coverage and
are easier to check against the spec. Possibly they should be split up
some more, since `pattern-errors.rs` is getting a bit unwieldy, but I'm
not sure how best to go about that.
2025-01-20 16:03:37 -08:00
dianne
a56f9ad574 remove Rule 3 from ref_pat_eat_one_layer_2024
The debug assertion ensuring that the pattern mutability cap holds
assumes the presence of Rule 3, so it now checks for that. I
considered going back to only tracking the mutability cap when Rule 3
is present, but since the mutability cap is used in Rule 5's
implementation too, the debug assertion would still need to check
which typing rules are present.

This also required some changes to tests:
- `ref_pat_eat_one_layer_2021.rs` had a test for Rule 3; I'll be
handling tests for earlier editions in a later commit, so as a stopgap
I've #[cfg]ed it out.
- One test case had to be moved from `well-typed-edition-2024.rs` to
`borrowck-errors.rs` in order to get borrowck to run on it and emit an
error.
2025-01-20 16:03:36 -08:00
dianne
b350d94877 reorganize and comment some of the experimental pattern typing tests
This only includes previously existing tests (with a couple duplicates
removed). I plan on adding more comprarisons where the rules differ
once I've updated the pattern typing rules. I also haven't touched the
tests for new rules in old editions; I'll see how best to handle that
once those rules are updated as well.
2025-01-08 00:07:18 -08:00