Removes extraneous EOF marker that was causing JSON parsing to fail
during C# language server initialization parameter loading.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Removes extraneous EOF marker that was causing JSON parsing to fail
during C# language server initialization.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Creates consistent initialization structure with other language servers:
- Extracts hardcoded initialization parameters to JSON configuration
- Uses template variables ($rootPath, $rootUri, $rootName) for dynamic values
- Maintains all existing capabilities and functionality
- Follows the established pattern used by 10/12 other language servers
This improves maintainability by allowing initialization parameter
modifications without code changes and ensures consistency across
all language server implementations.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Creates consistent configuration structure with other language servers:
- Extracts hardcoded URLs/versions to JSON configuration
- Supports both .NET runtime and language server packages
- Maintains platform-specific package handling
- Keeps NuGet source configuration centralized
This improves maintainability and follows the established pattern
used by all other language server implementations.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Relocates the solution file to test/resources/repos/csharp/
to organize C# test assets and keep the root directory clean.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Other language servers don't have __init__.py files, keeping
the structure consistent across language server implementations.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Resolves parsing errors for dotnet_member_insertion_location and
dotnet_property_generation_behavior by providing proper enum values
instead of numeric strings.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The language server was failing to parse empty objects '{}' for configuration
values. Updated the workspace/configuration handler to return proper default
values based on the configuration section:
- Boolean settings (enable/show/suppress/navigate) default to False
- Scope settings (analyzer/compiler diagnostics) default to "openFiles"
- Tab width and indent size default to 4
- Insert final newline defaults to True
- Other settings return null
This eliminates the "Failed to parse '{}' to type" errors during initialization.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Microsoft.CodeAnalysis.LanguageServer attempts to call client/registerCapability
during initialization, which was causing errors and shutting down the server.
Added a handler that acknowledges these requests to prevent the error.
This fixes the "method 'client/registerCapability' not handled on client" error
that was causing the language server to shut down during indexing.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add required --stdio flag for Microsoft.CodeAnalysis.LanguageServer
- Add required --extensionLogDirectory parameter to avoid startup failure
- Fix test fixture to properly start/stop language server
- Remove skip markers from C# tests to enable testing
- Return cache_dir from setup_runtime_dependencies for log directory creation
The language server now starts successfully and the first test passes.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Remove incorrect shlex.quote() usage in command construction. The ProcessLaunchInfo
expects a simple string command, not shell-quoted arguments. This was causing the
dotnet runtime to receive literal quotes around arguments, preventing proper
execution of the language server DLL.
The fix changes from:
cmd = " ".join(shlex.quote(part) for part in cmd_parts)
to:
cmd = " ".join(cmd_parts)
This allows the language server to initialize correctly without timeout errors.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add console output for progress notifications (print to stdout)
- Add console output for important server messages (errors, warnings, info)
- Show progress percentages every 10% to avoid spam
- Add messages indicating indexing has started and may take time
- Add debug logging for raw progress notifications
This should make it clear that indexing is happening and not hanging.
- Delete obj/ and bin/ directories from test project
- Add .gitignore for C# test project to exclude build artifacts
- Prevents committing build files, temporary files, and NuGet packages
- Remove tracked .claude/settings.local.json file
- Add to .gitignore to prevent future commits of local settings
- Local Claude settings should not be in version control
- Use shlex.quote() for proper shell escaping instead of array
- ProcessLaunchInfo expects a string command, not an array
- Add better error handling with specific error messages
- Add debug logging for the actual command being executed
This fixes the Empty queue error during language server initialization.
- Implement handle_progress function to display indexing progress
- Add window/workDoneProgress/create request handler
- Enable workDoneProgress capability in both window and workspace
- Replace do_nothing handler with proper progress notifications
This should display progress messages during C# project indexing instead of appearing to hang.
- Fix command injection vulnerability by passing cmd_parts array directly to ProcessLaunchInfo
- Update docstring to correctly reference Microsoft.CodeAnalysis.LanguageServer
- Remove string concatenation for shell commands to prevent injection attacks
These changes address the high-priority security and documentation issues identified in code review.
- Implement _ensure_dotnet_runtime method to check for and download .NET 9
- Support platform-specific runtime downloads (win-x64, linux-x64, osx-x64, osx-arm64)
- Cache downloaded runtime in ~/.cache/serena/language-servers/csharp/
- Modified setup_runtime_dependencies to return tuple of (dotnet_path, dll_path)
- Automatically use system .NET 9 if available, otherwise download
This ensures the C# language server can run even without .NET 9 pre-installed.
- Implemented new CSharpLanguageServer class using Microsoft's official C# language server
- Downloads Microsoft.CodeAnalysis.LanguageServer NuGet package (requires .NET 9)
- Supports direct download from NuGet API with fallback to package managers
- Uses platform-specific runtime packages (linux-x64, win-x64, osx-x64, etc.)
- Caches downloaded language server in ~/.cache/serena/language-servers/csharp/
- Added basic tests for C# language server functionality
- Updated SolidLanguageServer.create to use new implementation
- Removed old OmniSharp implementation
Note: Full language server tests are skipped as they require .NET 9 runtime
- Change from solidlsp.exceptions to solidlsp.ls_exceptions
- Change from solidlsp.logger to solidlsp.ls_logger
These modules follow the ls_ prefix convention used throughout the solidlsp package.
This commit updates the C# language server implementation to use the official
Microsoft.CodeAnalysis.LanguageServer package instead of csharp-ls.
Key changes:
- Download and use platform-specific Microsoft.CodeAnalysis.LanguageServer packages
- Support for Windows, Linux, and macOS with appropriate runtime IDs
- Automatic package download and caching in ~/.cache/serena/language-servers/
- Uses stdio communication by default
- Enhanced initialization with workspace folders support
The new implementation provides better stability and feature parity with
VS Code's official C# extension since it uses the same underlying language server.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>