Skip to content

Commit 180d6b5

Browse files
committed
Tests
1 parent 2731dc1 commit 180d6b5

8 files changed

+97
-8
lines changed

src/libsyntax/parse/parser.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -2841,7 +2841,12 @@ impl<'a> Parser<'a> {
28412841
maybe_whole!(deref self, NtTT);
28422842
match self.token {
28432843
token::CloseDelim(_) => {
2844-
panic!("should have been caught above");
2844+
// An unexpected closing delimiter (i.e., there is no
2845+
// matching opening delimiter).
2846+
let token_str = self.this_token_to_string();
2847+
let err = self.diagnostic().struct_span_err(self.span,
2848+
&format!("unexpected close delimiter: `{}`", token_str));
2849+
Err(err)
28452850
},
28462851
/* we ought to allow different depths of unquotation */
28472852
token::Dollar | token::SubstNt(..) if self.quote_depth > 0 => {
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
1+
// Copyright 2013-2016 The Rust Project Developers. See the COPYRIGHT
22
// file at the top-level directory of this distribution and at
33
// http://rust-lang.org/COPYRIGHT.
44
//
@@ -11,11 +11,9 @@
1111
// FIXME(31528) we emit a bunch of silly errors here due to continuing past the
1212
// first one. This would be easy-ish to address by better recovery in tokenisation.
1313

14-
// compile-flags: -Z parse-only
15-
16-
pub fn trace_option(option: Option<isize>) { //~ HELP did you mean to close this delimiter?
14+
pub fn trace_option(option: Option<isize>) {
1715
option.map(|some| 42; //~ NOTE: unclosed delimiter
1816
//~^ ERROR: expected one of
17+
//~^^ ERROR: mismatched types
1918
} //~ ERROR: incorrect close delimiter
2019
//~^ ERROR: expected one of
21-
//~ ERROR: this file contains an un-closed delimiter

src/test/compile-fail/issue-31804.rs

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// Test that error recovery in the parser to an EOF does not give an infinite
12+
// spew of errors.
13+
14+
fn main() {
15+
let
16+
} //~ ERROR unexpected token: `}`
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// Test that we do some basic error correcton in the tokeniser (and don't ICE).
12+
13+
fn main() {
14+
if foo { //~ NOTE: unclosed delimiter
15+
//~^ ERROR: unresolved name `foo`
16+
) //~ ERROR: incorrect close delimiter: `)`
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// Test that we do some basic error correcton in the tokeniser (and don't spew
12+
// too many bogus errors).
13+
14+
pub mod raw {
15+
use std::{io, fs};
16+
use std::path::Path;
17+
18+
pub fn ensure_dir_exists<P: AsRef<Path>, F: FnOnce(&Path)>(path: P,
19+
callback: F)
20+
-> io::Result<bool> {
21+
if !is_directory(path.as_ref()) { //~ ERROR: unresolved name `is_directory`
22+
callback(path.as_ref(); //~ NOTE: unclosed delimiter
23+
//~^ ERROR: expected one of
24+
fs::create_dir_all(path.as_ref()).map(|()| true) //~ ERROR: expected one of
25+
} else { //~ ERROR: incorrect close delimiter: `}`
26+
Ok(false);
27+
}
28+
29+
panic!();
30+
}
31+
}
32+
33+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// Test that we do some basic error correcton in the tokeniser.
12+
13+
fn main() {
14+
foo(bar(; //~ NOTE: unclosed delimiter
15+
//~^ NOTE: unclosed delimiter
16+
//~^^ ERROR: unexpected token: `;`
17+
//~^^^ ERROR: unresolved name `bar`
18+
//~^^^^ ERROR: unresolved name `foo`
19+
} //~ ERROR: incorrect close delimiter: `}`
20+
//~^ ERROR: incorrect close delimiter: `}`

src/test/parse-fail/issue-2354-1.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@
1010

1111
// compile-flags: -Z parse-only
1212

13-
static foo: isize = 2; } //~ ERROR incorrect close delimiter:
13+
static foo: isize = 2; } //~ ERROR unexpected close delimiter:

src/test/parse-fail/macro-mismatched-delim-paren-brace.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ fn main() {
1414
foo! (
1515
bar, "baz", 1, 2.0
1616
} //~ ERROR incorrect close delimiter
17-
}
17+
} //~ ERROR unexpected close delimiter: `}`

0 commit comments

Comments
 (0)