diff --git a/src/solidlsp/language_servers/csharp_language_server/csharp_language_server.py b/src/solidlsp/language_servers/csharp_language_server/csharp_language_server.py index e356fe2..27dd9f5 100644 --- a/src/solidlsp/language_servers/csharp_language_server/csharp_language_server.py +++ b/src/solidlsp/language_servers/csharp_language_server/csharp_language_server.py @@ -516,7 +516,7 @@ class CSharpLanguageServer(SolidLanguageServer): return cast( InitializeParams, { - "worspaceFolders": [{"uri": root_uri, "name": root_name}], + "workspaceFolders": [{"uri": root_uri, "name": root_name}], "processId": os.getpid(), "rootPath": self.repository_root_path, "rootUri": root_uri, diff --git a/src/solidlsp/language_servers/intelephense/intelephense.py b/src/solidlsp/language_servers/intelephense/intelephense.py index 19eaa8b..796bb8a 100644 --- a/src/solidlsp/language_servers/intelephense/intelephense.py +++ b/src/solidlsp/language_servers/intelephense/intelephense.py @@ -6,6 +6,7 @@ import json import logging import os import pathlib +import platform import shutil import subprocess from time import sleep @@ -70,8 +71,8 @@ class Intelephense(SolidLanguageServer): # Windows doesn't support the 'user' parameter and doesn't have pwd module if PlatformUtils.get_platform_id().value.startswith("win"): subprocess.run( - dependency["command"], - shell=True, + dependency["command"].split(" "), + shell=False, check=True, cwd=intelephense_ls_dir, stdout=subprocess.DEVNULL, diff --git a/src/solidlsp/language_servers/typescript_language_server/typescript_language_server.py b/src/solidlsp/language_servers/typescript_language_server/typescript_language_server.py index f220406..21be15b 100644 --- a/src/solidlsp/language_servers/typescript_language_server/typescript_language_server.py +++ b/src/solidlsp/language_servers/typescript_language_server/typescript_language_server.py @@ -6,6 +6,7 @@ import json import logging import os import pathlib +import platform import shutil import subprocess import threading @@ -103,8 +104,8 @@ class TypeScriptLanguageServer(SolidLanguageServer): # Windows doesn't support the 'user' parameter and doesn't have pwd module if PlatformUtils.get_platform_id().value.startswith("win"): subprocess.run( - dependency["command"], - shell=True, + dependency["command"].split(" "), + shell=False, check=True, cwd=tsserver_ls_dir, stdout=subprocess.DEVNULL, diff --git a/src/solidlsp/ls_handler.py b/src/solidlsp/ls_handler.py index 65a5931..e6f9d6e 100644 --- a/src/solidlsp/ls_handler.py +++ b/src/solidlsp/ls_handler.py @@ -2,6 +2,7 @@ import asyncio import json import logging import os +import platform import subprocess import threading import time @@ -148,6 +149,7 @@ class SolidLanguageServerHandler: child_proc_env.update(self.process_launch_info.env) log.info("Starting language server process via command: %s", self.process_launch_info.cmd) + is_windows = platform.system() == "Windows" self.process = subprocess.Popen( self.process_launch_info.cmd, stdout=subprocess.PIPE, @@ -156,7 +158,7 @@ class SolidLanguageServerHandler: env=child_proc_env, cwd=self.process_launch_info.cwd, start_new_session=self.start_independent_lsp_process, - shell=True, + shell=not is_windows, ) # Check if process terminated immediately diff --git a/test/serena/test_serena_agent.py b/test/serena/test_serena_agent.py index 5741cab..bae716d 100644 --- a/test/serena/test_serena_agent.py +++ b/test/serena/test_serena_agent.py @@ -32,7 +32,16 @@ def serena_config(): """Create an in-memory configuration for tests with test repositories pre-registered.""" # Create test projects for all supported languages test_projects = [] - for language in [Language.PYTHON, Language.GO, Language.JAVA, Language.RUST, Language.TYPESCRIPT, Language.PHP, Language.CSHARP, Language.CLOJURE]: + for language in [ + Language.PYTHON, + Language.GO, + Language.JAVA, + Language.RUST, + Language.TYPESCRIPT, + Language.PHP, + Language.CSHARP, + Language.CLOJURE, + ]: repo_path = get_repo_path(language) if repo_path.exists(): project_name = f"test_repo_{language}"