auto merge of #10641 : cmr/rust/close_delims, r=alexcrichton

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
This commit is contained in:
bors 2013-11-24 23:56:46 -08:00
commit ce32f72f1d
3 changed files with 33 additions and 9 deletions

View File

@ -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();

View File

@ -0,0 +1,13 @@
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
struct Obj { //~ NOTE: unclosed delimiter
member: uint
) //~ ERROR: incorrect close delimiter

View File

@ -0,0 +1,13 @@
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
pub fn trace_option(option: Option<int>) {
option.map(|some| 42; //~ NOTE: unclosed delimiter
} //~ ERROR: incorrect close delimiter