1
Fork 0

Exit when there are unmatched delims to avoid noisy diagnostics

This commit is contained in:
yukang 2023-02-28 07:55:19 +00:00
parent f0bc76ac41
commit f01d0c02e7
99 changed files with 254 additions and 1279 deletions

View file

@ -204,16 +204,23 @@ pub fn maybe_file_to_stream(
lexer::parse_token_trees(sess, src.as_str(), source_file.start_pos, override_span);
match token_trees {
Ok(stream) => Ok((stream, unmatched_braces)),
Err(err) => {
Ok(stream) if unmatched_braces.is_empty() => Ok((stream, unmatched_braces)),
_ => {
// Return error if there are unmatched delimiters or unclosng delimiters.
// We emit delimiter mismatch errors first, then emit the unclosing delimiter mismatch
// because the delimiter mismatch is more likely to be the root cause of the
let mut buffer = Vec::with_capacity(1);
err.buffer(&mut buffer);
// Not using `emit_unclosed_delims` to use `db.buffer`
for unmatched in unmatched_braces {
if let Some(err) = make_unclosed_delims_error(unmatched, &sess) {
err.buffer(&mut buffer);
}
}
if let Err(err) = token_trees {
// Add unclosing delimiter error
err.buffer(&mut buffer);
}
Err(buffer)
}
}