From 44d1a404cd2987d2409a05a96ee00f3e64980da2 Mon Sep 17 00:00:00 2001 From: Dominik Jain Date: Tue, 11 Nov 2025 20:51:48 +0100 Subject: [PATCH] Remove include_body from interface of SolidLS.request_document_symbols (body is always in data structure, callers can decide whether to use it) --- src/serena/cli.py | 6 ++---- src/serena/symbol.py | 2 +- .../language_servers/al_language_server.py | 4 ++-- .../language_servers/bash_language_server.py | 4 ++-- .../language_servers/fortran_language_server.py | 4 ++-- src/solidlsp/language_servers/nixd_ls.py | 4 ++-- src/solidlsp/ls.py | 7 +++---- test/solidlsp/bash/test_bash_basic.py | 16 +++++----------- test/solidlsp/markdown/test_markdown_basic.py | 8 ++++---- test/solidlsp/perl/test_perl_basic.py | 2 +- 10 files changed, 24 insertions(+), 33 deletions(-) diff --git a/src/serena/cli.py b/src/serena/cli.py index 3d73b4c9..3f3d7916 100644 --- a/src/serena/cli.py +++ b/src/serena/cli.py @@ -478,8 +478,7 @@ class ProjectCommands(AutoRegisteringGroup): files_failed = [] for i, f in enumerate(tqdm(files, desc="Indexing")): try: - ls.request_document_symbols(f, include_body=False) - ls.request_document_symbols(f, include_body=True) + ls.request_document_symbols(f) except Exception as e: log.error(f"Failed to index {f}, continuing.") collected_exceptions.append(e) @@ -538,9 +537,8 @@ class ProjectCommands(AutoRegisteringGroup): try: for ls in ls_mgr.iter_language_servers(): click.echo(f"Indexing for language {ls.language.value} …") - document_symbols = ls.request_document_symbols(file, include_body=False) + document_symbols = ls.request_document_symbols(file) symbols, _ = document_symbols.get_all_symbols_and_roots() - ls.request_document_symbols(file, include_body=True) if verbose: click.echo(f"Symbols in file '{file}':") for symbol in symbols: diff --git a/src/serena/symbol.py b/src/serena/symbol.py index f35294c7..f3dc2270 100644 --- a/src/serena/symbol.py +++ b/src/serena/symbol.py @@ -517,7 +517,7 @@ class LanguageServerSymbolRetriever: if location.relative_path is None: return None lang_server = self.get_language_server(location.relative_path) - document_symbols = lang_server.request_document_symbols(location.relative_path, include_body=False) + document_symbols = lang_server.request_document_symbols(location.relative_path) for symbol_dict in document_symbols.iter_symbols(): symbol = LanguageServerSymbol(symbol_dict) if symbol.location == location: diff --git a/src/solidlsp/language_servers/al_language_server.py b/src/solidlsp/language_servers/al_language_server.py index e2786f10..be83fc5a 100644 --- a/src/solidlsp/language_servers/al_language_server.py +++ b/src/solidlsp/language_servers/al_language_server.py @@ -713,7 +713,7 @@ class ALLanguageServer(SolidLanguageServer): if os.path.isfile(within_abs_path): # Single file case - use parent class implementation - root_nodes = self.request_document_symbols(within_relative_path, include_body=include_body).root_symbols + root_nodes = self.request_document_symbols(within_relative_path).root_symbols return root_nodes # Directory case - scan within this directory @@ -755,7 +755,7 @@ class ALLanguageServer(SolidLanguageServer): try: # Use our overridden request_document_symbols which handles opening self.logger.log(f"AL: Getting symbols for {relative_path}", logging.DEBUG) - all_syms, root_syms = self.request_document_symbols(relative_path, include_body=include_body).get_all_symbols_and_roots() + all_syms, root_syms = self.request_document_symbols(relative_path).get_all_symbols_and_roots() if root_syms: # Create a file-level symbol containing the document symbols diff --git a/src/solidlsp/language_servers/bash_language_server.py b/src/solidlsp/language_servers/bash_language_server.py index 60957425..9942e1f4 100644 --- a/src/solidlsp/language_servers/bash_language_server.py +++ b/src/solidlsp/language_servers/bash_language_server.py @@ -193,7 +193,7 @@ class BashLanguageServer(SolidLanguageServer): else: self.logger.log("Bash server initialization complete", logging.INFO) - def request_document_symbols(self, relative_file_path: str, include_body: bool = False) -> DocumentSymbols: + def request_document_symbols(self, relative_file_path: str) -> DocumentSymbols: """ Request document symbols from bash-language-server via LSP. @@ -215,7 +215,7 @@ class BashLanguageServer(SolidLanguageServer): self.logger.log(f"Requesting document symbols via LSP for {relative_file_path}", logging.DEBUG) # Use the standard LSP approach - bash-language-server handles all function syntaxes correctly - document_symbols = super().request_document_symbols(relative_file_path, include_body) + document_symbols = super().request_document_symbols(relative_file_path) # Log detection results for debugging functions = [s for s in document_symbols.iter_symbols() if s.get("kind") == 12] diff --git a/src/solidlsp/language_servers/fortran_language_server.py b/src/solidlsp/language_servers/fortran_language_server.py index 6858d41d..69ead2d0 100644 --- a/src/solidlsp/language_servers/fortran_language_server.py +++ b/src/solidlsp/language_servers/fortran_language_server.py @@ -138,7 +138,7 @@ class FortranLanguageServer(SolidLanguageServer): return symbol @override - def request_document_symbols(self, relative_file_path: str, include_body: bool = False) -> DocumentSymbols: + def request_document_symbols(self, relative_file_path: str) -> DocumentSymbols: """ Override to fix fortls's incorrect selectionRange bug. @@ -153,7 +153,7 @@ class FortranLanguageServer(SolidLanguageServer): """ # Get symbols from fortls (with incorrect selectionRange) - document_symbols = super().request_document_symbols(relative_file_path, include_body) + document_symbols = super().request_document_symbols(relative_file_path) # Get file content for parsing with self.open_file(relative_file_path) as file_data: diff --git a/src/solidlsp/language_servers/nixd_ls.py b/src/solidlsp/language_servers/nixd_ls.py index 08927052..4af41c7f 100644 --- a/src/solidlsp/language_servers/nixd_ls.py +++ b/src/solidlsp/language_servers/nixd_ls.py @@ -70,7 +70,7 @@ class NixLanguageServer(SolidLanguageServer): return symbol @override - def request_document_symbols(self, relative_file_path: str, include_body: bool = False) -> DocumentSymbols: + def request_document_symbols(self, relative_file_path: str) -> DocumentSymbols: """ Override to extend Nix symbol ranges to include trailing semicolons. @@ -78,7 +78,7 @@ class NixLanguageServer(SolidLanguageServer): statement-level ranges (including semicolons) for proper symbol replacement. """ # Get symbols from parent implementation - document_symbols = super().request_document_symbols(relative_file_path, include_body) + document_symbols = super().request_document_symbols(relative_file_path) # Get file content for range extension file_content = self.language_server.retrieve_full_file_content(relative_file_path) diff --git a/src/solidlsp/ls.py b/src/solidlsp/ls.py index a8d99baa..3f7218ac 100644 --- a/src/solidlsp/ls.py +++ b/src/solidlsp/ls.py @@ -941,12 +941,11 @@ class SolidLanguageServer(ABC): with self.open_file(relative_file_path) as opened_file_data: return get_symbols(opened_file_data) - def request_document_symbols(self, relative_file_path: str, include_body: bool = False) -> DocumentSymbols: + def request_document_symbols(self, relative_file_path: str) -> DocumentSymbols: """ Retrieves the collection of symbols in the given file :param relative_file_path: The relative path of the file that has the symbols - :param include_body: whether to include the body of the symbols in the result. :return: the collection of symbols in the file. All contained symbols will have a location, children, and a parent attribute, where the parent attribute is None for root symbols. @@ -1090,7 +1089,7 @@ class SolidLanguageServer(ABC): ) return [] else: - root_nodes = self.request_document_symbols(within_relative_path, include_body=include_body).root_symbols + root_nodes = self.request_document_symbols(within_relative_path).root_symbols return root_nodes # Helper function to recursively process directories @@ -1149,7 +1148,7 @@ class SolidLanguageServer(ABC): child["parent"] = package_symbol elif os.path.isfile(contained_dir_or_file_abs_path): - document_symbols = self.request_document_symbols(contained_dir_or_file_rel_path, include_body=include_body) + document_symbols = self.request_document_symbols(contained_dir_or_file_rel_path) file_root_nodes = document_symbols.root_symbols # Create file symbol, link with children diff --git a/test/solidlsp/bash/test_bash_basic.py b/test/solidlsp/bash/test_bash_basic.py index 49bca382..1f2aa995 100644 --- a/test/solidlsp/bash/test_bash_basic.py +++ b/test/solidlsp/bash/test_bash_basic.py @@ -25,7 +25,7 @@ class TestBashLanguageServerBasics: def test_bash_request_document_symbols(self, language_server: SolidLanguageServer) -> None: """Test request_document_symbols for bash files.""" # Test getting symbols from main.sh - all_symbols, _root_symbols = language_server.request_document_symbols("main.sh", include_body=False).get_all_symbols_and_roots() + all_symbols, _root_symbols = language_server.request_document_symbols("main.sh").get_all_symbols_and_roots() # Extract function symbols (LSP Symbol Kind 12) function_symbols = [symbol for symbol in all_symbols if symbol.get("kind") == 12] @@ -41,7 +41,7 @@ class TestBashLanguageServerBasics: def test_bash_request_document_symbols_with_body(self, language_server: SolidLanguageServer) -> None: """Test request_document_symbols with body extraction.""" # Test with include_body=True - all_symbols, _root_symbols = language_server.request_document_symbols("main.sh", include_body=True).get_all_symbols_and_roots() + all_symbols, _root_symbols = language_server.request_document_symbols("main.sh").get_all_symbols_and_roots() function_symbols = [symbol for symbol in all_symbols if symbol.get("kind") == 12] @@ -58,9 +58,7 @@ class TestBashLanguageServerBasics: def test_bash_utils_functions(self, language_server: SolidLanguageServer) -> None: """Test function detection in utils.sh file.""" # Test with utils.sh as well - utils_all_symbols, _utils_root_symbols = language_server.request_document_symbols( - "utils.sh", include_body=False - ).get_all_symbols_and_roots() + utils_all_symbols, _utils_root_symbols = language_server.request_document_symbols("utils.sh").get_all_symbols_and_roots() utils_function_symbols = [symbol for symbol in utils_all_symbols if symbol.get("kind") == 12] utils_function_names = [symbol["name"] for symbol in utils_function_symbols] @@ -86,16 +84,12 @@ class TestBashLanguageServerBasics: def test_bash_function_syntax_patterns(self, language_server: SolidLanguageServer) -> None: """Test that LSP detects different bash function syntax patterns correctly.""" # Test main.sh (has both 'function' keyword and traditional syntax) - main_all_symbols, _main_root_symbols = language_server.request_document_symbols( - "main.sh", include_body=False - ).get_all_symbols_and_roots() + main_all_symbols, _main_root_symbols = language_server.request_document_symbols("main.sh").get_all_symbols_and_roots() main_functions = [symbol for symbol in main_all_symbols if symbol.get("kind") == 12] main_function_names = [func["name"] for func in main_functions] # Test utils.sh (all use 'function' keyword) - utils_all_symbols, _utils_root_symbols = language_server.request_document_symbols( - "utils.sh", include_body=False - ).get_all_symbols_and_roots() + utils_all_symbols, _utils_root_symbols = language_server.request_document_symbols("utils.sh").get_all_symbols_and_roots() utils_functions = [symbol for symbol in utils_all_symbols if symbol.get("kind") == 12] utils_function_names = [func["name"] for func in utils_functions] diff --git a/test/solidlsp/markdown/test_markdown_basic.py b/test/solidlsp/markdown/test_markdown_basic.py index 2c9779da..81a988c0 100644 --- a/test/solidlsp/markdown/test_markdown_basic.py +++ b/test/solidlsp/markdown/test_markdown_basic.py @@ -25,7 +25,7 @@ class TestMarkdownLanguageServerBasics: def test_markdown_request_document_symbols(self, language_server: SolidLanguageServer) -> None: """Test request_document_symbols for markdown files.""" # Test getting symbols from README.md - all_symbols, _root_symbols = language_server.request_document_symbols("README.md", include_body=False).get_all_symbols_and_roots() + all_symbols, _root_symbols = language_server.request_document_symbols("README.md").get_all_symbols_and_roots() # Extract heading symbols (LSP Symbol Kind 15 is String, but marksman uses kind 15 for headings) # Note: Different markdown LSPs may use different symbol kinds for headings @@ -38,7 +38,7 @@ class TestMarkdownLanguageServerBasics: @pytest.mark.parametrize("language_server", [Language.MARKDOWN], indirect=True) def test_markdown_request_symbols_from_guide(self, language_server: SolidLanguageServer) -> None: """Test symbol detection in guide.md file.""" - all_symbols, _root_symbols = language_server.request_document_symbols("guide.md", include_body=False).get_all_symbols_and_roots() + all_symbols, _root_symbols = language_server.request_document_symbols("guide.md").get_all_symbols_and_roots() # At least some headings should be found assert len(all_symbols) > 0, f"Should find headings in guide.md, found {len(all_symbols)}" @@ -46,7 +46,7 @@ class TestMarkdownLanguageServerBasics: @pytest.mark.parametrize("language_server", [Language.MARKDOWN], indirect=True) def test_markdown_request_symbols_from_api(self, language_server: SolidLanguageServer) -> None: """Test symbol detection in api.md file.""" - all_symbols, _root_symbols = language_server.request_document_symbols("api.md", include_body=False).get_all_symbols_and_roots() + all_symbols, _root_symbols = language_server.request_document_symbols("api.md").get_all_symbols_and_roots() # Should detect headings from api.md assert len(all_symbols) > 0, f"Should find headings in api.md, found {len(all_symbols)}" @@ -55,7 +55,7 @@ class TestMarkdownLanguageServerBasics: def test_markdown_request_document_symbols_with_body(self, language_server: SolidLanguageServer) -> None: """Test request_document_symbols with body extraction.""" # Test with include_body=True - all_symbols, _root_symbols = language_server.request_document_symbols("README.md", include_body=True).get_all_symbols_and_roots() + all_symbols, _root_symbols = language_server.request_document_symbols("README.md").get_all_symbols_and_roots() # Should have found some symbols assert len(all_symbols) > 0, "Should find symbols in README.md" diff --git a/test/solidlsp/perl/test_perl_basic.py b/test/solidlsp/perl/test_perl_basic.py index 4c18627f..59dbcc5f 100644 --- a/test/solidlsp/perl/test_perl_basic.py +++ b/test/solidlsp/perl/test_perl_basic.py @@ -31,7 +31,7 @@ class TestPerlLanguageServer: def test_document_symbols(self, language_server: SolidLanguageServer) -> None: """Test that document symbols are correctly identified.""" # Request document symbols - all_symbols, _ = language_server.request_document_symbols("main.pl", include_body=False).get_all_symbols_and_roots() + all_symbols, _ = language_server.request_document_symbols("main.pl").get_all_symbols_and_roots() assert all_symbols, "Expected to find symbols in main.pl" assert len(all_symbols) > 0, "Expected at least one symbol"