From 91d309a93c3a4e3ad8ad3b426dd8ef6449475654 Mon Sep 17 00:00:00 2001 From: Yuya Nishihara Date: Sun, 12 Mar 2023 20:02:32 +0900 Subject: [PATCH] templater: extract little helper that parses text and expands aliases The caller doesn't have to care about alias expansion. --- src/commit_templater.rs | 3 +-- src/operation_templater.rs | 3 +-- src/template_parser.rs | 14 ++++++++++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/commit_templater.rs b/src/commit_templater.rs index eb291edf2..63cc777a6 100644 --- a/src/commit_templater.rs +++ b/src/commit_templater.rs @@ -458,8 +458,7 @@ pub fn parse<'repo>( aliases_map: &TemplateAliasesMap, ) -> TemplateParseResult + 'repo>> { let language = CommitTemplateLanguage { repo, workspace_id }; - let node = template_parser::parse_template(template_text)?; - let node = template_parser::expand_aliases(node, aliases_map)?; + let node = template_parser::parse(template_text, aliases_map)?; let expression = template_parser::build_expression(&language, &node)?; Ok(expression.into_template()) } diff --git a/src/operation_templater.rs b/src/operation_templater.rs index 24f56185a..878818ba2 100644 --- a/src/operation_templater.rs +++ b/src/operation_templater.rs @@ -187,8 +187,7 @@ pub fn parse( ) -> TemplateParseResult>> { let head_op_id = repo.op_id(); let language = OperationTemplateLanguage { head_op_id }; - let node = template_parser::parse_template(template_text)?; - let node = template_parser::expand_aliases(node, aliases_map)?; + let node = template_parser::parse(template_text, aliases_map)?; let expression = template_parser::build_expression(&language, &node)?; Ok(expression.into_template()) } diff --git a/src/template_parser.rs b/src/template_parser.rs index e040ca1ee..3270c1390 100644 --- a/src/template_parser.rs +++ b/src/template_parser.rs @@ -587,6 +587,17 @@ pub fn expand_aliases<'i>( expand_node(node, state) } +/// Parses text into AST nodes, and expands aliases. +/// +/// No type/name checking is made at this stage. +pub fn parse<'i>( + template_text: &'i str, + aliases_map: &'i TemplateAliasesMap, +) -> TemplateParseResult> { + let node = parse_template(template_text)?; + expand_aliases(node, aliases_map) +} + /// Callbacks to build language-specific evaluation objects from AST nodes. pub trait TemplateLanguage<'a> { type Context: 'a; @@ -1195,8 +1206,7 @@ mod tests { impl WithTemplateAliasesMap { fn parse<'i>(&'i self, template_text: &'i str) -> TemplateParseResult> { - let node = parse_template(template_text)?; - expand_aliases(node, &self.0) + parse(template_text, &self.0) } fn parse_normalized<'i>(