Fix 1.98.0 Clippy and rustfmt
diff --git a/src/tools/rust-analyzer/crates/ide-ssr/src/tests.rs b/src/tools/rust-analyzer/crates/ide-ssr/src/tests.rs
index d8c15ca..8d1858c 100644
--- a/src/tools/rust-analyzer/crates/ide-ssr/src/tests.rs
+++ b/src/tools/rust-analyzer/crates/ide-ssr/src/tests.rs
@@ -72,18 +72,13 @@ pub(crate) fn single_file(code: &str) -> (ide_db::RootDatabase, FilePosition, Ve
         let (db, file_id) = ide_db::RootDatabase::with_single_file(code);
         (db, file_id, RangeOrOffset::Offset(0.into()))
     };
-    let selections;
-    let position;
-    match range_or_offset {
+
+    let (position, selections) = match range_or_offset {
         RangeOrOffset::Range(range) => {
-            position = FilePosition { file_id, offset: range.start() };
-            selections = vec![FileRange { file_id, range }];
+            (FilePosition { file_id, offset: range.start() }, vec![FileRange { file_id, range }])
         }
-        RangeOrOffset::Offset(offset) => {
-            position = FilePosition { file_id, offset };
-            selections = vec![];
-        }
-    }
+        RangeOrOffset::Offset(offset) => (FilePosition { file_id, offset }, vec![]),
+    };
     let mut local_roots = FxHashSet::default();
     local_roots.insert(WORKSPACE);
     LocalRoots::get(&db).set_roots(&mut db).to(local_roots);
diff --git a/src/tools/rust-analyzer/crates/ide/src/annotations/fn_references.rs b/src/tools/rust-analyzer/crates/ide/src/annotations/fn_references.rs
index 427a2ef..b43a23e 100644
--- a/src/tools/rust-analyzer/crates/ide/src/annotations/fn_references.rs
+++ b/src/tools/rust-analyzer/crates/ide/src/annotations/fn_references.rs
@@ -87,6 +87,7 @@ fn bar() {}
         );
 
         let refs = super::find_all_methods(&analysis.db, pos.file_id);
+        #[expect(clippy::single_range_in_vec_init, reason = "this is not a mistake")]
         check_result(&refs, &[28..=34]);
     }
 
diff --git a/src/tools/rust-analyzer/crates/proc-macro-api/src/legacy_protocol/msg/flat.rs b/src/tools/rust-analyzer/crates/proc-macro-api/src/legacy_protocol/msg/flat.rs
index ae03be9..b9b6247 100644
--- a/src/tools/rust-analyzer/crates/proc-macro-api/src/legacy_protocol/msg/flat.rs
+++ b/src/tools/rust-analyzer/crates/proc-macro-api/src/legacy_protocol/msg/flat.rs
@@ -54,7 +54,7 @@
 
 pub fn serialize_span_data_index_map(map: &SpanDataIndexMap) -> Vec<u32> {
     map.iter()
-        .flat_map(|span| {
+        .map(|span| {
             [
                 span.anchor.file_id.as_u32(),
                 span.anchor.ast_id.into_raw(),
@@ -63,14 +63,16 @@ pub fn serialize_span_data_index_map(map: &SpanDataIndexMap) -> Vec<u32> {
                 span.ctx.into_u32(),
             ]
         })
-        .collect()
+        .collect::<Vec<_>>()
+        .into_flattened()
 }
 
 pub fn deserialize_span_data_index_map(map: &[u32]) -> SpanDataIndexMap {
-    debug_assert!(map.len().is_multiple_of(5));
-    map.chunks_exact(5)
-        .map(|span| {
-            let &[file_id, ast_id, start, end, e] = span else { unreachable!() };
+    let (chunks, remainder) = map.as_chunks();
+    assert!(remainder.is_empty());
+    chunks
+        .iter()
+        .map(|&[file_id, ast_id, start, end, e]| {
             Span {
                 anchor: SpanAnchor {
                     file_id: EditionedFileId::from_raw(file_id),
@@ -345,14 +347,13 @@ pub fn to_tokenstream_resolved(
 }
 
 fn read_vec<T, F: Fn([u32; N]) -> T, const N: usize>(xs: Vec<u32>, f: F) -> Vec<T> {
-    let mut chunks = xs.chunks_exact(N);
-    let res = chunks.by_ref().map(|chunk| f(chunk.try_into().unwrap())).collect();
-    assert!(chunks.remainder().is_empty());
-    res
+    let (chunks, remainder) = xs.as_chunks();
+    assert!(remainder.is_empty());
+    chunks.iter().map(|chunk| f(*chunk)).collect()
 }
 
 fn write_vec<T, F: Fn(T) -> [u32; N], const N: usize>(xs: Vec<T>, f: F) -> Vec<u32> {
-    xs.into_iter().flat_map(f).collect()
+    xs.into_iter().map(f).collect::<Vec<_>>().into_flattened()
 }
 
 impl SubtreeRepr {
diff --git a/src/tools/rust-analyzer/crates/profile/src/memory_usage.rs b/src/tools/rust-analyzer/crates/profile/src/memory_usage.rs
index a8a409b..072a01c 100644
--- a/src/tools/rust-analyzer/crates/profile/src/memory_usage.rs
+++ b/src/tools/rust-analyzer/crates/profile/src/memory_usage.rs
@@ -30,28 +30,25 @@ pub fn now() -> MemoryUsage {
                     allocated: Bytes(jemalloc_ctl::stats::allocated::read().unwrap() as isize),
                 }
             }
-            all(target_os = "linux", target_env = "gnu") => {
-                memusage_linux()
-            }
+            all(target_os = "linux", target_env = "gnu") => memusage_linux(),
             windows => {
                 // There doesn't seem to be an API for determining heap usage, so we try to
                 // approximate that by using the Commit Charge value.
 
-                use windows_sys::Win32::System::{Threading::*, ProcessStatus::*};
                 use std::mem::MaybeUninit;
+                use windows_sys::Win32::System::{ProcessStatus::*, Threading::*};
 
                 let proc = unsafe { GetCurrentProcess() };
                 let mut mem_counters = MaybeUninit::uninit();
                 let cb = size_of::<PROCESS_MEMORY_COUNTERS>();
-                let ret = unsafe { GetProcessMemoryInfo(proc, mem_counters.as_mut_ptr(), cb as u32) };
+                let ret =
+                    unsafe { GetProcessMemoryInfo(proc, mem_counters.as_mut_ptr(), cb as u32) };
                 assert!(ret != 0);
 
                 let usage = unsafe { mem_counters.assume_init().PagefileUsage };
                 MemoryUsage { allocated: Bytes(usage as isize) }
             }
-           _ => {
-                MemoryUsage { allocated: Bytes(0) }
-            }
+            _ => MemoryUsage { allocated: Bytes(0) },
         }
     }
 }