in crates/core/src/models/source_code_unit.rs [405:439]
fn update_facts_after_edit(&mut self, ts_edit: &InputEdit) {
let edit_start = ts_edit.start_byte;
let edit_old_end = ts_edit.old_end_byte;
let edit_new_end = ts_edit.new_end_byte;
let byte_delta = edit_new_end as isize - edit_old_end as isize;
let old_end_row = ts_edit.old_end_position.row;
let old_end_col = ts_edit.old_end_position.column;
let new_end_row = ts_edit.new_end_position.row;
let new_end_col = ts_edit.new_end_position.column;
for fact in self.facts.iter_mut() {
if fact.voided {
continue;
}
let fact_start = fact.range().start_byte;
let fact_end = fact.range().end_byte;
if fact_end <= edit_start {
// Fact is entirely before the edit — no change needed
} else if fact_start >= edit_old_end {
// Fact is entirely after the edit — shift byte offsets and row/col points
fact.shift_range(
byte_delta,
old_end_row,
old_end_col,
new_end_row,
new_end_col,
);
} else {
// Fact overlaps with the edit — void it
fact.voided = true;
}
}
}