about summary refs log tree commit diff
path: root/compiler/rustc_parse/src/parser/expr.rs
diff options
context:
space:
mode:
authoryukang <moorekang@gmail.com>2023-06-11 14:36:20 +0800
committeryukang <moorekang@gmail.com>2023-06-11 14:36:20 +0800
commit0220c0b765e92dcb3565f0a8bd3c422afbd77f88 (patch)
tree5b6a5c880ca34aaeee73cdac0176dd019fc4a1bf /compiler/rustc_parse/src/parser/expr.rs
parentb8a50010de397df570b38fe67bda435b665e2d86 (diff)
downloadrust-0220c0b765e92dcb3565f0a8bd3c422afbd77f88.tar.gz
rust-0220c0b765e92dcb3565f0a8bd3c422afbd77f88.zip
Detect actual span for getting unexpected token from parsing macros
Diffstat (limited to 'compiler/rustc_parse/src/parser/expr.rs')
-rw-r--r--compiler/rustc_parse/src/parser/expr.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler/rustc_parse/src/parser/expr.rs b/compiler/rustc_parse/src/parser/expr.rs
index cea2a71c988..d81b3899201 100644
--- a/compiler/rustc_parse/src/parser/expr.rs
+++ b/compiler/rustc_parse/src/parser/expr.rs
@@ -1013,9 +1013,15 @@ impl<'a> Parser<'a> {
     }
 
     fn error_unexpected_after_dot(&self) {
-        // FIXME Could factor this out into non_fatal_unexpected or something.
         let actual = pprust::token_to_string(&self.token);
-        self.sess.emit_err(errors::UnexpectedTokenAfterDot { span: self.token.span, actual });
+        let span = self.token.span;
+        let sm = self.sess.source_map();
+        let (span, actual) = match (&self.token.kind, self.subparser_name) {
+            (token::Eof, Some(_)) if let Ok(actual) = sm.span_to_snippet(sm.next_point(span)) =>
+                (span.shrink_to_hi(), actual.into()),
+            _ => (span, actual),
+        };
+        self.sess.emit_err(errors::UnexpectedTokenAfterDot { span, actual });
     }
 
     // We need an identifier or integer, but the next token is a float.