Start work on allowing language servers to support multiple languages
This commit is contained in:
parent
0e1d371a67
commit
158d987965
8 changed files with 118 additions and 102 deletions
|
@ -223,22 +223,19 @@ impl LspCommand for PerformRename {
|
|||
mut cx: AsyncAppContext,
|
||||
) -> Result<ProjectTransaction> {
|
||||
if let Some(edit) = message {
|
||||
let language_server = project
|
||||
let (lsp_adapter, lsp_server) = project
|
||||
.read_with(&cx, |project, cx| {
|
||||
project
|
||||
.language_server_for_buffer(buffer.read(cx), cx)
|
||||
.cloned()
|
||||
})
|
||||
.ok_or_else(|| anyhow!("no language server found for buffer"))?;
|
||||
let language = buffer
|
||||
.read_with(&cx, |buffer, _| buffer.language().cloned())
|
||||
.ok_or_else(|| anyhow!("no language for buffer"))?;
|
||||
Project::deserialize_workspace_edit(
|
||||
project,
|
||||
edit,
|
||||
self.push_to_history,
|
||||
language.name(),
|
||||
language_server,
|
||||
lsp_adapter,
|
||||
lsp_server,
|
||||
&mut cx,
|
||||
)
|
||||
.await
|
||||
|
@ -343,16 +340,13 @@ impl LspCommand for GetDefinition {
|
|||
mut cx: AsyncAppContext,
|
||||
) -> Result<Vec<Location>> {
|
||||
let mut definitions = Vec::new();
|
||||
let language_server = project
|
||||
let (lsp_adapter, language_server) = project
|
||||
.read_with(&cx, |project, cx| {
|
||||
project
|
||||
.language_server_for_buffer(buffer.read(cx), cx)
|
||||
.cloned()
|
||||
})
|
||||
.ok_or_else(|| anyhow!("no language server found for buffer"))?;
|
||||
let language = buffer
|
||||
.read_with(&cx, |buffer, _| buffer.language().cloned())
|
||||
.ok_or_else(|| anyhow!("no language for buffer"))?;
|
||||
|
||||
if let Some(message) = message {
|
||||
let mut unresolved_locations = Vec::new();
|
||||
|
@ -377,7 +371,7 @@ impl LspCommand for GetDefinition {
|
|||
.update(&mut cx, |this, cx| {
|
||||
this.open_local_buffer_via_lsp(
|
||||
target_uri,
|
||||
language.name(),
|
||||
lsp_adapter.clone(),
|
||||
language_server.clone(),
|
||||
cx,
|
||||
)
|
||||
|
@ -521,16 +515,13 @@ impl LspCommand for GetReferences {
|
|||
mut cx: AsyncAppContext,
|
||||
) -> Result<Vec<Location>> {
|
||||
let mut references = Vec::new();
|
||||
let language_server = project
|
||||
let (lsp_adapter, language_server) = project
|
||||
.read_with(&cx, |project, cx| {
|
||||
project
|
||||
.language_server_for_buffer(buffer.read(cx), cx)
|
||||
.cloned()
|
||||
})
|
||||
.ok_or_else(|| anyhow!("no language server found for buffer"))?;
|
||||
let language = buffer
|
||||
.read_with(&cx, |buffer, _| buffer.language().cloned())
|
||||
.ok_or_else(|| anyhow!("no language for buffer"))?;
|
||||
|
||||
if let Some(locations) = locations {
|
||||
for lsp_location in locations {
|
||||
|
@ -538,7 +529,7 @@ impl LspCommand for GetReferences {
|
|||
.update(&mut cx, |this, cx| {
|
||||
this.open_local_buffer_via_lsp(
|
||||
lsp_location.uri,
|
||||
language.name(),
|
||||
lsp_adapter.clone(),
|
||||
language_server.clone(),
|
||||
cx,
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue