mirror of
https://github.com/tiennm99/serena.git
synced 2026-10-13 00:15:05 +00:00
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 <michael.panchenko@oraios-ai.de>
This commit is contained in:
1 parent
1789967968
commit
34e1fae739
3 files changed
+29
-5
No files matched your search
@@ -4,6 +4,7 @@ Status of the `main` branch. Changes prior to the next official version change w
|
|||||||
|
|
||||||
* General:
|
* General:
|
||||||
- Support environment variable `SERENA_USAGE_REPORTING` (set to `false` to disable usage reporting)
|
- 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:
|
* Language Servers:
|
||||||
- Add mSL (mIRC Scripting Language) support (custom pygls-based language server; symbols, references, definitions)
|
- Add mSL (mIRC Scripting Language) support (custom pygls-based language server; symbols, references, definitions)
|
||||||
|
|||||||
+22
-1
@@ -353,13 +353,34 @@ class SolidLanguageServer(ABC):
|
|||||||
DOCUMENT_SYMBOL_CACHE_VERSION = 4
|
DOCUMENT_SYMBOL_CACHE_VERSION = 4
|
||||||
DOCUMENT_SYMBOL_CACHE_FILENAME = "document_symbols.pkl"
|
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
|
# To be overridden and extended by subclasses
|
||||||
def is_ignored_dirname(self, dirname: str) -> bool:
|
def is_ignored_dirname(self, dirname: str) -> bool:
|
||||||
"""
|
"""
|
||||||
A language-specific condition for directories that should always be ignored. For example, venv
|
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.
|
in Python and node_modules in JS/TS should be ignored always.
|
||||||
"""
|
"""
|
||||||
return dirname.startswith(".")
|
return dirname in self._ALWAYS_IGNORED_DIRS
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _determine_log_level(line: str) -> int:
|
def _determine_log_level(line: str) -> int:
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class TestTomlIgnoredDirectories:
|
|||||||
assert language_server.is_ignored_dirname(".cargo"), ".cargo should be ignored"
|
assert language_server.is_ignored_dirname(".cargo"), ".cargo should be ignored"
|
||||||
assert language_server.is_ignored_dirname("node_modules"), "node_modules 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(".git"), ".git should be ignored"
|
||||||
assert language_server.is_ignored_dirname(".venv"), ".venv 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:
|
def test_various_cache_directories(self, language_server: SolidLanguageServer) -> None:
|
||||||
"""Test various cache and temporary directories are ignored."""
|
"""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"
|
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(".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)
|
# 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"
|
assert not language_server.is_ignored_dirname("__pycache__"), "__pycache__ is not TOML-specific"
|
||||||
Reference in new issue
Block a user