python: Replace pyright with basedpyright (#35362)
Follow-up to #35250. Let's experiment with having this by default on nightly. Release Notes: - Added built-in support for the basedpyright language server for Python code. basedpyright is now enabled by default, and pyright (previously the primary Python language server) remains available but is disabled by default. This supersedes the basedpyright extension, which can be uninstalled. Advantages of basedpyright over pyright include support for inlay hints, semantic highlighting, auto-import code actions, and stricter type checking. To switch back to pyright, add the following configuration to settings.json: ```json { "languages": { "Python": { "language_servers": ["pyright", "pylsp", "!basedpyright"] } } } ``` --------- Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Co-authored-by: Lukas Wirth <lukas@zed.dev>
This commit is contained in:
co-authored by
Piotr Osiewicz
Lukas Wirth
parent
99102a84fa
commit
fa0df6da1c
@@ -590,6 +590,11 @@ pub trait LspAdapter: 'static + Send + Sync {
|
||||
"Not implemented for this adapter. This method should only be called on the default JSON language server adapter"
|
||||
);
|
||||
}
|
||||
|
||||
/// True for the extension adapter and false otherwise.
|
||||
fn is_extension(&self) -> bool {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
async fn try_fetch_server_binary<L: LspAdapter + 'static + Send + Sync + ?Sized>(
|
||||
@@ -2270,6 +2275,10 @@ impl LspAdapter for FakeLspAdapter {
|
||||
let label_for_completion = self.label_for_completion.as_ref()?;
|
||||
label_for_completion(item, language)
|
||||
}
|
||||
|
||||
fn is_extension(&self) -> bool {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
fn get_capture_indices(query: &Query, captures: &mut [(&str, &mut Option<u32>)]) {
|
||||
|
||||
@@ -374,14 +374,23 @@ impl LanguageRegistry {
|
||||
pub fn register_available_lsp_adapter(
|
||||
&self,
|
||||
name: LanguageServerName,
|
||||
load: impl Fn() -> Arc<dyn LspAdapter> + 'static + Send + Sync,
|
||||
adapter: Arc<dyn LspAdapter>,
|
||||
) {
|
||||
self.state.write().available_lsp_adapters.insert(
|
||||
let mut state = self.state.write();
|
||||
|
||||
if adapter.is_extension()
|
||||
&& let Some(existing_adapter) = state.all_lsp_adapters.get(&name)
|
||||
&& !existing_adapter.adapter.is_extension()
|
||||
{
|
||||
log::warn!(
|
||||
"not registering extension-provided language server {name:?}, since a builtin language server exists with that name",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
state.available_lsp_adapters.insert(
|
||||
name,
|
||||
Arc::new(move || {
|
||||
let lsp_adapter = load();
|
||||
CachedLspAdapter::new(lsp_adapter)
|
||||
}),
|
||||
Arc::new(move || CachedLspAdapter::new(adapter.clone())),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -396,13 +405,21 @@ impl LanguageRegistry {
|
||||
Some(load_lsp_adapter())
|
||||
}
|
||||
|
||||
pub fn register_lsp_adapter(
|
||||
&self,
|
||||
language_name: LanguageName,
|
||||
adapter: Arc<dyn LspAdapter>,
|
||||
) -> Arc<CachedLspAdapter> {
|
||||
let cached = CachedLspAdapter::new(adapter);
|
||||
pub fn register_lsp_adapter(&self, language_name: LanguageName, adapter: Arc<dyn LspAdapter>) {
|
||||
let mut state = self.state.write();
|
||||
|
||||
if adapter.is_extension()
|
||||
&& let Some(existing_adapter) = state.all_lsp_adapters.get(&adapter.name())
|
||||
&& !existing_adapter.adapter.is_extension()
|
||||
{
|
||||
log::warn!(
|
||||
"not registering extension-provided language server {:?} for language {language_name:?}, since a builtin language server exists with that name",
|
||||
adapter.name(),
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
let cached = CachedLspAdapter::new(adapter);
|
||||
state
|
||||
.lsp_adapters
|
||||
.entry(language_name)
|
||||
@@ -411,8 +428,6 @@ impl LanguageRegistry {
|
||||
state
|
||||
.all_lsp_adapters
|
||||
.insert(cached.name.clone(), cached.clone());
|
||||
|
||||
cached
|
||||
}
|
||||
|
||||
/// Register a fake language server and adapter
|
||||
|
||||
Reference in New Issue
Block a user