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

@ -25,6 +25,7 @@ pub use signature::*;
pub mod semantic_tokens;
pub use semantic_tokens::*;
use tinymist_world::vfs::WorkspaceResolver;
use tinymist_world::WorldDeps;
use typst::syntax::Source;
use typst::World;
mod post_tyck;
@ -39,7 +40,7 @@ mod prelude;
mod global;
pub use global::*;
use ecow::eco_format;
use ecow::{eco_format, EcoVec};
use lsp_types::Url;
use typst::diag::{FileError, FileResult};
use typst::foundations::{Func, Value};
@ -71,6 +72,10 @@ pub trait LspWorldExt {
/// Resolve the uri for a file id.
fn uri_for_id(&self, fid: FileId) -> FileResult<Url>;
/// Get all depended file ids of a compilation, inclusively.
/// Note: must be called after compilation.
fn depended_files(&self) -> EcoVec<FileId>;
}
impl LspWorldExt for tinymist_project::LspWorld {
@ -96,6 +101,14 @@ impl LspWorldExt for tinymist_project::LspWorld {
log::info!("uri_for_id: {fid:?} -> {res:?}");
res.map_err(|err| FileError::Other(Some(eco_format!("convert to url: {err:?}"))))
}
fn depended_files(&self) -> EcoVec<FileId> {
let mut deps = EcoVec::new();
self.iter_dependencies(&mut |file_id| {
deps.push(file_id);
});
deps
}
}
#[cfg(test)]

View file

@ -12,7 +12,7 @@ use tinymist_project::LspWorld;
use tinymist_std::debug_loc::DataSource;
use tinymist_std::hash::{hash128, FxDashMap};
use tinymist_world::vfs::{PathResolution, WorkspaceResolver};
use tinymist_world::{EntryReader, WorldDeps, DETACHED_ENTRY};
use tinymist_world::{EntryReader, DETACHED_ENTRY};
use typst::diag::{eco_format, At, FileError, FileResult, SourceResult, StrResult};
use typst::engine::{Route, Sink, Traced};
use typst::eval::Eval;
@ -370,12 +370,7 @@ impl LocalContext {
/// Get all depended file ids of a compilation, inclusively.
/// Note: must be called after compilation.
pub fn depended_files(&self) -> EcoVec<TypstFileId> {
let mut deps = EcoVec::new();
self.world.iter_dependencies(&mut |file_id| {
deps.push(file_id);
});
deps
self.world.depended_files()
}
/// Get the world surface for Typst compiler.