about summary refs log tree commit diff
path: root/src/libsyntax/parse/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
-rw-r--r--src/libsyntax/parse/parser.rs21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 23085fadc5e..410ecf068b9 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -6172,14 +6172,17 @@ impl<'a> Parser<'a> {
         }
     }
 
-    pub fn ensure_complete_parse<F>(&mut self, allow_semi: bool, on_err: F)
-        where F: FnOnce(&Parser)
-    {
-        if allow_semi && self.token == token::Semi {
-            self.bump();
-        }
-        if self.token != token::Eof {
-            on_err(self);
-        }
+    pub fn ensure_complete_parse(&mut self, macro_name: ast::Name, kind_name: &str, span: Span) {
+        if self.token == token::Eof {
+            return
+        }
+
+        let msg = format!("macro expansion ignores token `{}` and any following",
+                          self.this_token_to_string());
+        let mut err = self.diagnostic().struct_span_err(self.span, &msg);
+        let msg = format!("caused by the macro expansion here; the usage \
+                           of `{}!` is likely invalid in {} context",
+                           macro_name, kind_name);
+        err.span_note(span, &msg).emit();
     }
 }