From 7748848b6e6d74537ee54c6cdc3affd04b8fe680 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Sat, 21 Oct 2023 01:07:43 +0200 Subject: [PATCH] Move prettier parsers data into languages from LSP adapters --- crates/collab/src/tests/integration_tests.rs | 10 ++-- crates/editor/src/editor_tests.rs | 19 +++---- crates/language/src/language.rs | 46 ++++++----------- crates/prettier/src/prettier.rs | 50 +++++-------------- crates/project/src/project.rs | 36 ++++++------- crates/zed/src/languages/css.rs | 6 +-- crates/zed/src/languages/css/config.toml | 1 + crates/zed/src/languages/html.rs | 6 +-- crates/zed/src/languages/html/config.toml | 1 + .../zed/src/languages/javascript/config.toml | 1 + crates/zed/src/languages/json.rs | 8 +-- crates/zed/src/languages/json/config.toml | 1 + crates/zed/src/languages/svelte.rs | 9 ++-- crates/zed/src/languages/svelte/config.toml | 1 + crates/zed/src/languages/tailwind.rs | 9 ++-- crates/zed/src/languages/tsx/config.toml | 1 + crates/zed/src/languages/typescript.rs | 10 +--- .../zed/src/languages/typescript/config.toml | 1 + crates/zed/src/languages/yaml.rs | 7 +-- crates/zed/src/languages/yaml/config.toml | 1 + 20 files changed, 73 insertions(+), 151 deletions(-) diff --git a/crates/collab/src/tests/integration_tests.rs b/crates/collab/src/tests/integration_tests.rs index d6d449fd47..8396e8947f 100644 --- a/crates/collab/src/tests/integration_tests.rs +++ b/crates/collab/src/tests/integration_tests.rs @@ -15,8 +15,8 @@ use gpui::{executor::Deterministic, test::EmptyView, AppContext, ModelHandle, Te use indoc::indoc; use language::{ language_settings::{AllLanguageSettings, Formatter, InlayHintSettings}, - tree_sitter_rust, Anchor, BundledFormatter, Diagnostic, DiagnosticEntry, FakeLspAdapter, - Language, LanguageConfig, LineEnding, OffsetRangeExt, Point, Rope, + tree_sitter_rust, Anchor, Diagnostic, DiagnosticEntry, FakeLspAdapter, Language, + LanguageConfig, LineEnding, OffsetRangeExt, Point, Rope, }; use live_kit_client::MacOSDisplay; use lsp::LanguageServerId; @@ -4530,6 +4530,7 @@ async fn test_prettier_formatting_buffer( LanguageConfig { name: "Rust".into(), path_suffixes: vec!["rs".to_string()], + prettier_parser_name: Some("test_parser".to_string()), ..Default::default() }, Some(tree_sitter_rust::language()), @@ -4537,10 +4538,7 @@ async fn test_prettier_formatting_buffer( let test_plugin = "test_plugin"; let mut fake_language_servers = language .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { - enabled_formatters: vec![BundledFormatter::Prettier { - parser_name: Some("test_parser"), - plugin_names: vec![test_plugin], - }], + prettier_plugins: vec![test_plugin], ..Default::default() })) .await; diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index 435e05018c..62cc53808f 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -19,8 +19,8 @@ use gpui::{ use indoc::indoc; use language::{ language_settings::{AllLanguageSettings, AllLanguageSettingsContent, LanguageSettingsContent}, - BracketPairConfig, BundledFormatter, FakeLspAdapter, LanguageConfig, LanguageConfigOverride, - LanguageRegistry, Override, Point, + BracketPairConfig, FakeLspAdapter, LanguageConfig, LanguageConfigOverride, LanguageRegistry, + Override, Point, }; use parking_lot::Mutex; use project::project_settings::{LspSettings, ProjectSettings}; @@ -5084,6 +5084,9 @@ async fn test_document_format_manual_trigger(cx: &mut gpui::TestAppContext) { LanguageConfig { name: "Rust".into(), path_suffixes: vec!["rs".to_string()], + // Enable Prettier formatting for the same buffer, and ensure + // LSP is called instead of Prettier. + prettier_parser_name: Some("test_parser".to_string()), ..Default::default() }, Some(tree_sitter_rust::language()), @@ -5094,12 +5097,6 @@ async fn test_document_format_manual_trigger(cx: &mut gpui::TestAppContext) { document_formatting_provider: Some(lsp::OneOf::Left(true)), ..Default::default() }, - // Enable Prettier formatting for the same buffer, and ensure - // LSP is called instead of Prettier. - enabled_formatters: vec![BundledFormatter::Prettier { - parser_name: Some("test_parser"), - plugin_names: Vec::new(), - }], ..Default::default() })) .await; @@ -7838,6 +7835,7 @@ async fn test_document_format_with_prettier(cx: &mut gpui::TestAppContext) { LanguageConfig { name: "Rust".into(), path_suffixes: vec!["rs".to_string()], + prettier_parser_name: Some("test_parser".to_string()), ..Default::default() }, Some(tree_sitter_rust::language()), @@ -7846,10 +7844,7 @@ async fn test_document_format_with_prettier(cx: &mut gpui::TestAppContext) { let test_plugin = "test_plugin"; let _ = language .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { - enabled_formatters: vec![BundledFormatter::Prettier { - parser_name: Some("test_parser"), - plugin_names: vec![test_plugin], - }], + prettier_plugins: vec![test_plugin], ..Default::default() })) .await; diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 0b49d92125..59d1d12cb9 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -226,8 +226,8 @@ impl CachedLspAdapter { self.adapter.label_for_symbol(name, kind, language).await } - pub fn enabled_formatters(&self) -> Vec { - self.adapter.enabled_formatters() + pub fn prettier_plugins(&self) -> &[&'static str] { + self.adapter.prettier_plugins() } } @@ -336,31 +336,8 @@ pub trait LspAdapter: 'static + Send + Sync { Default::default() } - fn enabled_formatters(&self) -> Vec { - Vec::new() - } -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum BundledFormatter { - Prettier { - // See https://prettier.io/docs/en/options.html#parser for a list of valid values. - // Usually, every language has a single parser (standard or plugin-provided), hence `Some("parser_name")` can be used. - // There can not be multiple parsers for a single language, in case of a conflict, we would attempt to select the one with most plugins. - // - // But exceptions like Tailwind CSS exist, which uses standard parsers for CSS/JS/HTML/etc. but require an extra plugin to be installed. - // For those cases, `None` will install the plugin but apply other, regular parser defined for the language, and this would not be a conflict. - parser_name: Option<&'static str>, - plugin_names: Vec<&'static str>, - }, -} - -impl BundledFormatter { - pub fn prettier(parser_name: &'static str) -> Self { - Self::Prettier { - parser_name: Some(parser_name), - plugin_names: Vec::new(), - } + fn prettier_plugins(&self) -> &[&'static str] { + &[] } } @@ -398,6 +375,8 @@ pub struct LanguageConfig { pub overrides: HashMap, #[serde(default)] pub word_characters: HashSet, + #[serde(default)] + pub prettier_parser_name: Option, } #[derive(Debug, Default)] @@ -471,6 +450,7 @@ impl Default for LanguageConfig { overrides: Default::default(), collapsed_placeholder: Default::default(), word_characters: Default::default(), + prettier_parser_name: None, } } } @@ -496,7 +476,7 @@ pub struct FakeLspAdapter { pub initializer: Option>, pub disk_based_diagnostics_progress_token: Option, pub disk_based_diagnostics_sources: Vec, - pub enabled_formatters: Vec, + pub prettier_plugins: Vec<&'static str>, } #[derive(Clone, Debug, Default)] @@ -1597,6 +1577,10 @@ impl Language { override_id: None, } } + + pub fn prettier_parser_name(&self) -> Option<&str> { + self.config.prettier_parser_name.as_deref() + } } impl LanguageScope { @@ -1759,7 +1743,7 @@ impl Default for FakeLspAdapter { disk_based_diagnostics_progress_token: None, initialization_options: None, disk_based_diagnostics_sources: Vec::new(), - enabled_formatters: Vec::new(), + prettier_plugins: Vec::new(), } } } @@ -1817,8 +1801,8 @@ impl LspAdapter for Arc { self.initialization_options.clone() } - fn enabled_formatters(&self) -> Vec { - self.enabled_formatters.clone() + fn prettier_plugins(&self) -> &[&'static str] { + &self.prettier_plugins } } diff --git a/crates/prettier/src/prettier.rs b/crates/prettier/src/prettier.rs index c3811b567b..09b793e5a2 100644 --- a/crates/prettier/src/prettier.rs +++ b/crates/prettier/src/prettier.rs @@ -3,11 +3,11 @@ use std::path::{Path, PathBuf}; use std::sync::Arc; use anyhow::Context; -use collections::{HashMap, HashSet}; +use collections::HashMap; use fs::Fs; use gpui::{AsyncAppContext, ModelHandle}; use language::language_settings::language_settings; -use language::{Buffer, BundledFormatter, Diff}; +use language::{Buffer, Diff}; use lsp::{LanguageServer, LanguageServerId}; use node_runtime::NodeRuntime; use serde::{Deserialize, Serialize}; @@ -242,40 +242,16 @@ impl Prettier { Self::Real(local) => { let params = buffer.read_with(cx, |buffer, cx| { let buffer_language = buffer.language(); - let parsers_with_plugins = buffer_language - .into_iter() - .flat_map(|language| { - language - .lsp_adapters() - .iter() - .flat_map(|adapter| adapter.enabled_formatters()) - .filter_map(|formatter| match formatter { - BundledFormatter::Prettier { - parser_name, - plugin_names, - } => Some((parser_name, plugin_names)), - }) - }) - .fold( - HashMap::default(), - |mut parsers_with_plugins, (parser_name, plugins)| { - match parser_name { - Some(parser_name) => parsers_with_plugins - .entry(parser_name) - .or_insert_with(HashSet::default) - .extend(plugins), - None => parsers_with_plugins.values_mut().for_each(|existing_plugins| { - existing_plugins.extend(plugins.iter()); - }), - } - parsers_with_plugins - }, - ); - - let selected_parser_with_plugins = parsers_with_plugins.iter().max_by_key(|(_, plugins)| plugins.len()); - if parsers_with_plugins.len() > 1 { - log::warn!("Found multiple parsers with plugins {parsers_with_plugins:?}, will select only one: {selected_parser_with_plugins:?}"); - } + let parser_with_plugins = buffer_language.and_then(|l| { + let prettier_parser = l.prettier_parser_name()?; + let mut prettier_plugins = l + .lsp_adapters() + .iter() + .flat_map(|adapter| adapter.prettier_plugins()) + .collect::>(); + prettier_plugins.dedup(); + Some((prettier_parser, prettier_plugins)) + }); let prettier_node_modules = self.prettier_dir().join("node_modules"); anyhow::ensure!(prettier_node_modules.is_dir(), "Prettier node_modules dir does not exist: {prettier_node_modules:?}"); @@ -296,7 +272,7 @@ impl Prettier { } None }; - let (parser, located_plugins) = match selected_parser_with_plugins { + let (parser, located_plugins) = match parser_with_plugins { Some((parser, plugins)) => { // Tailwind plugin requires being added last // https://github.com/tailwindlabs/prettier-plugin-tailwindcss#compatibility-with-other-prettier-plugins diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index e91c91f7c3..2eb1fd421c 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -39,11 +39,11 @@ use language::{ deserialize_anchor, deserialize_fingerprint, deserialize_line_ending, deserialize_version, serialize_anchor, serialize_version, split_operations, }, - range_from_lsp, range_to_lsp, Bias, Buffer, BufferSnapshot, BundledFormatter, CachedLspAdapter, - CodeAction, CodeLabel, Completion, Diagnostic, DiagnosticEntry, DiagnosticSet, Diff, - Event as BufferEvent, File as _, Language, LanguageRegistry, LanguageServerName, LocalFile, - LspAdapterDelegate, OffsetRangeExt, Operation, Patch, PendingLanguageServer, PointUtf16, - TextBufferSnapshot, ToOffset, ToPointUtf16, Transaction, Unclipped, + range_from_lsp, range_to_lsp, Bias, Buffer, BufferSnapshot, CachedLspAdapter, CodeAction, + CodeLabel, Completion, Diagnostic, DiagnosticEntry, DiagnosticSet, Diff, Event as BufferEvent, + File as _, Language, LanguageRegistry, LanguageServerName, LocalFile, LspAdapterDelegate, + OffsetRangeExt, Operation, Patch, PendingLanguageServer, PointUtf16, TextBufferSnapshot, + ToOffset, ToPointUtf16, Transaction, Unclipped, }; use log::error; use lsp::{ @@ -8352,12 +8352,7 @@ impl Project { let Some(buffer_language) = buffer.language() else { return Task::ready(None); }; - if !buffer_language - .lsp_adapters() - .iter() - .flat_map(|adapter| adapter.enabled_formatters()) - .any(|formatter| matches!(formatter, BundledFormatter::Prettier { .. })) - { + if buffer_language.prettier_parser_name().is_none() { return Task::ready(None); } @@ -8510,16 +8505,15 @@ impl Project { }; let mut prettier_plugins = None; - for formatter in new_language - .lsp_adapters() - .into_iter() - .flat_map(|adapter| adapter.enabled_formatters()) - { - match formatter { - BundledFormatter::Prettier { plugin_names, .. } => prettier_plugins - .get_or_insert_with(|| HashSet::default()) - .extend(plugin_names), - } + if new_language.prettier_parser_name().is_some() { + prettier_plugins + .get_or_insert_with(|| HashSet::default()) + .extend( + new_language + .lsp_adapters() + .iter() + .flat_map(|adapter| adapter.prettier_plugins()), + ) } let Some(prettier_plugins) = prettier_plugins else { return Task::ready(Ok(())); diff --git a/crates/zed/src/languages/css.rs b/crates/zed/src/languages/css.rs index f046437d75..fdbc179209 100644 --- a/crates/zed/src/languages/css.rs +++ b/crates/zed/src/languages/css.rs @@ -1,7 +1,7 @@ use anyhow::{anyhow, Result}; use async_trait::async_trait; use futures::StreamExt; -use language::{BundledFormatter, LanguageServerName, LspAdapter, LspAdapterDelegate}; +use language::{LanguageServerName, LspAdapter, LspAdapterDelegate}; use lsp::LanguageServerBinary; use node_runtime::NodeRuntime; use serde_json::json; @@ -96,10 +96,6 @@ impl LspAdapter for CssLspAdapter { "provideFormatter": true })) } - - fn enabled_formatters(&self) -> Vec { - vec![BundledFormatter::prettier("css")] - } } async fn get_cached_server_binary( diff --git a/crates/zed/src/languages/css/config.toml b/crates/zed/src/languages/css/config.toml index da63d6df2d..24a844c239 100644 --- a/crates/zed/src/languages/css/config.toml +++ b/crates/zed/src/languages/css/config.toml @@ -10,3 +10,4 @@ brackets = [ ] word_characters = ["-"] block_comment = ["/* ", " */"] +prettier_parser_name = "css" diff --git a/crates/zed/src/languages/html.rs b/crates/zed/src/languages/html.rs index 6f27b7ca8f..b8f1c70cce 100644 --- a/crates/zed/src/languages/html.rs +++ b/crates/zed/src/languages/html.rs @@ -1,7 +1,7 @@ use anyhow::{anyhow, Result}; use async_trait::async_trait; use futures::StreamExt; -use language::{BundledFormatter, LanguageServerName, LspAdapter, LspAdapterDelegate}; +use language::{LanguageServerName, LspAdapter, LspAdapterDelegate}; use lsp::LanguageServerBinary; use node_runtime::NodeRuntime; use serde_json::json; @@ -96,10 +96,6 @@ impl LspAdapter for HtmlLspAdapter { "provideFormatter": true })) } - - fn enabled_formatters(&self) -> Vec { - vec![BundledFormatter::prettier("html")] - } } async fn get_cached_server_binary( diff --git a/crates/zed/src/languages/html/config.toml b/crates/zed/src/languages/html/config.toml index 164e095cee..0105f0d60d 100644 --- a/crates/zed/src/languages/html/config.toml +++ b/crates/zed/src/languages/html/config.toml @@ -11,3 +11,4 @@ brackets = [ { start = "!--", end = " --", close = true, newline = false, not_in = ["comment", "string"] }, ] word_characters = ["-"] +prettier_parser_name = "html" diff --git a/crates/zed/src/languages/javascript/config.toml b/crates/zed/src/languages/javascript/config.toml index 2394c57539..3b8862e358 100644 --- a/crates/zed/src/languages/javascript/config.toml +++ b/crates/zed/src/languages/javascript/config.toml @@ -15,6 +15,7 @@ brackets = [ ] word_characters = ["$", "#"] scope_opt_in_language_servers = ["tailwindcss-language-server"] +prettier_parser_name = "babel" [overrides.element] line_comment = { remove = true } diff --git a/crates/zed/src/languages/json.rs b/crates/zed/src/languages/json.rs index f017af0a22..63f909ae2a 100644 --- a/crates/zed/src/languages/json.rs +++ b/crates/zed/src/languages/json.rs @@ -4,9 +4,7 @@ use collections::HashMap; use feature_flags::FeatureFlagAppExt; use futures::{future::BoxFuture, FutureExt, StreamExt}; use gpui::AppContext; -use language::{ - BundledFormatter, LanguageRegistry, LanguageServerName, LspAdapter, LspAdapterDelegate, -}; +use language::{LanguageRegistry, LanguageServerName, LspAdapter, LspAdapterDelegate}; use lsp::LanguageServerBinary; use node_runtime::NodeRuntime; use serde_json::json; @@ -146,10 +144,6 @@ impl LspAdapter for JsonLspAdapter { async fn language_ids(&self) -> HashMap { [("JSON".into(), "jsonc".into())].into_iter().collect() } - - fn enabled_formatters(&self) -> Vec { - vec![BundledFormatter::prettier("json")] - } } async fn get_cached_server_binary( diff --git a/crates/zed/src/languages/json/config.toml b/crates/zed/src/languages/json/config.toml index 87f41882a5..37a6d3a54c 100644 --- a/crates/zed/src/languages/json/config.toml +++ b/crates/zed/src/languages/json/config.toml @@ -7,3 +7,4 @@ brackets = [ { start = "[", end = "]", close = true, newline = true }, { start = "\"", end = "\"", close = true, newline = false, not_in = ["string"] }, ] +prettier_parser_name = "json" diff --git a/crates/zed/src/languages/svelte.rs b/crates/zed/src/languages/svelte.rs index 2089fe88b1..34dab81772 100644 --- a/crates/zed/src/languages/svelte.rs +++ b/crates/zed/src/languages/svelte.rs @@ -1,7 +1,7 @@ use anyhow::{anyhow, Result}; use async_trait::async_trait; use futures::StreamExt; -use language::{BundledFormatter, LanguageServerName, LspAdapter, LspAdapterDelegate}; +use language::{LanguageServerName, LspAdapter, LspAdapterDelegate}; use lsp::LanguageServerBinary; use node_runtime::NodeRuntime; use serde_json::json; @@ -96,11 +96,8 @@ impl LspAdapter for SvelteLspAdapter { })) } - fn enabled_formatters(&self) -> Vec { - vec![BundledFormatter::Prettier { - parser_name: Some("svelte"), - plugin_names: vec!["prettier-plugin-svelte"], - }] + fn prettier_plugins(&self) -> &[&'static str] { + &["prettier-plugin-svelte"] } } diff --git a/crates/zed/src/languages/svelte/config.toml b/crates/zed/src/languages/svelte/config.toml index 8a07b012c7..76f03493b5 100644 --- a/crates/zed/src/languages/svelte/config.toml +++ b/crates/zed/src/languages/svelte/config.toml @@ -13,6 +13,7 @@ brackets = [ { start = "/*", end = " */", close = true, newline = false, not_in = ["string", "comment"] }, ] scope_opt_in_language_servers = ["tailwindcss-language-server"] +prettier_parser_name = "svelte" [overrides.string] word_characters = ["-"] diff --git a/crates/zed/src/languages/tailwind.rs b/crates/zed/src/languages/tailwind.rs index 296d9a490b..6d6006dbd4 100644 --- a/crates/zed/src/languages/tailwind.rs +++ b/crates/zed/src/languages/tailwind.rs @@ -6,7 +6,7 @@ use futures::{ FutureExt, StreamExt, }; use gpui::AppContext; -use language::{BundledFormatter, LanguageServerName, LspAdapter, LspAdapterDelegate}; +use language::{LanguageServerName, LspAdapter, LspAdapterDelegate}; use lsp::LanguageServerBinary; use node_runtime::NodeRuntime; use serde_json::{json, Value}; @@ -130,11 +130,8 @@ impl LspAdapter for TailwindLspAdapter { ]) } - fn enabled_formatters(&self) -> Vec { - vec![BundledFormatter::Prettier { - parser_name: None, - plugin_names: vec!["prettier-plugin-tailwindcss"], - }] + fn prettier_plugins(&self) -> &[&'static str] { + &["prettier-plugin-tailwindcss"] } } diff --git a/crates/zed/src/languages/tsx/config.toml b/crates/zed/src/languages/tsx/config.toml index a7f99bef5e..0dae25d779 100644 --- a/crates/zed/src/languages/tsx/config.toml +++ b/crates/zed/src/languages/tsx/config.toml @@ -14,6 +14,7 @@ brackets = [ ] word_characters = ["#", "$"] scope_opt_in_language_servers = ["tailwindcss-language-server"] +prettier_parser_name = "typescript" [overrides.element] line_comment = { remove = true } diff --git a/crates/zed/src/languages/typescript.rs b/crates/zed/src/languages/typescript.rs index f09c964588..676d0fd4c0 100644 --- a/crates/zed/src/languages/typescript.rs +++ b/crates/zed/src/languages/typescript.rs @@ -4,7 +4,7 @@ use async_tar::Archive; use async_trait::async_trait; use futures::{future::BoxFuture, FutureExt}; use gpui::AppContext; -use language::{BundledFormatter, LanguageServerName, LspAdapter, LspAdapterDelegate}; +use language::{LanguageServerName, LspAdapter, LspAdapterDelegate}; use lsp::{CodeActionKind, LanguageServerBinary}; use node_runtime::NodeRuntime; use serde_json::{json, Value}; @@ -161,10 +161,6 @@ impl LspAdapter for TypeScriptLspAdapter { "provideFormatter": true })) } - - fn enabled_formatters(&self) -> Vec { - vec![BundledFormatter::prettier("typescript")] - } } async fn get_cached_ts_server_binary( @@ -313,10 +309,6 @@ impl LspAdapter for EsLintLspAdapter { async fn initialization_options(&self) -> Option { None } - - fn enabled_formatters(&self) -> Vec { - vec![BundledFormatter::prettier("babel")] - } } async fn get_cached_eslint_server_binary( diff --git a/crates/zed/src/languages/typescript/config.toml b/crates/zed/src/languages/typescript/config.toml index 2fad1f13e1..d1ebffc559 100644 --- a/crates/zed/src/languages/typescript/config.toml +++ b/crates/zed/src/languages/typescript/config.toml @@ -13,3 +13,4 @@ brackets = [ { start = "/*", end = " */", close = true, newline = false, not_in = ["string", "comment"] }, ] word_characters = ["#", "$"] +prettier_parser_name = "typescript" diff --git a/crates/zed/src/languages/yaml.rs b/crates/zed/src/languages/yaml.rs index 1c1ce18668..8b438d0949 100644 --- a/crates/zed/src/languages/yaml.rs +++ b/crates/zed/src/languages/yaml.rs @@ -3,8 +3,7 @@ use async_trait::async_trait; use futures::{future::BoxFuture, FutureExt, StreamExt}; use gpui::AppContext; use language::{ - language_settings::all_language_settings, BundledFormatter, LanguageServerName, LspAdapter, - LspAdapterDelegate, + language_settings::all_language_settings, LanguageServerName, LspAdapter, LspAdapterDelegate, }; use lsp::LanguageServerBinary; use node_runtime::NodeRuntime; @@ -109,10 +108,6 @@ impl LspAdapter for YamlLspAdapter { })) .boxed() } - - fn enabled_formatters(&self) -> Vec { - vec![BundledFormatter::prettier("yaml")] - } } async fn get_cached_server_binary( diff --git a/crates/zed/src/languages/yaml/config.toml b/crates/zed/src/languages/yaml/config.toml index 6912d92457..4e91dd348b 100644 --- a/crates/zed/src/languages/yaml/config.toml +++ b/crates/zed/src/languages/yaml/config.toml @@ -9,3 +9,4 @@ brackets = [ ] increase_indent_pattern = ":\\s*[|>]?\\s*$" +prettier_parser_name = "yaml"