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

+25 -25
View File
@@ -14,7 +14,7 @@ import pytest
from serena.util.text_utils import find_text_coordinates
from solidlsp import SolidLanguageServer
from solidlsp.ls_config import Language
from solidlsp.ls_config import LanguageServerId
from solidlsp.ls_types import SymbolKind
from solidlsp.lsp_protocol_handler import lsp_types as LSPTypes
from test.solidlsp.conftest import read_repo_file, request_all_symbols
@@ -22,20 +22,20 @@ from test.solidlsp.conftest import read_repo_file, request_all_symbols
@pytest.mark.scss
class TestScssLanguageServerBasics:
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("repo_path", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
@pytest.mark.parametrize("repo_path", [LanguageServerId.SCSS], indirect=True)
def test_ls_is_running(self, language_server: SolidLanguageServer, repo_path: Path) -> None:
assert language_server.is_running()
assert Path(language_server.language_server.repository_root_path).resolve() == repo_path.resolve()
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_variables_document_symbols(self, language_server: SolidLanguageServer) -> None:
all_symbols, _ = language_server.request_document_symbols("_variables.scss").get_all_symbols_and_roots()
names = [s["name"] for s in all_symbols]
for var in ("$color-primary", "$color-secondary", "$color-text", "$space-md", "$space-lg"):
assert var in names, f"Expected variable {var} to appear in SCSS symbols: {names}"
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_mixins_document_symbols(self, language_server: SolidLanguageServer) -> None:
all_symbols, _ = language_server.request_document_symbols("_mixins.scss").get_all_symbols_and_roots()
names = [s["name"] for s in all_symbols]
@@ -45,7 +45,7 @@ class TestScssLanguageServerBasics:
for expected in ("card-surface", "focus-ring", "rem"):
assert expected in joined, f"Expected '{expected}' to appear in SCSS mixin symbols: {names}"
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_buttons_document_symbols(self, language_server: SolidLanguageServer) -> None:
all_symbols, _ = language_server.request_document_symbols("buttons.scss").get_all_symbols_and_roots()
names = [s["name"] for s in all_symbols]
@@ -53,7 +53,7 @@ class TestScssLanguageServerBasics:
for selector in (".button", ".button-primary", ".button-secondary"):
assert selector in joined, f"Expected selector '{selector}' to appear in SCSS symbols: {names}"
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_cross_file_definition_variable(self, language_server: SolidLanguageServer) -> None:
"""`vars.$color-text` in buttons.scss must resolve into _variables.scss."""
path = "buttons.scss"
@@ -69,7 +69,7 @@ class TestScssLanguageServerBasics:
f"Expected definition to resolve into _variables.scss, got URIs: {target_uris}"
)
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_cross_file_definition_mixin(self, language_server: SolidLanguageServer) -> None:
"""`mix.card-surface` in buttons.scss must resolve into _mixins.scss."""
path = "buttons.scss"
@@ -84,7 +84,7 @@ class TestScssLanguageServerBasics:
f"Expected definition to resolve into _mixins.scss, got URIs: {target_uris}"
)
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_cross_file_definition_function(self, language_server: SolidLanguageServer) -> None:
"""`mix.rem(16)` in main.scss must resolve into _mixins.scss (an @function)."""
path = "main.scss"
@@ -100,7 +100,7 @@ class TestScssLanguageServerBasics:
f"Expected definition to resolve into _mixins.scss, got URIs: {target_uris}"
)
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_full_symbol_tree_includes_all_files(self, language_server: SolidLanguageServer) -> None:
all_symbols = request_all_symbols(language_server)
relative_paths = {s.get("location", {}).get("relativePath") for s in all_symbols}
@@ -112,7 +112,7 @@ class TestScssLanguageServerBasics:
class TestScssReferences:
"""Find-references for symbols re-exported via @use across files."""
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_mixin_references_span_files(self, language_server: SolidLanguageServer) -> None:
"""References for ``card-surface`` must include both ``buttons.scss``
(`.button`, `.button-primary`, `.button-secondary` all `@include` it) and
@@ -135,7 +135,7 @@ class TestScssReferences:
)
assert any(p.endswith("main.scss") for p in ref_paths), f"Expected card-surface references to include main.scss, got: {ref_paths}"
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_variable_references_span_files(self, language_server: SolidLanguageServer) -> None:
"""`$color-primary` is read in ``buttons.scss`` (`.button-primary` background)
and ``_mixins.scss`` (default value of ``focus-ring``); references invoked
@@ -160,7 +160,7 @@ class TestScssReferences:
class TestScssForward:
"""`@forward` re-exports a module; consumers should reach forwarded symbols."""
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_forwarded_buttons_appear_in_workspace(self, language_server: SolidLanguageServer) -> None:
"""``main.scss`` does ``@forward "buttons"``; the workspace symbol tree must
still include ``buttons.scss`` selectors so consumers of `main` can navigate.
@@ -176,7 +176,7 @@ class TestScssForward:
class TestScssHover:
"""Some Sass returns rich hover content (SassDoc / value preview)."""
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_hover_on_variable_use(self, language_server: SolidLanguageServer) -> None:
path = "buttons.scss"
needle = "$color-text"
@@ -190,7 +190,7 @@ class TestScssHover:
text = contents["value"] if isinstance(contents, dict) else str(contents)
assert "color-text" in text, f"Expected '$color-text' or its value in hover text, got: {text}"
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_hover_on_mixin_call(self, language_server: SolidLanguageServer) -> None:
path = "buttons.scss"
needle = "card-surface"
@@ -209,7 +209,7 @@ class TestScssHover:
class TestScssCompletions:
"""Completions after a namespaced @use prefix should list re-exported members."""
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_completion_after_namespace_dot(self, language_server: SolidLanguageServer) -> None:
"""Completion immediately after `vars.` in buttons.scss must include the
variables defined in _variables.scss (e.g. ``$color-primary``).
@@ -233,7 +233,7 @@ class TestScssCompletions:
class TestScssSymbolKinds:
"""Validate that Some Sass classifies SCSS symbols with sensible LSP kinds."""
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_variable_symbol_kind(self, language_server: SolidLanguageServer) -> None:
all_symbols, _ = language_server.request_document_symbols("_variables.scss").get_all_symbols_and_roots()
by_name = {s["name"]: s for s in all_symbols}
@@ -243,7 +243,7 @@ class TestScssSymbolKinds:
f"Expected $color-primary to be Variable/Constant/Property, got {kind.name}"
)
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_mixin_and_function_symbol_kinds(self, language_server: SolidLanguageServer) -> None:
all_symbols, _ = language_server.request_document_symbols("_mixins.scss").get_all_symbols_and_roots()
@@ -264,7 +264,7 @@ class TestScssSymbolKinds:
)
assert SymbolKind(func["kind"]) in callable_kinds, f"Expected rem kind in {{Method, Function}}, got {SymbolKind(func['kind']).name}"
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_completion_kind_is_meaningful(self, language_server: SolidLanguageServer) -> None:
"""A `$variable` completion must come back with a meaningful kind. Some Sass
tags color-valued variables as ``Color`` (so editors render swatches) and
@@ -307,7 +307,7 @@ class TestScssSymbolKinds:
class TestSomeSassWithPlainCss:
"""``Language.SCSS`` also handles plain ``.css`` via ``some-sass-language-server``."""
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_main_css_document_symbols(self, language_server: SolidLanguageServer) -> None:
"""Each top-level rule selector in ``main.css`` must surface as a document symbol."""
all_symbols, _ = language_server.request_document_symbols("css/main.css").get_all_symbols_and_roots()
@@ -316,7 +316,7 @@ class TestSomeSassWithPlainCss:
for selector in ("body", "#page-header", "#site-title", ".button", ".button-primary", ".button-secondary"):
assert selector in joined, f"Expected selector '{selector}' to appear in CSS symbols: {names}"
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_theme_css_document_symbols(self, language_server: SolidLanguageServer) -> None:
"""``theme.css`` contains a single ``:root`` block; the LS must report it as a symbol."""
all_symbols, _ = language_server.request_document_symbols("css/theme.css").get_all_symbols_and_roots()
@@ -324,7 +324,7 @@ class TestSomeSassWithPlainCss:
joined = " | ".join(names)
assert ":root" in joined, f"Expected ':root' selector to appear in CSS symbols: {names}"
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_full_symbol_tree_includes_css_files(self, language_server: SolidLanguageServer) -> None:
"""The ``.css`` files alongside the SCSS workspace must populate the workspace symbol tree."""
all_symbols = request_all_symbols(language_server)
@@ -334,7 +334,7 @@ class TestSomeSassWithPlainCss:
for f in (os.path.join("css", "main.css"), os.path.join("css", "reset.css"), os.path.join("css", "theme.css")):
assert f in relative_paths, f"Expected {f} to appear in symbol tree"
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_hover_on_css_property(self, language_server: SolidLanguageServer) -> None:
"""Hover on a CSS property name must produce non-empty MDN-backed content
(Some Sass forwards ``vscode-css-languageservice``'s property reference data).
@@ -351,7 +351,7 @@ class TestSomeSassWithPlainCss:
text = contents["value"] if isinstance(contents, dict) else str(contents)
assert "background" in text.lower(), f"Expected hover text to mention 'background', got: {text}"
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_property_completion_in_css_rule(self, language_server: SolidLanguageServer) -> None:
"""Inside a CSS rule body the LS must offer standard property names —
proves ``somesass.css.completion.enabled = true`` is being honoured.
@@ -367,7 +367,7 @@ class TestSomeSassWithPlainCss:
f"Expected at least one common CSS property name in completions, got sample: {sorted(labels)[:20]}"
)
@pytest.mark.parametrize("language_server", [Language.SCSS], indirect=True)
@pytest.mark.parametrize("language_server", [LanguageServerId.SCSS], indirect=True)
def test_cross_file_completion_for_css_custom_property(self, language_server: SolidLanguageServer) -> None:
"""Completion inside a ``var(...)`` call in ``main.css`` must surface the
``--color-*`` custom properties declared in ``theme.css``.