23
23
24
24
class Context :
25
25
"""Base type for objects that are valid as error message locations."""
26
- __slots__ = ('line' , 'column' , 'end_line' )
26
+ __slots__ = ('line' , 'column' , 'end_line' , 'end_column' )
27
27
28
28
def __init__ (self , line : int = - 1 , column : int = - 1 ) -> None :
29
29
self .line = line
30
30
self .column = column
31
31
self .end_line : Optional [int ] = None
32
+ self .end_column : Optional [int ] = None
32
33
33
34
def set_line (self ,
34
35
target : Union ['Context' , int ],
35
36
column : Optional [int ] = None ,
36
- end_line : Optional [int ] = None ) -> None :
37
+ end_line : Optional [int ] = None ,
38
+ end_column : Optional [int ] = None ) -> None :
37
39
"""If target is a node, pull line (and column) information
38
40
into this node. If column is specified, this will override any column
39
41
information coming from a node.
@@ -44,13 +46,17 @@ def set_line(self,
44
46
self .line = target .line
45
47
self .column = target .column
46
48
self .end_line = target .end_line
49
+ self .end_column = target .end_column
47
50
48
51
if column is not None :
49
52
self .column = column
50
53
51
54
if end_line is not None :
52
55
self .end_line = end_line
53
56
57
+ if end_column is not None :
58
+ self .end_column = end_column
59
+
54
60
def get_line (self ) -> int :
55
61
"""Don't use. Use x.line."""
56
62
return self .line
@@ -631,13 +637,16 @@ def __init__(self,
631
637
def set_line (self ,
632
638
target : Union [Context , int ],
633
639
column : Optional [int ] = None ,
634
- end_line : Optional [int ] = None ) -> None :
635
- super ().set_line (target , column , end_line )
640
+ end_line : Optional [int ] = None ,
641
+ end_column : Optional [int ] = None ) -> None :
642
+ super ().set_line (target , column , end_line , end_column )
636
643
637
644
if self .initializer and self .initializer .line < 0 :
638
- self .initializer .set_line (self .line , self .column , self .end_line )
645
+ self .initializer .set_line (
646
+ self .line , self .column , self .end_line , self .end_column )
639
647
640
- self .variable .set_line (self .line , self .column , self .end_line )
648
+ self .variable .set_line (
649
+ self .line , self .column , self .end_line , self .end_column )
641
650
642
651
643
652
FUNCITEM_FLAGS : Final = FUNCBASE_FLAGS + [
@@ -698,10 +707,11 @@ def max_fixed_argc(self) -> int:
698
707
def set_line (self ,
699
708
target : Union [Context , int ],
700
709
column : Optional [int ] = None ,
701
- end_line : Optional [int ] = None ) -> None :
702
- super ().set_line (target , column , end_line )
710
+ end_line : Optional [int ] = None ,
711
+ end_column : Optional [int ] = None ) -> None :
712
+ super ().set_line (target , column , end_line , end_column )
703
713
for arg in self .arguments :
704
- arg .set_line (self .line , self .column , self .end_line )
714
+ arg .set_line (self .line , self .column , self .end_line , end_column )
705
715
706
716
def is_dynamic (self ) -> bool :
707
717
return self .type is None
0 commit comments