From 06e51751cde58ba055e6fa8b636e8f8dbe4d3925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= <hugo@lysator.liu.se> Date: Thu, 21 Sep 2023 01:40:41 +0200 Subject: [PATCH] Handle function calls with accompanying lambda. --- muppet/puppet/ast.py | 7 +++++++ muppet/puppet/format/parser.py | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/muppet/puppet/ast.py b/muppet/puppet/ast.py index 5b4afb9..de266e8 100644 --- a/muppet/puppet/ast.py +++ b/muppet/puppet/ast.py @@ -111,6 +111,7 @@ class PuppetCall(PuppetAST): func: PuppetAST args: list[PuppetAST] + block: Optional[PuppetAST] = None @dataclass @@ -579,6 +580,12 @@ def build_ast(form: Any) -> PuppetAST: case ['array', *items]: return PuppetArray([build_ast(x) for x in items]) + case ['call', {'functor': func, 'args': args, 'block': block}]: + return PuppetCall( + build_ast(func), + [build_ast(x) for x in args], + build_ast(block)) + case ['call', {'functor': func, 'args': args}]: return PuppetCall( build_ast(func), diff --git a/muppet/puppet/format/parser.py b/muppet/puppet/format/parser.py index 0ad5bb1..872a1f5 100644 --- a/muppet/puppet/format/parser.py +++ b/muppet/puppet/format/parser.py @@ -365,7 +365,9 @@ class ParserFormatter(Serializer[ParseDirective]): @override def _puppet_call(self, it: PuppetCall) -> ParseDirective: - return ws & self.s(it.func) & ws & self.known_array('()', it.args) + return ws & self.s(it.func) & \ + optional(ws & self.known_array('()', it.args)) & \ + optional(ws & self.s(it.block)) @override def _puppet_call_method(self, it: PuppetCallMethod) -> ParseDirective: -- GitLab