Refactoring: Rename Language to LanguageServerId

This resolves a long-standing naming issue in Serena & SolidLSP.
This commit is contained in:
Dominik Jain authored and Dominik Jain committed 2026-07-22 20:55:36 +02:00
1 parent ef0e218fb1
commit d2cf18ddcb
180 files changed
+1806 -1767

No files matched your search

+11 -11
View File
@@ -3,14 +3,14 @@ import os
import pytest
from solidlsp import SolidLanguageServer
from solidlsp.ls_config import Language
from solidlsp.ls_config import LanguageServerId
from solidlsp.ls_utils import SymbolUtils
from test.solidlsp.conftest import format_symbol_for_assert, has_malformed_name, request_all_symbols
@pytest.mark.vue
class TestVueLanguageServer:
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_vue_files_in_symbol_tree(self, language_server: SolidLanguageServer) -> None:
symbols = language_server.request_full_symbol_tree()
assert SymbolUtils.symbol_tree_contains_name(symbols, "App"), "App not found in symbol tree"
@@ -18,7 +18,7 @@ class TestVueLanguageServer:
assert SymbolUtils.symbol_tree_contains_name(symbols, "CalculatorInput"), "CalculatorInput not found in symbol tree"
assert SymbolUtils.symbol_tree_contains_name(symbols, "CalculatorDisplay"), "CalculatorDisplay not found in symbol tree"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_find_referencing_symbols(self, language_server: SolidLanguageServer) -> None:
store_file = os.path.join("src", "stores", "calculator.ts")
symbols = language_server.request_document_symbols(store_file).get_all_symbols_and_roots()
@@ -46,7 +46,7 @@ class TestVueLanguageServer:
@pytest.mark.vue
class TestVueDualLspArchitecture:
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_typescript_server_coordination(self, language_server: SolidLanguageServer) -> None:
ts_file = os.path.join("src", "stores", "calculator.ts")
ts_symbols = language_server.request_document_symbols(ts_file).get_all_symbols_and_roots()
@@ -63,7 +63,7 @@ class TestVueDualLspArchitecture:
assert len(vue_symbols[0]) >= 15, f"Vue server should return at least 15 symbols for App.vue, got {len(vue_symbols[0])}"
assert "appTitle" in vue_symbol_names, "Vue server should extract ref declarations from script setup"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_cross_file_references_vue_to_typescript(self, language_server: SolidLanguageServer) -> None:
store_file = os.path.join("src", "stores", "calculator.ts")
store_symbols = language_server.request_document_symbols(store_file).get_all_symbols_and_roots()
@@ -103,7 +103,7 @@ class TestVueDualLspArchitecture:
f"Expected any of {expected_vue_files}, found references in: {[ref.get('uri', '') for ref in vue_refs]}"
)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_cross_file_references_typescript_to_vue(self, language_server: SolidLanguageServer) -> None:
types_file = os.path.join("src", "types", "index.ts")
types_symbols = language_server.request_document_symbols(types_file).get_all_symbols_and_roots()
@@ -136,7 +136,7 @@ class TestVueDualLspArchitecture:
f"Operation type should be referenced in TypeScript files like calculator.ts. Found references in: {all_ref_uris}"
)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_reference_deduplication(self, language_server: SolidLanguageServer) -> None:
store_file = os.path.join("src", "stores", "calculator.ts")
store_symbols = language_server.request_document_symbols(store_file).get_all_symbols_and_roots()
@@ -181,7 +181,7 @@ class TestVueDualLspArchitecture:
@pytest.mark.vue
class TestVueEdgeCases:
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_symbol_tree_structure(self, language_server: SolidLanguageServer) -> None:
full_tree = language_server.request_full_symbol_tree()
@@ -247,7 +247,7 @@ class TestVueEdgeCases:
matching_files = [p for p in all_paths if expected_file in p]
assert len(matching_files) > 0, f"Expected file '{expected_file}' should be in symbol tree. All paths: {all_paths}"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_document_overview(self, language_server: SolidLanguageServer) -> None:
app_file = os.path.join("src", "App.vue")
overview = language_server.request_document_overview(app_file)
@@ -294,7 +294,7 @@ class TestVueEdgeCases:
f"Found {len(button_symbol_names)} symbols: {button_symbol_names}"
)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_directory_overview(self, language_server: SolidLanguageServer) -> None:
components_dir = os.path.join("src", "components")
dir_overview = language_server.request_dir_overview(components_dir)
@@ -362,7 +362,7 @@ class TestVueEdgeCases:
f"Found {len(matching_files)} matches. All files: {list(composables_overview.keys())}"
)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_bare_symbol_names(self, language_server) -> None:
all_symbols = request_all_symbols(language_server)
malformed_symbols = []
+2 -2
View File
@@ -1,13 +1,13 @@
import pytest
from solidlsp import SolidLanguageServer
from solidlsp.ls_config import Language
from solidlsp.ls_config import LanguageServerId
from test.solidlsp.util.diagnostics import assert_file_diagnostics
@pytest.mark.vue
class TestVueDiagnostics:
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_file_diagnostics(self, language_server: SolidLanguageServer) -> None:
assert_file_diagnostics(
language_server,
+21 -21
View File
@@ -4,7 +4,7 @@ import sys
import pytest
from solidlsp import SolidLanguageServer
from solidlsp.ls_config import Language
from solidlsp.ls_config import LanguageServerId
pytestmark = pytest.mark.vue
@@ -28,7 +28,7 @@ class TypeScriptServerBehavior:
class TestVueInvalidPositions:
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_negative_line_number(self, language_server: SolidLanguageServer) -> None:
file_path = os.path.join("src", "components", "CalculatorInput.vue")
@@ -36,7 +36,7 @@ class TestVueInvalidPositions:
assert result is None or result == {}, f"Negative line number should return None or empty dict, got: {result}"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_negative_character_number(self, language_server: SolidLanguageServer) -> None:
"""Test requesting containing symbol with negative character number.
@@ -50,7 +50,7 @@ class TestVueInvalidPositions:
# Should handle gracefully - return None or empty dict
assert result is None or result == {}, f"Negative character number should return None or empty dict, got: {result}"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_line_number_beyond_file_length(self, language_server: SolidLanguageServer) -> None:
"""Test requesting containing symbol beyond file length.
@@ -67,7 +67,7 @@ class TestVueInvalidPositions:
# Verify it's an index error for list access
assert "list index out of range" in str(exc_info.value), f"Expected 'list index out of range' error, got: {exc_info.value}"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_character_number_beyond_line_length(self, language_server: SolidLanguageServer) -> None:
"""Test requesting containing symbol beyond line length.
@@ -81,7 +81,7 @@ class TestVueInvalidPositions:
# Should handle gracefully - return None or empty dict
assert result is None or result == {}, f"Character beyond line length should return None or empty dict, got: {result}"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_references_at_negative_line(self, language_server: SolidLanguageServer) -> None:
"""Test requesting references with negative line number."""
from solidlsp.ls_exceptions import SolidLSPException
@@ -96,7 +96,7 @@ class TestVueInvalidPositions:
language_server.request_references(file_path, -1, 0)
assert "Bad line number" in str(exc_info.value) or "Debug Failure" in str(exc_info.value)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_definition_at_invalid_position(self, language_server: SolidLanguageServer) -> None:
"""Test requesting definition at invalid position."""
from solidlsp.ls_exceptions import SolidLSPException
@@ -115,7 +115,7 @@ class TestVueInvalidPositions:
class TestVueNonExistentFiles:
"""Tests for handling non-existent files."""
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_requesting_on_nonexistent_file(self, language_server: SolidLanguageServer) -> None:
"""Test requesting references from non-existent file.
@@ -134,7 +134,7 @@ class TestVueNonExistentFiles:
class TestVueUndefinedSymbols:
"""Tests for handling undefined or unreferenced symbols."""
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_references_for_unreferenced_symbol(self, language_server: SolidLanguageServer) -> None:
"""Test requesting references for a symbol that has no references.
@@ -166,7 +166,7 @@ class TestVueUndefinedSymbols:
f"Got {len(refs)} references. This is not necessarily an error, just documenting behavior."
)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_containing_symbol_at_whitespace_only_line(self, language_server: SolidLanguageServer) -> None:
"""Test requesting containing symbol at a whitespace-only line.
@@ -182,7 +182,7 @@ class TestVueUndefinedSymbols:
f"Whitespace line should return None, empty dict, or valid symbol. Got: {result}"
)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_definition_at_keyword_position(self, language_server: SolidLanguageServer) -> None:
"""Test requesting definition at language keyword position.
@@ -201,7 +201,7 @@ class TestVueUndefinedSymbols:
class TestVueEdgeCasePositions:
"""Tests for edge case positions (0,0 and file boundaries)."""
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_containing_symbol_at_file_start(self, language_server: SolidLanguageServer) -> None:
"""Test requesting containing symbol at position (0,0).
@@ -218,7 +218,7 @@ class TestVueEdgeCasePositions:
f"Position 0,0 should return None, empty dict, or valid symbol. Got: {result}"
)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_references_at_file_start(self, language_server: SolidLanguageServer) -> None:
"""Test requesting references at position (0,0).
@@ -232,7 +232,7 @@ class TestVueEdgeCasePositions:
# Should handle gracefully
assert result is None or isinstance(result, list), f"Position 0,0 should return None or list. Got: {type(result)}"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_definition_at_file_start(self, language_server: SolidLanguageServer) -> None:
"""Test requesting definition at position (0,0).
@@ -246,7 +246,7 @@ class TestVueEdgeCasePositions:
# Should handle gracefully
assert isinstance(result, list), f"request_definition should return a list. Got: {type(result)}"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_containing_symbol_in_template_section(self, language_server: SolidLanguageServer) -> None:
"""Test requesting containing symbol in the template section.
@@ -264,7 +264,7 @@ class TestVueEdgeCasePositions:
f"Template position should return None, empty dict, or valid symbol. Got: {result}"
)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_zero_character_positions(self, language_server: SolidLanguageServer) -> None:
"""Test requesting symbols at character position 0 (start of lines).
@@ -285,7 +285,7 @@ class TestVueEdgeCasePositions:
class TestVueTypescriptFileErrors:
"""Tests for error handling in TypeScript files within Vue projects."""
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_typescript_file_invalid_position(self, language_server: SolidLanguageServer) -> None:
"""Test requesting symbols from TypeScript file at invalid position.
@@ -299,7 +299,7 @@ class TestVueTypescriptFileErrors:
# Should handle gracefully
assert result is None or result == {}, f"Invalid position in .ts file should return None or empty dict. Got: {result}"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_typescript_file_beyond_bounds(self, language_server: SolidLanguageServer) -> None:
"""Test requesting symbols from TypeScript file beyond file bounds.
@@ -319,7 +319,7 @@ class TestVueTypescriptFileErrors:
class TestVueReferenceEdgeCases:
"""Tests for edge cases in reference finding."""
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_referencing_symbols_at_invalid_position(self, language_server: SolidLanguageServer) -> None:
"""Test requesting referencing symbols at invalid position."""
from solidlsp.ls_exceptions import SolidLSPException
@@ -334,7 +334,7 @@ class TestVueReferenceEdgeCases:
list(language_server.request_referencing_symbols(file_path, -1, -1, include_self=False))
assert "Bad line number" in str(exc_info.value) or "Debug Failure" in str(exc_info.value)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_defining_symbol_at_invalid_position(self, language_server: SolidLanguageServer) -> None:
"""Test requesting defining symbol at invalid position."""
from solidlsp.ls_exceptions import SolidLSPException
@@ -349,7 +349,7 @@ class TestVueReferenceEdgeCases:
language_server.request_defining_symbol(file_path, -1, -1)
assert "Bad line number" in str(exc_info.value) or "Debug Failure" in str(exc_info.value)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_referencing_symbols_beyond_file_bounds(self, language_server: SolidLanguageServer) -> None:
"""Test requesting referencing symbols beyond file bounds."""
from solidlsp.ls_exceptions import SolidLSPException
+4 -4
View File
@@ -3,13 +3,13 @@ import os
import pytest
from solidlsp import SolidLanguageServer
from solidlsp.ls_config import Language
from solidlsp.ls_config import LanguageServerId
pytestmark = pytest.mark.vue
class TestVueRename:
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_rename_function_within_single_file(self, language_server: SolidLanguageServer) -> None:
file_path = os.path.join("src", "components", "CalculatorInput.vue")
@@ -75,7 +75,7 @@ class TestVueRename:
assert "line" in edit["range"]["start"], "Start position should have line number"
assert "character" in edit["range"]["start"], "Start position should have character offset"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_rename_composable_function_cross_file(self, language_server: SolidLanguageServer) -> None:
composable_file = os.path.join("src", "composables", "useFormatter.ts")
@@ -140,7 +140,7 @@ class TestVueRename:
assert "start" in edit["range"], f"Range in {uri} should have start position"
assert "end" in edit["range"], f"Range in {uri} should have end position"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_rename_verifies_correct_file_paths_and_ranges(self, language_server: SolidLanguageServer) -> None:
file_path = os.path.join("src", "App.vue")
@@ -3,14 +3,14 @@ import os
import pytest
from solidlsp import SolidLanguageServer
from solidlsp.ls_config import Language
from solidlsp.ls_config import LanguageServerId
from solidlsp.ls_types import SymbolKind
pytestmark = pytest.mark.vue
class TestVueSymbolRetrieval:
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_request_containing_symbol_script_setup_function(self, language_server: SolidLanguageServer) -> None:
file_path = os.path.join("src", "components", "CalculatorInput.vue")
@@ -45,7 +45,7 @@ class TestVueSymbolRetrieval:
if "body" in containing_symbol:
assert "handleDigit" in containing_symbol["body"].get_text(), "Function body should contain function name"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_request_containing_symbol_computed_property(self, language_server: SolidLanguageServer) -> None:
file_path = os.path.join("src", "components", "CalculatorInput.vue")
@@ -80,7 +80,7 @@ class TestVueSymbolRetrieval:
SymbolKind.Function,
], f"Expected property/variable/function kind for computed, got {containing_symbol.get('kind')}"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_request_containing_symbol_no_containing_symbol(self, language_server: SolidLanguageServer) -> None:
file_path = os.path.join("src", "components", "CalculatorInput.vue")
@@ -97,7 +97,7 @@ class TestVueSymbolRetrieval:
f"Expected None or empty dict for import position, got {containing_symbol}"
)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_request_referencing_symbols_store_function(self, language_server: SolidLanguageServer) -> None:
store_file = os.path.join("src", "stores", "calculator.ts")
@@ -135,7 +135,7 @@ class TestVueSymbolRetrieval:
assert "name" in ref, "Reference should have name"
assert "location" in ref, "Reference should have location"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_request_referencing_symbols_composable(self, language_server: SolidLanguageServer) -> None:
composable_file = os.path.join("src", "composables", "useFormatter.ts")
@@ -174,7 +174,7 @@ class TestVueSymbolRetrieval:
f"Found references in: {[ref['location']['uri'] for ref in vue_refs if 'location' in ref and 'uri' in ref['location']]}"
)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_vue_component_cross_references(self, language_server: SolidLanguageServer) -> None:
input_file = os.path.join("src", "components", "CalculatorInput.vue")
button_file = os.path.join("src", "components", "CalculatorButton.vue")
@@ -199,7 +199,7 @@ class TestVueSymbolRetrieval:
assert "Props" in symbol_names, "CalculatorButton.vue should have Props interface"
assert "handleClick" in symbol_names, "CalculatorButton.vue should have handleClick function"
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_request_defining_symbol_import_resolution(self, language_server: SolidLanguageServer) -> None:
file_path = os.path.join("src", "components", "CalculatorInput.vue")
@@ -229,7 +229,7 @@ class TestVueSymbolRetrieval:
f"Should point to calculator.ts, got {defining_symbol['location']['uri']}"
)
@pytest.mark.parametrize("language_server", [Language.VUE], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.VUE], indirect=True)
def test_request_defining_symbol_component_import(self, language_server: SolidLanguageServer) -> None:
file_path = os.path.join("src", "components", "CalculatorInput.vue")