sync_ls/
lib.rs

1//! A synchronous language server implementation.
2
3#[cfg(feature = "dap")]
4pub mod dap;
5#[cfg(feature = "lsp")]
6pub mod lsp;
7
8mod error;
9pub use error::*;
10
11mod msg;
12pub use msg::*;
13
14#[cfg(feature = "server")]
15pub use server::*;
16#[cfg(feature = "server")]
17pub mod req_queue;
18#[cfg(feature = "server")]
19mod server;
20#[cfg(all(feature = "server", feature = "system"))]
21pub mod transport;
22
23use std::any::Any;
24
25/// The common error type for language servers.
26pub use crate::msg::ResponseError;
27/// The common result type for language servers.
28pub type LspResult<T> = Result<T, ResponseError>;
29/// The common event type for language servers.
30pub type Event = Box<dyn Any + Send>;
31
32/// Note that we must have our logging only write out to stderr.
33#[cfg(feature = "web")]
34fn dummy_transport<M: TryFrom<Message, Error = anyhow::Error> + GetMessageKind>() -> Connection<M> {
35    let (event_sender, event_receiver) = crossbeam_channel::bounded::<crate::Event>(0);
36    let (writer_sender, writer_receiver) = crossbeam_channel::bounded::<Message>(0);
37    Connection {
38        // lsp_sender,
39        // lsp_receiver,
40        sender: TConnectionTx {
41            event: event_sender,
42            lsp: writer_sender,
43            marker: std::marker::PhantomData,
44        },
45        receiver: TConnectionRx {
46            event: event_receiver,
47            lsp: writer_receiver,
48            marker: std::marker::PhantomData,
49        },
50    }
51}