From 34e1fae739ab7f78f800b77ad4c17014f36e16e1 Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 13 Apr 2026 07:19:33 -0500 Subject: [PATCH] Allow symbol operations in dot-prefixed directories (#1203) * Allow symbol operations in dot-prefixed directories is_ignored_dirname() used dirname.startswith(".") which blanket-ignored all dot-prefixed directories including .github/, .vscode/, etc. Changed to only ignore VCS directories (.git, .svn, .hg, .bzr). Language-specific dot directories (.build, .elixir_ls, .terraform, etc.) are already handled by the individual LS overrides. Fixes #1187, fixes #853. --------- Co-authored-by: Michael Panchenko --- CHANGELOG.md | 1 + src/solidlsp/ls.py | 23 +++++++++++++++++++- test/solidlsp/toml/test_toml_ignored_dirs.py | 10 +++++---- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35f4a3d0..30a9c809 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ Status of the `main` branch. Changes prior to the next official version change w * General: - Support environment variable `SERENA_USAGE_REPORTING` (set to `false` to disable usage reporting) + - Extended the list of always ignored directories (by language servers) with common cases. * Language Servers: - Add mSL (mIRC Scripting Language) support (custom pygls-based language server; symbols, references, definitions) diff --git a/src/solidlsp/ls.py b/src/solidlsp/ls.py index c3362811..9dda6f33 100644 --- a/src/solidlsp/ls.py +++ b/src/solidlsp/ls.py @@ -353,13 +353,34 @@ class SolidLanguageServer(ABC): DOCUMENT_SYMBOL_CACHE_VERSION = 4 DOCUMENT_SYMBOL_CACHE_FILENAME = "document_symbols.pkl" + # Directories that should always be ignored regardless of language: + # VCS internals, virtual environments, caches, and serena's own data. + _ALWAYS_IGNORED_DIRS = frozenset( + { + ".git", + ".svn", + ".hg", + ".bzr", # VCS + ".venv", + ".env", # virtual environments + ".cache", + ".mypy_cache", + ".pytest_cache", + ".ruff_cache", # caches + ".tox", + ".nox", # test runners + ".idea", # IDE internals + ".serena", # serena's own data + } + ) + # To be overridden and extended by subclasses def is_ignored_dirname(self, dirname: str) -> bool: """ A language-specific condition for directories that should always be ignored. For example, venv in Python and node_modules in JS/TS should be ignored always. """ - return dirname.startswith(".") + return dirname in self._ALWAYS_IGNORED_DIRS @staticmethod def _determine_log_level(line: str) -> int: diff --git a/test/solidlsp/toml/test_toml_ignored_dirs.py b/test/solidlsp/toml/test_toml_ignored_dirs.py index e5126942..11d987f9 100644 --- a/test/solidlsp/toml/test_toml_ignored_dirs.py +++ b/test/solidlsp/toml/test_toml_ignored_dirs.py @@ -24,7 +24,7 @@ class TestTomlIgnoredDirectories: assert language_server.is_ignored_dirname(".cargo"), ".cargo should be ignored" assert language_server.is_ignored_dirname("node_modules"), "node_modules should be ignored" - # Directories starting with . are ignored by base class + # Infrastructure directories ignored by base class assert language_server.is_ignored_dirname(".git"), ".git should be ignored" assert language_server.is_ignored_dirname(".venv"), ".venv should be ignored" @@ -49,12 +49,14 @@ class TestTomlIgnoredDirectories: def test_various_cache_directories(self, language_server: SolidLanguageServer) -> None: """Test various cache and temporary directories are ignored.""" - # Directories starting with . are ignored by base class + # Cache directories ignored by base class assert language_server.is_ignored_dirname(".cache"), ".cache should be ignored" - # IDE directories (start with .) + # IDE internals assert language_server.is_ignored_dirname(".idea"), ".idea should be ignored" - assert language_server.is_ignored_dirname(".vscode"), ".vscode should be ignored" + + # .vscode is intentionally NOT ignored — it contains user-facing config + assert not language_server.is_ignored_dirname(".vscode"), ".vscode should not be ignored" # Note: __pycache__ is NOT ignored by TOML server (only Python servers ignore it) assert not language_server.is_ignored_dirname("__pycache__"), "__pycache__ is not TOML-specific"