diff --git a/src/server.rs b/src/server.rs index 07e72957..976b74fd 100644 --- a/src/server.rs +++ b/src/server.rs @@ -277,7 +277,10 @@ impl jsonrpc::EventHandler for LatexLspServer { for event in self.event_manager.take() { match event { Event::WorkspaceChanged => { - log::info!("TODO: Workspace Changed"); + let workspace = self.workspace_manager.get(); + workspace.unresolved_includes() + .iter() + .for_each(|path| self.workspace_manager.load(&path)); } } } diff --git a/src/workspace.rs b/src/workspace.rs index 0ec01a87..7bcb1aca 100644 --- a/src/workspace.rs +++ b/src/workspace.rs @@ -133,6 +133,29 @@ impl Workspace { } None } + + pub fn unresolved_includes(&self) -> Vec { + let mut includes = Vec::new(); + for document in &self.documents { + if let SyntaxTree::Latex(tree) = &document.tree { + for include in &tree.includes { + if self.resolve_document(&document.uri, include).is_some() { + continue; + } + + if let Some(targets) = Self::resolve_link_targets(&document.uri, &include) { + for target in &targets { + let path = PathBuf::from(target); + if path.exists() { + includes.push(path); + } + } + } + } + } + } + includes + } } pub struct WorkspaceManager {