Skip to content

Commit

Permalink
Rollup merge of rust-lang#83348 - osa1:issue83344, r=jackh726
Browse files Browse the repository at this point in the history
format macro argument parsing fix

When the character next to `{}` is "shifted" (when mapping a byte index
in the format string to span) we should avoid shifting the span end
index, so first map the index of `}` to span, then bump the span,
instead of first mapping the next byte index to a span (which causes
bumping the end span too much).

Regression test added.

Fixes rust-lang#83344

---

r? `@estebank`
  • Loading branch information
Dylan-DPC authored Mar 27, 2021
2 parents 118a52b + 5b9bac2 commit 01038fa
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 6 deletions.
10 changes: 6 additions & 4 deletions compiler/rustc_parse_format/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,11 +213,13 @@ impl<'a> Iterator for Parser<'a> {
Some(String(self.string(pos + 1)))
} else {
let arg = self.argument();
if let Some(end) = self.must_consume('}') {
let start = self.to_span_index(pos);
let end = self.to_span_index(end + 1);
if let Some(rbrace_byte_idx) = self.must_consume('}') {
let lbrace_inner_offset = self.to_span_index(pos);
let rbrace_inner_offset = self.to_span_index(rbrace_byte_idx);
if self.is_literal {
self.arg_places.push(start.to(end));
self.arg_places.push(
lbrace_inner_offset.to(InnerOffset(rbrace_inner_offset.0 + 1)),
);
}
}
Some(NextArgument(arg))
Expand Down
6 changes: 6 additions & 0 deletions src/test/ui/macros/issue-83344.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// check-fail

fn main() {
println!("{}\
"); //~^ ERROR: 1 positional argument in format string, but no arguments were given
}
8 changes: 8 additions & 0 deletions src/test/ui/macros/issue-83344.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
error: 1 positional argument in format string, but no arguments were given
--> $DIR/issue-83344.rs:4:15
|
LL | println!("{}\
| ^^

error: aborting due to previous error

5 changes: 3 additions & 2 deletions src/tools/clippy/tests/ui/write_literal_2.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,9 @@ LL | "1", "2", "3",
|
help: try this
|
LL | "some 1{} / {}", "2", "3",
| ^ --
LL | "some 1/
LL | {} / {}", "2", "3",
|

error: literal with an empty format string
--> $DIR/write_literal_2.rs:25:14
Expand Down

0 comments on commit 01038fa

Please sign in to comment.