From c3fe7cf00d00e77923b8b438d2abd682f221a25b Mon Sep 17 00:00:00 2001 From: Therese Stirling Date: Fri, 29 May 2026 09:31:44 -0300 Subject: [PATCH] TypeScript: stop ignoring source directories named `coverage` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both TypeScript language servers hard-ignored any directory named `coverage` in `is_ignored_dirname`, intending to skip coverage-report output but matching by bare dirname — which also hid legitimate source directories named `coverage` (e.g. `src/routes/coverage/`) from symbol tools. Generated report dirs are already covered by gitignore, so the hardcoded entry is removed. Adds a regression test asserting `coverage`/`src`/`lib`/`routes` are not ignored while `node_modules`/`dist`/`build`/`.git` still are. Fixes #1523. --- CHANGELOG.md | 4 +++ .../typescript_language_server.py | 1 - .../language_servers/vts_language_server.py | 1 - .../test_typescript_ignored_dirs.py | 35 +++++++++++++++++++ 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 test/solidlsp/typescript/test_typescript_ignored_dirs.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 2872553c..492ab00c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ Status of the `main` branch. Changes prior to the next official version change w The dict is forwarded to vtsls via `initializationOptions`, `workspace/didChangeConfiguration`, and `workspace/configuration` pulls. Enables Yarn PnP setups with `typescript.tsdk` pointing at the Yarn-generated SDK. + - `typescript` / `typescript_vts`: No longer ignore directories named `coverage`. This was intended to skip + coverage-report output, but matched by bare dirname and so also hid legitimate source directories named + `coverage` (e.g. `src/routes/coverage/`) from symbol tools. Generated report dirs are already covered by + gitignore. Fixes #1523. * Dashboard: - Fix: Host validation required a local host regardless of the listen address (regression introduced in v1.5.2), diff --git a/src/solidlsp/language_servers/typescript_language_server.py b/src/solidlsp/language_servers/typescript_language_server.py index 731ad835..fdf7d179 100644 --- a/src/solidlsp/language_servers/typescript_language_server.py +++ b/src/solidlsp/language_servers/typescript_language_server.py @@ -132,7 +132,6 @@ class TypeScriptLanguageServer(SolidLanguageServer): "node_modules", "dist", "build", - "coverage", ] @staticmethod diff --git a/src/solidlsp/language_servers/vts_language_server.py b/src/solidlsp/language_servers/vts_language_server.py index 5525809b..0789c3f3 100644 --- a/src/solidlsp/language_servers/vts_language_server.py +++ b/src/solidlsp/language_servers/vts_language_server.py @@ -71,7 +71,6 @@ class VtsLanguageServer(SolidLanguageServer): "node_modules", "dist", "build", - "coverage", ] @classmethod diff --git a/test/solidlsp/typescript/test_typescript_ignored_dirs.py b/test/solidlsp/typescript/test_typescript_ignored_dirs.py new file mode 100644 index 00000000..7bbb0dfc --- /dev/null +++ b/test/solidlsp/typescript/test_typescript_ignored_dirs.py @@ -0,0 +1,35 @@ +""" +Tests for TypeScript language server directory-ignoring behavior. + +Regression test for the case where a *source* directory named `coverage` +(e.g. `src/routes/coverage/`) was hard-ignored by `is_ignored_dirname`, +hiding it from symbol tools. Only generated coverage-report dirs should be +excluded, and those are handled by gitignore. +""" + +import pytest + +from solidlsp import SolidLanguageServer +from solidlsp.ls_config import Language + +pytestmark = pytest.mark.typescript + + +@pytest.mark.parametrize("language_server", [Language.TYPESCRIPT], indirect=True) +class TestTypescriptIgnoredDirectories: + """TypeScript-specific directory ignoring behavior.""" + + def test_generated_dirs_still_ignored(self, language_server: SolidLanguageServer) -> None: + assert language_server.is_ignored_dirname("node_modules"), "node_modules should be ignored" + assert language_server.is_ignored_dirname("dist"), "dist should be ignored" + assert language_server.is_ignored_dirname("build"), "build should be ignored" + # VCS dir handled by the base class + assert language_server.is_ignored_dirname(".git"), ".git should be ignored" + + def test_source_dirs_not_ignored(self, language_server: SolidLanguageServer) -> None: + # `coverage` is a legitimate source/module name; only generated + # coverage-report dirs (which are gitignored) should be excluded. + assert not language_server.is_ignored_dirname("coverage"), "coverage source dir should not be ignored" + assert not language_server.is_ignored_dirname("src"), "src should not be ignored" + assert not language_server.is_ignored_dirname("lib"), "lib should not be ignored" + assert not language_server.is_ignored_dirname("routes"), "routes should not be ignored"