about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-09-23 23:09:23 +0000
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-09-26 04:29:30 +0000
commitb90ceddcee2e7f4ed4236e6c52ddf8e585f3df6a (patch)
tree583c922fd2e8b1678f08b4a8872a533edde65f4b /src/libsyntax/parse
parent4a8467b62d572eabedf50c09b52f177e87160e96 (diff)
downloadrust-b90ceddcee2e7f4ed4236e6c52ddf8e585f3df6a.tar.gz
rust-b90ceddcee2e7f4ed4236e6c52ddf8e585f3df6a.zip
Refactor `ensure_complete_parse`.
Diffstat (limited to 'src/libsyntax/parse')
-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();
     }
 }