json_schema_store: Include available LSP adapters in settings schema (#46766)
Bae Seokjae
and
Ben Kunkle
created
Closes #46556
## Summary
- Fix "Property `ty` is not allowed" warning in `settings.json` for LSP
adapters registered via `register_available_lsp_adapter()`
- Add `available_lsp_adapter_names()` method to include these adapters
in schema generation
- Support `initialization_options` schema lookup for available adapters
## Problem
LSP adapters registered via `register_available_lsp_adapter()` were not
included in the settings JSON schema. This caused validation warnings
like:
Property ty is not allowed
Even though `ty` is a built-in Python language server that works
correctly.
**Affected adapters:**
- `ty`, `py`, `python-lsp-server`
- `eslint`, `vtsls`, `typescript-language-server`
- `tailwindcss-language-server`, `tailwindcss-intellisense-css`
## Solution
Schema generation now queries both:
1. `all_lsp_adapters()` - adapters bound to specific languages
2. `available_lsp_adapter_names()` - adapters enabled via settings (new)
Related: #43104, #45928
Release Notes:
- Fixed an issue where not all LSP adapters would be suggested for
completion, or recognized as valid in `settings.json`
---------
Co-authored-by: Ben Kunkle <ben@zed.dev>
@@ -414,6 +414,17 @@ impl LanguageRegistry {
state.available_lsp_adapters.contains_key(name)
}
+ /// Returns the names of all available LSP adapters (registered via `register_available_lsp_adapter`).
+ /// These are adapters that are not bound to a specific language but can be enabled via settings.
+ pub fn available_lsp_adapter_names(&self) -> Vec<LanguageServerName> {
+ self.state
+ .read()
+ .available_lsp_adapters
+ .keys()
+ .cloned()
+ .collect()
+ }
+
pub fn register_lsp_adapter(&self, language_name: LanguageName, adapter: Arc<dyn LspAdapter>) {
let mut state = self.state.write();