From 53730e2aaaa7a61d421751c5ac93c23c3d071c51 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Sat, 29 Jun 2024 11:37:22 +0300 Subject: [PATCH] Fix Prettier parser values when formatting files with paths (#13666) Closes https://github.com/zed-industries/zed/issues/13660 Now, as intended, the parser value is passed only if configured in the language settings. Also, allows to format JSONC by default with Prettier and reformats Zed settings. Release Notes: - Fixed Zed Prettier integration always passing parser value for files with paths ([13660](https://github.com/zed-industries/zed/issues/13660)) --- assets/settings/default.json | 14 ++++++-------- crates/prettier/src/prettier.rs | 11 +++++++---- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/assets/settings/default.json b/assets/settings/default.json index a3d95591dc3a54547a39be19cd4861bbf7d7d99b..f695fd79653f69c40f875fa00cf2b3c572789810 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -131,14 +131,7 @@ // The default number of lines to expand excerpts in the multibuffer by. "expand_excerpt_lines": 3, // Globs to match against file paths to determine if a file is private. - "private_files": [ - "**/.env*", - "**/*.pem", - "**/*.key", - "**/*.cert", - "**/*.crt", - "**/secrets.yml" - ], + "private_files": ["**/.env*", "**/*.pem", "**/*.key", "**/*.cert", "**/*.crt", "**/secrets.yml"], // Whether to use additional LSP queries to format (and amend) the code after // every "trigger" symbol input, defined by LSP server capabilities. "use_on_type_format": true, @@ -758,6 +751,11 @@ "allowed": true } }, + "JSONC": { + "prettier": { + "allowed": true + } + }, "Markdown": { "format_on_save": "off", "prettier": { diff --git a/crates/prettier/src/prettier.rs b/crates/prettier/src/prettier.rs index 214ef48d3fbc6d2e175119301b14f84200c34bca..669072e1550da4942f28dc4408166681c4887d44 100644 --- a/crates/prettier/src/prettier.rs +++ b/crates/prettier/src/prettier.rs @@ -317,11 +317,14 @@ impl Prettier { }) .collect(); - let prettier_parser = prettier_settings.parser.as_deref().or_else(|| buffer_language.and_then(|language| language.prettier_parser_name())); + let mut prettier_parser = prettier_settings.parser.as_deref(); + if buffer_path.is_none() { + prettier_parser = prettier_parser.or_else(|| buffer_language.and_then(|language| language.prettier_parser_name())); + if prettier_parser.is_none() { + log::error!("Formatting unsaved file with prettier failed. No prettier parser configured for language {buffer_language:?}"); + return Err(anyhow!("Cannot determine prettier parser for unsaved file")); + } - if prettier_parser.is_none() && buffer_path.is_none() { - log::error!("Formatting unsaved file with prettier failed. No prettier parser configured for language {buffer_language:?}"); - return Err(anyhow!("Cannot determine prettier parser for unsaved file")); } log::debug!(