diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index f3d8773cc11..04f5bb47320 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -133,13 +133,30 @@ impl Config { set(value, "/cargo/allFeatures", &mut self.cargo.all_features); set(value, "/cargo/features", &mut self.cargo.features); set(value, "/cargo/loadOutDirsFromCheck", &mut self.cargo.load_out_dirs_from_check); - if let RustfmtConfig::Rustfmt { extra_args } = &mut self.rustfmt { + if let Some(mut args) = get::>(value, "/rustfmt/overrideCommand") { + if !args.is_empty() { + let command = args.remove(0); + self.rustfmt = RustfmtConfig::CustomCommand { + command, + args, + } + } + } else if let RustfmtConfig::Rustfmt { extra_args } = &mut self.rustfmt { set(value, "/rustfmt/extraArgs", extra_args); } if let Some(false) = get(value, "/checkOnSave/enable") { self.check = None } else { - if let Some(FlycheckConfig::CargoCommand { command, extra_args, all_targets }) = &mut self.check + if let Some(mut args) = get::>(value, "/checkOnSave/overrideCommand") { + if !args.is_empty() { + let command = args.remove(0); + self.check = Some(FlycheckConfig::CustomCommand { + command, + args, + }) + } + + } else if let Some(FlycheckConfig::CargoCommand { command, extra_args, all_targets }) = &mut self.check { set(value, "/checkOnSave/extraArgs", extra_args); set(value, "/checkOnSave/command", command); diff --git a/editors/code/package.json b/editors/code/package.json index 1f95cd130c9..9c8cca61588 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -248,6 +248,13 @@ "default": [], "description": "Additional arguments to rustfmt" }, + "rust-analyzer.rustfmt.overrideCommand": { + "type": "array", + "items": { + "type": "string" + }, + "markdownDescription": "Advanced option, fully override the command rust-analyzer uses for formatting." + }, "rust-analyzer.checkOnSave.enable": { "type": "boolean", "default": true, @@ -266,6 +273,13 @@ "default": "check", "markdownDescription": "Cargo command to use for `cargo check`" }, + "rust-analyzer.checkOnSave.overrideCommand": { + "type": "array", + "items": { + "type": "string" + }, + "markdownDescription": "Advanced option, fully override the command rust-analyzer uses for checking. The command should include `--message=format=json` or similar option." + }, "rust-analyzer.checkOnSave.allTargets": { "type": "boolean", "default": true,