@@ -55,7 +55,7 @@ def as_marker(self) -> 'Marker':
55
55
return self
56
56
57
57
def __str__ (self ):
58
- result = f"{ self .type .value } '{ self .value } '"
58
+ result = f"{ self .type .value } '{ self .value . strip () } '"
59
59
if self .offset is not None :
60
60
result += f" at offset { self .offset } "
61
61
return result
@@ -107,17 +107,20 @@ class SingleFileClause:
107
107
108
108
@dataclass
109
109
class IdentifierFromFile (SingleFileClause , MarkerCompatible ):
110
- where_clause : WhereClause
111
110
identifier_type : MarkerType # VARIABLE, FUNCTION, CLASS (but not LINE)
111
+ name : str
112
+ where_clause : WhereClause
112
113
offset : int | None = None
113
114
114
115
@property
115
116
def as_marker (self ) -> Marker :
116
117
# TODO Handle different values for field and operator in where_clause
117
- return Marker (self .identifier_type , self .where_clause .value , self .offset )
118
+ return Marker (self .identifier_type , self .name or self . where_clause .value , self .offset )
118
119
119
120
def __str__ (self ):
120
- result = f"{ str (self .identifier_type ).lower ()} ({ self .where_clause } )"
121
+ wc = self .where_clause
122
+ if wc : wc = f' ({ wc } )'
123
+ result = f"{ str (self .identifier_type ).lower ()} { self .name } { wc } "
121
124
if self .offset is not None :
122
125
result += f" at offset { self .offset } "
123
126
return f"{ result } from file { self .file_path } "
@@ -402,22 +405,28 @@ def parse_update_target(self, node):
402
405
raise ValueError (f"[parse_update_target] Invalid target: { invalid } " )
403
406
404
407
def parse_identifier_from_file (self , node ):
405
- identifier_type = MarkerType (node .children [0 ].type .casefold ())
408
+ identifier_marker = self .find_first_by_type (node .named_children , 'identifierMarker' )
409
+ identifier_type = MarkerType (identifier_marker .children [0 ].type .casefold ())
410
+ name = self .parse_string (identifier_marker .named_children [0 ])
411
+ offset_clause = self .find_first_by_type (identifier_marker .named_children , 'offset_clause' )
406
412
file_clause = self .find_first_by_type (node .named_children , 'singlefile_clause' )
407
413
where_clause = self .find_first_by_type (node .named_children , 'where_clause' )
408
- offset_clause = self .find_first_by_type (node .named_children , 'offset_clause' )
409
414
410
- if not file_clause or not where_clause :
415
+ if not file_clause or not name :
411
416
raise ValueError ("Invalid identifier_from_file clause" )
412
417
413
418
file_path = self .parse_singlefile_clause (file_clause ).file_path
414
- where = self .parse_where_clause (where_clause )
415
419
offset = self .parse_offset_clause (offset_clause ) if offset_clause else None
420
+ where = self .parse_where_clause (where_clause )
416
421
417
- return IdentifierFromFile (identifier_type = identifier_type , file_path = file_path ,
418
- where_clause = where , offset = offset )
422
+ return IdentifierFromFile (file_path = file_path ,
423
+ identifier_type = identifier_type , name = name , offset = offset ,
424
+ where_clause = where
425
+ )
419
426
420
427
def parse_where_clause (self , node ):
428
+ if not node :
429
+ return None
421
430
condition = self .find_first_by_type (node .children , 'condition' )
422
431
if not condition :
423
432
raise ValueError ("No condition found in where clause" )
@@ -596,11 +605,18 @@ def parse_string(node):
596
605
text = node .text .decode ('utf8' )
597
606
match node .type .casefold ():
598
607
case 'raw_string' :
599
- text = text .strip ('"\' ' )
608
+ match text :
609
+ case x if x .startswith ("r'''" ) or x .startswith ('r"""' ):
610
+ text = text [4 :- 3 ]
611
+ case x if x .startswith ("r'" ) or x .startswith ('r"' ):
612
+ text = text [3 :- 1 ]
613
+ case _:
614
+ raise ValueError (f"Invalid raw string: `{ text } `" )
600
615
case 'single_quoted_string' :
601
- text = text .replace ("\\ '" , "'" ).replace ('\\ "' , '"' ).strip ('"\' ' )
616
+ text = text [1 :- 1 ] # Remove surrounding quotes
617
+ text = text .replace ("\\ '" , "'" ).replace ('\\ "' , '"' ).replace ("\\ t" , '\t ' )
602
618
case 'multi_line_string' :
603
- text = text . removeprefix ( "'''" ). removeprefix ( '"""' ). removesuffix ( "'''" ). removesuffix ( '"""' )
619
+ text = text [ 3 : - 3 ]
604
620
605
621
return text
606
622
0 commit comments