skill-ls/skillls/main.py

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()