Remove language servers from buffers
Co-Authored-By: Nathan Sobo <nathan@zed.dev> Co-Authored-By: Antonio Scandurra <antonio@zed.dev> Co-Authored-By: Keith Simmons <keith@zed.dev>
This commit is contained in:
parent
6662ba62a3
commit
317a1bb07b
14 changed files with 1584 additions and 1235 deletions
|
@ -223,21 +223,19 @@ impl LspCommand for PerformRename {
|
|||
mut cx: AsyncAppContext,
|
||||
) -> Result<ProjectTransaction> {
|
||||
if let Some(edit) = message {
|
||||
let (language_name, language_server) = buffer.read_with(&cx, |buffer, _| {
|
||||
let language = buffer
|
||||
.language()
|
||||
.ok_or_else(|| anyhow!("buffer's language was removed"))?;
|
||||
let language_server = buffer
|
||||
.language_server()
|
||||
.cloned()
|
||||
.ok_or_else(|| anyhow!("buffer's language server was removed"))?;
|
||||
Ok::<_, anyhow::Error>((language.name().to_string(), language_server))
|
||||
})?;
|
||||
let language_server = project
|
||||
.read_with(&cx, |project, cx| {
|
||||
project.language_server_for_buffer(&buffer, 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.name(),
|
||||
language_server,
|
||||
&mut cx,
|
||||
)
|
||||
|
@ -343,14 +341,14 @@ impl LspCommand for GetDefinition {
|
|||
mut cx: AsyncAppContext,
|
||||
) -> Result<Vec<Location>> {
|
||||
let mut definitions = Vec::new();
|
||||
let (language, language_server) = buffer
|
||||
.read_with(&cx, |buffer, _| {
|
||||
buffer
|
||||
.language()
|
||||
.cloned()
|
||||
.zip(buffer.language_server().cloned())
|
||||
let language_server = project
|
||||
.read_with(&cx, |project, cx| {
|
||||
project.language_server_for_buffer(&buffer, cx).cloned()
|
||||
})
|
||||
.ok_or_else(|| anyhow!("buffer no longer has language server"))?;
|
||||
.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();
|
||||
|
@ -375,7 +373,7 @@ impl LspCommand for GetDefinition {
|
|||
.update(&mut cx, |this, cx| {
|
||||
this.open_local_buffer_via_lsp(
|
||||
target_uri,
|
||||
language.name().to_string(),
|
||||
language.name(),
|
||||
language_server.clone(),
|
||||
cx,
|
||||
)
|
||||
|
@ -519,14 +517,14 @@ impl LspCommand for GetReferences {
|
|||
mut cx: AsyncAppContext,
|
||||
) -> Result<Vec<Location>> {
|
||||
let mut references = Vec::new();
|
||||
let (language, language_server) = buffer
|
||||
.read_with(&cx, |buffer, _| {
|
||||
buffer
|
||||
.language()
|
||||
.cloned()
|
||||
.zip(buffer.language_server().cloned())
|
||||
let language_server = project
|
||||
.read_with(&cx, |project, cx| {
|
||||
project.language_server_for_buffer(&buffer, cx).cloned()
|
||||
})
|
||||
.ok_or_else(|| anyhow!("buffer no longer has language server"))?;
|
||||
.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 {
|
||||
|
@ -534,7 +532,7 @@ impl LspCommand for GetReferences {
|
|||
.update(&mut cx, |this, cx| {
|
||||
this.open_local_buffer_via_lsp(
|
||||
lsp_location.uri,
|
||||
language.name().to_string(),
|
||||
language.name(),
|
||||
language_server.clone(),
|
||||
cx,
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue