Skip to content

Commit 16a39bb

Browse files
committed
Streamline lex_token_trees error handling.
- Use iterators instead of `for` loops. - Use `if`/`else` instead of `match`.
1 parent 4cd2840 commit 16a39bb

File tree

1 file changed

+14
-20
lines changed
  • compiler/rustc_parse/src/lexer

1 file changed

+14
-20
lines changed

compiler/rustc_parse/src/lexer/mod.rs

+14-20
Original file line numberDiff line numberDiff line change
@@ -72,27 +72,21 @@ pub(crate) fn lex_token_trees<'psess, 'src>(
7272
let (_open_spacing, stream, res) = lexer.lex_token_trees(/* is_delimited */ false);
7373
let unmatched_delims = lexer.diag_info.unmatched_delims;
7474

75-
match res {
76-
Ok(()) if unmatched_delims.is_empty() => Ok(stream),
77-
_ => {
78-
// Return error if there are unmatched delimiters or unclosed delimiters.
79-
// We emit delimiter mismatch errors first, then emit the unclosing delimiter mismatch
80-
// because the delimiter mismatch is more likely to be the root cause of error
81-
82-
let mut buffer = Vec::with_capacity(1);
83-
for unmatched in unmatched_delims {
84-
if let Some(err) = make_unclosed_delims_error(unmatched, psess) {
85-
buffer.push(err);
86-
}
87-
}
88-
if let Err(errs) = res {
89-
// Add unclosing delimiter or diff marker errors
90-
for err in errs {
91-
buffer.push(err);
92-
}
93-
}
94-
Err(buffer)
75+
if res.is_ok() && unmatched_delims.is_empty() {
76+
Ok(stream)
77+
} else {
78+
// Return error if there are unmatched delimiters or unclosed delimiters.
79+
// We emit delimiter mismatch errors first, then emit the unclosing delimiter mismatch
80+
// because the delimiter mismatch is more likely to be the root cause of error
81+
let mut buffer: Vec<_> = unmatched_delims
82+
.into_iter()
83+
.filter_map(|unmatched_delim| make_unclosed_delims_error(unmatched_delim, psess))
84+
.collect();
85+
if let Err(errs) = res {
86+
// Add unclosing delimiter or diff marker errors
87+
buffer.extend(errs);
9588
}
89+
Err(buffer)
9690
}
9791
}
9892

0 commit comments

Comments
 (0)