Skip to main content

Mountain/Environment/DocumentProvider/
ApplyChanges.rs

1//! Document change application logic.
2//!
3//! Handles applying incremental text edits to documents via LSP-style
4//! DidChangeTextDocument notifications.
5
6use CommonLibrary::Error::CommonError::CommonError;
7use serde_json::Value;
8use url::Url;
9
10use crate::{Environment::Utility, dev_log};
11
12/// Applies a collection of content changes to a document.
13pub(super) async fn apply_document_changes(
14	environment:&crate::Environment::MountainEnvironment::MountainEnvironment,
15	uri:Url,
16	new_version_identifier:i64,
17	changes_dto_collection:Value,
18	_is_dirty_after_change:bool,
19	_is_undoing:bool,
20	_is_redoing:bool,
21) -> Result<(), CommonError> {
22	dev_log!("model", "[DocumentProvider] Applying changes to document: {}", uri);
23
24	{
25		let mut open_documents_guard = environment
26			.ApplicationState
27			.Feature
28			.Documents
29			.OpenDocuments
30			.lock()
31			.map_err(Utility::MapApplicationStateLockErrorToCommonError)?;
32
33		if let Some(document) = open_documents_guard.get_mut(uri.as_str()) {
34			document.ApplyChanges(new_version_identifier, &changes_dto_collection)?;
35		} else {
36			dev_log!(
37				"model",
38				"warn: [DocumentProvider] Received changes for unknown document: {}",
39				uri
40			);
41
42			return Ok(());
43		}
44	}
45
46	super::Notifications::notify_model_changed(environment, &uri, new_version_identifier, changes_dto_collection).await;
47
48	Ok(())
49}