aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Shu2021-08-26 18:45:23 +0000
committerBlaž Hrastnik2021-08-27 00:50:57 +0000
commitfa4caf7e3d43a40073f6966d37f529d5197bd840 (patch)
treee9af9d4e6eeaabfa2ae563156f4d0d9266543779
parentcec5d437d892767ccbc49cfcb20b4561ce24576d (diff)
remove unsafe
-rw-r--r--helix-core/src/transaction.rs2
-rw-r--r--helix-view/src/document.rs17
2 files changed, 6 insertions, 13 deletions
diff --git a/helix-core/src/transaction.rs b/helix-core/src/transaction.rs
index d15db000..d682f058 100644
--- a/helix-core/src/transaction.rs
+++ b/helix-core/src/transaction.rs
@@ -125,7 +125,7 @@ impl ChangeSet {
/// In other words, If `this` goes `docA` → `docB` and `other` represents `docB` → `docC`, the
/// returned value will represent the change `docA` → `docC`.
pub fn compose(self, other: Self) -> Self {
- debug_assert!(self.len_after == other.len);
+ assert!(self.len_after == other.len);
// composing fails in weird ways if one of the sets is empty
// a: [] len: 0 len_after: 1 | b: [Insert(Tendril<UTF8>(inline: "\n")), Retain(1)] len 1
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;