diff options
| author | yukang <moorekang@gmail.com> | 2023-02-28 07:55:19 +0000 |
|---|---|---|
| committer | yukang <moorekang@gmail.com> | 2023-02-28 07:55:19 +0000 |
| commit | f01d0c02e7fccc866c3adb7b95e96ec9b4974a37 (patch) | |
| tree | 62799a2d945560f70d49742c5c65de37696cf271 /compiler/rustc_parse/src/lib.rs | |
| parent | f0bc76ac41a0a832c9ee621e31aaf1f515d3d6a5 (diff) | |
| download | rust-f01d0c02e7fccc866c3adb7b95e96ec9b4974a37.tar.gz rust-f01d0c02e7fccc866c3adb7b95e96ec9b4974a37.zip | |
Exit when there are unmatched delims to avoid noisy diagnostics
Diffstat (limited to 'compiler/rustc_parse/src/lib.rs')
| -rw-r--r-- | compiler/rustc_parse/src/lib.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/compiler/rustc_parse/src/lib.rs b/compiler/rustc_parse/src/lib.rs index 6f37e9758fc..28a771ac948 100644 --- a/compiler/rustc_parse/src/lib.rs +++ b/compiler/rustc_parse/src/lib.rs @@ -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) } } |
