diff --git a/crates/tinymist-query/src/lib.rs b/crates/tinymist-query/src/lib.rs index e287e18c..6be40bee 100644 --- a/crates/tinymist-query/src/lib.rs +++ b/crates/tinymist-query/src/lib.rs @@ -1,6 +1,7 @@ pub mod analysis; pub(crate) mod diagnostics; + pub use diagnostics::*; pub(crate) mod signature_help; pub use signature_help::*; @@ -30,6 +31,48 @@ pub use lsp_typst_boundary::*; mod prelude; +mod polymorphic { + use super::prelude::*; + use super::*; + + #[derive(Debug, Clone)] + pub struct OnSaveExportRequest { + pub path: PathBuf, + } + + #[derive(Debug, Clone)] + pub enum CompilerQueryRequest { + OnSaveExport(OnSaveExportRequest), + Hover(HoverRequest), + GotoDefinition(GotoDefinitionRequest), + Completion(CompletionRequest), + SignatureHelp(SignatureHelpRequest), + DocumentSymbol(DocumentSymbolRequest), + Symbol(SymbolRequest), + SemanticTokensFull(SemanticTokensFullRequest), + SemanticTokensDelta(SemanticTokensDeltaRequest), + FoldingRange(FoldingRangeRequest), + SelectionRange(SelectionRangeRequest), + } + + #[derive(Debug, Clone)] + pub enum CompilerQueryResponse { + OnSaveExport(()), + Hover(Option), + GotoDefinition(Option), + Completion(Option), + SignatureHelp(Option), + DocumentSymbol(Option), + Symbol(Option>), + SemanticTokensFull(Option), + SemanticTokensDelta(Option), + FoldingRange(Option>), + SelectionRange(Option>), + } +} + +pub use polymorphic::*; + #[cfg(test)] mod tests { use core::fmt; diff --git a/crates/tinymist/src/actor/typst.rs b/crates/tinymist/src/actor/typst.rs index 99d21390..384f6a3f 100644 --- a/crates/tinymist/src/actor/typst.rs +++ b/crates/tinymist/src/actor/typst.rs @@ -8,14 +8,11 @@ use anyhow::anyhow; use futures::future::join_all; use log::{error, trace, warn}; use tinymist_query::{ - DiagnosticsMap, LspDiagnostic, LspRange, PositionEncoding, SemanticTokenCache, + CompilerQueryRequest, CompilerQueryResponse, DiagnosticsMap, LspDiagnostic, LspRange, + OnSaveExportRequest, PositionEncoding, SemanticTokenCache, }; use tokio::sync::{broadcast, mpsc, watch, Mutex, RwLock}; -use tower_lsp::lsp_types::{ - CompletionResponse, DocumentSymbolResponse, FoldingRange, GotoDefinitionResponse, Hover, - SelectionRange, SemanticTokensFullDeltaResult, SemanticTokensResult, SignatureHelp, - SymbolInformation, TextDocumentContentChangeEvent, Url, -}; +use tower_lsp::lsp_types::{TextDocumentContentChangeEvent, Url}; use typst::diag::{FileResult, SourceDiagnostic, SourceResult}; use typst::layout::Position; use typst::model::Document; @@ -285,41 +282,6 @@ impl CompileCluster { } } -#[derive(Debug, Clone)] -pub struct OnSaveExportRequest { - pub path: PathBuf, -} - -#[derive(Debug, Clone)] -pub enum CompilerQueryRequest { - OnSaveExport(OnSaveExportRequest), - Hover(tinymist_query::HoverRequest), - GotoDefinition(tinymist_query::GotoDefinitionRequest), - Completion(tinymist_query::CompletionRequest), - SignatureHelp(tinymist_query::SignatureHelpRequest), - DocumentSymbol(tinymist_query::DocumentSymbolRequest), - Symbol(tinymist_query::SymbolRequest), - SemanticTokensFull(tinymist_query::SemanticTokensFullRequest), - SemanticTokensDelta(tinymist_query::SemanticTokensDeltaRequest), - FoldingRange(tinymist_query::FoldingRangeRequest), - SelectionRange(tinymist_query::SelectionRangeRequest), -} - -#[derive(Debug, Clone)] -pub enum CompilerQueryResponse { - OnSaveExport(()), - Hover(Option), - GotoDefinition(Option), - Completion(Option), - SignatureHelp(Option), - DocumentSymbol(Option), - Symbol(Option>), - SemanticTokensFull(Option), - SemanticTokensDelta(Option), - FoldingRange(Option>), - SelectionRange(Option>), -} - macro_rules! query_state { ($self:ident, $method:ident, $req:expr) => {{ let doc = $self.handler.result.lock().unwrap().clone().ok(); diff --git a/crates/tinymist/src/lib.rs b/crates/tinymist/src/lib.rs index c9a9442a..4cb8f877 100644 --- a/crates/tinymist/src/lib.rs +++ b/crates/tinymist/src/lib.rs @@ -17,8 +17,8 @@ use serde_json::Value as JsonValue; use tinymist_query::{ get_semantic_tokens_options, get_semantic_tokens_registration, get_semantic_tokens_unregistration, CompletionRequest, DocumentSymbolRequest, - FoldingRangeRequest, GotoDefinitionRequest, HoverRequest, PositionEncoding, - SelectionRangeRequest, SemanticTokensDeltaRequest, SemanticTokensFullRequest, + FoldingRangeRequest, GotoDefinitionRequest, HoverRequest, OnSaveExportRequest, + PositionEncoding, SelectionRangeRequest, SemanticTokensDeltaRequest, SemanticTokensFullRequest, SignatureHelpRequest, SymbolRequest, }; @@ -34,7 +34,6 @@ use typst::model::Document; use typst_ts_core::config::CompileOpts; use crate::actor::typst::CompileCluster; -use crate::actor::typst::{CompilerQueryResponse, OnSaveExportRequest}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Deserialize)] #[serde(rename_all = "camelCase")] @@ -234,14 +233,14 @@ macro_rules! run_query { let req = $req; $self .universe() - .query(actor::typst::CompilerQueryRequest::$query(req.clone())) + .query(tinymist_query::CompilerQueryRequest::$query(req.clone())) .await .map_err(|err| { error!("error getting $query: {err} with request {req:?}"); jsonrpc::Error::internal_error() }) .map(|resp| { - let CompilerQueryResponse::$query(resp) = resp else { + let tinymist_query::CompilerQueryResponse::$query(resp) = resp else { unreachable!() }; resp