diff --git a/muppet/puppet/ast.py b/muppet/puppet/ast.py index 5b4afb994e28700b633479d910af966be19b6020..de266e8c4d5980861f666311aafc713c0b1e6fd9 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 0ad5bb1692a7279d903be5f1b3267f0ea938d418..872a1f5811577bb371faf45ae47a4dba0f2afc82 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: