mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-09 03:38:47 +00:00
12 lines
388 B
Rust
12 lines
388 B
Rust
//! Internal utility functions.
|
|
|
|
use std::sync::Arc;
|
|
|
|
/// Helper for mutating `Arc<[T]>` (i.e. `Arc::make_mut` for Arc slices).
|
|
/// The underlying values are cloned if there are other strong references.
|
|
pub(crate) fn make_mut_slice<T: Clone>(a: &mut Arc<[T]>) -> &mut [T] {
|
|
if Arc::get_mut(a).is_none() {
|
|
*a = a.iter().cloned().collect();
|
|
}
|
|
Arc::get_mut(a).unwrap()
|
|
}
|