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