@@ -60,7 +60,7 @@ class Marker(MarkerCompatible):
60
60
See also: Marker.to_search_range
61
61
"""
62
62
type : MarkerType
63
- value : str
63
+ value : str | int | None
64
64
offset : int | None = None
65
65
66
66
# See `line_base`
@@ -70,6 +70,15 @@ class Marker(MarkerCompatible):
70
70
def as_marker (self ) -> 'Marker' :
71
71
return self
72
72
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
+
73
82
def __str__ (self ):
74
83
result = self .type .value
75
84
match self .marker_subtype :
@@ -81,9 +90,9 @@ def __str__(self):
81
90
result += f' { self .marker_subtype } '
82
91
83
92
if self .marker_subtype != 'empty' :
84
- result += f" '{ self .value .strip ()} '"
93
+ result += f" '{ str ( self .value ) .strip ()} '"
85
94
if self .offset is not None :
86
- result += f" at offset { self .offset } "
95
+ result += f" ^ { self .offset } "
87
96
return result
88
97
89
98
@@ -110,7 +119,7 @@ class Segment:
110
119
end : RelativeMarker
111
120
112
121
def __str__ (self ):
113
- return f"segment from ( { self .start } ) to ( { self .end } ) "
122
+ return f"segment from [ { self .start } ] to [ { self .end } ] "
114
123
115
124
116
125
MarkerOrSegment : TypeAlias = Marker | Segment
@@ -596,9 +605,7 @@ def parse_region(self, node) -> Region:
596
605
result = BodyOrWhole (bow .lower ())
597
606
case _:
598
607
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
602
609
603
610
def parse_marker (self , node ) -> Marker :
604
611
# Handle marker inside marker_or_segment
@@ -622,8 +629,8 @@ def parse_marker(self, node) -> Marker:
622
629
marker_type = node .children [0 ].type .casefold ()
623
630
value = self .find_primitive (node )
624
631
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 )
627
634
return Marker (
628
635
type = MarkerType (marker_type .casefold ()),
629
636
marker_subtype = marker_subtype ,
@@ -705,10 +712,10 @@ def parse_case_when(self, node) -> CaseWhen:
705
712
when .empty = True
706
713
707
714
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' ) )
709
716
710
717
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' ) )
712
719
713
720
elif line_str := self .find_first_by_field_name (node , 'line_matcher' ):
714
721
when .line_matcher = self .parse_string (line_str )
0 commit comments