diff options
author | Brian Shu | 2021-08-26 18:45:23 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2021-08-27 00:50:57 +0000 |
commit | fa4caf7e3d43a40073f6966d37f529d5197bd840 (patch) | |
tree | e9af9d4e6eeaabfa2ae563156f4d0d9266543779 /helix-view | |
parent | cec5d437d892767ccbc49cfcb20b4561ce24576d (diff) |
remove unsafe
Diffstat (limited to 'helix-view')
-rw-r--r-- | helix-view/src/document.rs | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index a238644a..e890a336 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -102,7 +102,7 @@ pub struct Document { language_server: Option<Arc<helix_lsp::Client>>, } -use std::fmt; +use std::{fmt, mem}; impl fmt::Debug for Document { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("Document") @@ -301,20 +301,13 @@ pub async fn to_writer<'a, W: tokio::io::AsyncWriteExt + Unpin + ?Sized>( Ok(()) } -/// Like std::mem::replace() except it allows the replacement value to be mapped from the -/// original value. -fn take_with<T, F>(mut_ref: &mut T, closure: F) +fn take_with<T, F>(mut_ref: &mut T, f: F) where + T: Default, F: FnOnce(T) -> T, { - use std::{panic, ptr}; - - unsafe { - let old_t = ptr::read(mut_ref); - let new_t = panic::catch_unwind(panic::AssertUnwindSafe(|| closure(old_t))) - .unwrap_or_else(|_| ::std::process::abort()); - ptr::write(mut_ref, new_t); - } + let t = mem::take(mut_ref); + let _ = mem::replace(mut_ref, f(t)); } use helix_lsp::lsp; |