@@ -268,16 +268,18 @@ class CaseAction:
268
268
indent : int | None = None
269
269
content : Optional [str | tuple [Region , int | None ]] = None
270
270
271
+ class LineFilter :
272
+ pass
271
273
272
274
@dataclass
273
- class CaseStatement :
275
+ class CaseStatement ( LineFilter ) :
274
276
"""Represents a CASE statement with when-then pairs and optional else"""
275
277
cases : list [tuple [CaseWhen , CaseAction ]]
276
278
else_action : Optional [CaseAction ] = None
277
279
278
280
279
281
@dataclass
280
- class EdScript :
282
+ class EdScript ( LineFilter ) :
281
283
"""Represents an ED script content"""
282
284
script : str
283
285
@@ -643,7 +645,7 @@ def parse_relative_indentation(self, node) -> int | None:
643
645
644
646
def parse_content (self , node ) -> str | tuple [Region , int | None ] | None :
645
647
content = self .find_first_by_type (node .named_children , [
646
- 'content_literal' , 'content_from_segment' , 'ed_stmt' , 'case_stmt '
648
+ 'content_literal' , 'content_from_segment' , 'line_filter '
647
649
])
648
650
if not content :
649
651
return None
@@ -652,13 +654,27 @@ def parse_content(self, node) -> str | tuple[Region, int | None] | None:
652
654
return self .parse_content_literal (content ) # str
653
655
case 'content_from_segment' :
654
656
return self .parse_content_from_segment_clause (content ) # tuple[Region, int]
655
- case 'ed_stmt' :
656
- return self .parse_ed_stmt (content ) # EdScript
657
- case 'case_stmt' :
658
- return self .parse_case_stmt (content ) # CaseStatement
657
+ case 'line_filter' :
658
+ return self .parse_line_filter (content )
659
659
case _:
660
660
raise ValueError (f"Invalid content type: { content .type } " )
661
661
662
+ def parse_line_filter (self , node ) -> LineFilter :
663
+ node = node .named_children [0 ]
664
+ match node .type :
665
+ case 'ed_stmt' :
666
+ return self .parse_ed_stmt (node ) # EdScript
667
+ case 'case_stmt' :
668
+ return self .parse_case_stmt (node ) # CaseStatement
669
+
670
+
671
+ def parse_ed_stmt (self , node ) -> EdScript :
672
+ """Parse an ED script statement"""
673
+ ed_script = self .find_first_by_type (node .children , 'string' )
674
+ if ed_script is None :
675
+ raise ValueError ("No ED script found in ed_stmt" )
676
+ return EdScript (script = self .parse_string (ed_script ))
677
+
662
678
def parse_case_stmt (self , node ) -> CaseStatement :
663
679
"""Parse a CASE statement"""
664
680
cases = []
@@ -738,13 +754,6 @@ def parse_case_action(self, node) -> CaseAction:
738
754
739
755
return action
740
756
741
- def parse_ed_stmt (self , node ) -> EdScript :
742
- """Parse an ED script statement"""
743
- ed_script = self .find_first_by_type (node .children , 'string' )
744
- if ed_script is None :
745
- raise ValueError ("No ED script found in ed_stmt" )
746
- return EdScript (script = self .parse_string (ed_script ))
747
-
748
757
def parse_singlefile_clause (self , node ):
749
758
if node is None or node .type != 'singlefile_clause' :
750
759
raise ValueError ("Expected singlefile_clause node" )
0 commit comments