On mismatched delimiters, only point at empty blocks that are in the same line

This commit is contained in:
Esteban Küber 2020-03-03 15:07:33 -08:00
parent 360e42de82
commit 81f435dd37
2 changed files with 8 additions and 9 deletions

View File

@ -40,6 +40,7 @@ struct TokenTreesReader<'a> {
/// Used only for error recovery when arriving to EOF with mismatched braces. /// Used only for error recovery when arriving to EOF with mismatched braces.
matching_delim_spans: Vec<(token::DelimToken, Span, Span)>, matching_delim_spans: Vec<(token::DelimToken, Span, Span)>,
last_unclosed_found_span: Option<Span>, last_unclosed_found_span: Option<Span>,
/// Collect empty block spans that might have been auto-inserted by editors.
last_delim_empty_block_spans: FxHashMap<token::DelimToken, Span>, last_delim_empty_block_spans: FxHashMap<token::DelimToken, Span>,
} }
@ -138,7 +139,11 @@ impl<'a> TokenTreesReader<'a> {
if tts.is_empty() { if tts.is_empty() {
let empty_block_span = open_brace_span.to(close_brace_span); let empty_block_span = open_brace_span.to(close_brace_span);
self.last_delim_empty_block_spans.insert(delim, empty_block_span); if !sm.is_multiline(empty_block_span) {
// Only track if the block is in the form of `{}`, otherwise it is
// likely that it was written on purpose.
self.last_delim_empty_block_spans.insert(delim, empty_block_span);
}
} }
if self.open_braces.is_empty() { if self.open_braces.is_empty() {

View File

@ -1,14 +1,8 @@
error: unexpected closing delimiter: `}` error: unexpected closing delimiter: `}`
--> $DIR/mismatched-delim-brace-empty-block.rs:5:1 --> $DIR/mismatched-delim-brace-empty-block.rs:5:1
| |
LL | fn main() { LL | }
| ___________- | ^ unexpected closing delimiter
LL | |
LL | | }
| |_- this block is empty, you might have not meant to close it
LL | let _ = ();
LL | }
| ^ unexpected closing delimiter
error: aborting due to previous error error: aborting due to previous error