From 198e3beaaca7b7a55bf03d56b106e443716523f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= <hugo@lysator.liu.se>
Date: Thu, 21 Sep 2023 02:10:16 +0200
Subject: [PATCH] Fix remaining errors reported.

---
 muppet/puppet/format/parser.py | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/muppet/puppet/format/parser.py b/muppet/puppet/format/parser.py
index 872a1f5..68c80f4 100644
--- a/muppet/puppet/format/parser.py
+++ b/muppet/puppet/format/parser.py
@@ -176,7 +176,7 @@ class rich_char(ParseDirective):
 
         match self.c:
             case '\\':
-                return parser.get(r'\\')
+                return parser.get(s(r'\\') | '\\')
             case '\n':
                 return parser.get(s('\n') | r'\n')
             case '\r':
@@ -195,7 +195,7 @@ class rich_char(ParseDirective):
                 # Literal linebreaks can apparently be escaped inside
                 # "rich" strings (thankfully not inside 'plain' strings).
                 try:
-                    return parser.get(s("\\\n") & self.c)
+                    return parser.get(s("\\\n") & many(space) & self.c)
                 except ParseError:
                     return parser.get(self.c)
 
@@ -560,6 +560,10 @@ class ParserFormatter(Serializer[ParseDirective]):
                 case _:
                     parser &= interpolated_form(self.s(fragment))
 
+        # Apparently can a heredoc end with an escaped literal
+        # newline...
+        parser &= optional(many(space) & '\\')
+
         parser &= heredoc_end
         return parser
 
-- 
GitLab