about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRune Tynan <runetynan@gmail.com>2023-02-13 14:23:39 -0500
committerRune Tynan <runetynan@gmail.com>2023-02-20 13:38:30 -0500
commit22c80a0bf6ec4608be8a17796e4d1801a8b45c0c (patch)
treef6f5a50fdf912da793dcbc5b1c1eb59b66c50578
parentc14edf90db4b36659a7987bc2f4dcd7247379914 (diff)
downloadrust-22c80a0bf6ec4608be8a17796e4d1801a8b45c0c.tar.gz
rust-22c80a0bf6ec4608be8a17796e4d1801a8b45c0c.zip
Add v7 support to rust-analyzer
-rw-r--r--src/tools/rust-analyzer/crates/proc-macro-api/src/version.rs13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/tools/rust-analyzer/crates/proc-macro-api/src/version.rs b/src/tools/rust-analyzer/crates/proc-macro-api/src/version.rs
index 40125c2a512..cf637ec359a 100644
--- a/src/tools/rust-analyzer/crates/proc-macro-api/src/version.rs
+++ b/src/tools/rust-analyzer/crates/proc-macro-api/src/version.rs
@@ -120,17 +120,20 @@ pub fn read_version(dylib_path: &AbsPath) -> io::Result<String> {
     let version = u32::from_be_bytes([dot_rustc[4], dot_rustc[5], dot_rustc[6], dot_rustc[7]]);
     // Last supported version is:
     // https://github.com/rust-lang/rust/commit/0696e79f2740ad89309269b460579e548a5cd632
-    match version {
-        5 | 6 => {}
+    let snappy_portion = match version {
+        5 | 6 => &dot_rustc[8..],
+        7 => {
+            let len_bytes = &dot_rustc[8..12];
+            let data_len = u32::from_be_bytes(len_bytes.try_into().unwrap()) as usize;
+            &dot_rustc[12..data_len + 12]
+        }
         _ => {
             return Err(io::Error::new(
                 io::ErrorKind::InvalidData,
                 format!("unsupported metadata version {version}"),
             ));
         }
-    }
-
-    let snappy_portion = &dot_rustc[8..];
+    };
 
     let mut snappy_decoder = SnapDecoder::new(snappy_portion);