From 9b5c663740d9e2066387a54bd7d9fe70d08f7cb2 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Fri, 6 Dec 2024 20:47:06 +0000 Subject: [PATCH] Fix for webassembly --- .../src/operation_transformation/operation.rs | 47 ++++++++++--------- backend/reconcile/src/tokenizer/token.rs | 6 +++ backend/reconcile/src/utils/string_builder.rs | 1 - 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/backend/reconcile/src/operation_transformation/operation.rs b/backend/reconcile/src/operation_transformation/operation.rs index 0fa53dca..856d58d8 100644 --- a/backend/reconcile/src/operation_transformation/operation.rs +++ b/backend/reconcile/src/operation_transformation/operation.rs @@ -101,13 +101,14 @@ where deleted_text, .. } => { - if let Some(text) = deleted_text { - debug_assert_eq!( - builder.get_slice(self.range()), - *text, - "Text to delete does not match the text in the rope" - ); - } + #[cfg(debug_assertions)] + debug_assert!( + deleted_text + .as_ref() + .map(|text| builder.get_slice(self.range()) == *text) + .unwrap_or(true), + "Text to delete does not match the text in the rope" + ); builder.delete(self.range()); } @@ -313,20 +314,24 @@ where #[cfg(debug_assertions)] deleted_text, } => { - if cfg!(debug_assertions) && deleted_text.is_some() { - write!( - f, - "", - deleted_text.as_ref().unwrap_or(&"".to_string()), - index - ) - } else { - write!( - f, - "", - deleted_character_count, index - ) - } + #[cfg(debug_assertions)] + write!( + f, + "", + deleted_text + .as_ref() + .map(|text| format!("'{text}'")) + .unwrap_or(format!("{deleted_character_count} characters")), + index + )?; + + #[cfg(not(debug_assertions))] + write!( + f, + "", + )?; + + Ok(()) } } } diff --git a/backend/reconcile/src/tokenizer/token.rs b/backend/reconcile/src/tokenizer/token.rs index a89d059d..ebb5cfd4 100644 --- a/backend/reconcile/src/tokenizer/token.rs +++ b/backend/reconcile/src/tokenizer/token.rs @@ -1,3 +1,9 @@ +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + +/// A token is a string that has been normalised in some way. +/// The normalised form is used for comparison, while the original form is used for applying Operations. +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[derive(Debug, Clone)] pub struct Token where diff --git a/backend/reconcile/src/utils/string_builder.rs b/backend/reconcile/src/utils/string_builder.rs index b0d00d71..8e8b7aab 100644 --- a/backend/reconcile/src/utils/string_builder.rs +++ b/backend/reconcile/src/utils/string_builder.rs @@ -63,7 +63,6 @@ impl StringBuilder<'_> { self.buffer } - #[cfg(debug_assertions)] pub fn get_slice(&self, range: Range) -> String { let result = self .buffer