Very simple change, although future work is needed for more aggressive error handling and refatoring the event_loop and event hierarchy to split apart events and handlers.
QY4DF3NMDBZQ4IJQJIYRWKQ66FWMFQUSASMEBNG5ROXDHTWI2J4QC WFWTKCJNC4VSURSQWE5FXJGTEJJOCDMQ6LN2O6EW2DNOVT2ZUMRQC 6AUGQLIKK6WY3ZB3ZQ4PCN6NXRLP65CLF2YMOTDDAP6QQAIGGELQC 3YGYMEXVHOHRQVPC53MVPSLI2ZJM77MBPWNPDDCL56DNCPUC6XTAC TDTLSDFGULJHKRAYASY4NMCRPY6CFK4KFGTHKB6AHZWMWPCULHQAC NB2MF3MYAJ25KNZP3GMHX42LUSBYOX6FTNLIBK3CQ7CMANFZFEGQC 2ZAM5V35CAQD5MOFPZEGU4ERQ2FM5CL5MB2DOJDW2ZQ74IQFBISQC IDY5SNLOFZ663OCJ2L5NZMFNJXZSGL5O22QQXR5BIV3SJ2VUQIMQC 3RNQI5RXZMXF5N2WKYS3O3G2GTD4TTWDNQ3EBVGUVVKNNOTKQTJAC M5RW5PN4VFYZOKHUFMVWR2XAUAXHUYROVZFTS3RIE7AAUGTVHAEQC // Ignore any messages printed to the `Output` channel (used by `tracing`)
// Ignore any messages printed to the `Output` channel (used by `tracing`).// Since the output view is a text document, any logging calls will trigger this function,// so make sure to return before it sends itself into an infinite loop.
}let uri = UriAbsoluteString::try_from(document_uri.to_string()?).map_err(|error| napi::Error::from_reason(format!("Failed to parse URI: {error}")))?;let change_events = event.get_content_changes()?;let mut changes = Vec::with_capacity(change_events.len());for change_event in &change_events {changes.push(event_loop::EditorContentsChange {character_offset: change_event.get_range_offset()?,characters_replaced: change_event.get_range_length()?,replacement_text: change_event.get_text()?,})
use iri_string::types::UriAbsoluteString;use crate::event_loop::{EditorContentsChange, ExtensionState};#[tracing::instrument(skip(extension_state))]pub async fn handle(uri: UriAbsoluteString,changes: Vec<EditorContentsChange>,extension_state: &mut ExtensionState,) {let Some((_repository_path, relative_path, repository)) =extension_state.get_repository_mut(&uri)else {tracing::info!(message = "Ignoring text content changes");return;};for change in changes {let EditorContentsChange {character_offset,characters_replaced,replacement_text,} = change;if let Err(error) = repository.repository.update_open_file(relative_path,character_offset as usize,characters_replaced as usize,&replacement_text,) {tracing::error!(message = "Failed to update open file", ?error);return;}tracing::info!(message = "Updated open file");}}