From e02d76aa6163202ee59ce84619c40f16d6e5ed32 Mon Sep 17 00:00:00 2001 From: Prajwal S N Date: Thu, 3 Apr 2025 14:29:02 +0530 Subject: [PATCH 1/2] fix(ide-assists): remove `AssistKind::None` This was being used by a single assist, which qualifies under the "refactor" kind. The variant has been removed, and all usages updated accordingly. Signed-off-by: Prajwal S N --- crates/ide-assists/src/handlers/toggle_ignore.rs | 4 ++-- crates/ide-db/src/assists.rs | 11 +---------- crates/ide/src/lib.rs | 2 +- crates/rust-analyzer/src/lsp/from_proto.rs | 1 - crates/rust-analyzer/src/lsp/to_proto.rs | 2 +- 5 files changed, 5 insertions(+), 15 deletions(-) diff --git a/crates/ide-assists/src/handlers/toggle_ignore.rs b/crates/ide-assists/src/handlers/toggle_ignore.rs index 7a29928af9..386625b86b 100644 --- a/crates/ide-assists/src/handlers/toggle_ignore.rs +++ b/crates/ide-assists/src/handlers/toggle_ignore.rs @@ -30,13 +30,13 @@ pub(crate) fn toggle_ignore(acc: &mut Assists, ctx: &AssistContext<'_>) -> Optio match has_ignore_attribute(&func) { None => acc.add( - AssistId::none("toggle_ignore"), + AssistId::refactor("toggle_ignore"), "Ignore this test", attr.syntax().text_range(), |builder| builder.insert(attr.syntax().text_range().end(), "\n#[ignore]"), ), Some(ignore_attr) => acc.add( - AssistId::none("toggle_ignore"), + AssistId::refactor("toggle_ignore"), "Re-enable this test", ignore_attr.syntax().text_range(), |builder| { diff --git a/crates/ide-db/src/assists.rs b/crates/ide-db/src/assists.rs index 9ff3e10a1e..90ae4a3b5b 100644 --- a/crates/ide-db/src/assists.rs +++ b/crates/ide-db/src/assists.rs @@ -43,9 +43,6 @@ pub enum Command { #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum AssistKind { - // FIXME: does the None variant make sense? Probably not. - None, - QuickFix, Generate, Refactor, @@ -61,7 +58,7 @@ impl AssistKind { } match self { - AssistKind::None | AssistKind::Generate => true, + AssistKind::Generate => true, AssistKind::Refactor => matches!( other, AssistKind::RefactorExtract @@ -74,7 +71,6 @@ impl AssistKind { pub fn name(&self) -> &str { match self { - AssistKind::None => "None", AssistKind::QuickFix => "QuickFix", AssistKind::Generate => "Generate", AssistKind::Refactor => "Refactor", @@ -90,7 +86,6 @@ impl FromStr for AssistKind { fn from_str(s: &str) -> Result { match s { - "None" => Ok(AssistKind::None), "QuickFix" => Ok(AssistKind::QuickFix), "Generate" => Ok(AssistKind::Generate), "Refactor" => Ok(AssistKind::Refactor), @@ -108,10 +103,6 @@ impl FromStr for AssistKind { pub struct AssistId(pub &'static str, pub AssistKind, pub Option); impl AssistId { - pub fn none(id: &'static str) -> AssistId { - AssistId(id, AssistKind::None, None) - } - pub fn quick_fix(id: &'static str) -> AssistId { AssistId(id, AssistKind::QuickFix, None) } diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs index 434059cdfb..8eca23e4ea 100644 --- a/crates/ide/src/lib.rs +++ b/crates/ide/src/lib.rs @@ -753,7 +753,7 @@ impl Analysis { frange: FileRange, ) -> Cancellable> { let include_fixes = match &assist_config.allowed { - Some(it) => it.iter().any(|&it| it == AssistKind::None || it == AssistKind::QuickFix), + Some(it) => it.iter().any(|&it| it == AssistKind::QuickFix), None => true, }; diff --git a/crates/rust-analyzer/src/lsp/from_proto.rs b/crates/rust-analyzer/src/lsp/from_proto.rs index 37eff23554..fb8a983829 100644 --- a/crates/rust-analyzer/src/lsp/from_proto.rs +++ b/crates/rust-analyzer/src/lsp/from_proto.rs @@ -103,7 +103,6 @@ pub(crate) fn file_range_uri( pub(crate) fn assist_kind(kind: lsp_types::CodeActionKind) -> Option { let assist_kind = match &kind { - k if k == &lsp_types::CodeActionKind::EMPTY => AssistKind::None, k if k == &lsp_types::CodeActionKind::QUICKFIX => AssistKind::QuickFix, k if k == &lsp_types::CodeActionKind::REFACTOR => AssistKind::Refactor, k if k == &lsp_types::CodeActionKind::REFACTOR_EXTRACT => AssistKind::RefactorExtract, diff --git a/crates/rust-analyzer/src/lsp/to_proto.rs b/crates/rust-analyzer/src/lsp/to_proto.rs index c30ee0fee1..4efe330f16 100644 --- a/crates/rust-analyzer/src/lsp/to_proto.rs +++ b/crates/rust-analyzer/src/lsp/to_proto.rs @@ -1477,7 +1477,7 @@ pub(crate) fn call_hierarchy_item( pub(crate) fn code_action_kind(kind: AssistKind) -> lsp_types::CodeActionKind { match kind { - AssistKind::None | AssistKind::Generate => lsp_types::CodeActionKind::EMPTY, + AssistKind::Generate => lsp_types::CodeActionKind::EMPTY, AssistKind::QuickFix => lsp_types::CodeActionKind::QUICKFIX, AssistKind::Refactor => lsp_types::CodeActionKind::REFACTOR, AssistKind::RefactorExtract => lsp_types::CodeActionKind::REFACTOR_EXTRACT, From 094407aba466586341fd8f51b66416335de8bea0 Mon Sep 17 00:00:00 2001 From: Prajwal S N Date: Thu, 3 Apr 2025 14:57:33 +0530 Subject: [PATCH 2/2] feat(proc-macro-srv): support metadata version 10 Signed-off-by: Prajwal S N --- crates/proc-macro-srv/src/dylib/version.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/proc-macro-srv/src/dylib/version.rs b/crates/proc-macro-srv/src/dylib/version.rs index 4e28aaced9..3b2551f08c 100644 --- a/crates/proc-macro-srv/src/dylib/version.rs +++ b/crates/proc-macro-srv/src/dylib/version.rs @@ -27,7 +27,7 @@ pub fn read_dylib_info(obj: &object::File<'_>) -> io::Result { let mut items = ver_str.split_whitespace(); let tag = items.next().ok_or_else(|| err!("version format error"))?; if tag != "rustc" { - return Err(err!("version format error (No rustc tag)")); + return Err(err!("no rustc tag")); } let version_part = items.next().ok_or_else(|| err!("no version string"))?; @@ -83,7 +83,7 @@ fn read_section<'a>(obj: &object::File<'a>, section_name: &str) -> io::Result<&' /// A proc macro crate binary's ".rustc" section has following byte layout: /// * [b'r',b'u',b's',b't',0,0,0,5] is the first 8 bytes /// * ff060000 734e6150 is followed, it's the snappy format magic bytes, -/// means bytes from here(including this sequence) are compressed in +/// means bytes from here (including this sequence) are compressed in /// snappy compression format. Version info is inside here, so decompress /// this. /// @@ -110,7 +110,7 @@ pub fn read_version(obj: &object::File<'_>) -> io::Result { )); } let version = u32::from_be_bytes([dot_rustc[4], dot_rustc[5], dot_rustc[6], dot_rustc[7]]); - // Last supported version is: + // Last version with breaking changes is: // https://github.com/rust-lang/rust/commit/b94cfefc860715fb2adf72a6955423d384c69318 let (mut metadata_portion, bytes_before_version) = match version { 8 => { @@ -118,7 +118,7 @@ pub fn read_version(obj: &object::File<'_>) -> io::Result { let data_len = u32::from_be_bytes(len_bytes.try_into().unwrap()) as usize; (&dot_rustc[12..data_len + 12], 13) } - 9 => { + 9 | 10 => { let len_bytes = &dot_rustc[8..16]; let data_len = u64::from_le_bytes(len_bytes.try_into().unwrap()) as usize; (&dot_rustc[16..data_len + 12], 17)