mirror of
https://github.com/martinvonz/jj.git
synced 2025-01-16 00:56:23 +00:00
templater: disallow empty template in function arguments and parens
Before, "f()" was parsed as a function call with one empty argument. In practice, this change means "if(divergent,,false_template)" is no longer valid.
This commit is contained in:
parent
a5bb48d47e
commit
3d965f22ab
2 changed files with 12 additions and 7 deletions
|
@ -29,6 +29,7 @@ identifier = @{ (ASCII_ALPHANUMERIC | "_")+ }
|
|||
function = { identifier ~ "(" ~ function_arguments ~ ")" }
|
||||
function_arguments = {
|
||||
template ~ ("," ~ template)*
|
||||
| whitespace*
|
||||
}
|
||||
|
||||
maybe_method = { ("." ~ function)* }
|
||||
|
@ -46,7 +47,7 @@ list = _{
|
|||
}
|
||||
|
||||
template = {
|
||||
whitespace* ~ (list | term | "") ~ whitespace*
|
||||
whitespace* ~ (list | term) ~ whitespace*
|
||||
}
|
||||
|
||||
program = _{ SOI ~ template ~ EOI }
|
||||
program = _{ SOI ~ (template | whitespace*) ~ EOI }
|
||||
|
|
|
@ -369,10 +369,10 @@ fn parse_commit_template_rule<'a>(
|
|||
let mut templates = inner
|
||||
.map(|term| parse_commit_term(repo, workspace_id, term))
|
||||
.collect_vec();
|
||||
match templates.len() {
|
||||
0 => Box::new(Literal(String::new())),
|
||||
1 => templates.pop().unwrap(),
|
||||
_ => Box::new(ListTemplate(templates)),
|
||||
if templates.len() == 1 {
|
||||
templates.pop().unwrap()
|
||||
} else {
|
||||
Box::new(ListTemplate(templates))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -383,5 +383,9 @@ pub fn parse_commit_template<'a>(
|
|||
) -> Box<dyn Template<Commit> + 'a> {
|
||||
let mut pairs: Pairs<Rule> = TemplateParser::parse(Rule::program, template_text).unwrap();
|
||||
let first_pair = pairs.next().unwrap();
|
||||
parse_commit_template_rule(repo, workspace_id, first_pair)
|
||||
if first_pair.as_rule() == Rule::EOI {
|
||||
Box::new(Literal(String::new()))
|
||||
} else {
|
||||
parse_commit_template_rule(repo, workspace_id, first_pair)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue