Paren interpolation (#3452)

* Switch interp to use parens

* improve interp parsing
This commit is contained in:
JT
2021-05-21 10:55:38 +12:00
committed by GitHub
parent 722f191e82
commit 4fdbf30308
4 changed files with 43 additions and 13 deletions

View File

@ -499,7 +499,7 @@ fn format(input: &str, start: usize) -> (Vec<FormatCommand>, Option<ParseError>)
loop {
end += 1;
if let Some(c) = loop_input.next() {
if c == '{' {
if c == '(' {
break;
}
before.push(c);
@ -518,14 +518,29 @@ fn format(input: &str, start: usize) -> (Vec<FormatCommand>, Option<ParseError>)
start = end;
let mut found_end = false;
let mut open_count = 1;
let mut delimiter_stack = vec![')'];
while let Some(c) = loop_input.next() {
end += 1;
if c == '{' {
open_count += 1;
} else if c == '}' {
open_count -= 1;
if open_count == 0 {
if let Some('\'') = delimiter_stack.last() {
if c == '\'' {
delimiter_stack.pop();
}
} else if let Some('"') = delimiter_stack.last() {
if c == '"' {
delimiter_stack.pop();
}
} else if c == '\'' {
delimiter_stack.push('\'');
} else if c == '"' {
delimiter_stack.push('"');
} else if c == '(' {
delimiter_stack.push(')');
} else if c == ')' {
if let Some(')') = delimiter_stack.last() {
delimiter_stack.pop();
}
if delimiter_stack.is_empty() {
found_end = true;
break;
}