From d4e3f8f806d3fc71494dc4b34bbe2606de9aef99 Mon Sep 17 00:00:00 2001 From: christoph_xd Date: Wed, 16 Jul 2025 21:34:40 +0200 Subject: [PATCH] update completion feature --- .gitignore | 3 ++- server/src/common/completion_list.json | 14 ++++++------- server/src/common/load_data.py | 28 ++++++++++++++++++++++++++ server/src/lsp_server.py | 21 +++++-------------- 4 files changed, 42 insertions(+), 24 deletions(-) create mode 100644 server/src/common/load_data.py diff --git a/.gitignore b/.gitignore index b75d172..bbdd8dd 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ dist target .venv __pycache__ -*.pyc \ No newline at end of file +*.pyc +.nox \ No newline at end of file diff --git a/server/src/common/completion_list.json b/server/src/common/completion_list.json index d67c328..4af918f 100644 --- a/server/src/common/completion_list.json +++ b/server/src/common/completion_list.json @@ -1,11 +1,11 @@ { - "tcl": { - "keywords": [ - "proc", - "puts", - "if" - ] - }, + "tcl": [ + "proc", + "puts", + "if", + "else", + "elseif" + ], "MOM_procs": [ "MOM_output_literal", "MOM_ask_ude_info", diff --git a/server/src/common/load_data.py b/server/src/common/load_data.py new file mode 100644 index 0000000..4663526 --- /dev/null +++ b/server/src/common/load_data.py @@ -0,0 +1,28 @@ +import json +import lsprotocol.types as lsp +import pathlib + + +class StandardCompletionItems: + def __init__(self): + self.__tcl_keyword_list = self.load_tcl_keyword() + + @property + def tcl_keyword_list(self): + return self.__tcl_keyword_list + + def load_tcl_keyword(self) -> list[lsp.CompletionItem]: + with open( + pathlib.Path(__file__).parent.joinpath("completion_list.json"), "r" + ) as f: + data = json.load(f) + + items = [] + for i in data.get("tcl", []): + items.append( + lsp.CompletionItem(label=i, kind=lsp.CompletionItemKind.Keyword) + ) + return items + + +standard_items = StandardCompletionItems() diff --git a/server/src/lsp_server.py b/server/src/lsp_server.py index 84fd833..1b6051b 100644 --- a/server/src/lsp_server.py +++ b/server/src/lsp_server.py @@ -41,6 +41,7 @@ import lsp_jsonrpc as jsonrpc import lsp_utils as utils import lsprotocol.types as lsp from pygls import server, uris, workspace +from common.load_data import standard_items WORKSPACE_SETTINGS = {} GLOBAL_SETTINGS = {} @@ -51,7 +52,8 @@ LSP_SERVER = server.LanguageServer( name="NX Postprocessor Support", version="0.0.1", max_workers=MAX_WORKERS ) -KEYWORD_LIST = [] + +NX_PROC_LIST = [] # ********************************************************** # Tool specific code goes below this. @@ -93,21 +95,8 @@ def did_change(params: lsp.DidChangeTextDocumentParams) -> None: @LSP_SERVER.feature(lsp.TEXT_DOCUMENT_COMPLETION) -def on_completion(params: lsp.CompletionParams) -> lsp.CompletionItem: - items = [ - lsp.CompletionItem( - label="proc", - kind=lsp.CompletionItemKind.Keyword, - detail="TCL Procedure Definition", - documentation="Defines a new procedure in TCL", - ), - lsp.CompletionItem( - label="puts", - kind=lsp.CompletionItemKind.Function, - detail="Print to stdout", - documentation="Prints a string to the standard output in TCL", - ), - ] +def on_completion(params: lsp.CompletionParams) -> list[lsp.CompletionItem]: + items = standard_items.tcl_keyword_list return lsp.CompletionList(is_incomplete=False, items=items)