Merge pull request #2068 from zed-industries/doc-reparse

Document Buffer::reparse
This commit is contained in:
Nathan Sobo 2023-01-24 09:09:38 -07:00 committed by GitHub
commit e8cea130a4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -802,6 +802,29 @@ impl Buffer {
self.sync_parse_timeout = timeout;
}
/// Called after an edit to synchronize the buffer's main parse tree with
/// the buffer's new underlying state.
///
/// Locks the syntax map and interpolates the edits since the last reparse
/// into the foreground syntax tree.
///
/// Then takes a stable snapshot of the syntax map before unlocking it.
/// The snapshot with the interpolated edits is sent to a background thread,
/// where we ask Tree-sitter to perform an incremental parse.
///
/// Meanwhile, in the foreground, we block the main thread for up to 1ms
/// waiting on the parse to complete. As soon as it completes, we proceed
/// synchronously, unless a 1ms timeout elapses.
///
/// If we time out waiting on the parse, we spawn a second task waiting
/// until the parse does complete and return with the interpolated tree still
/// in the foreground. When the background parse completes, call back into
/// the main thread and assign the foreground parse state.
///
/// If the buffer or grammar changed since the start of the background parse,
/// initiate an additional reparse recursively. To avoid concurrent parses
/// for the same buffer, we only initiate a new parse if we are not already
/// parsing in the background.
fn reparse(&mut self, cx: &mut ModelContext<Self>) {
if self.parsing_in_background {
return;