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)
- Remove outdated DotNetRuntime override example
- Add CSharpLanguageServer override example
- Document .NET 10+ requirement and automatic installation
- Clarify that install scripts are now used for runtime
Addresses code review feedback about outdated documentation.
Replace manual .NET runtime downloads with Microsoft's official dotnet-install
scripts for better maintainability and automatic platform detection.
Changes:
- Remove 6 DotNetRuntime RuntimeDependency entries (42 lines removed)
- Replace _ensure_dotnet_runtime_from_config with _install_dotnet_with_script
- Use bash script (dotnet-install.sh) for Linux/macOS
- Use PowerShell script (dotnet-install.ps1) for Windows
- Update version check from .NET 9 to .NET 10+ (supports 10.x, 11.x, etc.)
- Add comprehensive tests for install script behavior
Benefits:
- Simpler codebase (~80 lines of manual download code → ~60 lines of script invocation)
- Automatic platform/architecture detection by Microsoft scripts
- Built-in checksum verification and dependency handling
- Official Microsoft-maintained approach
- Easier version updates (just change version string)
- Better compatibility with .NET 10 (required by roslyn-language-server packages)
The language server packages from NuGet.org remain unchanged - this only
affects how the .NET runtime is installed to execute the language server.
Replace Microsoft.CodeAnalysis.LanguageServer packages from Azure DevOps
feed with official roslyn-language-server packages from NuGet.org.
Changes:
- Update package names to roslyn-language-server.* (from Microsoft.CodeAnalysis.LanguageServer.*)
- Update version from 5.0.0-1.25329.6 to 5.5.0-2.26078.4
- Add direct URLs pointing to NuGet.org for each platform variant
- Update extract paths from content/LanguageServer/<platform> to tools/net10.0/<platform>
- Simplify download logic by removing Azure feed service index lookup
- Replace _download_nuget_package_direct with simpler _download_nuget_package
- Add tests to verify NuGet.org download behavior
Benefits:
- More reliable package source (official NuGet.org vs Azure DevOps feed)
- Newer version with latest Roslyn improvements
- Simpler codebase (removed ~60 lines of Azure-specific logic)
- Better error messages with explicit URLs