@@ -60,7 +60,7 @@ class Marker(MarkerCompatible):
6060 See also: Marker.to_search_range
6161 """
6262 type : MarkerType
63- value : str
63+ value : str | int | None
6464 offset : int | None = None
6565
6666 # See `line_base`
@@ -70,6 +70,15 @@ class Marker(MarkerCompatible):
7070 def as_marker (self ) -> 'Marker' :
7171 return self
7272
73+ def with_qualifier (self , qualifier : RelativePositionType ):
74+ return RelativeMarker (
75+ qualifier = qualifier ,
76+ type = self .type ,
77+ value = self .value ,
78+ offset = self .offset ,
79+ marker_subtype = self .marker_subtype
80+ ) if qualifier else self
81+
7382 def __str__ (self ):
7483 result = self .type .value
7584 match self .marker_subtype :
@@ -81,9 +90,9 @@ def __str__(self):
8190 result += f' { self .marker_subtype } '
8291
8392 if self .marker_subtype != 'empty' :
84- result += f" '{ self .value .strip ()} '"
93+ result += f" '{ str ( self .value ) .strip ()} '"
8594 if self .offset is not None :
86- result += f" at offset { self .offset } "
95+ result += f" ^ { self .offset } "
8796 return result
8897
8998
@@ -110,7 +119,7 @@ class Segment:
110119 end : RelativeMarker
111120
112121 def __str__ (self ):
113- return f"segment from ( { self .start } ) to ( { self .end } ) "
122+ return f"segment from [ { self .start } ] to [ { self .end } ] "
114123
115124
116125MarkerOrSegment : TypeAlias = Marker | Segment
@@ -596,9 +605,7 @@ def parse_region(self, node) -> Region:
596605 result = BodyOrWhole (bow .lower ())
597606 case _:
598607 raise ValueError (f"Unexpected node type: { node .type } " )
599- if qualifier :
600- result = RelativeMarker (qualifier = qualifier , type = result .type , value = result .value , offset = result .offset )
601- return result
608+ return result .with_qualifier (qualifier ) if qualifier else result
602609
603610 def parse_marker (self , node ) -> Marker :
604611 # Handle marker inside marker_or_segment
@@ -622,8 +629,8 @@ def parse_marker(self, node) -> Marker:
622629 marker_type = node .children [0 ].type .casefold ()
623630 value = self .find_primitive (node )
624631
625- node1 = self .find_first_by_type (node .named_children , 'offset_clause' )
626- offset = self .find_primitive (node1 )
632+ offset = self .find_first_by_type (node .named_children , 'offset_clause' )
633+ offset = self .find_primitive (offset )
627634 return Marker (
628635 type = MarkerType (marker_type .casefold ()),
629636 marker_subtype = marker_subtype ,
@@ -705,10 +712,10 @@ def parse_case_when(self, node) -> CaseWhen:
705712 when .empty = True
706713
707714 elif indent := self .find_first_by_field_name (node , 'indent_level' ):
708- when .indent_level = int (indent .text )
715+ when .indent_level = int (indent .text . decode ( 'utf8' ) )
709716
710717 elif line_num := self .find_first_by_field_name (node , 'line_number' ):
711- when .line_number = int (line_num .text )
718+ when .line_number = int (line_num .text . decode ( 'utf8' ) )
712719
713720 elif line_str := self .find_first_by_field_name (node , 'line_matcher' ):
714721 when .line_matcher = self .parse_string (line_str )
0 commit comments