mirror of
https://github.com/tiennm99/serena.git
synced 2026-07-14 15:05:58 +00:00
Update language server imports to no longer use renames
This commit is contained in:
+4
-5
@@ -51,8 +51,7 @@ from serena.util.general import load_yaml, save_yaml
|
||||
from serena.util.inspection import determine_programming_language_composition, iter_subclasses
|
||||
from serena.util.shell import execute_shell_command
|
||||
from serena.util.thread import ExecutionResult, execute_with_timeout
|
||||
from solidlsp import SolidLanguageServer as SyncLanguageServer
|
||||
from solidlsp.ls import SolidLanguageServer
|
||||
from solidlsp import SolidLanguageServer
|
||||
from solidlsp.multilspy_config import Language, MultilspyConfig
|
||||
from solidlsp.multilspy_logger import MultilspyLogger
|
||||
from solidlsp.multilspy_types import SymbolKind
|
||||
@@ -640,7 +639,7 @@ def create_ls_for_project(
|
||||
log_level: int = logging.INFO,
|
||||
ls_timeout: float | None = DEFAULT_TOOL_TIMEOUT - 5,
|
||||
trace_lsp_communication: bool = False,
|
||||
) -> SyncLanguageServer:
|
||||
) -> SolidLanguageServer:
|
||||
"""
|
||||
Create a language server for a project. Note that you will have to start it
|
||||
before performing any LS operations.
|
||||
@@ -789,7 +788,7 @@ class SerenaAgent:
|
||||
# project-specific instances, which will be initialized upon project activation
|
||||
self._active_project: Project | None = None
|
||||
self._active_project_root: str | None = None
|
||||
self.language_server: SyncLanguageServer | None = None
|
||||
self.language_server: SolidLanguageServer | None = None
|
||||
self.symbol_manager: SymbolManager | None = None
|
||||
self.memories_manager: MemoriesManager | None = None
|
||||
self.lines_read: LinesRead | None = None
|
||||
@@ -1135,7 +1134,7 @@ class Component(ABC):
|
||||
self.agent = agent
|
||||
|
||||
@property
|
||||
def language_server(self) -> SyncLanguageServer:
|
||||
def language_server(self) -> SolidLanguageServer:
|
||||
assert self.agent.language_server is not None
|
||||
return self.agent.language_server
|
||||
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ from serena.agent import (
|
||||
show_fatal_exception_safe,
|
||||
)
|
||||
from serena.config import RegisteredContext, SerenaAgentContext, SerenaAgentMode
|
||||
from serena.constants import DEFAULT_CONTEXT, DEFAULT_MODES, USE_SOLID_LSP, USE_PROCESS_ISOLATION
|
||||
from serena.constants import DEFAULT_CONTEXT, DEFAULT_MODES, USE_PROCESS_ISOLATION
|
||||
from serena.process_isolated_agent import (
|
||||
ProcessIsolatedDashboard,
|
||||
ProcessIsolatedSerenaAgent,
|
||||
|
||||
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any, Literal, NamedTuple, Self, Union
|
||||
|
||||
from sensai.util.string import ToStringMixin
|
||||
|
||||
from solidlsp import SolidLanguageServer as SyncLanguageServer
|
||||
from solidlsp import SolidLanguageServer
|
||||
from solidlsp.ls import ReferenceInSymbol as LSPReferenceInSymbol
|
||||
from solidlsp.multilspy_types import Position, SymbolKind, UnifiedSymbolInformation
|
||||
|
||||
@@ -488,7 +488,7 @@ class ReferenceInSymbol(ToStringMixin):
|
||||
|
||||
|
||||
class SymbolManager:
|
||||
def __init__(self, lang_server: SyncLanguageServer, agent: Union["SerenaAgent", None] = None) -> None:
|
||||
def __init__(self, lang_server: SolidLanguageServer, agent: Union["SerenaAgent", None] = None) -> None:
|
||||
"""
|
||||
:param lang_server: the language server to use for symbol retrieval as well as editing operations.
|
||||
:param agent: the agent to use (only needed for marking files as modified). You can pass None if you don't
|
||||
@@ -497,7 +497,7 @@ class SymbolManager:
|
||||
self._lang_server = lang_server
|
||||
self.agent = agent
|
||||
|
||||
def set_language_server(self, lang_server: SyncLanguageServer) -> None:
|
||||
def set_language_server(self, lang_server: SolidLanguageServer) -> None:
|
||||
"""
|
||||
Set the language server to use for symbol retrieval and editing operations.
|
||||
This is useful if you want to change the language server after initializing the SymbolManager.
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
# ruff: noqa
|
||||
from .ls import SolidLanguageServer
|
||||
|
||||
+2
-5
@@ -1,12 +1,9 @@
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from typing import cast
|
||||
|
||||
import pytest
|
||||
from sensai.util.logging import configure
|
||||
|
||||
from solidlsp import SolidLanguageServer as SyncLanguageServer
|
||||
from serena.constants import USE_SOLID_LSP
|
||||
from serena.util.file_system import GitignoreParser
|
||||
from solidlsp.ls import SolidLanguageServer
|
||||
from solidlsp.multilspy_config import Language, MultilspyConfig
|
||||
@@ -36,7 +33,7 @@ def create_ls(
|
||||
ignored_paths: list[str] | None = None,
|
||||
trace_lsp_communication: bool = False,
|
||||
log_level: int = logging.INFO,
|
||||
) -> SyncLanguageServer:
|
||||
) -> SolidLanguageServer:
|
||||
ignored_paths = ignored_paths or []
|
||||
if repo_path is None:
|
||||
repo_path = str(get_repo_path(language))
|
||||
@@ -48,7 +45,7 @@ def create_ls(
|
||||
return SolidLanguageServer.create(config, logger, repo_path)
|
||||
|
||||
|
||||
def create_default_ls(language: Language) -> SyncLanguageServer:
|
||||
def create_default_ls(language: Language) -> SolidLanguageServer:
|
||||
repo_path = str(get_repo_path(language))
|
||||
return create_ls(language, repo_path)
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import os
|
||||
|
||||
import pytest
|
||||
|
||||
from solidlsp import SolidLanguageServer as SyncLanguageServer
|
||||
from solidlsp import SolidLanguageServer
|
||||
from solidlsp.multilspy_config import Language
|
||||
from solidlsp.multilspy_utils import SymbolUtils
|
||||
|
||||
@@ -10,14 +10,14 @@ from solidlsp.multilspy_utils import SymbolUtils
|
||||
@pytest.mark.go
|
||||
class TestGoLanguageServer:
|
||||
@pytest.mark.parametrize("language_server", [Language.GO], indirect=True)
|
||||
def test_find_symbol(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_find_symbol(self, language_server: SolidLanguageServer) -> None:
|
||||
symbols = language_server.request_full_symbol_tree()
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "main"), "main function not found in symbol tree"
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "Helper"), "Helper function not found in symbol tree"
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "DemoStruct"), "DemoStruct not found in symbol tree"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.GO], indirect=True)
|
||||
def test_find_referencing_symbols(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_find_referencing_symbols(self, language_server: SolidLanguageServer) -> None:
|
||||
file_path = os.path.join("main.go")
|
||||
symbols = language_server.request_document_symbols(file_path)
|
||||
helper_symbol = None
|
||||
|
||||
@@ -2,7 +2,7 @@ import os
|
||||
|
||||
import pytest
|
||||
|
||||
from solidlsp import SolidLanguageServer as SyncLanguageServer
|
||||
from solidlsp import SolidLanguageServer
|
||||
from solidlsp.multilspy_config import Language
|
||||
from solidlsp.multilspy_utils import SymbolUtils
|
||||
|
||||
@@ -10,14 +10,14 @@ from solidlsp.multilspy_utils import SymbolUtils
|
||||
@pytest.mark.java
|
||||
class TestJavaLanguageServer:
|
||||
@pytest.mark.parametrize("language_server", [Language.JAVA], indirect=True)
|
||||
def test_find_symbol(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_find_symbol(self, language_server: SolidLanguageServer) -> None:
|
||||
symbols = language_server.request_full_symbol_tree()
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "Main"), "Main class not found in symbol tree"
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "Utils"), "Utils class not found in symbol tree"
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "Model"), "Model class not found in symbol tree"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.JAVA], indirect=True)
|
||||
def test_find_referencing_symbols(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_find_referencing_symbols(self, language_server: SolidLanguageServer) -> None:
|
||||
# Use correct Maven/Java file paths
|
||||
file_path = os.path.join("src", "main", "java", "test_repo", "Utils.java")
|
||||
refs = language_server.request_references(file_path, 4, 20)
|
||||
@@ -43,7 +43,7 @@ class TestJavaLanguageServer:
|
||||
), "Main should reference Model (tried all positions in selectionRange)"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.JAVA], indirect=True)
|
||||
def test_overview_methods(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_overview_methods(self, language_server: SolidLanguageServer) -> None:
|
||||
symbols = language_server.request_full_symbol_tree()
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "Main"), "Main missing from overview"
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "Utils"), "Utils missing from overview"
|
||||
|
||||
@@ -2,7 +2,7 @@ from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from solidlsp import SolidLanguageServer as SyncLanguageServer
|
||||
from solidlsp import SolidLanguageServer
|
||||
from solidlsp.multilspy_config import Language
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ from solidlsp.multilspy_config import Language
|
||||
class TestPhpLanguageServer:
|
||||
@pytest.mark.parametrize("language_server", [Language.PHP], indirect=True)
|
||||
@pytest.mark.parametrize("repo_path", [Language.PHP], indirect=True)
|
||||
def test_ls_is_running(self, language_server: SyncLanguageServer, repo_path: Path) -> None:
|
||||
def test_ls_is_running(self, language_server: SolidLanguageServer, repo_path: Path) -> None:
|
||||
"""Test that the language server starts and stops successfully."""
|
||||
# The fixture already handles start and stop
|
||||
assert language_server.is_running()
|
||||
@@ -18,7 +18,7 @@ class TestPhpLanguageServer:
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PHP], indirect=True)
|
||||
@pytest.mark.parametrize("repo_path", [Language.PHP], indirect=True)
|
||||
def test_find_definition_within_file(self, language_server: SyncLanguageServer, repo_path: Path) -> None:
|
||||
def test_find_definition_within_file(self, language_server: SolidLanguageServer, repo_path: Path) -> None:
|
||||
|
||||
# In index.php:
|
||||
# Line 9 (1-indexed): $greeting = greet($userName);
|
||||
@@ -41,7 +41,7 @@ class TestPhpLanguageServer:
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PHP], indirect=True)
|
||||
@pytest.mark.parametrize("repo_path", [Language.PHP], indirect=True)
|
||||
def test_find_definition_across_files(self, language_server: SyncLanguageServer, repo_path: Path) -> None:
|
||||
def test_find_definition_across_files(self, language_server: SolidLanguageServer, repo_path: Path) -> None:
|
||||
definition_location_list = language_server.request_definition(str(repo_path / "index.php"), 12, 5) # helperFunction
|
||||
|
||||
assert definition_location_list, f"Expected non-empty definition_location_list but got {definition_location_list=}"
|
||||
@@ -53,7 +53,7 @@ class TestPhpLanguageServer:
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PHP], indirect=True)
|
||||
@pytest.mark.parametrize("repo_path", [Language.PHP], indirect=True)
|
||||
def test_find_definition_simple_variable(self, language_server: SyncLanguageServer, repo_path: Path) -> None:
|
||||
def test_find_definition_simple_variable(self, language_server: SolidLanguageServer, repo_path: Path) -> None:
|
||||
file_path = str(repo_path / "simple_var.php")
|
||||
|
||||
# In simple_var.php:
|
||||
@@ -74,7 +74,7 @@ class TestPhpLanguageServer:
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PHP], indirect=True)
|
||||
@pytest.mark.parametrize("repo_path", [Language.PHP], indirect=True)
|
||||
def test_find_references_within_file(self, language_server: SyncLanguageServer, repo_path: Path) -> None:
|
||||
def test_find_references_within_file(self, language_server: SolidLanguageServer, repo_path: Path) -> None:
|
||||
index_php_path = str(repo_path / "index.php")
|
||||
|
||||
# In index.php (0-indexed lines):
|
||||
@@ -108,7 +108,7 @@ class TestPhpLanguageServer:
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PHP], indirect=True)
|
||||
@pytest.mark.parametrize("repo_path", [Language.PHP], indirect=True)
|
||||
def test_find_references_across_files(self, language_server: SyncLanguageServer, repo_path: Path) -> None:
|
||||
def test_find_references_across_files(self, language_server: SolidLanguageServer, repo_path: Path) -> None:
|
||||
helper_php_path = str(repo_path / "helper.php")
|
||||
# In index.php (0-indexed lines):
|
||||
# Line 13: helperFunction(); // Usage of helperFunction
|
||||
|
||||
@@ -9,8 +9,8 @@ import os
|
||||
|
||||
import pytest
|
||||
|
||||
from solidlsp import SolidLanguageServer as SyncLanguageServer
|
||||
from serena.text_utils import LineType
|
||||
from solidlsp import SolidLanguageServer
|
||||
from solidlsp.multilspy_config import Language
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ class TestLanguageServerBasics:
|
||||
"""Test basic functionality of the language server."""
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_references_user_class(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_references_user_class(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_references on the User class."""
|
||||
# Get references to the User class in models.py
|
||||
file_path = os.path.join("test_repo", "models.py")
|
||||
@@ -34,7 +34,7 @@ class TestLanguageServerBasics:
|
||||
assert len(references) > 1, "User class should be referenced in multiple files (using selectionRange if present)"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_references_item_class(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_references_item_class(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_references on the Item class."""
|
||||
# Get references to the Item class in models.py
|
||||
file_path = os.path.join("test_repo", "models.py")
|
||||
@@ -50,7 +50,7 @@ class TestLanguageServerBasics:
|
||||
assert len(services_references) > 0, "At least one reference should be in services.py (using selectionRange if present)"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_references_function_parameter(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_references_function_parameter(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_references on a function parameter."""
|
||||
# Get references to the id parameter in get_user method
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
@@ -65,7 +65,7 @@ class TestLanguageServerBasics:
|
||||
assert len(references) > 0, "id parameter should be referenced within the method (using selectionRange if present)"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_references_create_user_method(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_references_create_user_method(self, language_server: SolidLanguageServer) -> None:
|
||||
# Get references to the create_user method in UserService
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
# Line 15 contains the create_user method definition
|
||||
@@ -79,7 +79,7 @@ class TestLanguageServerBasics:
|
||||
assert len(references) > 1, "Should get valid references for create_user (using selectionRange if present)"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_retrieve_content_around_line(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_retrieve_content_around_line(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test retrieve_content_around_line functionality with various scenarios."""
|
||||
file_path = os.path.join("test_repo", "models.py")
|
||||
|
||||
@@ -186,7 +186,7 @@ class TestLanguageServerBasics:
|
||||
assert line.match_type == LineType.AFTER_MATCH
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_search_files_for_pattern(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_search_files_for_pattern(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test search_files_for_pattern with various patterns and glob filters."""
|
||||
# Test 1: Search for class definitions across all files
|
||||
class_pattern = r"class\s+\w+\s*(?:\([^{]*\)|:)"
|
||||
|
||||
@@ -3,7 +3,7 @@ from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from solidlsp import SolidLanguageServer as SyncLanguageServer
|
||||
from solidlsp import SolidLanguageServer
|
||||
from solidlsp.multilspy_config import Language
|
||||
from test.conftest import create_ls
|
||||
|
||||
@@ -12,7 +12,7 @@ pytestmark = pytest.mark.python
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def ls_with_ignored_dirs() -> Generator[SyncLanguageServer, None, None]:
|
||||
def ls_with_ignored_dirs() -> Generator[SolidLanguageServer, None, None]:
|
||||
"""Fixture to set up an LS for the python test repo with the 'scripts' directory ignored."""
|
||||
ignored_paths = ["scripts", "custom_test"]
|
||||
ls = create_ls(ignored_paths=ignored_paths, language=Language.PYTHON)
|
||||
@@ -24,7 +24,7 @@ def ls_with_ignored_dirs() -> Generator[SyncLanguageServer, None, None]:
|
||||
|
||||
|
||||
@pytest.mark.parametrize("ls_with_ignored_dirs", [Language.PYTHON], indirect=True)
|
||||
def test_symbol_tree_ignores_dir(ls_with_ignored_dirs: SyncLanguageServer):
|
||||
def test_symbol_tree_ignores_dir(ls_with_ignored_dirs: SolidLanguageServer):
|
||||
"""Tests that request_full_symbol_tree ignores the configured directory."""
|
||||
root = ls_with_ignored_dirs.request_full_symbol_tree()[0]
|
||||
root_children = root["children"]
|
||||
@@ -33,7 +33,7 @@ def test_symbol_tree_ignores_dir(ls_with_ignored_dirs: SyncLanguageServer):
|
||||
|
||||
|
||||
@pytest.mark.parametrize("ls_with_ignored_dirs", [Language.PYTHON], indirect=True)
|
||||
def test_find_references_ignores_dir(ls_with_ignored_dirs: SyncLanguageServer):
|
||||
def test_find_references_ignores_dir(ls_with_ignored_dirs: SolidLanguageServer):
|
||||
"""Tests that find_references ignores the configured directory."""
|
||||
# Location of Item, which is referenced in scripts
|
||||
definition_file = "test_repo/models.py"
|
||||
|
||||
@@ -10,7 +10,7 @@ import os
|
||||
|
||||
import pytest
|
||||
|
||||
from solidlsp import SolidLanguageServer as SyncLanguageServer
|
||||
from solidlsp import SolidLanguageServer
|
||||
from solidlsp.multilspy_config import Language
|
||||
from solidlsp.multilspy_types import SymbolKind
|
||||
|
||||
@@ -21,7 +21,7 @@ class TestLanguageServerSymbols:
|
||||
"""Test the language server's symbol-related functionality."""
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_containing_symbol_function(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_containing_symbol_function(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_containing_symbol for a function."""
|
||||
# Test for a position inside the create_user method
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
@@ -36,7 +36,7 @@ class TestLanguageServerSymbols:
|
||||
assert containing_symbol["body"].strip().startswith("def create_user(self")
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_references_to_variables(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_references_to_variables(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_referencing_symbols for a variable."""
|
||||
file_path = os.path.join("test_repo", "variables.py")
|
||||
# Line 75 contains the field status that is later modified
|
||||
@@ -51,7 +51,7 @@ class TestLanguageServerSymbols:
|
||||
assert "second_dataclass" in ref_names
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_containing_symbol_class(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_containing_symbol_class(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_containing_symbol for a class."""
|
||||
# Test for a position inside the UserService class but outside any method
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
@@ -64,7 +64,7 @@ class TestLanguageServerSymbols:
|
||||
assert containing_symbol["kind"] == SymbolKind.Class
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_containing_symbol_nested(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_containing_symbol_nested(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_containing_symbol with nested scopes."""
|
||||
# Test for a position inside a method which is inside a class
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
@@ -90,7 +90,7 @@ class TestLanguageServerSymbols:
|
||||
assert parent_symbol["kind"] == SymbolKind.Class
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_containing_symbol_none(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_containing_symbol_none(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_containing_symbol for a position with no containing symbol."""
|
||||
# Test for a position outside any function/class (e.g., in imports)
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
@@ -101,7 +101,7 @@ class TestLanguageServerSymbols:
|
||||
assert containing_symbol is None or containing_symbol == {}
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_referencing_symbols_function(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_referencing_symbols_function(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_referencing_symbols for a function."""
|
||||
# Test referencing symbols for create_user function
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
@@ -125,7 +125,7 @@ class TestLanguageServerSymbols:
|
||||
assert "end" in symbol["location"]["range"]
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_referencing_symbols_class(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_referencing_symbols_class(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_referencing_symbols for a class."""
|
||||
# Test referencing symbols for User class
|
||||
file_path = os.path.join("test_repo", "models.py")
|
||||
@@ -146,7 +146,7 @@ class TestLanguageServerSymbols:
|
||||
assert len(services_references) > 0, "No referencing symbols from services.py for User (selectionRange)"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_referencing_symbols_parameter(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_referencing_symbols_parameter(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_referencing_symbols for a function parameter."""
|
||||
# Test referencing symbols for id parameter in get_user
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
@@ -167,7 +167,7 @@ class TestLanguageServerSymbols:
|
||||
assert len(method_refs) > 0, "No referencing symbols within method body for get_user (selectionRange)"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_referencing_symbols_none(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_referencing_symbols_none(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_referencing_symbols for a position with no symbol."""
|
||||
# For positions with no symbol, the method might throw an error or return None/empty list
|
||||
# We'll modify our test to handle this by using a try-except block
|
||||
@@ -185,7 +185,7 @@ class TestLanguageServerSymbols:
|
||||
|
||||
# Tests for request_defining_symbol
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_defining_symbol_variable(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_defining_symbol_variable(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_defining_symbol for a variable usage."""
|
||||
# Test finding the definition of a symbol in the create_user method
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
@@ -204,7 +204,7 @@ class TestLanguageServerSymbols:
|
||||
assert "services.py" in defining_symbol["location"]["uri"]
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_defining_symbol_imported_class(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_defining_symbol_imported_class(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_defining_symbol for an imported class."""
|
||||
# Test finding the definition of the 'User' class used in the UserService.create_user method
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
@@ -216,7 +216,7 @@ class TestLanguageServerSymbols:
|
||||
assert defining_symbol.get("name") == "User"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_defining_symbol_method_call(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_defining_symbol_method_call(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_defining_symbol for a method call."""
|
||||
# Create an example file path for a file that calls UserService.create_user
|
||||
examples_file_path = os.path.join("examples", "user_management.py")
|
||||
@@ -241,7 +241,7 @@ class TestLanguageServerSymbols:
|
||||
warnings.warn("Could not verify method call definition - file structure may differ from expected")
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_defining_symbol_none(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_defining_symbol_none(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_defining_symbol for a position with no symbol."""
|
||||
# Test for a position with no symbol (e.g., whitespace or comment)
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
@@ -252,7 +252,7 @@ class TestLanguageServerSymbols:
|
||||
assert defining_symbol is None
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_containing_symbol_variable(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_containing_symbol_variable(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_containing_symbol where the symbol is a variable."""
|
||||
# Test for a position inside a variable definition
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
@@ -265,7 +265,7 @@ class TestLanguageServerSymbols:
|
||||
assert containing_symbol["kind"] == SymbolKind.Variable
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_defining_symbol_nested_function(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_defining_symbol_nested_function(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test request_defining_symbol for a nested function or closure."""
|
||||
# Use the existing nested.py file which contains nested classes and methods
|
||||
file_path = os.path.join("test_repo", "nested.py")
|
||||
@@ -316,7 +316,7 @@ class TestLanguageServerSymbols:
|
||||
assert defining_symbol.get("kind") == SymbolKind.Function.value
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_symbol_methods_integration(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_symbol_methods_integration(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test the integration between different symbol-related methods."""
|
||||
# This test demonstrates using the various symbol methods together
|
||||
# by finding a symbol and then checking its definition
|
||||
@@ -365,7 +365,7 @@ class TestLanguageServerSymbols:
|
||||
warnings.warn("Could not verify container hierarchy - implementation detail")
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_symbol_tree_structure(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_symbol_tree_structure(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test that the symbol tree structure is correctly built."""
|
||||
# Get all symbols in the test file
|
||||
repo_structure = language_server.request_full_symbol_tree()
|
||||
@@ -393,7 +393,7 @@ class TestLanguageServerSymbols:
|
||||
assert user_management_roots == user_management_node["children"]
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_symbol_tree_structure_subdir(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_symbol_tree_structure_subdir(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test that the symbol tree structure is correctly built."""
|
||||
# Get all symbols in the test file
|
||||
examples_package_roots = language_server.request_full_symbol_tree(within_relative_path="examples")
|
||||
@@ -414,7 +414,7 @@ class TestLanguageServerSymbols:
|
||||
assert user_management_roots == user_management_node["children"]
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_dir_overview(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_dir_overview(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test that request_dir_overview returns correct symbol information for files in a directory."""
|
||||
# Get overview of the examples directory
|
||||
overview = language_server.request_dir_overview("test_repo")
|
||||
@@ -439,7 +439,7 @@ class TestLanguageServerSymbols:
|
||||
assert symbol in services_symbols
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_request_document_overview(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_request_document_overview(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test that request_document_overview returns correct symbol information for a file."""
|
||||
# Get overview of the user_management.py file
|
||||
overview = language_server.request_document_overview(os.path.join("examples", "user_management.py"))
|
||||
@@ -449,7 +449,7 @@ class TestLanguageServerSymbols:
|
||||
assert {"UserStats", "UserManager", "process_user_data", "main"}.issubset(symbol_names)
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_containing_symbol_of_var_is_file(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_containing_symbol_of_var_is_file(self, language_server: SolidLanguageServer) -> None:
|
||||
"""Test that the containing symbol of a variable is the file itself."""
|
||||
# Get the containing symbol of a variable in a file
|
||||
file_path = os.path.join("test_repo", "services.py")
|
||||
|
||||
@@ -2,7 +2,7 @@ import os
|
||||
|
||||
import pytest
|
||||
|
||||
from solidlsp import SolidLanguageServer as SyncLanguageServer
|
||||
from solidlsp import SolidLanguageServer
|
||||
from solidlsp.multilspy_config import Language
|
||||
from solidlsp.multilspy_utils import SymbolUtils
|
||||
|
||||
@@ -10,7 +10,7 @@ from solidlsp.multilspy_utils import SymbolUtils
|
||||
@pytest.mark.rust
|
||||
class TestRustLanguageServer:
|
||||
@pytest.mark.parametrize("language_server", [Language.RUST], indirect=True)
|
||||
def test_find_references_raw(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_find_references_raw(self, language_server: SolidLanguageServer) -> None:
|
||||
# Directly test the request_references method for the add function
|
||||
file_path = os.path.join("src", "lib.rs")
|
||||
symbols = language_server.request_document_symbols(file_path)
|
||||
@@ -27,14 +27,14 @@ class TestRustLanguageServer:
|
||||
), "main.rs should reference add (raw, tried all positions in selectionRange)"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.RUST], indirect=True)
|
||||
def test_find_symbol(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_find_symbol(self, language_server: SolidLanguageServer) -> None:
|
||||
symbols = language_server.request_full_symbol_tree()
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "main"), "main function not found in symbol tree"
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "add"), "add function not found in symbol tree"
|
||||
# Add more as needed based on test_repo
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.RUST], indirect=True)
|
||||
def test_find_referencing_symbols(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_find_referencing_symbols(self, language_server: SolidLanguageServer) -> None:
|
||||
# Find references to 'add' defined in lib.rs, should be referenced from main.rs
|
||||
file_path = os.path.join("src", "lib.rs")
|
||||
symbols = language_server.request_document_symbols(file_path)
|
||||
@@ -51,7 +51,7 @@ class TestRustLanguageServer:
|
||||
), "main.rs should reference add (tried all positions in selectionRange)"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.RUST], indirect=True)
|
||||
def test_overview_methods(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_overview_methods(self, language_server: SolidLanguageServer) -> None:
|
||||
symbols = language_server.request_full_symbol_tree()
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "main"), "main missing from overview"
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "add"), "add missing from overview"
|
||||
|
||||
@@ -2,7 +2,7 @@ import os
|
||||
|
||||
import pytest
|
||||
|
||||
from solidlsp import SolidLanguageServer as SyncLanguageServer
|
||||
from solidlsp import SolidLanguageServer
|
||||
from solidlsp.multilspy_config import Language
|
||||
from solidlsp.multilspy_utils import SymbolUtils
|
||||
|
||||
@@ -10,14 +10,14 @@ from solidlsp.multilspy_utils import SymbolUtils
|
||||
@pytest.mark.typescript
|
||||
class TestTypescriptLanguageServer:
|
||||
@pytest.mark.parametrize("language_server", [Language.TYPESCRIPT], indirect=True)
|
||||
def test_find_symbol(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_find_symbol(self, language_server: SolidLanguageServer) -> None:
|
||||
symbols = language_server.request_full_symbol_tree()
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "DemoClass"), "DemoClass not found in symbol tree"
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "helperFunction"), "helperFunction not found in symbol tree"
|
||||
assert SymbolUtils.symbol_tree_contains_name(symbols, "printValue"), "printValue method not found in symbol tree"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.TYPESCRIPT], indirect=True)
|
||||
def test_find_referencing_symbols(self, language_server: SyncLanguageServer) -> None:
|
||||
def test_find_referencing_symbols(self, language_server: SolidLanguageServer) -> None:
|
||||
file_path = os.path.join("index.ts")
|
||||
symbols = language_server.request_document_symbols(file_path)
|
||||
helper_symbol = None
|
||||
|
||||
Reference in New Issue
Block a user