From c04b561e7e7d031d7e1be9307fb8d539765768ff Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 26 Jan 2021 16:03:24 +0300 Subject: Remove the need to manually sync config in package.json --- crates/rust-analyzer/src/config.rs | 39 +++++++++++++++++++++++++++----------- docs/user/generated_config.adoc | 8 ++++---- editors/code/package.json | 12 +++++++----- 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index 247bfe71e..071fde64d 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -39,7 +39,7 @@ config_data! { /// Automatically refresh project info via `cargo metadata` on /// `Cargo.toml` changes. cargo_autoreload: bool = "true", - /// Activate all available features. + /// Activate all available features (`--all-features`). cargo_allFeatures: bool = "false", /// List of features to activate. cargo_features: Vec = "[]", @@ -55,10 +55,10 @@ config_data! { /// Run specified `cargo check` command for diagnostics on save. checkOnSave_enable: bool = "true", - /// Check with all features (will be passed as `--all-features`). + /// Check with all features (`--all-features`). /// Defaults to `#rust-analyzer.cargo.allFeatures#`. checkOnSave_allFeatures: Option = "null", - /// Check all targets and tests (will be passed as `--all-targets`). + /// Check all targets and tests (`--all-targets`). checkOnSave_allTargets: bool = "true", /// Cargo command to use for `cargo check`. checkOnSave_command: String = "\"check\"", @@ -156,7 +156,7 @@ config_data! { /// `rust-project.json`, or JSON objects in `rust-project.json` format. linkedProjects: Vec = "[]", - /// Number of syntax trees rust-analyzer keeps in memory. Defaults to 128. + /// Number of syntax trees rust-analyzer keeps in memory. Defaults to 128. lruCapacity: Option = "null", /// Whether to show `can't find Cargo.toml` error message. @@ -844,15 +844,32 @@ mod tests { fn schema_in_sync_with_package_json() { let s = Config::json_schema(); let schema = format!("{:#}", s); - let schema = schema.trim_start_matches('{').trim_end_matches('}'); - - let package_json = project_dir().join("editors/code/package.json"); - let package_json = fs::read_to_string(&package_json).unwrap(); - - let p = remove_ws(&package_json); + let mut schema = schema + .trim_start_matches('{') + .trim_end_matches('}') + .replace(" ", " ") + .replace("\n", "\n ") + .trim_start_matches('\n') + .trim_end() + .to_string(); + schema.push_str(",\n"); + + let package_json_path = project_dir().join("editors/code/package.json"); + let mut package_json = fs::read_to_string(&package_json_path).unwrap(); + + let start_marker = " \"$generated-start\": false,\n"; + let end_marker = " \"$generated-end\": false\n"; + + let start = package_json.find(start_marker).unwrap() + start_marker.len(); + let end = package_json.find(end_marker).unwrap(); + let p = remove_ws(&package_json[start..end]); let s = remove_ws(&schema); - assert!(p.contains(&s), "update config in package.json. New config:\n{:#}", schema); + if !p.contains(&s) { + package_json.replace_range(start..end, &schema); + fs::write(&package_json_path, &mut package_json).unwrap(); + panic!("new config, updating package.json") + } } #[test] diff --git a/docs/user/generated_config.adoc b/docs/user/generated_config.adoc index 2f681b01a..1974082da 100644 --- a/docs/user/generated_config.adoc +++ b/docs/user/generated_config.adoc @@ -7,7 +7,7 @@ [[rust-analyzer.cargo.autoreload]]rust-analyzer.cargo.autoreload (default: `true`):: Automatically refresh project info via `cargo metadata` on `Cargo.toml` changes. [[rust-analyzer.cargo.allFeatures]]rust-analyzer.cargo.allFeatures (default: `false`):: - Activate all available features. + Activate all available features (`--all-features`). [[rust-analyzer.cargo.features]]rust-analyzer.cargo.features (default: `[]`):: List of features to activate. [[rust-analyzer.cargo.loadOutDirsFromCheck]]rust-analyzer.cargo.loadOutDirsFromCheck (default: `false`):: @@ -21,9 +21,9 @@ [[rust-analyzer.checkOnSave.enable]]rust-analyzer.checkOnSave.enable (default: `true`):: Run specified `cargo check` command for diagnostics on save. [[rust-analyzer.checkOnSave.allFeatures]]rust-analyzer.checkOnSave.allFeatures (default: `null`):: - Check with all features (will be passed as `--all-features`). Defaults to `#rust-analyzer.cargo.allFeatures#`. + Check with all features (`--all-features`). Defaults to `#rust-analyzer.cargo.allFeatures#`. [[rust-analyzer.checkOnSave.allTargets]]rust-analyzer.checkOnSave.allTargets (default: `true`):: - Check all targets and tests (will be passed as `--all-targets`). + Check all targets and tests (`--all-targets`). [[rust-analyzer.checkOnSave.command]]rust-analyzer.checkOnSave.command (default: `"check"`):: Cargo command to use for `cargo check`. [[rust-analyzer.checkOnSave.noDefaultFeatures]]rust-analyzer.checkOnSave.noDefaultFeatures (default: `null`):: @@ -91,7 +91,7 @@ [[rust-analyzer.linkedProjects]]rust-analyzer.linkedProjects (default: `[]`):: Disable project auto-discovery in favor of explicitly specified set of projects.\n\nElements must be paths pointing to `Cargo.toml`, `rust-project.json`, or JSON objects in `rust-project.json` format. [[rust-analyzer.lruCapacity]]rust-analyzer.lruCapacity (default: `null`):: - Number of syntax trees rust-analyzer keeps in memory. Defaults to 128. + Number of syntax trees rust-analyzer keeps in memory. Defaults to 128. [[rust-analyzer.notifications.cargoTomlNotFound]]rust-analyzer.notifications.cargoTomlNotFound (default: `true`):: Whether to show `can't find Cargo.toml` error message. [[rust-analyzer.procMacro.enable]]rust-analyzer.procMacro.enable (default: `false`):: diff --git a/editors/code/package.json b/editors/code/package.json index 2225cf1dd..ee54638f1 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -349,6 +349,7 @@ "default": {}, "markdownDescription": "Optional settings passed to the debug engine. Example: `{ \"lldb\": { \"terminal\":\"external\"} }`" }, + "$generated-start": false, "rust-analyzer.assist.importMergeBehavior": { "markdownDescription": "The strategy to use when inserting new imports or merging imports.", "default": "full", @@ -390,7 +391,7 @@ "type": "boolean" }, "rust-analyzer.cargo.allFeatures": { - "markdownDescription": "Activate all available features.", + "markdownDescription": "Activate all available features (`--all-features`).", "default": false, "type": "boolean" }, @@ -431,7 +432,7 @@ "type": "boolean" }, "rust-analyzer.checkOnSave.allFeatures": { - "markdownDescription": "Check with all features (will be passed as `--all-features`). Defaults to `#rust-analyzer.cargo.allFeatures#`.", + "markdownDescription": "Check with all features (`--all-features`). Defaults to `#rust-analyzer.cargo.allFeatures#`.", "default": null, "type": [ "null", @@ -439,7 +440,7 @@ ] }, "rust-analyzer.checkOnSave.allTargets": { - "markdownDescription": "Check all targets and tests (will be passed as `--all-targets`).", + "markdownDescription": "Check all targets and tests (`--all-targets`).", "default": true, "type": "boolean" }, @@ -650,7 +651,7 @@ } }, "rust-analyzer.lruCapacity": { - "markdownDescription": "Number of syntax trees rust-analyzer keeps in memory. Defaults to 128.", + "markdownDescription": "Number of syntax trees rust-analyzer keeps in memory. Defaults to 128.", "default": null, "type": [ "null", @@ -718,7 +719,8 @@ "items": { "type": "string" } - } + }, + "$generated-end": false } }, "problemPatterns": [ -- cgit v1.2.3