Fork of daniellemaywood.uk/gleam โ€” Wasm codegen work
2

Configure Feed

Select the types of activity you want to include in your feed.

๐Ÿ› Recognize missing pattern in alternative as syntax error

+83 -4
+11 -4
compiler-core/src/parse.rs
··· 1609 1609 match &patterns.first() { 1610 1610 Some(lead) => { 1611 1611 let mut alternative_patterns = vec![]; 1612 - loop { 1613 - if self.maybe_one(&Token::Vbar).is_none() { 1614 - break; 1612 + while let Some((vbar_start, vbar_end)) = self.maybe_one(&Token::Vbar) { 1613 + let patterns = self.parse_patterns(PatternPosition::CaseClause)?; 1614 + if patterns.is_empty() { 1615 + return parse_error( 1616 + ParseErrorType::ExpectedPattern, 1617 + SrcSpan { 1618 + start: vbar_start, 1619 + end: vbar_end, 1620 + }, 1621 + ); 1615 1622 } 1616 - alternative_patterns.push(self.parse_patterns(PatternPosition::CaseClause)?); 1623 + alternative_patterns.push(patterns); 1617 1624 } 1618 1625 let guard = self.parse_case_clause_guard()?; 1619 1626 let (arr_s, arr_e) = self
+20
compiler-core/src/parse/snapshots/gleam_core__parse__tests__case_alternative_clause_no_subject.snap
··· 1 + --- 2 + source: compiler-core/src/parse/tests.rs 3 + expression: "\nfn main() {\n case 1 {\n 1 | -> 1\n _ -> 1\n }\n}\n" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + fn main() { 8 + case 1 { 9 + 1 | -> 1 10 + _ -> 1 11 + } 12 + } 13 + 14 + 15 + ----- ERROR 16 + error: Syntax error 17 + โ”Œโ”€ /src/parse/error.gleam:4:9 18 + โ”‚ 19 + 4 โ”‚ 1 | -> 1 20 + โ”‚ ^ I was expecting a pattern after this
+24
compiler-core/src/parse/snapshots/gleam_core__parse__tests__case_clause_no_subject.snap
··· 1 + --- 2 + source: compiler-core/src/parse/tests.rs 3 + expression: "\nfn main() {\n case 1 {\n -> 1\n _ -> 2\n }\n}\n" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + fn main() { 8 + case 1 { 9 + -> 1 10 + _ -> 2 11 + } 12 + } 13 + 14 + 15 + ----- ERROR 16 + error: Syntax error 17 + โ”Œโ”€ /src/parse/error.gleam:4:7 18 + โ”‚ 19 + 4 โ”‚ -> 1 20 + โ”‚ ^^ I was not expecting this 21 + 22 + Found `->`, expected one of: 23 + - `}` 24 + - a case clause
+28
compiler-core/src/parse/tests.rs
··· 1145 1145 } 1146 1146 1147 1147 #[test] 1148 + fn case_clause_no_subject() { 1149 + assert_module_error!( 1150 + " 1151 + fn main() { 1152 + case 1 { 1153 + -> 1 1154 + _ -> 2 1155 + } 1156 + } 1157 + " 1158 + ); 1159 + } 1160 + 1161 + #[test] 1162 + fn case_alternative_clause_no_subject() { 1163 + assert_module_error!( 1164 + " 1165 + fn main() { 1166 + case 1 { 1167 + 1 | -> 1 1168 + _ -> 1 1169 + } 1170 + } 1171 + " 1172 + ); 1173 + } 1174 + 1175 + #[test] 1148 1176 fn use_invalid_assignments() { 1149 1177 assert_module_error!( 1150 1178 "