Remove simplistic interpolation for manifest-path

This commit is contained in:
Lukas Wirth
2022-10-19 23:34:36 +02:00
parent 7db50294a3
commit 46732369f4
7 changed files with 32 additions and 87 deletions

View File

@@ -70,13 +70,9 @@ config_data! {
/// Run build scripts (`build.rs`) for more precise code analysis.
cargo_buildScripts_enable: bool = "true",
/// Specifies the invocation strategy to use when running the build scripts command.
/// If `per_workspace` is set, the command will be executed for each workspace and all
/// occurrences of `$manifest_path` in the command will be replaced by the corresponding
/// manifest path of the workspace that the command is being invoked for. If interpolation
/// for the manifest path happens at least once, the commands will be executed from the
/// project root, otherwise the commands will be executed from the corresponding workspace
/// root.
/// If `once_in_root` is set, the command will be executed once in the project root.
/// If `per_workspace` is set, the command will be executed for each workspace from the
/// corresponding workspace root.
/// If `once` is set, the command will be executed once in the project root.
/// This config only has an effect when `#rust-analyzer.cargo.buildScripts.overrideCommand#`
/// is set.
cargo_buildScripts_invocationStrategy: InvocationStrategy = "\"per_workspace\"",
@@ -134,13 +130,9 @@ config_data! {
/// Set to `"all"` to pass `--all-features` to Cargo.
checkOnSave_features: Option<CargoFeaturesDef> = "null",
/// Specifies the invocation strategy to use when running the checkOnSave command.
/// If `per_workspace` is set, the command will be executed for each workspace and all
/// occurrences of `$manifest_path` in the command will be replaced by the corresponding
/// manifest path of the workspace that the command is being invoked for. If interpolation
/// for the manifest path happens at least once, the commands will be executed from the
/// project root, otherwise the commands will be executed from the corresponding workspace
/// root.
/// If `once_in_root` is set, the command will be executed once in the project root.
/// If `per_workspace` is set, the command will be executed for each workspace from the
/// corresponding workspace root.
/// If `once` is set, the command will be executed once in the project root.
/// This config only has an effect when `#rust-analyzer.cargo.buildScripts.overrideCommand#`
/// is set.
checkOnSave_invocationStrategy: InvocationStrategy = "\"per_workspace\"",
@@ -1079,7 +1071,7 @@ impl Config {
unset_test_crates: UnsetTestCrates::Only(self.data.cargo_unsetTest.clone()),
wrap_rustc_in_build_scripts: self.data.cargo_buildScripts_useRustcWrapper,
invocation_strategy: match self.data.cargo_buildScripts_invocationStrategy {
InvocationStrategy::OnceInRoot => project_model::InvocationStrategy::OnceInRoot,
InvocationStrategy::Once => project_model::InvocationStrategy::Once,
InvocationStrategy::PerWorkspace => project_model::InvocationStrategy::PerWorkspace,
},
run_build_script_command: self.data.cargo_buildScripts_overrideCommand.clone(),
@@ -1106,7 +1098,7 @@ impl Config {
return None;
}
let invocation_strategy = match self.data.checkOnSave_invocationStrategy {
InvocationStrategy::OnceInRoot => flycheck::InvocationStrategy::OnceInRoot,
InvocationStrategy::Once => flycheck::InvocationStrategy::Once,
InvocationStrategy::PerWorkspace => flycheck::InvocationStrategy::PerWorkspace,
};
let flycheck_config = match &self.data.checkOnSave_overrideCommand {
@@ -1622,7 +1614,7 @@ enum CargoFeaturesDef {
#[derive(Deserialize, Debug, Clone)]
#[serde(rename_all = "snake_case")]
enum InvocationStrategy {
OnceInRoot,
Once,
PerWorkspace,
}
@@ -2042,9 +2034,9 @@ fn field_props(field: &str, ty: &str, doc: &[&str], default: &str) -> serde_json
},
"InvocationStrategy" => set! {
"type": "string",
"enum": ["per_workspace", "once_in_root"],
"enum": ["per_workspace", "once"],
"enumDescriptions": [
"The command will be executed for each workspace and `{manifest-path}` usages will be interpolated with the corresponding workspace manifests. If `{manifest-path}` is used, the commands will be executed in the project root, otherwise in the corresponding workspace roots.",
"The command will be executed for each workspace from the corresponding workspace root.",
"The command will be executed once in the project root."
],
},

View File

@@ -477,7 +477,7 @@ impl GlobalState {
| FlycheckConfig::CustomCommand { invocation_strategy, .. }) = config;
self.flycheck = match invocation_strategy {
flycheck::InvocationStrategy::OnceInRoot => vec![FlycheckHandle::spawn(
flycheck::InvocationStrategy::Once => vec![FlycheckHandle::spawn(
0,
Box::new(move |msg| sender.send(msg).unwrap()),
config.clone(),