jsona_lsp/
lib.rs

1use jsona_util::environment::Environment;
2use lsp_async_stub::Server;
3use lsp_types::{notification, request};
4use std::sync::Arc;
5use world::{World, WorldState};
6
7mod diagnostics;
8mod handlers;
9
10pub mod config;
11pub mod lsp_ext;
12pub mod query;
13pub mod world;
14
15pub const NAME: &str = "JSONA Language Server";
16
17#[must_use]
18pub fn create_server<E: Environment>() -> Server<World<E>> {
19    Server::new()
20        .on_request::<request::Initialize, _>(handlers::initialize)
21        .on_request::<request::FoldingRangeRequest, _>(handlers::folding_ranges)
22        .on_request::<request::SelectionRangeRequest, _>(handlers::selection_ranges)
23        .on_request::<request::DocumentSymbolRequest, _>(handlers::document_symbols)
24        .on_request::<request::Completion, _>(handlers::completion)
25        .on_request::<request::HoverRequest, _>(handlers::hover)
26        .on_request::<request::Formatting, _>(handlers::format)
27        .on_notification::<notification::Initialized, _>(handlers::initialized)
28        .on_notification::<notification::DidOpenTextDocument, _>(handlers::document_open)
29        .on_notification::<notification::DidChangeTextDocument, _>(handlers::document_change)
30        .on_notification::<notification::DidSaveTextDocument, _>(handlers::document_save)
31        .on_notification::<notification::DidCloseTextDocument, _>(handlers::document_close)
32        .on_notification::<notification::DidChangeConfiguration, _>(handlers::configuration_change)
33        .on_notification::<notification::DidChangeWorkspaceFolders, _>(handlers::workspace_change)
34        .on_request::<lsp_ext::request::ListSchemasRequest, _>(handlers::list_schemas)
35        .on_request::<lsp_ext::request::AssociatedSchemaRequest, _>(handlers::associated_schema)
36        .build()
37}
38
39pub fn create_world<E: Environment>(env: E) -> World<E> {
40    Arc::new(WorldState::new(env))
41}