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