diff --git a/crates/zed/src/languages.rs b/crates/zed/src/languages.rs index 8dc37a3afe..2937d05516 100644 --- a/crates/zed/src/languages.rs +++ b/crates/zed/src/languages.rs @@ -3,12 +3,11 @@ pub use language::*; use lazy_static::lazy_static; use rust_embed::RustEmbed; use std::{borrow::Cow, str, sync::Arc}; -// use util::ResultExt; +use util::ResultExt; mod c; mod go; mod installation; -mod json; mod language_plugin; mod python; mod rust; @@ -34,7 +33,7 @@ lazy_static! { .collect(); } -pub async fn init(languages: Arc, _executor: Arc) { +pub async fn init(languages: Arc, executor: Arc) { for (name, grammar, lsp_adapter) in [ ( "c", @@ -54,12 +53,10 @@ pub async fn init(languages: Arc, _executor: Arc) ( "json", tree_sitter_json::language(), - Some(CachedLspAdapter::new(json::JsonLspAdapter).await), - // TODO: switch back to plugin - // match language_plugin::new_json(executor).await.log_err() { - // Some(lang) => Some(CachedLspAdapter::new(lang).await), - // None => None, - // }, + match language_plugin::new_json(executor).await.log_err() { + Some(lang) => Some(CachedLspAdapter::new(lang).await), + None => None, + }, ), ( "markdown", diff --git a/crates/zed/src/languages/json.rs b/crates/zed/src/languages/json.rs deleted file mode 100644 index 7b6569d336..0000000000 --- a/crates/zed/src/languages/json.rs +++ /dev/null @@ -1,106 +0,0 @@ -use super::installation::{npm_install_packages, npm_package_latest_version}; -use anyhow::{anyhow, Context, Result}; -use async_trait::async_trait; -use client::http::HttpClient; -use collections::HashMap; -use futures::StreamExt; -use language::{LanguageServerName, LspAdapter}; -use serde_json::json; -use smol::fs; -use std::{any::Any, path::PathBuf, sync::Arc}; -use util::ResultExt; - -pub struct JsonLspAdapter; - -impl JsonLspAdapter { - const BIN_PATH: &'static str = - "node_modules/vscode-json-languageserver/bin/vscode-json-languageserver"; -} - -#[async_trait] -impl LspAdapter for JsonLspAdapter { - async fn name(&self) -> LanguageServerName { - LanguageServerName("vscode-json-languageserver".into()) - } - - async fn server_args(&self) -> Vec { - vec!["--stdio".into()] - } - - async fn fetch_latest_server_version( - &self, - _: Arc, - ) -> Result> { - Ok(Box::new(npm_package_latest_version("vscode-json-languageserver").await?) as Box<_>) - } - - async fn fetch_server_binary( - &self, - version: Box, - _: Arc, - container_dir: PathBuf, - ) -> Result { - let version = version.downcast::().unwrap(); - let version_dir = container_dir.join(version.as_str()); - fs::create_dir_all(&version_dir) - .await - .context("failed to create version directory")?; - let binary_path = version_dir.join(Self::BIN_PATH); - - if fs::metadata(&binary_path).await.is_err() { - npm_install_packages( - [("vscode-json-languageserver", version.as_str())], - &version_dir, - ) - .await?; - - if let Some(mut entries) = fs::read_dir(&container_dir).await.log_err() { - while let Some(entry) = entries.next().await { - if let Some(entry) = entry.log_err() { - let entry_path = entry.path(); - if entry_path.as_path() != version_dir { - fs::remove_dir_all(&entry_path).await.log_err(); - } - } - } - } - } - - Ok(binary_path) - } - - async fn cached_server_binary(&self, container_dir: PathBuf) -> Option { - (|| async move { - let mut last_version_dir = None; - let mut entries = fs::read_dir(&container_dir).await?; - while let Some(entry) = entries.next().await { - let entry = entry?; - if entry.file_type().await?.is_dir() { - last_version_dir = Some(entry.path()); - } - } - let last_version_dir = last_version_dir.ok_or_else(|| anyhow!("no cached binary"))?; - let bin_path = last_version_dir.join(Self::BIN_PATH); - if bin_path.exists() { - Ok(bin_path) - } else { - Err(anyhow!( - "missing executable in directory {:?}", - last_version_dir - )) - } - })() - .await - .log_err() - } - - async fn initialization_options(&self) -> Option { - Some(json!({ - "provideFormatter": true - })) - } - - async fn language_ids(&self) -> HashMap { - [("JSON".into(), "jsonc".into())].into_iter().collect() - } -} diff --git a/crates/zed/src/languages/language_plugin.rs b/crates/zed/src/languages/language_plugin.rs index bd9a9d005f..8f87b03908 100644 --- a/crates/zed/src/languages/language_plugin.rs +++ b/crates/zed/src/languages/language_plugin.rs @@ -9,7 +9,6 @@ use plugin_runtime::{Plugin, PluginBinary, PluginBuilder, WasiFn}; use std::{any::Any, path::PathBuf, sync::Arc}; use util::ResultExt; -#[allow(dead_code)] pub async fn new_json(executor: Arc) -> Result { let plugin = PluginBuilder::new_default()? .host_function_async("command", |command: String| async move {