Skip to content

Commit

Permalink
Rollup merge of rust-lang#69708 - estebank:tiny, r=petrochenkov
Browse files Browse the repository at this point in the history
On mismatched delimiters, only point at empty blocks that are in the same line

We point at empty blocks when we have mismatched braces to detect cases where editors auto insert `}` after writing `{`. Gate this to only the case where the entire span is in the same line so we never point at explicitly empty blocks.
  • Loading branch information
Centril committed Mar 6, 2020
2 parents d97d99f + 81f435d commit 639e449
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 9 deletions.
7 changes: 6 additions & 1 deletion src/librustc_parse/lexer/tokentrees.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ struct TokenTreesReader<'a> {
/// Used only for error recovery when arriving to EOF with mismatched braces.
matching_delim_spans: Vec<(token::DelimToken, Span, 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>,
}

Expand Down Expand Up @@ -138,7 +139,11 @@ impl<'a> TokenTreesReader<'a> {

if tts.is_empty() {
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() {
Expand Down
10 changes: 2 additions & 8 deletions src/test/ui/parser/mismatched-delim-brace-empty-block.stderr
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
error: unexpected closing delimiter: `}`
--> $DIR/mismatched-delim-brace-empty-block.rs:5:1
|
LL | fn main() {
| ___________-
LL | |
LL | | }
| |_- this block is empty, you might have not meant to close it
LL | let _ = ();
LL | }
| ^ unexpected closing delimiter
LL | }
| ^ unexpected closing delimiter

error: aborting due to previous error

0 comments on commit 639e449

Please sign in to comment.