Repository navigation
Expand file tree
/
Copy pathworkspace_edit_commands.py
More file actions
68 lines (63 loc) · 2.96 KB
/
Copy pathworkspace_edit_commands.py
File metadata and controls
68 lines (63 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from __future__ import annotations
from .libs.future_with_id import FutureWithId
import sublime_aio
from Mir import mir_logger, is_text_document_edit, parse_uri, is_text_edit, range_to_region, open_view, save_view, apply_text_document_edits
from Mir.types.lsp import WorkspaceEdit, TextEdit, AnnotatedTextEdit, SnippetTextEdit
import sublime
import sublime_plugin
# use `from Mir import apply_workspace_edit`
class mir_apply_workspace_edit_command(sublime_aio.ViewCommand):
async def run(self, future_id: str, workspace_edit: WorkspaceEdit):
try:
window = self.view.window()
if not window:
return
document_changes = workspace_edit.get('documentChanges')
if document_changes:
for change in document_changes:
was_open = False
if not is_text_document_edit(change):
mir_logger.info("Mir: TODO implement change", change)
continue
schema, file_path = parse_uri(change['textDocument']['uri'])
view = window.find_open_file(file_path)
if view:
was_open = True
else:
view = await open_view(file_path, window)
apply_text_document_edits(view, change['edits'])
await save_view(view)
if not was_open:
view.close()
return
changes = workspace_edit.get('changes')
if changes:
for uri, text_edits in changes.items():
was_open = False
schema, file_path = parse_uri(uri)
view = window.find_open_file(file_path)
if view:
was_open = True
else:
view = await open_view(file_path, window)
apply_text_document_edits(view, text_edits)
await save_view(view)
if not was_open:
view.close()
return
mir_logger.info('Mir: TODO implement workspace_edit for', document_changes)
finally:
future = FutureWithId.get(future_id)
if future:
future.set_result(None)
# use `from Mir import apply_text_document_edits` instead of mir_apply_text_document_edits_command
class mir_apply_text_document_edits_command(sublime_plugin.TextCommand):
def run(self, edit: sublime.Edit, edits: list[TextEdit | AnnotatedTextEdit | SnippetTextEdit]):
text_edits: list[TextEdit] = []
for e in edits:
if is_text_edit(e):
text_edits.append(e)
else:
mir_logger.info('Mir TODO implement edit for', e)
for text_edit in reversed(text_edits):
self.view.replace(edit, range_to_region(self.view, text_edit['range']), text_edit['newText'])