60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
from logging import INFO, basicConfig, getLogger
|
|
from time import time
|
|
from lsprotocol.types import (
|
|
TEXT_DOCUMENT_DID_OPEN,
|
|
TEXT_DOCUMENT_DID_SAVE,
|
|
TEXT_DOCUMENT_DOCUMENT_SYMBOL,
|
|
CompletionItem,
|
|
DidOpenTextDocumentParams,
|
|
DidSaveTextDocumentParams,
|
|
DocumentSymbol,
|
|
DocumentSymbolParams,
|
|
)
|
|
|
|
from pygls.server import LanguageServer
|
|
|
|
from skillls.parsing.iterative import IterativeParser, TokenParser
|
|
|
|
from .cache import Cache
|
|
|
|
|
|
URI = str
|
|
|
|
basicConfig(filename="skillls.log", level=INFO)
|
|
cache: Cache[str, CompletionItem] = Cache()
|
|
|
|
logger = getLogger(__name__)
|
|
server = LanguageServer("skillls", "v0.1")
|
|
|
|
|
|
@server.feature(TEXT_DOCUMENT_DOCUMENT_SYMBOL)
|
|
def on_hover(params: DocumentSymbolParams) -> list[DocumentSymbol]:
|
|
server.workspace.remove_text_document(params.text_document.uri)
|
|
doc = server.workspace.get_text_document(params.text_document.uri)
|
|
t = TokenParser()
|
|
t.prepare_content(doc.source)
|
|
|
|
return t._token_tree
|
|
|
|
|
|
@server.feature(TEXT_DOCUMENT_DID_OPEN)
|
|
def on_open(params: DidOpenTextDocumentParams) -> None:
|
|
doc = server.workspace.get_text_document(params.text_document.uri)
|
|
p = IterativeParser()
|
|
diags = p(doc.lines)
|
|
server.publish_diagnostics(params.text_document.uri, diags, version=int(time()))
|
|
|
|
|
|
@server.feature(TEXT_DOCUMENT_DID_SAVE)
|
|
def on_save(params: DidSaveTextDocumentParams) -> None:
|
|
server.workspace.remove_text_document(params.text_document.uri)
|
|
doc = server.workspace.get_text_document(params.text_document.uri)
|
|
p = IterativeParser()
|
|
diags = p(doc.lines)
|
|
logger.warning(doc.source)
|
|
server.publish_diagnostics(params.text_document.uri, diags, version=int(time()))
|
|
|
|
|
|
def main():
|
|
server.start_io()
|