From fa358c01cf15e8e8d70122b0ec317e0a167de917 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 28 Apr 2022 14:31:06 -0700 Subject: [PATCH] Add format_on_save setting This lets you turn of formatting on save for specific languages. --- crates/editor/src/items.rs | 7 ++++++- crates/settings/src/settings.rs | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index 72c03b8365ec290ac05517a7a32c8be68c90e5ea..120826321ba3b1e46aa50f70add1ca405ddcd34b 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -328,8 +328,13 @@ impl Item for Editor { project: ModelHandle, cx: &mut ViewContext, ) -> Task> { + let settings = cx.global::(); let buffer = self.buffer().clone(); - let buffers = buffer.read(cx).all_buffers(); + let mut buffers = buffer.read(cx).all_buffers(); + buffers.retain(|buffer| { + let language_name = buffer.read(cx).language().map(|l| l.name()); + settings.format_on_save(language_name.as_deref()) + }); let mut timeout = cx.background().timer(FORMAT_TIMEOUT).fuse(); let format = project.update(cx, |project, cx| project.format(buffers, true, cx)); cx.spawn(|this, mut cx| async move { diff --git a/crates/settings/src/settings.rs b/crates/settings/src/settings.rs index 02e83882499a6c6d99bdd4c3344120570d62c586..5d55338e67498a4e346168a46fa493ee9b6af5f5 100644 --- a/crates/settings/src/settings.rs +++ b/crates/settings/src/settings.rs @@ -25,6 +25,7 @@ pub struct Settings { pub tab_size: u32, pub soft_wrap: SoftWrap, pub preferred_line_length: u32, + pub format_on_save: bool, pub language_overrides: HashMap, LanguageOverride>, pub theme: Arc, } @@ -34,6 +35,7 @@ pub struct LanguageOverride { pub tab_size: Option, pub soft_wrap: Option, pub preferred_line_length: Option, + pub format_on_save: Option, } #[derive(Copy, Clone, Debug, Deserialize, PartialEq, Eq, JsonSchema)] @@ -52,6 +54,8 @@ pub struct SettingsFileContent { pub buffer_font_size: Option, #[serde(default)] pub vim_mode: Option, + #[serde(default)] + pub format_on_save: Option, #[serde(flatten)] pub editor: LanguageOverride, #[serde(default)] @@ -74,6 +78,7 @@ impl Settings { soft_wrap: SoftWrap::None, preferred_line_length: 80, language_overrides: Default::default(), + format_on_save: true, theme, }) } @@ -109,6 +114,13 @@ impl Settings { .unwrap_or(self.preferred_line_length) } + pub fn format_on_save(&self, language: Option<&str>) -> bool { + language + .and_then(|language| self.language_overrides.get(language)) + .and_then(|settings| settings.format_on_save) + .unwrap_or(self.format_on_save) + } + #[cfg(any(test, feature = "test-support"))] pub fn test(cx: &gpui::AppContext) -> Settings { Settings { @@ -118,6 +130,7 @@ impl Settings { tab_size: 4, soft_wrap: SoftWrap::None, preferred_line_length: 80, + format_on_save: true, language_overrides: Default::default(), theme: gpui::fonts::with_font_cache(cx.font_cache().clone(), || Default::default()), } @@ -142,6 +155,7 @@ impl Settings { merge(&mut self.buffer_font_size, data.buffer_font_size); merge(&mut self.vim_mode, data.vim_mode); + merge(&mut self.format_on_save, data.format_on_save); merge(&mut self.soft_wrap, data.editor.soft_wrap); merge(&mut self.tab_size, data.editor.tab_size); merge( @@ -157,6 +171,7 @@ impl Settings { merge_option(&mut target.tab_size, settings.tab_size); merge_option(&mut target.soft_wrap, settings.soft_wrap); + merge_option(&mut target.format_on_save, settings.format_on_save); merge_option( &mut target.preferred_line_length, settings.preferred_line_length,