about summary refs log tree commit diff
path: root/compiler/rustc_parse/src/lexer
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2024-03-09 01:07:23 +0000
committerEsteban Küber <esteban@kuber.com.ar>2024-03-17 23:35:18 +0000
commit4a10b01f9504f8ad2ffb9b357845341f4fba6bf0 (patch)
treeec79eb0297f39369f98f0ff52ecc175b1175427b /compiler/rustc_parse/src/lexer
parent982918f4935fd4677af06d42e0d0b298bfb1c243 (diff)
downloadrust-4a10b01f9504f8ad2ffb9b357845341f4fba6bf0.tar.gz
rust-4a10b01f9504f8ad2ffb9b357845341f4fba6bf0.zip
Use shorter span for existing `'` -> `"` structured suggestion
Diffstat (limited to 'compiler/rustc_parse/src/lexer')
-rw-r--r--compiler/rustc_parse/src/lexer/unescape_error_reporting.rs20
1 files changed, 15 insertions, 5 deletions
diff --git a/compiler/rustc_parse/src/lexer/unescape_error_reporting.rs b/compiler/rustc_parse/src/lexer/unescape_error_reporting.rs
index 3ebad6a9fd7..1ac6b6fe115 100644
--- a/compiler/rustc_parse/src/lexer/unescape_error_reporting.rs
+++ b/compiler/rustc_parse/src/lexer/unescape_error_reporting.rs
@@ -95,11 +95,21 @@ pub(crate) fn emit_unescape_error(
                     }
                     escaped.push(c);
                 }
-                let sugg = format!("{prefix}\"{escaped}\"");
-                MoreThanOneCharSugg::Quotes {
-                    span: full_lit_span,
-                    is_byte: mode == Mode::Byte,
-                    sugg,
+                if escaped.len() != lit.len() {
+                    let sugg = format!("{prefix}\"{escaped}\"");
+                    MoreThanOneCharSugg::QuotesFull {
+                        span: full_lit_span,
+                        is_byte: mode == Mode::Byte,
+                        sugg,
+                    }
+                } else {
+                    MoreThanOneCharSugg::Quotes {
+                        start: full_lit_span
+                            .with_hi(full_lit_span.lo() + BytePos((prefix.len() + 1) as u32)),
+                        end: full_lit_span.with_lo(full_lit_span.hi() - BytePos(1)),
+                        is_byte: mode == Mode::Byte,
+                        prefix,
+                    }
                 }
             });
             dcx.emit_err(UnescapeError::MoreThanOneChar {