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 #83344
This commit is contained in:
parent
f811f14006
commit
5b9bac2ab6
4 changed files with 23 additions and 6 deletions
|
@ -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))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue