pub struct Highlighter { /* private fields */ }Expand description
One language’s parser + highlight query. The tree tracks the buffer’s journal (0022 §1): edits apply as a cheap pointer walk at commit time and reparsing is incremental against the kept tree — a full parse is the cold-start path, not the rule.
Implementations§
Source§impl Highlighter
impl Highlighter
Sourcepub fn invalidate(&mut self)
pub fn invalidate(&mut self)
Drop the kept tree (0023: a mutation path that can’t produce exact edit coordinates invalidates rather than lying).
Sourcepub fn apply_edits(&mut self, edits: &[InputEdit], revision: BufferRevision)
pub fn apply_edits(&mut self, edits: &[InputEdit], revision: BufferRevision)
Feed the pre-edit journal to the kept tree (0022 §1): a cheap
pointer walk at commit time; the reparse stays lazy. The edits
arrive exactly as strop-core published them — tuple points
converted to tree-sitter points once, here — so the editor hands
over &[change.edit] with change.revision untouched.
Sourcepub fn for_path(path: &Path, rope: &Rope) -> Option<Self>
pub fn for_path(path: &Path, rope: &Rope) -> Option<Self>
Pure constructor: the path plus the rope that backs the document. When basename and extension both miss, the rope’s first line — bounded to 256 bytes, assembled chunk-wise — is the shebang fallback. Nothing here reads the filesystem: UI dispatch never blocks on disk.
Sourcepub fn highlight(
&mut self,
rope: &Rope,
revision: BufferRevision,
first_byte: usize,
last_byte: usize,
) -> Result<Vec<Span>, HighlightError>
pub fn highlight( &mut self, rope: &Rope, revision: BufferRevision, first_byte: usize, last_byte: usize, ) -> Result<Vec<Span>, HighlightError>
Highlight spans intersecting [first_byte, last_byte) of the rope.
Reparses only when the text changed. revision is the document’s
edit counter (0020 §5: the len+first+last key under-invalidated
same-length middle edits deterministically). A parse that cannot
complete is a typed HighlightError — never a hidden reparse
fallback, never a panic.