@@ -25,6 +25,7 @@ class TextEditKind(Enum):
2525 """
2626
2727 REPLACEMENT = "replace"
28+ REPLACEMENT_LINES = "replace_lines"
2829 INSERTION = "insert"
2930 DELETION = "delete"
3031
@@ -54,18 +55,11 @@ class TextEdit:
5455 rule_id : str
5556 rule_name : str
5657 start_line : int
57- start_col : int | None
58- end_line : int | None
59- end_col : int | None
60- replacement : str | None
61-
62- @property
63- def kind (self ) -> TextEditKind :
64- if self .replacement is None :
65- return TextEditKind .DELETION
66- if self .end_line is None :
67- return TextEditKind .INSERTION
68- return TextEditKind .REPLACEMENT
58+ start_col : int
59+ end_line : int
60+ end_col : int
61+ replacement : str
62+ kind : TextEditKind = TextEditKind .REPLACEMENT
6963
7064 @classmethod
7165 def replace_at_range (cls , rule_id : str , rule_name : str , diag_range : Range , replacement : str ) -> TextEdit :
@@ -77,6 +71,7 @@ def replace_at_range(cls, rule_id: str, rule_name: str, diag_range: Range, repla
7771 end_line = diag_range .end .line ,
7872 end_col = diag_range .end .character ,
7973 replacement = replacement ,
74+ kind = TextEditKind .REPLACEMENT ,
8075 )
8176
8277 @classmethod
@@ -86,10 +81,11 @@ def replace_lines(cls, rule_id: str, rule_name: str, start_line: int, end_line:
8681 rule_id = rule_id ,
8782 rule_name = rule_name ,
8883 start_line = start_line ,
89- start_col = None ,
84+ start_col = 1 ,
9085 end_line = end_line ,
91- end_col = None ,
86+ end_col = 1 ,
9287 replacement = replacement ,
88+ kind = TextEditKind .REPLACEMENT_LINES ,
9389 )
9490
9591 @classmethod
@@ -99,10 +95,11 @@ def remove_at_range(cls, rule_id: str, rule_name: str, diag_range: Range) -> Tex
9995 rule_id = rule_id ,
10096 rule_name = rule_name ,
10197 start_line = diag_range .start .line ,
102- start_col = None ,
98+ start_col = 1 ,
10399 end_line = diag_range .end .line ,
104- end_col = None ,
105- replacement = None ,
100+ end_col = 1 ,
101+ replacement = "" ,
102+ kind = TextEditKind .DELETION ,
106103 )
107104
108105 @classmethod
@@ -112,10 +109,11 @@ def insert_at_range(cls, rule_id: str, rule_name: str, diag_range: Range, replac
112109 rule_id = rule_id ,
113110 rule_name = rule_name ,
114111 start_line = diag_range .start .line ,
115- start_col = None ,
116- end_line = None ,
117- end_col = None ,
112+ start_col = 1 ,
113+ end_line = 1 ,
114+ end_col = 1 ,
118115 replacement = replacement ,
116+ kind = TextEditKind .INSERTION ,
119117 )
120118
121119
@@ -288,17 +286,17 @@ def _apply_edit(lines: list[str], edit: TextEdit) -> None:
288286
289287 """
290288 # TODO: different kind of edits should have different apply_edit
291- if edit .kind == TextEditKind .REPLACEMENT :
292- if edit .end_line > len (lines ) or edit .start_line < 1 :
293- return
294- start_line_idx = edit .start_line - 1
295- end_line_idx = edit .end_line - 1
296- if edit .start_col is None or edit .end_col is None : # replace_lines
297- lines [start_line_idx : end_line_idx + 1 ] = edit .replacement .splitlines (keepends = True )
298- return
289+ if edit .end_line > len (lines ) or edit .start_line < 1 :
290+ return
291+
292+ start_line_idx = edit .start_line - 1
293+ end_line_idx = edit .end_line - 1
294+
295+ if edit .kind == TextEditKind .REPLACEMENT_LINES :
296+ lines [start_line_idx : end_line_idx + 1 ] = edit .replacement .splitlines (keepends = True )
297+ elif edit .kind == TextEditKind .REPLACEMENT :
299298 start_col_idx = edit .start_col - 1
300299 end_col_idx = edit .end_col - 1
301-
302300 if start_line_idx == end_line_idx : # single line
303301 line = lines [edit .start_line - 1 ]
304302 new_line = line [:start_col_idx ] + edit .replacement + line [end_col_idx :]
@@ -307,8 +305,6 @@ def _apply_edit(lines: list[str], edit: TextEdit) -> None:
307305 # When edit is multiline, we replace the lines fully
308306 lines [start_line_idx : end_line_idx + 2 ] = edit .replacement .splitlines (keepends = True )
309307 elif edit .kind == TextEditKind .INSERTION :
310- start_line_idx = edit .start_line - 1
311308 lines [start_line_idx :start_line_idx ] = edit .replacement .splitlines (keepends = True )
312- else : # edit.kind == TextEditKind.DELETION
313- start_line_idx = edit .start_line - 1
309+ elif edit .kind == TextEditKind .DELETION :
314310 del lines [start_line_idx : edit .end_line ]
0 commit comments