Skip to content

Commit a200479

Browse files
committed
fix: Fix parsing of raw and single-quoted strings in CaseWhen
1 parent a0ef153 commit a200479

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

src/cedarscript_ast_parser/cedarscript_ast_parser.py

+12-12
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from dataclasses import dataclass
33
from enum import StrEnum, auto
44
from typing import TypeAlias, NamedTuple, Union, Optional
5-
5+
import re
66
import cedarscript_grammar
77
from tree_sitter import Parser
88

@@ -243,20 +243,20 @@ class LoopControl(StrEnum):
243243
class CaseWhen:
244244
"""Represents a WHEN condition in a CASE statement"""
245245
empty: bool = False
246-
regex: Optional[str] = None
247-
prefix: Optional[str] = None
248-
suffix: Optional[str] = None
249-
indent_level: Optional[int] = None
250-
line_number: Optional[int] = None
246+
regex: str | None = None
247+
prefix: str | None = None
248+
suffix: str | None = None
249+
indent_level: int | None = None
250+
line_number: int | None = None
251251

252252

253253
@dataclass
254254
class CaseAction:
255255
"""Represents a THEN action in a CASE statement"""
256-
loop_control: Optional[LoopControl] = None
256+
loop_control: LoopControl | None = None
257257
remove: bool = False
258-
replace: Optional[str] = None
259-
indent: Optional[int] = None
258+
replace: str | None = None
259+
indent: int | None = None
260260
content: Optional[str | tuple[Region, int | None]] = None
261261

262262

@@ -689,7 +689,7 @@ def parse_case_when(self, node) -> CaseWhen:
689689
if self.find_first_by_field_name(node, 'empty'):
690690
when.empty = True
691691
elif regex := self.find_first_by_field_name(node, 'regex'):
692-
when.regex = self.parse_string(regex)
692+
when.regex = re.compile(self.parse_string(regex))
693693
elif prefix := self.find_first_by_field_name(node, 'prefix'):
694694
when.prefix = self.parse_string(prefix)
695695
elif suffix := self.find_first_by_field_name(node, 'suffix'):
@@ -784,12 +784,12 @@ def parse_string(node):
784784
case x if x.startswith("r'''") or x.startswith('r"""'):
785785
text = text[4:-3]
786786
case x if x.startswith("r'") or x.startswith('r"'):
787-
text = text[3:-1]
787+
text = text[2:-1]
788788
case _:
789789
raise ValueError(f"Invalid raw string: `{text}`")
790790
case 'single_quoted_string':
791791
text = text[1:-1] # Remove surrounding quotes
792-
text = text.replace("\\'", "'").replace('\\"', '"').replace("\\t", '\t')
792+
text = text.replace(r"\'", "'").replace(r'\"', '"').replace(r"\t", '\t').replace("\\\\", "\\")
793793
case 'multi_line_string':
794794
text = text[3:-3]
795795

0 commit comments

Comments
 (0)