typst_ide/
lib.rs

1//! Capabilities for Typst IDE support.
2
3mod analyze;
4mod complete;
5mod definition;
6mod jump;
7mod matchers;
8mod tooltip;
9mod utils;
10
11pub use self::analyze::{analyze_expr, analyze_import, analyze_labels};
12pub use self::complete::{autocomplete, Completion, CompletionKind};
13pub use self::definition::{definition, Definition};
14pub use self::jump::{jump_from_click, jump_from_cursor, Jump};
15pub use self::matchers::{deref_target, named_items, DerefTarget, NamedItem};
16pub use self::tooltip::{tooltip, Tooltip};
17
18use ecow::EcoString;
19use typst::syntax::package::PackageSpec;
20use typst::syntax::FileId;
21use typst::World;
22
23/// Extends the `World` for IDE functionality.
24pub trait IdeWorld: World {
25    /// Turn this into a normal [`World`].
26    ///
27    /// This is necessary because trait upcasting is experimental in Rust.
28    /// See <https://github.com/rust-lang/rust/issues/65991>.
29    ///
30    /// Implementors can simply return `self`.
31    fn upcast(&self) -> &dyn World;
32
33    /// A list of all available packages and optionally descriptions for them.
34    ///
35    /// This function is **optional** to implement. It enhances the user
36    /// experience by enabling autocompletion for packages. Details about
37    /// packages from the `@preview` namespace are available from
38    /// `https://packages.typst.org/preview/index.json`.
39    fn packages(&self) -> &[(PackageSpec, Option<EcoString>)] {
40        &[]
41    }
42
43    /// Returns a list of all known files.
44    ///
45    /// This function is **optional** to implement. It enhances the user
46    /// experience by enabling autocompletion for file paths.
47    fn files(&self) -> Vec<FileId> {
48        vec![]
49    }
50}
51
52#[cfg(test)]
53mod tests;