Skip to content

Commit c39ac16

Browse files
committed
Remove apply_text_edits from document method
1 parent 67b3ec9 commit c39ac16

File tree

2 files changed

+33
-34
lines changed

2 files changed

+33
-34
lines changed

pylsp/workspace.py

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,25 @@ def merge_sort_text_edits(text_edits):
188188
right_idx += 1
189189
return text_edits
190190

191+
def apply_text_edits(doc, text_edits):
192+
text = doc.source
193+
sorted_edits = merge_sort_text_edits(list(map(get_well_formatted_edit,text_edits)))
194+
last_modified_offset = 0
195+
spans = []
196+
for e in sorted_edits:
197+
start_offset = doc.offset_at_position(e['range']['start'])
198+
if start_offset < last_modified_offset:
199+
raise Exception('overlapping edit')
200+
elif start_offset > last_modified_offset:
201+
spans.append(text[last_modified_offset:start_offset])
202+
203+
if len(e['newText']):
204+
spans.append(e['newText'])
205+
last_modified_offset = doc.offset_at_position(e['range']['end'])
206+
207+
spans.append(text[last_modified_offset:])
208+
return ''.join(spans)
209+
191210
class Document:
192211

193212
def __init__(self, uri, workspace, source=None, version=None, local=True, extra_sys_path=None,
@@ -273,27 +292,7 @@ def apply_change(self, change):
273292
if i == end_line:
274293
new.write(line[end_col:])
275294

276-
self._source = new.getvalue()
277-
278-
@lock
279-
def apply_text_edits(self, text_edits):
280-
text = self._source
281-
sorted_edits = merge_sort_text_edits(list(map(get_well_formatted_edit,text_edits)))
282-
last_modified_offset = 0
283-
spans = []
284-
for e in sorted_edits:
285-
start_offset = self.offset_at_position(e['range']['start'])
286-
if start_offset < last_modified_offset:
287-
raise Exception('overlapping edit')
288-
elif start_offset > last_modified_offset:
289-
spans.append(text[last_modified_offset:start_offset])
290-
291-
if len(e['newText']):
292-
spans.append(e['newText'])
293-
last_modified_offset = self.offset_at_position(e['range']['end'])
294-
295-
spans.append(text[last_modified_offset:])
296-
return ''.join(spans)
295+
self._source = new.getvalue()
297296

298297
def offset_at_position(self, position):
299298
"""Return the byte-offset pointed at by the given position."""

test/test_workspace.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import pytest
66
from pylsp import uris
7-
7+
from pylsp.workspace import apply_text_edits
88

99
DOC_URI = uris.from_fs_path(__file__)
1010

@@ -299,7 +299,7 @@ def test_apply_text_edits_insert(pylsp):
299299
pylsp.workspace.put_document(DOC_URI, '012345678901234567890123456789')
300300
test_doc = pylsp.workspace.get_document(DOC_URI)
301301

302-
assert test_doc.apply_text_edits([{
302+
assert apply_text_edits(test_doc, [{
303303
"range": {
304304
"start": {
305305
"line": 0,
@@ -312,7 +312,7 @@ def test_apply_text_edits_insert(pylsp):
312312
},
313313
"newText": "Hello"
314314
}]) == 'Hello012345678901234567890123456789'
315-
assert test_doc.apply_text_edits([{
315+
assert apply_text_edits(test_doc, [{
316316
"range": {
317317
"start": {
318318
"line": 0,
@@ -325,7 +325,7 @@ def test_apply_text_edits_insert(pylsp):
325325
},
326326
"newText": "Hello"
327327
}]) == '0Hello12345678901234567890123456789'
328-
assert test_doc.apply_text_edits([{
328+
assert apply_text_edits(test_doc, [{
329329
"range": {
330330
"start": {
331331
"line": 0,
@@ -350,7 +350,7 @@ def test_apply_text_edits_insert(pylsp):
350350
},
351351
"newText": "World"
352352
}]) == '0HelloWorld12345678901234567890123456789'
353-
assert test_doc.apply_text_edits([{
353+
assert apply_text_edits(test_doc, [{
354354
"range": {
355355
"start": {
356356
"line": 0,
@@ -416,7 +416,7 @@ def test_apply_text_edits_replace(pylsp):
416416
pylsp.workspace.put_document(DOC_URI, '012345678901234567890123456789')
417417
test_doc = pylsp.workspace.get_document(DOC_URI)
418418

419-
assert test_doc.apply_text_edits([{
419+
assert apply_text_edits(test_doc, [{
420420
"range": {
421421
"start": {
422422
"line": 0,
@@ -429,7 +429,7 @@ def test_apply_text_edits_replace(pylsp):
429429
},
430430
"newText": "Hello"
431431
}]) == '012Hello678901234567890123456789'
432-
assert test_doc.apply_text_edits([{
432+
assert apply_text_edits(test_doc, [{
433433
"range": {
434434
"start": {
435435
"line": 0,
@@ -454,7 +454,7 @@ def test_apply_text_edits_replace(pylsp):
454454
},
455455
"newText": "World"
456456
}]) == '012HelloWorld901234567890123456789'
457-
assert test_doc.apply_text_edits([{
457+
assert apply_text_edits(test_doc, [{
458458
"range": {
459459
"start": {
460460
"line": 0,
@@ -479,7 +479,7 @@ def test_apply_text_edits_replace(pylsp):
479479
},
480480
"newText": "World"
481481
}]) == '012HelloWorld678901234567890123456789'
482-
assert test_doc.apply_text_edits([{
482+
assert apply_text_edits(test_doc, [{
483483
"range": {
484484
"start": {
485485
"line": 0,
@@ -504,7 +504,7 @@ def test_apply_text_edits_replace(pylsp):
504504
},
505505
"newText": "Hello"
506506
}]) == '012HelloWorld678901234567890123456789'
507-
assert test_doc.apply_text_edits([{
507+
assert apply_text_edits(test_doc, [{
508508
"range": {
509509
"start": {
510510
"line": 0,
@@ -537,7 +537,7 @@ def test_apply_text_edits_overlap(pylsp):
537537

538538
did_throw = False
539539
try:
540-
test_doc.apply_text_edits([{
540+
apply_text_edits(test_doc, [{
541541
"range": {
542542
"start": {
543543
"line": 0,
@@ -568,7 +568,7 @@ def test_apply_text_edits_overlap(pylsp):
568568
assert did_throw
569569

570570
try:
571-
test_doc.apply_text_edits([{
571+
apply_text_edits(test_doc, [{
572572
"range": {
573573
"start": {
574574
"line": 0,
@@ -602,7 +602,7 @@ def test_apply_text_edits_multiline(pylsp):
602602
pylsp.workspace.put_document(DOC_URI, '0\n1\n2\n3\n4')
603603
test_doc = pylsp.workspace.get_document(DOC_URI)
604604

605-
assert test_doc.apply_text_edits([{
605+
assert apply_text_edits(test_doc, [{
606606
"range": {
607607
"start": {
608608
"line": 2,

0 commit comments

Comments
 (0)