Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/libsyntax/codemap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ impl CodeMap {
}

// If the relevant filemap is empty, we don't return a line number.
fn lookup_line(&self, pos: BytePos) -> Result<FileMapAndLine, Rc<FileMap>> {
pub fn lookup_line(&self, pos: BytePos) -> Result<FileMapAndLine, Rc<FileMap>> {
let idx = self.lookup_filemap_idx(pos);

let files = self.files.borrow();
Expand Down
27 changes: 22 additions & 5 deletions src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -660,11 +660,28 @@ impl<'a> Parser<'a> {
} else {
label_sp
};
if self.span.contains(sp) {
err.span_label(self.span, label_exp);
} else {
err.span_label(sp, label_exp);
err.span_label(self.span, "unexpected token");

let cm = self.sess.codemap();
match (cm.lookup_line(self.span.lo()), cm.lookup_line(sp.lo())) {
(Ok(ref a), Ok(ref b)) if a.line == b.line => {
// When the spans are in the same line, it means that the only content between
// them is whitespace, point at the found token in that case:
//
// X | () => { syntax error };
// | ^^^^^ expected one of 8 possible tokens here
//
// instead of having:
//
// X | () => { syntax error };
// | -^^^^^ unexpected token
// | |
// | expected one of 8 possible tokens here
err.span_label(self.span, label_exp);
}
_ => {
err.span_label(sp, label_exp);
err.span_label(self.span, "unexpected token");
}
}
Err(err)
}
Expand Down
4 changes: 1 addition & 3 deletions src/test/ui/did_you_mean/issue-40006.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,7 @@ error: expected one of `!` or `::`, found `(`
--> $DIR/issue-40006.rs:24:9
|
24 | ::Y (); //~ ERROR expected one of
| -^ unexpected token
| |
| expected one of `!` or `::` here
| ^ expected one of `!` or `::` here

error: missing `fn`, `type`, or `const` for impl-item declaration
--> $DIR/issue-40006.rs:28:8
Expand Down
8 changes: 2 additions & 6 deletions src/test/ui/macro_backtrace/main.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,14 @@ error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found
--> $DIR/main.rs:19:20
|
19 | () => { syntax error }; //~ ERROR expected one of
| -^^^^^ unexpected token
| |
| expected one of 8 possible tokens here
| ^^^^^ expected one of 8 possible tokens here
$DIR/main.rs:24:5: 24:13 note: in this expansion of pong! (defined in $DIR/main.rs)

error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `error`
--> $DIR/main.rs:19:20
|
19 | () => { syntax error }; //~ ERROR expected one of
| -^^^^^ unexpected token
| |
| expected one of 8 possible tokens here
| ^^^^^ expected one of 8 possible tokens here
$DIR/main.rs:25:5: 25:13 note: in this expansion of ping! (defined in <ping macros>)
<ping macros>:1:11: 1:24 note: in this expansion of pong! (defined in $DIR/main.rs)

Expand Down