mirror of
https://gitlab.gnome.org/jwestman/blueprint-compiler.git
synced 2025-05-04 15:59:08 -04:00
Formatter: Attempt at implementing into LSP (untested)
This commit is contained in:
parent
bf3917099a
commit
bce4fb77d9
2 changed files with 42 additions and 0 deletions
|
@ -27,6 +27,8 @@ from . import decompiler, parser, tokenizer, utils, xml_reader
|
||||||
from .ast_utils import AstNode
|
from .ast_utils import AstNode
|
||||||
from .completions import complete
|
from .completions import complete
|
||||||
from .errors import CompileError, MultipleErrors
|
from .errors import CompileError, MultipleErrors
|
||||||
|
from .formatter import Format
|
||||||
|
from difflib import SequenceMatcher
|
||||||
from .lsp_utils import *
|
from .lsp_utils import *
|
||||||
from .outputs.xml import XmlOutput
|
from .outputs.xml import XmlOutput
|
||||||
from .tokenizer import Token
|
from .tokenizer import Token
|
||||||
|
@ -276,6 +278,40 @@ class LanguageServer:
|
||||||
id, [completion.to_json(True) for completion in completions]
|
id, [completion.to_json(True) for completion in completions]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@command("textDocument/formatting")
|
||||||
|
def formatting(self, id, params):
|
||||||
|
open_file = self._open_files[params["textDocument"]["uri"]]
|
||||||
|
|
||||||
|
if open_file.text is None:
|
||||||
|
self._send_error(id, ErrorCode.RequestFailed, "Document is not open")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
XmlOutput().emit(open_file.ast)
|
||||||
|
except:
|
||||||
|
printerr(traceback.format_exc())
|
||||||
|
self._send_error(id, ErrorCode.RequestFailed, "Could not compile document")
|
||||||
|
return
|
||||||
|
|
||||||
|
formatted_blp = Format.format(
|
||||||
|
open_file.text,
|
||||||
|
params["options"]["tabSize"],
|
||||||
|
params["options"]["insertSpaces"],
|
||||||
|
)
|
||||||
|
|
||||||
|
lst = []
|
||||||
|
for tag, i1, i2, j1, j2 in SequenceMatcher(
|
||||||
|
None, open_file.text, formatted_blp
|
||||||
|
).get_opcodes():
|
||||||
|
if tag in ("replace", "insert", "delete"):
|
||||||
|
lst.append(
|
||||||
|
TextEdit(
|
||||||
|
Range(i1, i2), "" if tag == "delete" else formatted_blp[j1:j2]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
self._send_response(id, lst)
|
||||||
|
|
||||||
@command("textDocument/x-blueprint-compile")
|
@command("textDocument/x-blueprint-compile")
|
||||||
def compile(self, id, params):
|
def compile(self, id, params):
|
||||||
open_file = self._open_files[params["textDocument"]["uri"]]
|
open_file = self._open_files[params["textDocument"]["uri"]]
|
||||||
|
|
|
@ -184,3 +184,9 @@ class LocationLink:
|
||||||
"targetRange": self.target_range.to_json(),
|
"targetRange": self.target_range.to_json(),
|
||||||
"targetSelectionRange": self.target_selection_range.to_json(),
|
"targetSelectionRange": self.target_selection_range.to_json(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class TextEdit:
|
||||||
|
range: Range
|
||||||
|
newText: str
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue