use ocomment_core::{
ByteSpan, DocumentChange, IncrementalDocument, IncrementalError, Language, ScanOptions,
};
fn main() {
let source =
b"fn main() {\n let total = 1 + 2; // adds them\n println!(\"{total}\");\n}\n";
let mut document =
IncrementalDocument::new(source.to_vec(), Language::Rust, ScanOptions::default(), 1);
report(&document);
let end = document.source().len() - 2;
document
.apply_changes(
&[DocumentChange {
span: ByteSpan::new(end, end),
replacement: b"\n // and one more\n".to_vec(),
}],
2,
)
.expect("the span is inside the document and the version advances");
report(&document);
let stale = document.apply_changes(&[], 2);
assert_eq!(
stale,
Err(IncrementalError::StaleVersion {
received: 2,
current: 2,
})
);
println!(
"a stale batch changes nothing: still version {}",
document.version()
);
}
fn report(document: &IncrementalDocument) {
let rescanned = document.last_rescan_span();
println!(
"version {}: comments {}, rescanned {} of {} bytes",
document.version(),
document.report().comments.len(),
rescanned.len(),
document.source().len(),
);
}