diff options
| author | bors <bors@rust-lang.org> | 2021-07-31 20:20:18 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-07-31 20:20:18 +0000 |
| commit | 4e282795d7d1d28a4c6c1c6521045ae2b59f3519 (patch) | |
| tree | 625f5df40df90d05555981d53fc0f6345700f56e /compiler/rustc_parse | |
| parent | 29f8de06d18cf197fbd229accdce82da62ba22e9 (diff) | |
| parent | f2c9654dcd53184eb5b585f117e856b87f9404c1 (diff) | |
| download | rust-4e282795d7d1d28a4c6c1c6521045ae2b59f3519.tar.gz rust-4e282795d7d1d28a4c6c1c6521045ae2b59f3519.zip | |
Auto merge of #87662 - FabianWolff:rb-string, r=estebank
Suggest `br` if the unknown string prefix `rb` is found
Currently, for the following code:
```rust
fn main() {
rb"abc";
}
```
we issue the following suggestion:
```
help: consider inserting whitespace here
|
2 | rb "abc";
| --
```
With my changes (only in edition 2021, where unknown prefixes became an error), I get:
```
help: use `br` for a raw byte string
|
2 | br"abc";
| ^^
```
Diffstat (limited to 'compiler/rustc_parse')
| -rw-r--r-- | compiler/rustc_parse/src/lexer/mod.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/compiler/rustc_parse/src/lexer/mod.rs b/compiler/rustc_parse/src/lexer/mod.rs index 98befe4066b..1e65cc27154 100644 --- a/compiler/rustc_parse/src/lexer/mod.rs +++ b/compiler/rustc_parse/src/lexer/mod.rs @@ -505,7 +505,8 @@ impl<'a> StringReader<'a> { // identifier tokens. fn report_unknown_prefix(&self, start: BytePos) { let prefix_span = self.mk_sp(start, self.pos); - let msg = format!("prefix `{}` is unknown", self.str_from_to(start, self.pos)); + let prefix_str = self.str_from_to(start, self.pos); + let msg = format!("prefix `{}` is unknown", prefix_str); let expn_data = prefix_span.ctxt().outer_expn_data(); @@ -513,12 +514,19 @@ impl<'a> StringReader<'a> { // In Rust 2021, this is a hard error. let mut err = self.sess.span_diagnostic.struct_span_err(prefix_span, &msg); err.span_label(prefix_span, "unknown prefix"); - if expn_data.is_root() { + if prefix_str == "rb" { + err.span_suggestion_verbose( + prefix_span, + "use `br` for a raw byte string", + "br".to_string(), + Applicability::MaybeIncorrect, + ); + } else if expn_data.is_root() { err.span_suggestion_verbose( prefix_span.shrink_to_hi(), "consider inserting whitespace here", " ".into(), - Applicability::MachineApplicable, + Applicability::MaybeIncorrect, ); } err.note("prefixed identifiers and literals are reserved since Rust 2021"); |
