3181: Add ability to pass additional arguments to rustfmt. r=matklad a=Leonqn

relates to #2848

Co-authored-by: Ilya Titkov <ilya@titkov.me>
This commit is contained in:
bors[bot] 2020-02-17 09:05:01 +00:00 committed by GitHub
commit 953dbe3e02
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 25 additions and 3 deletions

View file

@ -44,6 +44,8 @@ pub struct ServerConfig {
/// Fine grained feature flags to disable specific features.
pub feature_flags: FxHashMap<String, bool>,
pub rustfmt_args: Vec<String>,
/// Cargo feature configurations.
pub cargo_features: CargoFeatures,
}
@ -63,6 +65,7 @@ impl Default for ServerConfig {
with_sysroot: true,
feature_flags: FxHashMap::default(),
cargo_features: Default::default(),
rustfmt_args: Vec::new(),
}
}
}

View file

@ -178,6 +178,7 @@ pub fn main_loop(
command: config.cargo_watch_command,
all_targets: config.cargo_watch_all_targets,
},
rustfmt_args: config.rustfmt_args,
}
};

View file

@ -590,6 +590,7 @@ pub fn handle_formatting(
let end_position = TextUnit::of_str(&file).conv_with(&file_line_index);
let mut rustfmt = process::Command::new("rustfmt");
rustfmt.args(&world.options.rustfmt_args);
if let Some(&crate_id) = crate_ids.first() {
// Assume all crates are in the same edition
let edition = world.analysis().crate_edition(crate_id)?;

View file

@ -34,6 +34,7 @@ pub struct Options {
pub supports_location_link: bool,
pub line_folding_only: bool,
pub max_inlay_hint_length: Option<usize>,
pub rustfmt_args: Vec<String>,
pub cargo_watch: CheckOptions,
}

View file

@ -188,6 +188,14 @@
"default": [],
"description": "Paths to exclude from analysis"
},
"rust-analyzer.rustfmtArgs": {
"type": "array",
"items": {
"type": "string"
},
"default": [],
"description": "Additional arguments to rustfmt"
},
"rust-analyzer.useClientWatching": {
"type": "boolean",
"default": true,
@ -233,7 +241,10 @@
"description": "Trace requests to the ra_lsp_server"
},
"rust-analyzer.lruCapacity": {
"type": [ "null", "integer" ],
"type": [
"null",
"integer"
],
"default": null,
"minimum": 0,
"exclusiveMinimum": true,
@ -245,7 +256,10 @@
"description": "Display additional type and parameter information in the editor"
},
"rust-analyzer.maxInlayHintLength": {
"type": [ "null", "integer" ],
"type": [
"null",
"integer"
],
"default": 20,
"minimum": 0,
"exclusiveMinimum": true,

View file

@ -42,6 +42,7 @@ export async function createClient(config: Config): Promise<null | lc.LanguageCl
featureFlags: config.featureFlags,
withSysroot: config.withSysroot,
cargoFeatures: config.cargoFeatures,
rustfmtArgs: config.rustfmtArgs,
},
traceOutputChannel,
};

View file

@ -148,7 +148,8 @@ export class Config {
get excludeGlobs() { return this.cfg.get("excludeGlobs") as string[]; }
get useClientWatching() { return this.cfg.get("useClientWatching") as boolean; }
get featureFlags() { return this.cfg.get("featureFlags") as Record<string, boolean>; }
get rustfmtArgs() { return this.cfg.get("rustfmtArgs") as string[]; }
get cargoWatchOptions(): CargoWatchOptions {
return {
enable: this.cfg.get("cargo-watch.enable") as boolean,