From b271ef8fd1a37c2eb1bdf0f1dd025d94c887fb81 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Tue, 10 May 2022 21:14:22 +0200 Subject: [PATCH] fix: Fix config patching failing when appending suffixes --- .../src/config/patch_old_style.rs | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/crates/rust-analyzer/src/config/patch_old_style.rs b/crates/rust-analyzer/src/config/patch_old_style.rs index 277364cefa0..ff0cb2b6398 100644 --- a/crates/rust-analyzer/src/config/patch_old_style.rs +++ b/crates/rust-analyzer/src/config/patch_old_style.rs @@ -11,13 +11,16 @@ macro_rules! patch { ($( $($src:ident).+ -> $($dst:ident).+ ; )+) => { $( - if let Some(it) = copy.pointer(concat!($("/", stringify!($src)),+)).cloned() { - let mut last = it; - for segment in [$(stringify!($dst)),+].into_iter().rev() { - last = Value::Object(serde_json::Map::from_iter(std::iter::once((segment.to_string(), last)))); - } + match copy.pointer(concat!($("/", stringify!($src)),+)).cloned() { + Some(Value::Object(_)) | None => (), + Some(it) => { + let mut last = it; + for segment in [$(stringify!($dst)),+].into_iter().rev() { + last = Value::Object(serde_json::Map::from_iter(std::iter::once((segment.to_string(), last)))); + } - merge(json, last); + merge(json, last); + }, } )+ }; } @@ -36,7 +39,6 @@ macro_rules! patch { cargo.runBuildScripts -> cargo.runBuildScripts.overrideCommand; cargo.runBuildScriptsCommand -> cargo.runBuildScripts.overrideCommand; cargo.useRustcWrapperForBuildScripts -> cargo.runBuildScripts.useRustcWrapper; - completion.snippets -> completion.snippets.custom; diagnostics.enableExperimental -> diagnostics.experimental.enable; experimental.procAttrMacros -> procMacro.attributes.enable; highlighting.strings -> semanticHighlighting.strings.enable; @@ -66,6 +68,22 @@ macro_rules! patch { rustfmt.enableRangeFormatting -> rustfmt.rangeFormatting.enable; } + // completion.snippets -> completion.snippets.custom; + if let Some(Value::Object(obj)) = copy.pointer("/completion/snippets").cloned() { + if obj.len() != 1 || obj.get("custom").is_none() { + merge( + json, + json! {{ + "completion": { + "snippets": { + "custom": obj + }, + }, + }}, + ); + } + } + // callInfo_full -> signatureInfo_detail, signatureInfo_documentation_enable if let Some(Value::Bool(b)) = copy.pointer("/callInfo/full") { let sig_info = match b {