Rollup merge of #116811 - narpfel:unpretty-unicode-escape-in-format-string-literal, r=Nilstrieb

Preserve unicode escapes in format string literals when pretty-printing AST

Fixes #116799

Thanks to `@Nilstrieb` for the pointer to the correct location, that was really helpful for someone unfamiliar with the codebase.
This commit is contained in:
Guillaume Gomez 2023-10-16 23:58:06 +02:00 committed by GitHub
commit 05e2056746
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 2 deletions

View File

@ -684,8 +684,8 @@ pub fn reconstruct_format_args_template_string(pieces: &[FormatArgsPiece]) -> St
for piece in pieces {
match piece {
FormatArgsPiece::Literal(s) => {
for c in s.as_str().escape_debug() {
template.push(c);
for c in s.as_str().chars() {
template.extend(c.escape_debug());
if let '{' | '}' = c {
template.push(c);
}

View File

@ -0,0 +1,21 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
// pretty-compare-only
// pretty-mode:expanded
// pp-exact:format-args-str-escape.pp
fn main() {
{ ::std::io::_print(format_args!("\u{1b}[1mHello, world!\u{1b}[0m\n")); };
{ ::std::io::_print(format_args!("\u{1b}[1mHello, world!\u{1b}[0m\n")); };
{
::std::io::_print(format_args!("Not an escape sequence: \\u{{1B}}[1mbold\\x1B[0m\n"));
};
{
::std::io::_print(format_args!("{0}\n",
"\x1B[1mHello, world!\x1B[0m"));
};
}

View File

@ -0,0 +1,10 @@
// pretty-compare-only
// pretty-mode:expanded
// pp-exact:format-args-str-escape.pp
fn main() {
println!("\x1B[1mHello, world!\x1B[0m");
println!("\u{1B}[1mHello, world!\u{1B}[0m");
println!("Not an escape sequence: \\u{{1B}}[1mbold\\x1B[0m");
println!("{}", "\x1B[1mHello, world!\x1B[0m");
}