about summary refs log tree commit diff
diff options
context:
space:
mode:
authorHuon Wilson <dbau.pp+github@gmail.com>2014-11-10 21:54:42 +1100
committerHuon Wilson <dbau.pp+github@gmail.com>2014-11-13 13:43:00 +1100
commite621e3216bfb074b03ddeb045dc467d9ec4641f8 (patch)
tree06a041758876e30f0420f5e72992073c910d8d8f
parentceff2ca1fc57d60fa3af2372d49a23055aa441bc (diff)
downloadrust-e621e3216bfb074b03ddeb045dc467d9ec4641f8.tar.gz
rust-e621e3216bfb074b03ddeb045dc467d9ec4641f8.zip
Add error message specific to \<carriage return>.
This can crop-up with a misconfigured editor or an unexpected
interaction between version control and certain operating systems.

Closes #11669.
-rw-r--r--src/libsyntax/parse/lexer/mod.rs7
-rw-r--r--src/test/compile-fail/.gitattributes1
-rw-r--r--src/test/compile-fail/trailing-carriage-return-in-string.rs23
3 files changed, 31 insertions, 0 deletions
diff --git a/src/libsyntax/parse/lexer/mod.rs b/src/libsyntax/parse/lexer/mod.rs
index 35d56440b50..01a66243a96 100644
--- a/src/libsyntax/parse/lexer/mod.rs
+++ b/src/libsyntax/parse/lexer/mod.rs
@@ -806,6 +806,13 @@ impl<'a> StringReader<'a> {
                                     if ascii_only { "unknown byte escape" }
                                     else { "unknown character escape" },
                                     c);
+                                if e == '\r' {
+                                    let sp = codemap::mk_sp(escaped_pos, last_pos);
+                                    self.span_diagnostic.span_help(
+                                        sp,
+                                        "this is an isolated carriage return; consider checking \
+                                         your editor and version control settings.")
+                                }
                                 false
                             }
                         }
diff --git a/src/test/compile-fail/.gitattributes b/src/test/compile-fail/.gitattributes
new file mode 100644
index 00000000000..825f664bf9f
--- /dev/null
+++ b/src/test/compile-fail/.gitattributes
@@ -0,0 +1 @@
+trailing-carriage-return-in-string.rs -text
\ No newline at end of file
diff --git a/src/test/compile-fail/trailing-carriage-return-in-string.rs b/src/test/compile-fail/trailing-carriage-return-in-string.rs
new file mode 100644
index 00000000000..81098333261
--- /dev/null
+++ b/src/test/compile-fail/trailing-carriage-return-in-string.rs
@@ -0,0 +1,23 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// ignore-tidy-cr
+// Issue #11669
+
+fn main() {
+    // \r\n
+    let ok = "This is \
+ a test";
+    // \r only
+    let bad = "This is \
 a test";
+    //~^ ERROR unknown character escape: \r
+    //~^^ HELP this is an isolated carriage return
+
+}