Skip to content

Commit 2b49e23

Browse files
committed
use reduction prefix to decide between variants
We used to also consider precedence, but we are moving away from that approach. Remove some tests that no longer test a relevant edge case.
1 parent 165cb7c commit 2b49e23

File tree

2 files changed

+1
-71
lines changed

2 files changed

+1
-71
lines changed

crates/formality-core/src/parse/parser.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -334,9 +334,7 @@ where
334334
l1.len() > l2.len() && (0..l2.len()).all(|i| l1[i] == l2[i])
335335
}
336336

337-
s_i.precedence.level > s_j.precedence.level
338-
|| (s_i.precedence.level == s_j.precedence.level
339-
&& has_prefix(&s_i.reductions, &s_j.reductions))
337+
has_prefix(&s_i.reductions, &s_j.reductions)
340338
}
341339
}
342340

tests/parser-torture-tests/precedence.rs

Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -59,71 +59,3 @@ fn equal_precedence_panics() {
5959
"#]]
6060
.assert_debug_eq(&term);
6161
}
62-
63-
#[test]
64-
#[should_panic(expected = "extra tokens")]
65-
fn higher_precedence_less_reductions_1() {
66-
// Subtle: In this case, A has higher precedence,
67-
// so even though we COULD parse the entire string,
68-
// we prefer to just parse the first identifier,
69-
// which results in a panic.
70-
//
71-
// In the past, we had a bug in our preference function
72-
// that caused it to be order dependent, sometimes
73-
// panicking and sometimes not. Hence we have a similar
74-
// test with opposite order.
75-
76-
#[term]
77-
pub enum Root {
78-
#[cast]
79-
#[precedence(1)]
80-
A(A),
81-
82-
#[cast]
83-
B(B),
84-
}
85-
86-
#[term($v0)]
87-
pub struct A(Id);
88-
89-
#[term($v0 $v1)]
90-
pub struct B(A, Id);
91-
92-
formality_core::id!(Id);
93-
94-
let term: Root = crate::ptt::term("my String");
95-
expect_test::expect![[r#"
96-
"#]]
97-
.assert_debug_eq(&term);
98-
}
99-
100-
#[test]
101-
#[should_panic(expected = "extra tokens")]
102-
fn higher_precedence_less_reductions_2() {
103-
// Same as `higher_precedence_less_reductions_1` but with
104-
// opposite term order. See explanation in that function.
105-
106-
#[term]
107-
pub enum Root {
108-
#[cast]
109-
B(B),
110-
111-
#[cast]
112-
#[precedence(1)]
113-
A(A),
114-
}
115-
116-
#[term($v0)]
117-
pub struct A(Id);
118-
119-
#[term($v0 $v1)]
120-
pub struct B(A, Id);
121-
122-
formality_core::id!(Id);
123-
124-
let term: Root = crate::ptt::term("my String");
125-
expect_test::expect![[r#"
126-
my String
127-
"#]]
128-
.assert_debug_eq(&term);
129-
}

0 commit comments

Comments
 (0)