about summary refs log tree commit diff
path: root/compiler/rustc_parse
diff options
context:
space:
mode:
authorErin Petra Sofiya Moon <emoon@starry.com>2022-02-14 14:21:43 -0500
committerErin Petra Sofiya Moon <emoon@starry.com>2022-02-14 15:11:38 -0500
commite59cda9ee1b9fab3fe966ea7e4b12c14b1f85789 (patch)
treea731617118a0361d343c6e7d9c48f84416cc3f33 /compiler/rustc_parse
parent52dd59ed2154f4158ae37e6994b678a6249a7bb0 (diff)
downloadrust-e59cda9ee1b9fab3fe966ea7e4b12c14b1f85789.tar.gz
rust-e59cda9ee1b9fab3fe966ea7e4b12c14b1f85789.zip
suggest using raw string literals when invalid escapes appear
i'd guess about 70% of "bad escape" cases occur when someone meant to
use a raw string literal because they're passing it directly to
Regex::new(). this emits an advisory (Applicability::MaybeIncorrect)
help: suggestion to the user that they use an r"" string,
on top of the normal notes about looking at the
string literal documentation/spec.
Diffstat (limited to 'compiler/rustc_parse')
-rw-r--r--compiler/rustc_parse/src/lexer/unescape_error_reporting.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/compiler/rustc_parse/src/lexer/unescape_error_reporting.rs b/compiler/rustc_parse/src/lexer/unescape_error_reporting.rs
index 7f68112a427..a41956c58f0 100644
--- a/compiler/rustc_parse/src/lexer/unescape_error_reporting.rs
+++ b/compiler/rustc_parse/src/lexer/unescape_error_reporting.rs
@@ -185,6 +185,15 @@ pub(crate) fn emit_unescape_error(
                      version control settings",
                 );
             } else {
+                if !mode.is_bytes() {
+                    diag.span_suggestion(
+                        span_with_quotes,
+                        "if you meant to write a literal backslash (perhaps escaping in a regular expression), consider a raw string literal",
+                        format!("r\"{}\"", lit),
+                        Applicability::MaybeIncorrect,
+                    );
+                }
+
                 diag.help(
                     "for more information, visit \
                      <https://static.rust-lang.org/doc/master/reference.html#literals>",