Revert "Route language server requests through wrapper object"
This reverts commit 9b63d6f832
.
This commit is contained in:
parent
9b63d6f832
commit
e1cd6cebb9
3 changed files with 52 additions and 142 deletions
|
@ -665,11 +665,11 @@ impl LanguageServer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn name<'a>(&self) -> &str {
|
pub fn name<'a>(self: &'a Arc<Self>) -> &'a str {
|
||||||
&self.name
|
&self.name
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn capabilities<'a>(&self) -> &ServerCapabilities {
|
pub fn capabilities<'a>(self: &'a Arc<Self>) -> &'a ServerCapabilities {
|
||||||
&self.capabilities
|
&self.capabilities
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
DocumentHighlight, Hover, HoverBlock, HoverBlockKind, Location, LocationLink, Project,
|
DocumentHighlight, Hover, HoverBlock, HoverBlockKind, Location, LocationLink, Project,
|
||||||
ProjectLanguageServer, ProjectTransaction,
|
ProjectTransaction,
|
||||||
};
|
};
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
|
@ -14,7 +14,7 @@ use language::{
|
||||||
range_from_lsp, range_to_lsp, Anchor, Bias, Buffer, CachedLspAdapter, CharKind, CodeAction,
|
range_from_lsp, range_to_lsp, Anchor, Bias, Buffer, CachedLspAdapter, CharKind, CodeAction,
|
||||||
Completion, OffsetRangeExt, PointUtf16, ToOffset, ToPointUtf16, Transaction, Unclipped,
|
Completion, OffsetRangeExt, PointUtf16, ToOffset, ToPointUtf16, Transaction, Unclipped,
|
||||||
};
|
};
|
||||||
use lsp::{DocumentHighlightKind, LanguageServerId, ServerCapabilities};
|
use lsp::{DocumentHighlightKind, LanguageServer, LanguageServerId, ServerCapabilities};
|
||||||
use std::{cmp::Reverse, ops::Range, path::Path, sync::Arc};
|
use std::{cmp::Reverse, ops::Range, path::Path, sync::Arc};
|
||||||
|
|
||||||
pub fn lsp_formatting_options(tab_size: u32) -> lsp::FormattingOptions {
|
pub fn lsp_formatting_options(tab_size: u32) -> lsp::FormattingOptions {
|
||||||
|
@ -40,7 +40,7 @@ pub(crate) trait LspCommand: 'static + Sized {
|
||||||
&self,
|
&self,
|
||||||
path: &Path,
|
path: &Path,
|
||||||
buffer: &Buffer,
|
buffer: &Buffer,
|
||||||
language_server: &Arc<ProjectLanguageServer>,
|
language_server: &Arc<LanguageServer>,
|
||||||
cx: &AppContext,
|
cx: &AppContext,
|
||||||
) -> <Self::LspRequest as lsp::request::Request>::Params;
|
) -> <Self::LspRequest as lsp::request::Request>::Params;
|
||||||
|
|
||||||
|
@ -156,7 +156,7 @@ impl LspCommand for PrepareRename {
|
||||||
&self,
|
&self,
|
||||||
path: &Path,
|
path: &Path,
|
||||||
_: &Buffer,
|
_: &Buffer,
|
||||||
_: &Arc<ProjectLanguageServer>,
|
_: &Arc<LanguageServer>,
|
||||||
_: &AppContext,
|
_: &AppContext,
|
||||||
) -> lsp::TextDocumentPositionParams {
|
) -> lsp::TextDocumentPositionParams {
|
||||||
lsp::TextDocumentPositionParams {
|
lsp::TextDocumentPositionParams {
|
||||||
|
@ -279,7 +279,7 @@ impl LspCommand for PerformRename {
|
||||||
&self,
|
&self,
|
||||||
path: &Path,
|
path: &Path,
|
||||||
_: &Buffer,
|
_: &Buffer,
|
||||||
_: &Arc<ProjectLanguageServer>,
|
_: &Arc<LanguageServer>,
|
||||||
_: &AppContext,
|
_: &AppContext,
|
||||||
) -> lsp::RenameParams {
|
) -> lsp::RenameParams {
|
||||||
lsp::RenameParams {
|
lsp::RenameParams {
|
||||||
|
@ -398,7 +398,7 @@ impl LspCommand for GetDefinition {
|
||||||
&self,
|
&self,
|
||||||
path: &Path,
|
path: &Path,
|
||||||
_: &Buffer,
|
_: &Buffer,
|
||||||
_: &Arc<ProjectLanguageServer>,
|
_: &Arc<LanguageServer>,
|
||||||
_: &AppContext,
|
_: &AppContext,
|
||||||
) -> lsp::GotoDefinitionParams {
|
) -> lsp::GotoDefinitionParams {
|
||||||
lsp::GotoDefinitionParams {
|
lsp::GotoDefinitionParams {
|
||||||
|
@ -499,7 +499,7 @@ impl LspCommand for GetTypeDefinition {
|
||||||
&self,
|
&self,
|
||||||
path: &Path,
|
path: &Path,
|
||||||
_: &Buffer,
|
_: &Buffer,
|
||||||
_: &Arc<ProjectLanguageServer>,
|
_: &Arc<LanguageServer>,
|
||||||
_: &AppContext,
|
_: &AppContext,
|
||||||
) -> lsp::GotoTypeDefinitionParams {
|
) -> lsp::GotoTypeDefinitionParams {
|
||||||
lsp::GotoTypeDefinitionParams {
|
lsp::GotoTypeDefinitionParams {
|
||||||
|
@ -587,7 +587,7 @@ fn language_server_for_buffer(
|
||||||
buffer: &ModelHandle<Buffer>,
|
buffer: &ModelHandle<Buffer>,
|
||||||
server_id: LanguageServerId,
|
server_id: LanguageServerId,
|
||||||
cx: &mut AsyncAppContext,
|
cx: &mut AsyncAppContext,
|
||||||
) -> Result<(Arc<CachedLspAdapter>, Arc<ProjectLanguageServer>)> {
|
) -> Result<(Arc<CachedLspAdapter>, Arc<LanguageServer>)> {
|
||||||
project
|
project
|
||||||
.read_with(cx, |project, cx| {
|
.read_with(cx, |project, cx| {
|
||||||
project
|
project
|
||||||
|
@ -784,7 +784,7 @@ impl LspCommand for GetReferences {
|
||||||
&self,
|
&self,
|
||||||
path: &Path,
|
path: &Path,
|
||||||
_: &Buffer,
|
_: &Buffer,
|
||||||
_: &Arc<ProjectLanguageServer>,
|
_: &Arc<LanguageServer>,
|
||||||
_: &AppContext,
|
_: &AppContext,
|
||||||
) -> lsp::ReferenceParams {
|
) -> lsp::ReferenceParams {
|
||||||
lsp::ReferenceParams {
|
lsp::ReferenceParams {
|
||||||
|
@ -949,7 +949,7 @@ impl LspCommand for GetDocumentHighlights {
|
||||||
&self,
|
&self,
|
||||||
path: &Path,
|
path: &Path,
|
||||||
_: &Buffer,
|
_: &Buffer,
|
||||||
_: &Arc<ProjectLanguageServer>,
|
_: &Arc<LanguageServer>,
|
||||||
_: &AppContext,
|
_: &AppContext,
|
||||||
) -> lsp::DocumentHighlightParams {
|
) -> lsp::DocumentHighlightParams {
|
||||||
lsp::DocumentHighlightParams {
|
lsp::DocumentHighlightParams {
|
||||||
|
@ -1096,7 +1096,7 @@ impl LspCommand for GetHover {
|
||||||
&self,
|
&self,
|
||||||
path: &Path,
|
path: &Path,
|
||||||
_: &Buffer,
|
_: &Buffer,
|
||||||
_: &Arc<ProjectLanguageServer>,
|
_: &Arc<LanguageServer>,
|
||||||
_: &AppContext,
|
_: &AppContext,
|
||||||
) -> lsp::HoverParams {
|
) -> lsp::HoverParams {
|
||||||
lsp::HoverParams {
|
lsp::HoverParams {
|
||||||
|
@ -1314,7 +1314,7 @@ impl LspCommand for GetCompletions {
|
||||||
&self,
|
&self,
|
||||||
path: &Path,
|
path: &Path,
|
||||||
_: &Buffer,
|
_: &Buffer,
|
||||||
_: &Arc<ProjectLanguageServer>,
|
_: &Arc<LanguageServer>,
|
||||||
_: &AppContext,
|
_: &AppContext,
|
||||||
) -> lsp::CompletionParams {
|
) -> lsp::CompletionParams {
|
||||||
lsp::CompletionParams {
|
lsp::CompletionParams {
|
||||||
|
@ -1530,7 +1530,7 @@ impl LspCommand for GetCodeActions {
|
||||||
&self,
|
&self,
|
||||||
path: &Path,
|
path: &Path,
|
||||||
buffer: &Buffer,
|
buffer: &Buffer,
|
||||||
language_server: &Arc<ProjectLanguageServer>,
|
language_server: &Arc<LanguageServer>,
|
||||||
_: &AppContext,
|
_: &AppContext,
|
||||||
) -> lsp::CodeActionParams {
|
) -> lsp::CodeActionParams {
|
||||||
let relevant_diagnostics = buffer
|
let relevant_diagnostics = buffer
|
||||||
|
@ -1673,7 +1673,7 @@ impl LspCommand for OnTypeFormatting {
|
||||||
&self,
|
&self,
|
||||||
path: &Path,
|
path: &Path,
|
||||||
_: &Buffer,
|
_: &Buffer,
|
||||||
_: &Arc<ProjectLanguageServer>,
|
_: &Arc<LanguageServer>,
|
||||||
_: &AppContext,
|
_: &AppContext,
|
||||||
) -> lsp::DocumentOnTypeFormattingParams {
|
) -> lsp::DocumentOnTypeFormattingParams {
|
||||||
lsp::DocumentOnTypeFormattingParams {
|
lsp::DocumentOnTypeFormattingParams {
|
||||||
|
|
|
@ -279,79 +279,19 @@ pub enum Event {
|
||||||
CollaboratorLeft(proto::PeerId),
|
CollaboratorLeft(proto::PeerId),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ProjectLanguageServer {
|
|
||||||
server: Arc<LanguageServer>,
|
|
||||||
project: WeakModelHandle<Project>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl std::ops::Deref for ProjectLanguageServer {
|
|
||||||
type Target = LanguageServer;
|
|
||||||
|
|
||||||
fn deref(&self) -> &Self::Target {
|
|
||||||
&self.server
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ProjectLanguageServer {
|
|
||||||
pub fn new(server: Arc<LanguageServer>, project: WeakModelHandle<Project>) -> Self {
|
|
||||||
ProjectLanguageServer { server, project }
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn request<T: lsp::request::Request + 'static>(
|
|
||||||
&self,
|
|
||||||
params: T::Params,
|
|
||||||
cx: &mut AsyncAppContext,
|
|
||||||
) -> impl Future<Output = Result<T::Result>>
|
|
||||||
where
|
|
||||||
T::Result: 'static + Send,
|
|
||||||
{
|
|
||||||
let server = self.server.clone();
|
|
||||||
let project = self.project.clone();
|
|
||||||
|
|
||||||
let future = server.request::<T>(params);
|
|
||||||
|
|
||||||
cx.spawn(|mut cx| async move {
|
|
||||||
let result = future.await;
|
|
||||||
if result.is_ok() {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
let project = match project.upgrade(&cx) {
|
|
||||||
Some(project) => project,
|
|
||||||
None => return result,
|
|
||||||
};
|
|
||||||
|
|
||||||
project.update(&mut cx, |_, cx| {
|
|
||||||
Project::check_errored_language_server(server, cx);
|
|
||||||
});
|
|
||||||
|
|
||||||
result
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn notify<T: lsp::notification::Notification>(&self, params: T::Params) -> Result<()> {
|
|
||||||
let result = self.server.notify::<T>(params);
|
|
||||||
if result.is_ok() {
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
|
|
||||||
result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub enum LanguageServerState {
|
pub enum LanguageServerState {
|
||||||
Validating(Task<Option<Arc<ProjectLanguageServer>>>),
|
Validating(Task<Option<Arc<LanguageServer>>>),
|
||||||
|
|
||||||
Starting {
|
Starting {
|
||||||
language: Arc<Language>,
|
language: Arc<Language>,
|
||||||
adapter: Arc<CachedLspAdapter>,
|
adapter: Arc<CachedLspAdapter>,
|
||||||
task: Task<Option<Arc<ProjectLanguageServer>>>,
|
task: Task<Option<Arc<LanguageServer>>>,
|
||||||
},
|
},
|
||||||
|
|
||||||
Running {
|
Running {
|
||||||
language: Arc<Language>,
|
language: Arc<Language>,
|
||||||
adapter: Arc<CachedLspAdapter>,
|
adapter: Arc<CachedLspAdapter>,
|
||||||
server: Arc<ProjectLanguageServer>,
|
server: Arc<LanguageServer>,
|
||||||
watched_paths: HashMap<WorktreeId, GlobSet>,
|
watched_paths: HashMap<WorktreeId, GlobSet>,
|
||||||
simulate_disk_based_diagnostics_completion: Option<Task<()>>,
|
simulate_disk_based_diagnostics_completion: Option<Task<()>>,
|
||||||
},
|
},
|
||||||
|
@ -2297,13 +2237,7 @@ impl Project {
|
||||||
fn language_servers_for_worktree(
|
fn language_servers_for_worktree(
|
||||||
&self,
|
&self,
|
||||||
worktree_id: WorktreeId,
|
worktree_id: WorktreeId,
|
||||||
) -> impl Iterator<
|
) -> impl Iterator<Item = (&Arc<CachedLspAdapter>, &Arc<Language>, &Arc<LanguageServer>)> {
|
||||||
Item = (
|
|
||||||
&Arc<CachedLspAdapter>,
|
|
||||||
&Arc<Language>,
|
|
||||||
&Arc<ProjectLanguageServer>,
|
|
||||||
),
|
|
||||||
> {
|
|
||||||
self.language_server_ids
|
self.language_server_ids
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(move |((language_server_worktree_id, _), id)| {
|
.filter_map(move |((language_server_worktree_id, _), id)| {
|
||||||
|
@ -2543,7 +2477,7 @@ impl Project {
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
match result {
|
match result {
|
||||||
Ok(server) => Some(Arc::new(ProjectLanguageServer::new(server, this))),
|
Ok(server) => Some(server),
|
||||||
|
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
log::error!("failed to start language server {:?}: {}", server_name, err);
|
log::error!("failed to start language server {:?}: {}", server_name, err);
|
||||||
|
@ -2869,10 +2803,7 @@ impl Project {
|
||||||
adapter: adapter.clone(),
|
adapter: adapter.clone(),
|
||||||
language: language.clone(),
|
language: language.clone(),
|
||||||
watched_paths: Default::default(),
|
watched_paths: Default::default(),
|
||||||
server: Arc::new(ProjectLanguageServer::new(
|
server: language_server.clone(),
|
||||||
language_server.clone(),
|
|
||||||
cx.weak_handle(),
|
|
||||||
)),
|
|
||||||
simulate_disk_based_diagnostics_completion: None,
|
simulate_disk_based_diagnostics_completion: None,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -3131,6 +3062,7 @@ impl Project {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_errored_language_server(
|
fn check_errored_language_server(
|
||||||
|
&self,
|
||||||
language_server: Arc<LanguageServer>,
|
language_server: Arc<LanguageServer>,
|
||||||
cx: &mut ModelContext<Self>,
|
cx: &mut ModelContext<Self>,
|
||||||
) {
|
) {
|
||||||
|
@ -3965,7 +3897,7 @@ impl Project {
|
||||||
this: &ModelHandle<Self>,
|
this: &ModelHandle<Self>,
|
||||||
buffer: &ModelHandle<Buffer>,
|
buffer: &ModelHandle<Buffer>,
|
||||||
abs_path: &Path,
|
abs_path: &Path,
|
||||||
language_server: &Arc<ProjectLanguageServer>,
|
language_server: &Arc<LanguageServer>,
|
||||||
tab_size: NonZeroU32,
|
tab_size: NonZeroU32,
|
||||||
cx: &mut AsyncAppContext,
|
cx: &mut AsyncAppContext,
|
||||||
) -> Result<Vec<(Range<Anchor>, String)>> {
|
) -> Result<Vec<(Range<Anchor>, String)>> {
|
||||||
|
@ -3979,29 +3911,23 @@ impl Project {
|
||||||
|
|
||||||
let result = if !matches!(formatting_provider, Some(OneOf::Left(false))) {
|
let result = if !matches!(formatting_provider, Some(OneOf::Left(false))) {
|
||||||
language_server
|
language_server
|
||||||
.request::<lsp::request::Formatting>(
|
.request::<lsp::request::Formatting>(lsp::DocumentFormattingParams {
|
||||||
lsp::DocumentFormattingParams {
|
|
||||||
text_document,
|
text_document,
|
||||||
options: lsp_command::lsp_formatting_options(tab_size.get()),
|
options: lsp_command::lsp_formatting_options(tab_size.get()),
|
||||||
work_done_progress_params: Default::default(),
|
work_done_progress_params: Default::default(),
|
||||||
},
|
})
|
||||||
cx,
|
|
||||||
)
|
|
||||||
.await
|
.await
|
||||||
} else if !matches!(range_formatting_provider, Some(OneOf::Left(false))) {
|
} else if !matches!(range_formatting_provider, Some(OneOf::Left(false))) {
|
||||||
let buffer_start = lsp::Position::new(0, 0);
|
let buffer_start = lsp::Position::new(0, 0);
|
||||||
let buffer_end = buffer.read_with(cx, |b, _| point_to_lsp(b.max_point_utf16()));
|
let buffer_end = buffer.read_with(cx, |b, _| point_to_lsp(b.max_point_utf16()));
|
||||||
|
|
||||||
language_server
|
language_server
|
||||||
.request::<lsp::request::RangeFormatting>(
|
.request::<lsp::request::RangeFormatting>(lsp::DocumentRangeFormattingParams {
|
||||||
lsp::DocumentRangeFormattingParams {
|
|
||||||
text_document,
|
text_document,
|
||||||
range: lsp::Range::new(buffer_start, buffer_end),
|
range: lsp::Range::new(buffer_start, buffer_end),
|
||||||
options: lsp_command::lsp_formatting_options(tab_size.get()),
|
options: lsp_command::lsp_formatting_options(tab_size.get()),
|
||||||
work_done_progress_params: Default::default(),
|
work_done_progress_params: Default::default(),
|
||||||
},
|
})
|
||||||
cx,
|
|
||||||
)
|
|
||||||
.await
|
.await
|
||||||
} else {
|
} else {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
|
@ -4017,8 +3943,8 @@ impl Project {
|
||||||
err
|
err
|
||||||
);
|
);
|
||||||
|
|
||||||
this.update(cx, |_, cx| {
|
this.update(cx, |this, cx| {
|
||||||
Self::check_errored_language_server(language_server.server.clone(), cx);
|
this.check_errored_language_server(language_server.clone(), cx);
|
||||||
});
|
});
|
||||||
|
|
||||||
None
|
None
|
||||||
|
@ -4164,7 +4090,6 @@ impl Project {
|
||||||
query: query.to_string(),
|
query: query.to_string(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
&mut cx.to_async(),
|
|
||||||
)
|
)
|
||||||
.map_ok(move |response| {
|
.map_ok(move |response| {
|
||||||
let lsp_symbols = response.map(|symbol_response| match symbol_response {
|
let lsp_symbols = response.map(|symbol_response| match symbol_response {
|
||||||
|
@ -4398,10 +4323,7 @@ impl Project {
|
||||||
|
|
||||||
cx.spawn(|this, mut cx| async move {
|
cx.spawn(|this, mut cx| async move {
|
||||||
let resolved_completion = match lang_server
|
let resolved_completion = match lang_server
|
||||||
.request::<lsp::request::ResolveCompletionItem>(
|
.request::<lsp::request::ResolveCompletionItem>(completion.lsp_completion)
|
||||||
completion.lsp_completion,
|
|
||||||
&mut cx,
|
|
||||||
)
|
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(resolved_completion) => resolved_completion,
|
Ok(resolved_completion) => resolved_completion,
|
||||||
|
@ -4530,10 +4452,7 @@ impl Project {
|
||||||
{
|
{
|
||||||
*lsp_range = serde_json::to_value(&range_to_lsp(range)).unwrap();
|
*lsp_range = serde_json::to_value(&range_to_lsp(range)).unwrap();
|
||||||
action.lsp_action = match lang_server
|
action.lsp_action = match lang_server
|
||||||
.request::<lsp::request::CodeActionResolveRequest>(
|
.request::<lsp::request::CodeActionResolveRequest>(action.lsp_action)
|
||||||
action.lsp_action,
|
|
||||||
&mut cx,
|
|
||||||
)
|
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(lsp_action) => lsp_action,
|
Ok(lsp_action) => lsp_action,
|
||||||
|
@ -4577,14 +4496,11 @@ impl Project {
|
||||||
});
|
});
|
||||||
|
|
||||||
let result = lang_server
|
let result = lang_server
|
||||||
.request::<lsp::request::ExecuteCommand>(
|
.request::<lsp::request::ExecuteCommand>(lsp::ExecuteCommandParams {
|
||||||
lsp::ExecuteCommandParams {
|
|
||||||
command: command.command,
|
command: command.command,
|
||||||
arguments: command.arguments.unwrap_or_default(),
|
arguments: command.arguments.unwrap_or_default(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
})
|
||||||
&mut cx,
|
|
||||||
)
|
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
if let Err(err) = result {
|
if let Err(err) = result {
|
||||||
|
@ -4691,7 +4607,7 @@ impl Project {
|
||||||
edits: Vec<lsp::TextEdit>,
|
edits: Vec<lsp::TextEdit>,
|
||||||
push_to_history: bool,
|
push_to_history: bool,
|
||||||
_: Arc<CachedLspAdapter>,
|
_: Arc<CachedLspAdapter>,
|
||||||
language_server: Arc<ProjectLanguageServer>,
|
language_server: Arc<LanguageServer>,
|
||||||
cx: &mut AsyncAppContext,
|
cx: &mut AsyncAppContext,
|
||||||
) -> Result<Option<Transaction>> {
|
) -> Result<Option<Transaction>> {
|
||||||
let edits = this
|
let edits = this
|
||||||
|
@ -4732,7 +4648,7 @@ impl Project {
|
||||||
edit: lsp::WorkspaceEdit,
|
edit: lsp::WorkspaceEdit,
|
||||||
push_to_history: bool,
|
push_to_history: bool,
|
||||||
lsp_adapter: Arc<CachedLspAdapter>,
|
lsp_adapter: Arc<CachedLspAdapter>,
|
||||||
language_server: Arc<ProjectLanguageServer>,
|
language_server: Arc<LanguageServer>,
|
||||||
cx: &mut AsyncAppContext,
|
cx: &mut AsyncAppContext,
|
||||||
) -> Result<ProjectTransaction> {
|
) -> Result<ProjectTransaction> {
|
||||||
let fs = this.read_with(cx, |this, _| this.fs.clone());
|
let fs = this.read_with(cx, |this, _| this.fs.clone());
|
||||||
|
@ -5154,15 +5070,12 @@ impl Project {
|
||||||
.map(|(_, server)| server.clone()),
|
.map(|(_, server)| server.clone()),
|
||||||
) {
|
) {
|
||||||
let lsp_params = request.to_lsp(&file.abs_path(cx), buffer, &language_server, cx);
|
let lsp_params = request.to_lsp(&file.abs_path(cx), buffer, &language_server, cx);
|
||||||
return cx.spawn(|this, mut cx| async move {
|
return cx.spawn(|this, cx| async move {
|
||||||
if !request.check_capabilities(language_server.capabilities()) {
|
if !request.check_capabilities(language_server.capabilities()) {
|
||||||
return Ok(Default::default());
|
return Ok(Default::default());
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = language_server
|
let result = language_server.request::<R::LspRequest>(lsp_params).await;
|
||||||
.request::<R::LspRequest>(lsp_params, &mut cx)
|
|
||||||
.await;
|
|
||||||
|
|
||||||
let response = match result {
|
let response = match result {
|
||||||
Ok(response) => response,
|
Ok(response) => response,
|
||||||
|
|
||||||
|
@ -7364,10 +7277,7 @@ impl Project {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn language_server_for_id(
|
pub fn language_server_for_id(&self, id: LanguageServerId) -> Option<Arc<LanguageServer>> {
|
||||||
&self,
|
|
||||||
id: LanguageServerId,
|
|
||||||
) -> Option<Arc<ProjectLanguageServer>> {
|
|
||||||
if let LanguageServerState::Running { server, .. } = self.language_servers.get(&id)? {
|
if let LanguageServerState::Running { server, .. } = self.language_servers.get(&id)? {
|
||||||
Some(server.clone())
|
Some(server.clone())
|
||||||
} else {
|
} else {
|
||||||
|
@ -7379,7 +7289,7 @@ impl Project {
|
||||||
&self,
|
&self,
|
||||||
buffer: &Buffer,
|
buffer: &Buffer,
|
||||||
cx: &AppContext,
|
cx: &AppContext,
|
||||||
) -> impl Iterator<Item = (&Arc<CachedLspAdapter>, &Arc<ProjectLanguageServer>)> {
|
) -> impl Iterator<Item = (&Arc<CachedLspAdapter>, &Arc<LanguageServer>)> {
|
||||||
self.language_server_ids_for_buffer(buffer, cx)
|
self.language_server_ids_for_buffer(buffer, cx)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|server_id| {
|
.filter_map(|server_id| {
|
||||||
|
@ -7399,7 +7309,7 @@ impl Project {
|
||||||
&self,
|
&self,
|
||||||
buffer: &Buffer,
|
buffer: &Buffer,
|
||||||
cx: &AppContext,
|
cx: &AppContext,
|
||||||
) -> Option<(&Arc<CachedLspAdapter>, &Arc<ProjectLanguageServer>)> {
|
) -> Option<(&Arc<CachedLspAdapter>, &Arc<LanguageServer>)> {
|
||||||
self.language_servers_for_buffer(buffer, cx).next()
|
self.language_servers_for_buffer(buffer, cx).next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7408,7 +7318,7 @@ impl Project {
|
||||||
buffer: &Buffer,
|
buffer: &Buffer,
|
||||||
server_id: LanguageServerId,
|
server_id: LanguageServerId,
|
||||||
cx: &AppContext,
|
cx: &AppContext,
|
||||||
) -> Option<(&Arc<CachedLspAdapter>, &Arc<ProjectLanguageServer>)> {
|
) -> Option<(&Arc<CachedLspAdapter>, &Arc<LanguageServer>)> {
|
||||||
self.language_servers_for_buffer(buffer, cx)
|
self.language_servers_for_buffer(buffer, cx)
|
||||||
.find(|(_, s)| s.server_id() == server_id)
|
.find(|(_, s)| s.server_id() == server_id)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue