forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#115611 - lukas-code:format!("{r#ident}"), r=compiler-errors add diagnostic for raw identifiers in format string Format strings don't support raw identifiers (e.g. `format!("{r#type}")`), but they do support keywords in the format string directly (e.g. `format!("{type}")`). This PR improves the error output when attempting to use a raw identifier in a format string and adds a machine-applicable suggestion to remove the `r#`. fixes rust-lang#115466
- Loading branch information
Showing
6 changed files
with
158 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
// Regression test for https://github.com/rust-lang/rust/issues/115466 | ||
|
||
// The "identifier" in format strings is parsed as an IDENTIFIER_OR_KEYWORD, not an IDENTIFIER. | ||
// Test that there is an actionable diagnostic if a RAW_IDENTIFIER is used instead. | ||
|
||
fn main() { | ||
let r#type = "foobar"; | ||
println!("It is {r#type}"); //~ ERROR: invalid format string: raw identifiers are not supported | ||
println!(r##"It still is {r#type}"##); //~ ERROR: invalid format string: raw identifiers are not supported | ||
println!(concat!("{r#", "type}")); //~ ERROR: invalid format string: raw identifiers are not supported | ||
println!("{\x72\x23type:?}"); //~ ERROR: invalid format string: raw identifiers are not supported | ||
|
||
// OK | ||
println!("{type}"); | ||
println!("{let}", let = r#type); | ||
println!("{let}", r#let = r#type); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
error: invalid format string: raw identifiers are not supported | ||
--> $DIR/raw-idents.rs:8:22 | ||
| | ||
LL | println!("It is {r#type}"); | ||
| --^^^^ | ||
| | | ||
| raw identifier used here in format string | ||
| help: remove the `r#` | ||
| | ||
= note: identifiers in format strings can be keywords and don't need to be prefixed with `r#` | ||
|
||
error: invalid format string: raw identifiers are not supported | ||
--> $DIR/raw-idents.rs:9:31 | ||
| | ||
LL | println!(r##"It still is {r#type}"##); | ||
| --^^^^ | ||
| | | ||
| raw identifier used here in format string | ||
| help: remove the `r#` | ||
| | ||
= note: identifiers in format strings can be keywords and don't need to be prefixed with `r#` | ||
|
||
error: invalid format string: raw identifiers are not supported | ||
--> $DIR/raw-idents.rs:10:14 | ||
| | ||
LL | println!(concat!("{r#", "type}")); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^ raw identifier used here in format string | ||
| | ||
= note: identifiers in format strings can be keywords and don't need to be prefixed with `r#` | ||
= note: this error originates in the macro `concat` (in Nightly builds, run with -Z macro-backtrace for more info) | ||
|
||
error: invalid format string: raw identifiers are not supported | ||
--> $DIR/raw-idents.rs:11:16 | ||
| | ||
LL | println!("{\x72\x23type:?}"); | ||
| --------^^^^ | ||
| | | ||
| raw identifier used here in format string | ||
| help: remove the `r#` | ||
| | ||
= note: identifiers in format strings can be keywords and don't need to be prefixed with `r#` | ||
|
||
error: aborting due to 4 previous errors | ||
|