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");
}
}