From ab1986103738083a5bcf5af4db4be2930459f45f Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Sun, 24 Nov 2013 21:18:20 -0500 Subject: Add a note for unclosed delimiters Currently, the parser doesn't give any context when it finds an unclosed delimiter and it's not EOF. Report the most recent unclosed delimiter, to help the user along. Closes #10636 --- src/libsyntax/parse/parser.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'src/libsyntax/parse/parser.rs') diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 486a7a800a0..315872ce8cd 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2086,15 +2086,13 @@ impl Parser { fn parse_non_delim_tt_tok(p: &Parser) -> token_tree { maybe_whole!(deref p, nt_tt); match *p.token { - token::RPAREN | token::RBRACE | token::RBRACKET - => { - p.fatal( - format!( - "incorrect close delimiter: `{}`", - p.this_token_to_str() - ) - ); - } + token::RPAREN | token::RBRACE | token::RBRACKET => { + // This is a conservative error: only report the last unclosed delimiter. The + // previous unclosed delimiters could actually be closed! The parser just hasn't + // gotten to them yet. + p.open_braces.last_opt().map(|sp| p.span_note(*sp, "unclosed delimiter")); + p.fatal(format!("incorrect close delimiter: `{}`", p.this_token_to_str())); + }, /* we ought to allow different depths of unquotation */ token::DOLLAR if *p.quote_depth > 0u => { p.bump(); -- cgit 1.4.1-3-g733a5