mirror of
https://github.com/tiennm99/serena.git
synced 2026-10-13 08:15:59 +00:00
Support for using experimental language servers
This commit is contained in:
1 parent
cf866bb168
commit
b9aadb3455
3 files changed
+36
-17
No files matched your search
@@ -36,7 +36,7 @@ def determine_programming_language_composition(repo_path: str, rel_path_to_gitig
|
||||
language_counts: dict[str, int] = {}
|
||||
total_files = len(all_files)
|
||||
|
||||
for language in Language:
|
||||
for language in Language.iter_all(include_experimental=False):
|
||||
matcher = language.get_source_fn_matcher()
|
||||
count = 0
|
||||
|
||||
|
||||
+9
-13
@@ -118,16 +118,15 @@ class SolidLanguageServer(ABC):
|
||||
ls: SolidLanguageServer
|
||||
|
||||
if config.code_language == Language.PYTHON:
|
||||
# We can also use jedi
|
||||
# from solidlsp.language_servers.jedi_server import JediServer
|
||||
#
|
||||
# ls = JediServer(config, logger, repository_root_path)
|
||||
from solidlsp.language_servers.pyright_server import (
|
||||
PyrightServer,
|
||||
)
|
||||
|
||||
ls = PyrightServer(config, logger, repository_root_path)
|
||||
elif config.code_language == Language.PYTHON_JEDI:
|
||||
from solidlsp.language_servers.jedi_server import JediServer
|
||||
|
||||
ls = JediServer(config, logger, repository_root_path)
|
||||
elif config.code_language == Language.JAVA:
|
||||
from solidlsp.language_servers.eclipse_jdtls import (
|
||||
EclipseJDTLS,
|
||||
@@ -150,27 +149,24 @@ class SolidLanguageServer(ABC):
|
||||
ls = RustAnalyzer(config, logger, repository_root_path)
|
||||
|
||||
elif config.code_language == Language.CSHARP:
|
||||
# You can also switch to OmniSharp if you prefer that
|
||||
# But OmniSharp seems to crash and has some issues with newer C# versions
|
||||
# from solidlsp.language_servers.omnisharp.omnisharp import OmniSharp
|
||||
# ls = OmniSharp(config, logger, repository_root_path)
|
||||
|
||||
from solidlsp.language_servers.csharp_language_server import CSharpLanguageServer
|
||||
|
||||
ls = CSharpLanguageServer(config, logger, repository_root_path)
|
||||
elif config.code_language == Language.CSHARP_OMNISHARP:
|
||||
from solidlsp.language_servers.omnisharp.omnisharp import OmniSharp
|
||||
|
||||
ls = OmniSharp(config, logger, repository_root_path)
|
||||
elif config.code_language == Language.TYPESCRIPT:
|
||||
from solidlsp.language_servers.typescript_language_server import (
|
||||
TypeScriptLanguageServer,
|
||||
)
|
||||
|
||||
ls = TypeScriptLanguageServer(config, logger, repository_root_path)
|
||||
|
||||
elif config.code_language == Language.TYPESCRIPT_VTS:
|
||||
# VTS based Language Server implementation, need to experiment to see if it improves performance
|
||||
# from solidlsp.language_servers.vts_language_server import VtsLanguageServer
|
||||
#
|
||||
# ls = VtsLanguageServer(config, logger, repository_root_path)
|
||||
from solidlsp.language_servers.vts_language_server import VtsLanguageServer
|
||||
|
||||
ls = VtsLanguageServer(config, logger, repository_root_path)
|
||||
elif config.code_language == Language.GO:
|
||||
from solidlsp.language_servers.gopls import Gopls
|
||||
|
||||
|
||||
@@ -3,8 +3,10 @@ Configuration objects for language servers
|
||||
"""
|
||||
|
||||
import fnmatch
|
||||
from collections.abc import Iterable
|
||||
from dataclasses import dataclass, field
|
||||
from enum import Enum
|
||||
from typing import Self
|
||||
|
||||
|
||||
class FilenameMatcher:
|
||||
@@ -40,17 +42,38 @@ class Language(str, Enum):
|
||||
CLOJURE = "clojure"
|
||||
ELIXIR = "elixir"
|
||||
TERRAFORM = "terraform"
|
||||
# Experimental or deprecated Language Servers
|
||||
TYPESCRIPT_VTS = "typescript_vts"
|
||||
"""Use the typescript language server through the natively bundled vscode extension via https://github.com/yioneko/vtsls"""
|
||||
PYTHON_JEDI = "python_jedi"
|
||||
"""Jedi language server for Python (instead of pyright, which is the default)"""
|
||||
CSHARP_OMNISHARP = "csharp_omnisharp"
|
||||
"""OmniSharp language server for C# (instead of the default csharp-ls by microsoft).
|
||||
Currently has problems with finding references, and generally seems less stable and performant.
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def iter_all(cls, include_experimental: bool = False) -> Iterable[Self]:
|
||||
for lang in cls:
|
||||
if include_experimental or not lang.is_experimental():
|
||||
yield lang
|
||||
|
||||
def is_experimental(self) -> bool:
|
||||
"""
|
||||
Check if the language server is experimental or deprecated.
|
||||
"""
|
||||
return self in {self.TYPESCRIPT_VTS, self.PYTHON_JEDI, self.CSHARP_OMNISHARP}
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.value
|
||||
|
||||
def get_source_fn_matcher(self) -> FilenameMatcher:
|
||||
match self:
|
||||
case self.PYTHON:
|
||||
case self.PYTHON | self.PYTHON_JEDI:
|
||||
return FilenameMatcher("*.py", "*.pyi")
|
||||
case self.JAVA:
|
||||
return FilenameMatcher("*.java")
|
||||
case self.TYPESCRIPT:
|
||||
case self.TYPESCRIPT | self.TYPESCRIPT_VTS:
|
||||
# see https://github.com/oraios/serena/issues/204
|
||||
path_patterns = []
|
||||
for prefix in ["c", "m", ""]:
|
||||
@@ -58,7 +81,7 @@ class Language(str, Enum):
|
||||
for base_pattern in ["ts", "js"]:
|
||||
path_patterns.append(f"*.{prefix}{base_pattern}{postfix}")
|
||||
return FilenameMatcher(*path_patterns)
|
||||
case self.CSHARP:
|
||||
case self.CSHARP | self.CSHARP_OMNISHARP:
|
||||
return FilenameMatcher("*.cs")
|
||||
case self.RUST:
|
||||
return FilenameMatcher("*.rs")
|
||||
|
||||
Reference in new issue
Block a user