Docker build fails when local .venv directory exists because:
1. COPY . /workspaces/serena/ copies .venv into container
2. RUN uv venv fails with 'virtual environment already exists'
This change prevents the issue by excluding Python development artifacts:
- .venv (virtual environment)
- __pycache__ (Python bytecode cache)
- *.pyc (compiled Python files)
- .pytest_cache (test cache)
These files are not needed for Docker builds as the container creates
its own clean environment.
Co-authored-by: Cursor <cursoragent@cursor.com>
set_modes() applied requested modes directly to self._active_modes,
then called _update_active_modes_and_tools() which recreates
_active_modes from scratch (global config -> project config -> CLI
overrides), discarding the change.
Fix: store the requested modes into self._mode_overrides so they
survive the rebuild and take highest priority, matching the behavior
of CLI --mode flags.
Also adds test coverage for set_modes() which was previously untested.
Bug was introduced in commit 40a3075 on Jan 26, 2026.
Consolidate TestPhpLanguageServer and TestPhpPhpactorLanguageServer
into a single TestPhpLanguageServers class. Both Language.PHP and
Language.PHP_PHPACTOR are now parametrized together, with conditional
branching where the two language servers differ in behavior.
Addresses review comment on PR #1002.
Remove the unnecessary php_phpactor -> php symlink. Instead, add a
_LANGUAGE_REPO_ALIASES mapping in conftest.py so that variant language
servers (PHP_PHPACTOR, PYTHON_JEDI, RUBY_SOLARGRAPH) resolve to their
base language's test repository without needing filesystem symlinks.
Addresses review comment on PR #1002.
Check that the installed PHP version is >= 8.1 before proceeding with
Phpactor setup. Raises RuntimeError with a clear message if the version
is too old, and logs a warning if the version string cannot be parsed.
Addresses review comment on PR #1002.
- Introduce PHP_PHPACTOR enum and integration in ls_config
- Implement PhpactorServer for PHP with dependency management
- Update docs and changelog for Phpactor support and usage
- Add project template entry for php_phpactor
- Provide tests for Phpactor LSP definition and reference features
Fixes longstanding clangd issues (wrong selectionRange, failure to take compile_commands.json into account) and enhances documentation about C/C++ support
Filter out DotNetRuntime overrides from runtime_dependencies and
log a warning informing users that .NET is now installed via
Microsoft's official scripts.
Assert on actual hover content (type names and symbol names) instead
of just checking for non-empty content. This verifies hover returns
meaningful type information from Roslyn.
- Replace get_all_symbols_and_roots() with iter_symbols() to avoid
redundant tuple unpacking
- Make hover tests assert that hover_info is not None instead of
defensive conditionals
The test was mocking platform.system() but not the full platform detection
chain. On non-Linux CI platforms, platform.libc_ver() returns empty string,
causing "linux--x64" (double dash) instead of "linux-x64" in the platform ID.
Fix by mocking PlatformUtils.get_platform_id() directly to return proper
PlatformId values, following the pattern used in other tests.
Fixes both Linux bash script and Windows PowerShell script tests.
Following ALLanguageServer pattern, inject cached original symbol names
(with type annotations) into hover responses. This ensures type information
is available via hover operation as per SolidLSP convention.
- Override request_hover() to prepend original names to hover content
- Add comprehensive hover test verifying both property and method hovers
- Test covers Name property and IsAdult method
Addresses reviewer feedback about delivering type info via hover.
Test passes.
Replace startswith() checks with exact matching now that symbol names
are normalized at the source. This is cleaner and more accurate.
Comments updated to reflect that names are normalized (not type-annotated).
All 14 tests pass.
Not passing the open request directly on to the LS can speed things up
for cases where we don't necessarily need the file to be open in the LS
at first (but do need to open the file and read its contents)
Applied to request_document_symbols, where we check the cache based on
the file contents but only need to open the file in the LS if there is
a cache miss.
Relates to #984
Now that C# language server normalizes symbol names at the source,
the utility function can use simple exact matching. This is cleaner
and follows the principle of fixing root causes rather than patching
callsites.
All 24 C# tests still pass.
Roslyn 5.5.0 returns symbol names with type annotations:
- Properties: "Name : string" instead of just "Name"
- Methods: "Add(int, int) : int" instead of just "Add"
This broke Serena's overload detection system which expects clean
base names with overload_idx for duplicates.
Solution:
- Override request_document_symbols() in CSharpLanguageServer
- Normalize symbol names to base form ("Name", "Add")
- Cache original names at (file, line, char) for rich info display
- Populate LSP spec's 'detail' field with type/signature info
- Process children symbols recursively
Follows AL Language Server pattern. All 24 C# tests pass.
The new Roslyn 5.5.0 returns symbols with type annotations:
- Properties: 'Name : string' instead of 'Name'
- Methods: 'Add(int, int) : int' instead of 'Add'
Changes:
- Update SymbolUtils.symbol_tree_contains_name() to handle both formats
- Update test assertions to match new format (startswith checks)
- Update test expectations (new Roslyn correctly excludes definitions from references)
This provides more informative symbol information while maintaining backward compatibility.
- Test cached .NET installation is reused without re-downloading
- Test .NET 9 is rejected and triggers .NET 10 install
- Test .NET 11+ versions are accepted for forward compatibility
All 7 .NET install tests now pass (4 existing + 3 new)