mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-10 20:41:59 +00:00
Show better errors when failing to start golps (#7614)
Part of https://github.com/zed-industries/zed/issues/4471#issuecomment-1936008584 Improves gopls error logging to actually see what is wrong with the output we failed to match against the version regex. Release Notes: - N/A
This commit is contained in:
parent
775bce3e1a
commit
f3bfa11148
1 changed files with 8 additions and 7 deletions
|
@ -1,4 +1,4 @@
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Context, Result};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use gpui::{AsyncAppContext, Task};
|
use gpui::{AsyncAppContext, Task};
|
||||||
|
@ -124,21 +124,22 @@ impl super::LspAdapter for GoLspAdapter {
|
||||||
.args(["install", "golang.org/x/tools/gopls@latest"])
|
.args(["install", "golang.org/x/tools/gopls@latest"])
|
||||||
.output()
|
.output()
|
||||||
.await?;
|
.await?;
|
||||||
if !install_output.status.success() {
|
anyhow::ensure!(
|
||||||
Err(anyhow!("failed to install gopls. Is go installed?"))?;
|
install_output.status.success(),
|
||||||
}
|
"failed to install gopls. Is `go` installed and in the PATH?"
|
||||||
|
);
|
||||||
|
|
||||||
let installed_binary_path = gobin_dir.join("gopls");
|
let installed_binary_path = gobin_dir.join("gopls");
|
||||||
let version_output = process::Command::new(&installed_binary_path)
|
let version_output = process::Command::new(&installed_binary_path)
|
||||||
.arg("version")
|
.arg("version")
|
||||||
.output()
|
.output()
|
||||||
.await
|
.await
|
||||||
.map_err(|e| anyhow!("failed to run installed gopls binary {:?}", e))?;
|
.context("failed to run installed gopls binary")?;
|
||||||
let version_stdout = str::from_utf8(&version_output.stdout)
|
let version_stdout = str::from_utf8(&version_output.stdout)
|
||||||
.map_err(|_| anyhow!("gopls version produced invalid utf8"))?;
|
.context("gopls version produced invalid utf8 output")?;
|
||||||
let version = GOPLS_VERSION_REGEX
|
let version = GOPLS_VERSION_REGEX
|
||||||
.find(version_stdout)
|
.find(version_stdout)
|
||||||
.ok_or_else(|| anyhow!("failed to parse gopls version output"))?
|
.with_context(|| format!("failed to parse golps version output '{version_stdout}'"))?
|
||||||
.as_str();
|
.as_str();
|
||||||
let binary_path = container_dir.join(&format!("gopls_{version}"));
|
let binary_path = container_dir.join(&format!("gopls_{version}"));
|
||||||
fs::rename(&installed_binary_path, &binary_path).await?;
|
fs::rename(&installed_binary_path, &binary_path).await?;
|
||||||
|
|
Loading…
Reference in a new issue