fix: CI format error

This commit is contained in:
Vincent Chan
2022-08-19 14:43:11 +08:00
parent 61d181b228
commit c61b4d0865
4 changed files with 49 additions and 6 deletions

View File

@ -1,6 +1,7 @@
use crate::core::document::position::Position;
use crate::core::{NodeAttributes, NodeData, TextDelta};
#[derive(Clone)]
pub enum DocumentOperation {
Insert(InsertOperation),
Update(UpdateOperation),
@ -31,24 +32,31 @@ impl DocumentOperation {
}),
}
}
pub fn transform(_a: &DocumentOperation, b: &DocumentOperation) -> DocumentOperation {
b.clone()
}
}
#[derive(Clone)]
pub struct InsertOperation {
pub path: Position,
pub nodes: Vec<NodeData>,
}
#[derive(Clone)]
pub struct UpdateOperation {
pub path: Position,
pub attributes: NodeAttributes,
pub old_attributes: NodeAttributes,
}
#[derive(Clone)]
pub struct DeleteOperation {
pub path: Position,
pub nodes: Vec<NodeData>,
}
#[derive(Clone)]
pub struct TextEditOperation {
pub path: Position,
pub delta: TextDelta,

View File

@ -5,6 +5,38 @@ impl Position {
pub fn is_empty(&self) -> bool {
self.0.is_empty()
}
pub fn len(&self) -> usize {
self.0.len()
}
}
impl Position {
// delta is default to be 1
pub fn transform(pre_insert_path: &Position, b: &Position, delta: usize) -> Position {
if pre_insert_path.len() > b.len() {
return b.clone();
}
if pre_insert_path.is_empty() || b.is_empty() {
return b.clone();
}
// check the prefix
for i in 0..(pre_insert_path.len()) {
if pre_insert_path.0[i] != b.0[i] {
return b.clone();
}
}
let mut prefix: Vec<usize> = pre_insert_path.0[0..(pre_insert_path.len() - 1)].into();
let mut suffix: Vec<usize> = b.0[pre_insert_path.0.len()..].into();
let prev_insert_last: usize = *pre_insert_path.0.last().unwrap();
let b_at_index = b.0[pre_insert_path.0.len() - 1];
if prev_insert_last <= b_at_index {
prefix.push(b_at_index + delta);
} else {
prefix.push(b_at_index);
}
prefix.append(&mut suffix);
return Position(prefix);
}
}
impl From<Vec<usize>> for Position {

View File

@ -1,6 +1,8 @@
use std::collections::HashMap;
use crate::core::document::position::Position;
use crate::core::{DeleteOperation, DocumentOperation, DocumentTree, InsertOperation, NodeAttributes, NodeData, UpdateOperation};
use crate::core::{
DeleteOperation, DocumentOperation, DocumentTree, InsertOperation, NodeAttributes, NodeData, UpdateOperation,
};
use std::collections::HashMap;
pub struct Transaction {
pub operations: Vec<DocumentOperation>,