diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2024-12-20 20:06:24 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-20 20:06:24 +0000 |
| commit | 2d895a760e74824d8261b49a37e8e9dbebece0f5 (patch) | |
| tree | 647c2cb04f56a1b97f9bb0b520c0d1d4da4236f0 | |
| parent | b694ff3d15736641a576da3feafb83fab612420d (diff) | |
| parent | b7bde823c0129d9443b88f1394046057eedd1586 (diff) | |
| download | rust-2d895a760e74824d8261b49a37e8e9dbebece0f5.tar.gz rust-2d895a760e74824d8261b49a37e8e9dbebece0f5.zip | |
Merge pull request #18731 from rust-lang/revert-18670-push-ylomnylswnxm
Revert "internal: Drop proc-macro server support for ~1.66.0 and older toolchains"
| -rw-r--r-- | src/tools/rust-analyzer/crates/proc-macro-api/src/msg/flat.rs | 49 | ||||
| -rw-r--r-- | src/tools/rust-analyzer/crates/proc-macro-api/src/process.rs | 29 |
2 files changed, 48 insertions, 30 deletions
diff --git a/src/tools/rust-analyzer/crates/proc-macro-api/src/msg/flat.rs b/src/tools/rust-analyzer/crates/proc-macro-api/src/msg/flat.rs index 5de1e59f280..ce4b060fca5 100644 --- a/src/tools/rust-analyzer/crates/proc-macro-api/src/msg/flat.rs +++ b/src/tools/rust-analyzer/crates/proc-macro-api/src/msg/flat.rs @@ -42,7 +42,7 @@ use rustc_hash::FxHashMap; use serde_derive::{Deserialize, Serialize}; use span::{EditionedFileId, ErasedFileAstId, Span, SpanAnchor, SyntaxContextId, TextRange}; -use crate::msg::EXTENDED_LEAF_DATA; +use crate::msg::{ENCODE_CLOSE_SPAN_VERSION, EXTENDED_LEAF_DATA}; pub type SpanDataIndexMap = indexmap::IndexSet<Span, std::hash::BuildHasherDefault<rustc_hash::FxHasher>>; @@ -145,7 +145,11 @@ impl FlatTree { w.write(subtree); FlatTree { - subtree: write_vec(w.subtree, SubtreeRepr::write), + subtree: if version >= ENCODE_CLOSE_SPAN_VERSION { + write_vec(w.subtree, SubtreeRepr::write_with_close_span) + } else { + write_vec(w.subtree, SubtreeRepr::write) + }, literal: if version >= EXTENDED_LEAF_DATA { write_vec(w.literal, LiteralRepr::write_with_kind) } else { @@ -179,7 +183,11 @@ impl FlatTree { w.write(subtree); FlatTree { - subtree: write_vec(w.subtree, SubtreeRepr::write), + subtree: if version >= ENCODE_CLOSE_SPAN_VERSION { + write_vec(w.subtree, SubtreeRepr::write_with_close_span) + } else { + write_vec(w.subtree, SubtreeRepr::write) + }, literal: if version >= EXTENDED_LEAF_DATA { write_vec(w.literal, LiteralRepr::write_with_kind) } else { @@ -202,7 +210,11 @@ impl FlatTree { span_data_table: &SpanDataIndexMap, ) -> tt::Subtree<Span> { Reader { - subtree: read_vec(self.subtree, SubtreeRepr::read), + subtree: if version >= ENCODE_CLOSE_SPAN_VERSION { + read_vec(self.subtree, SubtreeRepr::read_with_close_span) + } else { + read_vec(self.subtree, SubtreeRepr::read) + }, literal: if version >= EXTENDED_LEAF_DATA { read_vec(self.literal, LiteralRepr::read_with_kind) } else { @@ -224,7 +236,11 @@ impl FlatTree { pub fn to_subtree_unresolved(self, version: u32) -> tt::Subtree<TokenId> { Reader { - subtree: read_vec(self.subtree, SubtreeRepr::read), + subtree: if version >= ENCODE_CLOSE_SPAN_VERSION { + read_vec(self.subtree, SubtreeRepr::read_with_close_span) + } else { + read_vec(self.subtree, SubtreeRepr::read) + }, literal: if version >= EXTENDED_LEAF_DATA { read_vec(self.literal, LiteralRepr::read_with_kind) } else { @@ -257,7 +273,26 @@ fn write_vec<T, F: Fn(T) -> [u32; N], const N: usize>(xs: Vec<T>, f: F) -> Vec<u } impl SubtreeRepr { - fn write(self) -> [u32; 5] { + fn write(self) -> [u32; 4] { + let kind = match self.kind { + tt::DelimiterKind::Invisible => 0, + tt::DelimiterKind::Parenthesis => 1, + tt::DelimiterKind::Brace => 2, + tt::DelimiterKind::Bracket => 3, + }; + [self.open.0, kind, self.tt[0], self.tt[1]] + } + fn read([open, kind, lo, len]: [u32; 4]) -> SubtreeRepr { + let kind = match kind { + 0 => tt::DelimiterKind::Invisible, + 1 => tt::DelimiterKind::Parenthesis, + 2 => tt::DelimiterKind::Brace, + 3 => tt::DelimiterKind::Bracket, + other => panic!("bad kind {other}"), + }; + SubtreeRepr { open: TokenId(open), close: TokenId(!0), kind, tt: [lo, len] } + } + fn write_with_close_span(self) -> [u32; 5] { let kind = match self.kind { tt::DelimiterKind::Invisible => 0, tt::DelimiterKind::Parenthesis => 1, @@ -266,7 +301,7 @@ impl SubtreeRepr { }; [self.open.0, self.close.0, kind, self.tt[0], self.tt[1]] } - fn read([open, close, kind, lo, len]: [u32; 5]) -> SubtreeRepr { + fn read_with_close_span([open, close, kind, lo, len]: [u32; 5]) -> SubtreeRepr { let kind = match kind { 0 => tt::DelimiterKind::Invisible, 1 => tt::DelimiterKind::Parenthesis, diff --git a/src/tools/rust-analyzer/crates/proc-macro-api/src/process.rs b/src/tools/rust-analyzer/crates/proc-macro-api/src/process.rs index b1e35b7a08b..4045e25fdf1 100644 --- a/src/tools/rust-analyzer/crates/proc-macro-api/src/process.rs +++ b/src/tools/rust-analyzer/crates/proc-macro-api/src/process.rs @@ -56,25 +56,8 @@ impl ProcMacroProcessSrv { match srv.version_check() { Ok(v) if v > CURRENT_API_VERSION => Err(io::Error::new( io::ErrorKind::Other, - format!( - "The version of the proc-macro server ({v}) in your Rust toolchain \ - is newer than the version supported by your rust-analyzer ({CURRENT_API_VERSION}). -\ - This will prevent proc-macro expansion from working. \ - Please consider updating your rust-analyzer to ensure compatibility with your \ - current toolchain." - ), - )), - Ok(v) if v < RUST_ANALYZER_SPAN_SUPPORT => Err(io::Error::new( - io::ErrorKind::Other, - format!( - "The version of the proc-macro server ({v}) in your Rust toolchain \ - is too old and no longer supported by your rust-analyzer which requires\ - version {RUST_ANALYZER_SPAN_SUPPORT} or higher. -\ - This will prevent proc-macro expansion from working. \ - Please consider updating your toolchain or downgrading your rust-analyzer \ - to ensure compatibility with your current toolchain." + format!( "The version of the proc-macro server ({v}) in your Rust toolchain is newer than the version supported by your rust-analyzer ({CURRENT_API_VERSION}). + This will prevent proc-macro expansion from working. Please consider updating your rust-analyzer to ensure compatibility with your current toolchain." ), )), Ok(v) => { @@ -89,10 +72,10 @@ impl ProcMacroProcessSrv { tracing::info!("Proc-macro server span mode: {:?}", srv.mode); Ok(srv) } - Err(e) => Err(io::Error::new( - io::ErrorKind::Other, - format!("Failed to fetch proc-macro server version: {e}"), - )), + Err(e) => { + tracing::info!(%e, "proc-macro version check failed, restarting and assuming version 0"); + create_srv(false) + } } } |
