mirror of
https://github.com/tiennm99/serena.git
synced 2026-10-14 08:18:36 +00:00
Include .t files in Perl::LanguageServer fileFilter
Serena's file-to-language router already maps `.t` to the Perl LS (`Language.PERL` in `solidlsp/ls_config.py`), but the Perl::LanguageServer-side `fileFilter` was hardcoded to `[".pm", ".pl"]`. As a result Perl::LanguageServer skipped `.t` files entirely: symbol queries on a `.t` returned empty, and references to `.pm`/`.pl` subs missed any callers defined in `.t` files. Add `.t` to the filter, deduplicate the two `fileFilter` literals into a `_FILE_FILTER` class constant, and note the sync requirement with `Language.PERL.get_source_fn_matcher()` in a comment. Cover the behavior with a new cross-file references test plus a `helper.t` fixture; the test fails on unpatched `main` and passes on this branch.
This commit is contained in:
1 parent
0909ae05f7
commit
860c5841df
3 files changed
+26
-2
No files matched your search
@@ -28,6 +28,10 @@ class PerlLanguageServer(SolidLanguageServer):
|
|||||||
Provides Perl specific instantiation of the LanguageServer class using Perl::LanguageServer.
|
Provides Perl specific instantiation of the LanguageServer class using Perl::LanguageServer.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# Keep in sync with Language.PERL.get_source_fn_matcher() in solidlsp/ls_config.py:
|
||||||
|
# extensions missing here are invisible to Perl::LanguageServer's project index.
|
||||||
|
_FILE_FILTER: list = [".pm", ".pl", ".t"]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_perl_version() -> str | None:
|
def _get_perl_version() -> str | None:
|
||||||
"""Get the installed Perl version or None if not found."""
|
"""Get the installed Perl version or None if not found."""
|
||||||
@@ -162,7 +166,7 @@ class PerlLanguageServer(SolidLanguageServer):
|
|||||||
|
|
||||||
perl_config = {
|
perl_config = {
|
||||||
"perlInc": [self.repository_root_path, "."],
|
"perlInc": [self.repository_root_path, "."],
|
||||||
"fileFilter": [".pm", ".pl"],
|
"fileFilter": self._FILE_FILTER,
|
||||||
"ignoreDirs": [".git", ".svn", "blib", "local", ".carton", "vendor", "_build", "cover_db"],
|
"ignoreDirs": [".git", ".svn", "blib", "local", ".carton", "vendor", "_build", "cover_db"],
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,7 +202,7 @@ class PerlLanguageServer(SolidLanguageServer):
|
|||||||
"settings": {
|
"settings": {
|
||||||
"perl": {
|
"perl": {
|
||||||
"perlInc": [self.repository_root_path, "."],
|
"perlInc": [self.repository_root_path, "."],
|
||||||
"fileFilter": [".pm", ".pl"],
|
"fileFilter": self._FILE_FILTER,
|
||||||
"ignoreDirs": [".git", ".svn", "blib", "local", ".carton", "vendor", "_build", "cover_db"],
|
"ignoreDirs": [".git", ".svn", "blib", "local", ".carton", "vendor", "_build", "cover_db"],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
use lib '.';
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use Test::More tests => 1;
|
||||||
|
|
||||||
|
require helper;
|
||||||
|
|
||||||
|
helper_function();
|
||||||
|
ok(1, 'helper_function callable from .t file');
|
||||||
@@ -77,6 +77,14 @@ class TestPerlLanguageServer:
|
|||||||
assert 17 in main_pl_lines, f"Expected reference at line 18 (0-indexed 17), found: {main_pl_lines}"
|
assert 17 in main_pl_lines, f"Expected reference at line 18 (0-indexed 17), found: {main_pl_lines}"
|
||||||
assert 20 in main_pl_lines, f"Expected reference at line 21 (0-indexed 20), found: {main_pl_lines}"
|
assert 20 in main_pl_lines, f"Expected reference at line 21 (0-indexed 20), found: {main_pl_lines}"
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("language_server", [Language.PERL], indirect=True)
|
||||||
|
def test_find_references_includes_t_files(self, language_server: SolidLanguageServer) -> None:
|
||||||
|
"""References to a .pm/.pl sub must surface callers in .t test files (fileFilter includes .t)."""
|
||||||
|
reference_locations = language_server.request_references("helper.pl", 4, 5)
|
||||||
|
|
||||||
|
t_refs = [ref for ref in reference_locations if ref["uri"].endswith(".t")]
|
||||||
|
assert t_refs, f"Expected at least one reference in a .t file, got: {[r['uri'] for r in reference_locations]}"
|
||||||
|
|
||||||
@pytest.mark.parametrize("language_server", [Language.PERL], indirect=True)
|
@pytest.mark.parametrize("language_server", [Language.PERL], indirect=True)
|
||||||
def test_bare_symbol_names(self, language_server) -> None:
|
def test_bare_symbol_names(self, language_server) -> None:
|
||||||
all_symbols = request_all_symbols(language_server)
|
all_symbols = request_all_symbols(language_server)
|
||||||
|
|||||||
Reference in new issue
Block a user