summaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-06-01 13:49:02 +0200
committerLaurenz <laurmaedje@gmail.com>2022-06-01 13:49:02 +0200
commit94b375ce550af1e18942c10c15d92163881a3213 (patch)
treee140d018fd96a01f6407de667df9f08170aaac96 /src/parse
parentc56a8c41f0106fcf4bfa55a8b679e4f748b96caa (diff)
Incremental renumbering
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/incremental.rs14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/parse/incremental.rs b/src/parse/incremental.rs
index 3cafc014..59dbebeb 100644
--- a/src/parse/incremental.rs
+++ b/src/parse/incremental.rs
@@ -1,7 +1,7 @@
use std::ops::Range;
use std::sync::Arc;
-use crate::syntax::{InnerNode, NodeKind, SyntaxNode};
+use crate::syntax::{InnerNode, NodeKind, Span, SyntaxNode};
use super::{
is_newline, parse, reparse_code_block, reparse_content_block, reparse_markup_elements,
@@ -26,7 +26,9 @@ pub fn reparse(
}
}
+ let id = root.span().source();
*root = parse(src);
+ root.numberize(id, Span::FULL).unwrap();
0 .. src.len()
}
@@ -139,7 +141,7 @@ impl Reparser<'_> {
if let SearchState::Contained(pos) = search {
let child = &mut node.children_mut()[pos.idx];
let prev_len = child.len();
- let prev_count = child.count();
+ let prev_descendants = child.descendants();
if let Some(range) = match child {
SyntaxNode::Inner(node) => {
@@ -148,8 +150,8 @@ impl Reparser<'_> {
SyntaxNode::Leaf(_) => None,
} {
let new_len = child.len();
- let new_count = child.count();
- node.update_parent(prev_len, new_len, prev_count, new_count);
+ let new_descendants = child.descendants();
+ node.update_parent(prev_len, new_len, prev_descendants, new_descendants);
return Some(range);
}
@@ -259,7 +261,9 @@ impl Reparser<'_> {
return None;
}
- node.replace_children(superseded_start .. superseded_start + amount, newborns);
+ node.replace_children(superseded_start .. superseded_start + amount, newborns)
+ .ok()?;
+
Some(newborn_span)
}
}