about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorlaurent <laurent.mazare@gmail.com>2017-10-31 19:45:12 +0000
committerlaurent <laurent.mazare@gmail.com>2017-10-31 19:45:12 +0000
commit6d060bd49a2a518d44deb36aadf772cc6ae61fb8 (patch)
tree00a89b77758d94e9cef3611e1414fa56de63e84c /src/libsyntax/parse
parent6a62ea682878e9f9e889c44a42f57a7eb1822e0d (diff)
downloadrust-6d060bd49a2a518d44deb36aadf772cc6ae61fb8.tar.gz
rust-6d060bd49a2a518d44deb36aadf772cc6ae61fb8.zip
Fix spans and error messages.
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs19
1 files changed, 6 insertions, 13 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 37a12801ddc..ffa6567c18b 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -3174,23 +3174,16 @@ impl<'a> Parser<'a> {
                 mem::replace(self, parser_snapshot_before_in);
 
                 match self.parse_expr_res(Restrictions::NO_STRUCT_LITERAL, None) {
-                    Ok(expr) => {
-                        // Successfully parsed the expr, print a nice error message.
+                    Ok(_) => {
+                        // Successfully parsed the expr which means that the 'in' keyword is
+                        // missing, e.g. 'for i 0..2'
                         in_err.cancel();
-                        let in_span = parser_snapshot_after_in.span;
+                        let in_span = parser_snapshot_after_in.prev_span
+                            .between(parser_snapshot_after_in.span);
                         let mut err = self.sess.span_diagnostic
                             .struct_span_err(in_span, "missing `in` in `for` loop");
                         err.span_label(in_span, "expected `in` here");
-                        let sugg = pprust::to_string(|s| {
-                            s.s.word("for ")?;
-                            s.print_pat(&pat)?;
-                            s.s.word(" in ")?;
-                            s.print_expr(&expr)
-                        });
-                        err.span_suggestion(
-                            in_span,
-                            "try adding `in`",
-                            sugg);
+                        err.span_suggestion_short(in_span, "try adding `in` here", "in".into());
                         Err(err)
                     }
                     Err(mut expr_err) => {