feat: run project compilations on main thread (#1197)

* dev: handle compile interrupt

* dev: remove cache task use

* feat: create project crate again

dev: changes

feat: delete unused code

fix: errors

fix: errors

* feat: extra compilation is not needed

* dev: implement all todos

* fix: make event queue unbounded

* fix: make preview work again

* feat: event-driven recompilation

* feat: evict vfs cache

* feat: update evict strategy

* feat: remove lock update
This commit is contained in:
Myriad-Dreamin 2025-01-19 22:28:38 +08:00 committed by GitHub
parent 02a14c9cc9
commit e4bf2e9e46
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
30 changed files with 1895 additions and 1778 deletions

View file

@ -205,6 +205,16 @@ impl<M: PathAccessModel + Clone + Sized> Vfs<M> {
access_model: self.access_model.clone(),
}
}
pub fn fork(&self) -> Self {
Self {
source_cache: self.source_cache.clone(),
managed: Arc::new(Mutex::new(EntryMap::default())),
paths: Arc::new(Mutex::new(PathMap::default())),
revision: NonZeroUsize::new(1).expect("initial revision is 1"),
access_model: self.access_model.clone(),
}
}
}
impl<M: PathAccessModel + Sized> Vfs<M> {
@ -245,8 +255,8 @@ impl<M: PathAccessModel + Sized> Vfs<M> {
/// Reset all state.
pub fn reset_all(&mut self) {
self.reset_access_model();
self.reset_cache();
self.take_state();
self.reset_mapping();
self.take_source_cache();
}
/// Reset access model.
@ -255,7 +265,7 @@ impl<M: PathAccessModel + Sized> Vfs<M> {
}
/// Reset all possible caches.
pub fn reset_cache(&mut self) {
pub fn reset_mapping(&mut self) {
self.revise().reset_cache();
}
@ -271,10 +281,14 @@ impl<M: PathAccessModel + Sized> Vfs<M> {
}
}
pub fn take_state(&mut self) -> SourceCache {
pub fn take_source_cache(&mut self) -> SourceCache {
std::mem::take(&mut self.source_cache)
}
pub fn clone_source_cache(&self) -> SourceCache {
self.source_cache.clone()
}
/// Resolve the real path for a file id.
pub fn file_path(&self, id: TypstFileId) -> Result<PathResolution, FileError> {
self.access_model.inner.resolver.path_for_id(id)