diff options
| author | Corey Richardson <corey@octayn.net> | 2013-11-24 21:18:20 -0500 |
|---|---|---|
| committer | Corey Richardson <corey@octayn.net> | 2013-11-24 21:32:38 -0500 |
| commit | ab1986103738083a5bcf5af4db4be2930459f45f (patch) | |
| tree | 047257203e9fcd0f32355f3ab00f17ca01bb1683 /src/libsyntax/parse | |
| parent | b3ff24adaa8c7f9c48c525f284526c23ffd33fcb (diff) | |
| download | rust-ab1986103738083a5bcf5af4db4be2930459f45f.tar.gz rust-ab1986103738083a5bcf5af4db4be2930459f45f.zip | |
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
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 16 |
1 files changed, 7 insertions, 9 deletions
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(); |
