From 8e6aad0f73eccebc3c2f12bd76fec0b701433dea Mon Sep 17 00:00:00 2001 From: Dominik Jain Date: Tue, 24 Feb 2026 20:12:35 +0100 Subject: [PATCH 1/3] Update project.yml --- .serena/project.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.serena/project.yml b/.serena/project.yml index d7c316a4..227bf4af 100644 --- a/.serena/project.yml +++ b/.serena/project.yml @@ -29,7 +29,6 @@ languages: - python - typescript - # whether to use project's .gitignore files to ignore files ignore_all_files_in_gitignore: true @@ -93,7 +92,8 @@ included_optional_tools: [] # (contrary to the memories, which are loaded on demand). initial_prompt: "" - +# the encoding used by text files in the project +# For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings encoding: utf-8 @@ -115,3 +115,9 @@ default_modes: # fixed set of tools to use as the base tool set (if non-empty), replacing Serena's default set of tools. # This cannot be combined with non-empty excluded_tools or included_optional_tools. fixed_tools: [] + +# time budget (seconds) per tool call for the retrieval of additional symbol information +# such as docstrings or parameter information. +# This overrides the corresponding setting in the global configuration; see the documentation there. +# If null or missing, use the setting from the global configuration. +symbol_info_budget: From 7ce1d0e564da95db99cd5eb4f233ce5d60338fd6 Mon Sep 17 00:00:00 2001 From: Dominik Jain Date: Tue, 24 Feb 2026 20:20:27 +0100 Subject: [PATCH 2/3] Mark flaky tests with xfail instead of skip --- test/serena/test_serena_agent.py | 4 ++-- test/solidlsp/fsharp/test_fsharp_basic.py | 4 ++-- test/solidlsp/nix/test_nix_basic.py | 2 +- test/solidlsp/php/test_php_basic.py | 4 ++-- test/solidlsp/swift/test_swift_basic.py | 6 +++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/test/serena/test_serena_agent.py b/test/serena/test_serena_agent.py index fe85ac1b..8d8a5193 100644 --- a/test/serena/test_serena_agent.py +++ b/test/serena/test_serena_agent.py @@ -131,7 +131,7 @@ class TestSerenaAgent: ) def test_find_symbol(self, serena_agent: SerenaAgent, symbol_name: str, expected_kind: str, expected_file: str): # skip flaky tests in CI - # TODO: Revisit the flaky tests and re-enable once the LS issues are resolved #1039 + # TODO: Revisit the flaky tests and re-enable once the LS issues are resolved #1040 flaky_languages = {Language.FSHARP, Language.RUST} if set(serena_agent.get_active_lsp_languages()).intersection(flaky_languages) and is_ci: pytest.skip("Test is flaky and thus skipped in CI environment.") @@ -206,7 +206,7 @@ class TestSerenaAgent: ) def test_find_symbol_references(self, serena_agent: SerenaAgent, symbol_name: str, def_file: str, ref_file: str) -> None: # skip flaky tests in CI - # TODO: Revisit the flaky tests and re-enable once the LS issues are resolved #1039 + # TODO: Revisit the flaky tests and re-enable once the LS issues are resolved #1040 flaky_languages = {Language.TYPESCRIPT} if set(serena_agent.get_active_lsp_languages()).intersection(flaky_languages) and is_ci: pytest.skip("Test is flaky and thus skipped in CI environment.") diff --git a/test/solidlsp/fsharp/test_fsharp_basic.py b/test/solidlsp/fsharp/test_fsharp_basic.py index 1d08d82d..578ae704 100644 --- a/test/solidlsp/fsharp/test_fsharp_basic.py +++ b/test/solidlsp/fsharp/test_fsharp_basic.py @@ -89,7 +89,7 @@ class TestFSharpLanguageServer: for expected in expected_symbols: assert expected in symbol_names, f"{expected} not found in Person.fs symbols" - @pytest.mark.skipif(is_ci, reason="Test is flaky") # TODO: Re-enable if the LS can be made more reliable #1039 + @pytest.mark.xfail(is_ci, reason="Test is flaky") # TODO: Re-enable if the LS can be made more reliable #1040 @pytest.mark.parametrize("language_server", [Language.FSHARP], indirect=True) def test_find_referencing_symbols_across_files(self, language_server: SolidLanguageServer) -> None: """Test finding references to Calculator functions across files.""" @@ -125,7 +125,7 @@ class TestFSharpLanguageServer: # We should get at least some definitions assert len(definitions) >= 0, "Should get definitions (even if empty for complex cases)" - @pytest.mark.skipif(is_ci, reason="Test is flaky") # TODO: Re-enable if the LS can be made more reliable #1039 + @pytest.mark.xfail(is_ci, reason="Test is flaky") # TODO: Re-enable if the LS can be made more reliable #1040 @pytest.mark.parametrize("language_server", [Language.FSHARP], indirect=True) def test_hover_information(self, language_server: SolidLanguageServer) -> None: """Test hover information functionality.""" diff --git a/test/solidlsp/nix/test_nix_basic.py b/test/solidlsp/nix/test_nix_basic.py index 9bfedbf3..92024104 100644 --- a/test/solidlsp/nix/test_nix_basic.py +++ b/test/solidlsp/nix/test_nix_basic.py @@ -116,7 +116,7 @@ class TestNixLanguageServer: # Check if we found the inherit (line 67, 0-indexed: 66) assert 66 in ref_lines, f"Should find makeGreeting inherit at line 67, found at lines {[l+1 for l in ref_lines]}" - @pytest.mark.skipif(is_ci, reason="Test is flaky") # TODO: Re-enable if the hover test becomes more stable (#1039) + @pytest.mark.xfail(is_ci, reason="Test is flaky") # TODO: Re-enable if the hover test becomes more stable (#1040) @pytest.mark.parametrize("language_server", [Language.NIX], indirect=True) def test_hover_information(self, language_server: SolidLanguageServer) -> None: """Test hover information for symbols.""" diff --git a/test/solidlsp/php/test_php_basic.py b/test/solidlsp/php/test_php_basic.py index d10f1468..6b3e7882 100644 --- a/test/solidlsp/php/test_php_basic.py +++ b/test/solidlsp/php/test_php_basic.py @@ -11,9 +11,9 @@ if language_tests_enabled(Language.PHP_PHPACTOR): _php_servers.append(Language.PHP_PHPACTOR) -@pytest.mark.skipif( +@pytest.mark.xfail( is_ci and is_windows, reason="Tests are flaky" -) # TODO: Re-enable once we have a solution for running Phpactor tests on Windows CI #1039 +) # TODO: Re-enable once we have a solution for running Phpactor tests on Windows CI #1040 @pytest.mark.php class TestPhpLanguageServers: @pytest.mark.parametrize("language_server", _php_servers, indirect=True) diff --git a/test/solidlsp/swift/test_swift_basic.py b/test/solidlsp/swift/test_swift_basic.py index bd0852d5..3f713f87 100644 --- a/test/solidlsp/swift/test_swift_basic.py +++ b/test/solidlsp/swift/test_swift_basic.py @@ -100,7 +100,7 @@ class TestSwiftLanguageServerBasics: utils_def = definitions[0] assert utils_def.get("uri", "").endswith("utils.swift"), "Definition should be in utils.swift" - @pytest.mark.skipif(is_ci, reason="Test is flaky in CI") + @pytest.mark.xfail(is_ci, reason="Test is flaky in CI") # See #1040 @pytest.mark.parametrize("language_server", [Language.SWIFT], indirect=True) def test_request_references_calculator_class(self, language_server: SolidLanguageServer) -> None: """Test request_references on the Calculator class.""" @@ -123,7 +123,7 @@ class TestSwiftLanguageServerBasics: line_5_refs = [ref for ref in calculator_refs if ref.get("range", {}).get("start", {}).get("line") == 4] assert len(line_5_refs) > 0, "Calculator should be referenced at line 5" - @pytest.mark.skipif(is_ci, reason="Test is flaky in CI") + @pytest.mark.xfail(is_ci, reason="Test is flaky in CI") # See #1040 @pytest.mark.parametrize("language_server", [Language.SWIFT], indirect=True) def test_request_references_user_struct(self, language_server: SolidLanguageServer) -> None: """Test request_references on the User struct.""" @@ -145,7 +145,7 @@ class TestSwiftLanguageServerBasics: line_9_refs = [ref for ref in user_refs if ref.get("range", {}).get("start", {}).get("line") == 8] assert len(line_9_refs) > 0, "User should be referenced at line 9" - @pytest.mark.skipif(is_ci, reason="Test is flaky in CI") + @pytest.mark.xfail(is_ci, reason="Test is flaky in CI") # See #1040 @pytest.mark.parametrize("language_server", [Language.SWIFT], indirect=True) def test_request_references_utils_struct(self, language_server: SolidLanguageServer) -> None: """Test request_references on the Utils struct.""" From 675384ee3db7c1f2b0a1846dd517c75f3f3216bb Mon Sep 17 00:00:00 2001 From: Dominik Jain Date: Tue, 24 Feb 2026 20:58:38 +0100 Subject: [PATCH 3/3] Fix TestHoverBudget (not adapted after interface change) --- test/serena/test_symbol.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/serena/test_symbol.py b/test/serena/test_symbol.py index 7b88136e..f973d633 100644 --- a/test/serena/test_symbol.py +++ b/test/serena/test_symbol.py @@ -293,7 +293,7 @@ class TestHoverBudget: # Track _request_info calls call_count = 0 - def counting_request_info(file_path, line, column): + def counting_request_info(file_path, line, column, **kwargs): nonlocal call_count call_count += 1 return f"info:{line}:{column}" @@ -324,7 +324,7 @@ class TestHoverBudget: call_count = 0 simulated_time = [0.0] - def slow_request_info(file_path, line, column): + def slow_request_info(file_path, line, column, **kwargs): nonlocal call_count call_count += 1 # Simulate each hover taking 0.05s @@ -369,7 +369,7 @@ class TestHoverBudget: # Track _request_info calls call_count = 0 - def counting_request_info(file_path, line, column): + def counting_request_info(file_path, line, column, **kwargs): nonlocal call_count call_count += 1 return f"info:{line}:{column}" @@ -402,7 +402,7 @@ class TestHoverBudget: call_count = 0 simulated_time = [0.0] - def slow_request_info(file_path, line, column): + def slow_request_info(file_path, line, column, **kwargs): nonlocal call_count call_count += 1 simulated_time[0] += 0.03 @@ -443,7 +443,7 @@ class TestHoverBudget: # Track _request_info calls call_count = 0 - def counting_request_info(file_path, line, column): + def counting_request_info(file_path, line, column, **kwargs): nonlocal call_count call_count += 1 return f"info:{line}:{column}" @@ -468,7 +468,7 @@ class TestHoverBudget: # Track _request_info calls call_count = 0 - def counting_request_info(file_path, line, column): + def counting_request_info(file_path, line, column, **kwargs): nonlocal call_count call_count += 1 return f"info:{line}:{column}"