Merge #7076
7076: Properly parse path separators in format-like postfix r=Veykril a=Veykril Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
This commit is contained in:
commit
7b246a6a14
@ -108,7 +108,8 @@ pub(crate) fn parse(&mut self) -> Result<(), ()> {
|
|||||||
// "{MyStruct { val_a: 0, val_b: 1 }}".
|
// "{MyStruct { val_a: 0, val_b: 1 }}".
|
||||||
let mut inexpr_open_count = 0;
|
let mut inexpr_open_count = 0;
|
||||||
|
|
||||||
for chr in self.input.chars() {
|
let mut chars = self.input.chars().peekable();
|
||||||
|
while let Some(chr) = chars.next() {
|
||||||
match (self.state, chr) {
|
match (self.state, chr) {
|
||||||
(State::NotExpr, '{') => {
|
(State::NotExpr, '{') => {
|
||||||
self.output.push(chr);
|
self.output.push(chr);
|
||||||
@ -157,6 +158,11 @@ pub(crate) fn parse(&mut self) -> Result<(), ()> {
|
|||||||
inexpr_open_count -= 1;
|
inexpr_open_count -= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
(State::Expr, ':') if chars.peek().copied() == Some(':') => {
|
||||||
|
// path seperator
|
||||||
|
current_expr.push_str("::");
|
||||||
|
chars.next();
|
||||||
|
}
|
||||||
(State::Expr, ':') => {
|
(State::Expr, ':') => {
|
||||||
if inexpr_open_count == 0 {
|
if inexpr_open_count == 0 {
|
||||||
// We're outside of braces, thus assume that it's a specifier, like "{Some(value):?}"
|
// We're outside of braces, thus assume that it's a specifier, like "{Some(value):?}"
|
||||||
@ -249,6 +255,9 @@ fn format_str_parser() {
|
|||||||
expect![["{:?}; SomeStruct { val_a: 0, val_b: 1 }"]],
|
expect![["{:?}; SomeStruct { val_a: 0, val_b: 1 }"]],
|
||||||
),
|
),
|
||||||
("{ 2 + 2 }", expect![["{}; 2 + 2"]]),
|
("{ 2 + 2 }", expect![["{}; 2 + 2"]]),
|
||||||
|
("{strsim::jaro_winkle(a)}", expect![["{}; strsim::jaro_winkle(a)"]]),
|
||||||
|
("{foo::bar::baz()}", expect![["{}; foo::bar::baz()"]]),
|
||||||
|
("{foo::bar():?}", expect![["{:?}; foo::bar()"]]),
|
||||||
];
|
];
|
||||||
|
|
||||||
for (input, output) in test_vector {
|
for (input, output) in test_vector {
|
||||||
|
Loading…
Reference in New Issue
Block a user