Refactor LSP manager and file handling

- Refactored LSPClient and LSPClientEvents to use workspace path and initialization options.
- Updated LSPManager to pass workspace path to client creation.
- Modified LSPManagerUI to handle user home paths and workspace configurations.
- Enhanced file handling to manage buffer and directory types.
- Introduced CreatedSourceViewEvent for source view creation event tracking.
- Added better error handling and logging for file operations.

Other minor UI and widget adjustments for improved layout and drag-and-drop handling.
This commit is contained in:
2026-03-29 14:04:56 -05:00
parent 12a5e4935e
commit bd277c0214
16 changed files with 126 additions and 57 deletions

View File

@@ -19,13 +19,10 @@ class LSPClient(LSPClientWebsocket):
def __init__(self):
super(LSPClient, self).__init__()
# https://github.com/microsoft/multilspy/tree/main/src/multilspy/language_servers
# initialize-params-slim.json was created off of jedi_language_server one
# self._init_params = settings_manager.get_lsp_init_data()
self._language: str = ""
self._workspace_path: str = ""
self._init_params: dict = {}
self._event_history: dict[int, str] = {}
self._init_opts: dict = {}
try:
_USER_HOME = path.expanduser('~')
@@ -33,19 +30,29 @@ class LSPClient(LSPClientWebsocket):
_LSP_INIT_CONFIG = f"{_SCRIPT_PTH}/../configs/initialize-params-slim.json"
with open(_LSP_INIT_CONFIG) as file:
data = file.read().replace("{user.home}", _USER_HOME)
data = file.read()
self._init_params = json.loads(data)
except Exception as e:
logger.error( f"LSP Controller: {_LSP_INIT_CONFIG}\n\t\t{repr(e)}" )
self._message_id: int = -1
self._socket = None
self.read_lock = threading.Lock()
self.write_lock = threading.Lock()
self._socket = None
self._message_id: int = -1
self._event_history: dict[int, str] = {}
self.read_lock = threading.Lock()
self.write_lock = threading.Lock()
def set_language(self, language: str):
self._language = language
def set_workspace_path(self, workspace_path: str):
self._workspace_path = workspace_path
def set_init_opts(self, init_opts: dict[str, str]):
self._init_opts = init_opts
def set_socket(self, socket: str):
self._socket = socket

View File

@@ -17,11 +17,12 @@ from ..dto.code.lsp.lsp_messages import symbols_request
class LSPClientEvents:
def send_initialize_message(self, init_ops: dict, workspace_file: str, workspace_uri: str):
folder_name = os.path.basename(workspace_file)
def send_initialize_message(self):
folder_name = os.path.basename(self._workspace_path)
workspace_uri = f"file://{self._workspace_path}"
self._init_params["processId"] = None
self._init_params["rootPath"] = workspace_file
self._init_params["rootPath"] = self._workspace_path
self._init_params["rootUri"] = workspace_uri
self._init_params["workspaceFolders"] = [
{
@@ -30,7 +31,7 @@ class LSPClientEvents:
}
]
self._init_params["initializationOptions"] = init_ops
self._init_params["initializationOptions"] = self._init_opts
self.send_request("initialize", self._init_params)
def send_initialized_message(self):