57 lines
1.7 KiB
Rust
57 lines
1.7 KiB
Rust
use lsp_server::Connection;
|
|
use lsp_types::{
|
|
OneOf, SaveOptions, ServerCapabilities, TextDocumentSyncCapability, TextDocumentSyncKind,
|
|
TextDocumentSyncOptions, TextDocumentSyncSaveOptions,
|
|
};
|
|
|
|
pub mod error;
|
|
mod line_numbers;
|
|
pub mod server;
|
|
|
|
use error::Error;
|
|
|
|
use crate::server::Server;
|
|
|
|
pub fn start() -> Result<(), Error> {
|
|
tracing::info!("Aiken language server starting");
|
|
|
|
// Create the transport. Includes the stdio (stdin and stdout) versions but this could
|
|
// also be implemented to use sockets or HTTP.
|
|
let (connection, io_threads) = Connection::stdio();
|
|
|
|
// Run the server and wait for the two threads to end (typically by trigger LSP Exit event).
|
|
let server_capabilities = serde_json::to_value(&capabilities())?;
|
|
|
|
let initialization_params = connection.initialize(server_capabilities)?;
|
|
let initialize_params = serde_json::from_value(initialization_params)?;
|
|
|
|
let mut server = Server::new(initialize_params, None);
|
|
|
|
server.listen(connection)?;
|
|
|
|
io_threads.join()?;
|
|
|
|
tracing::info!("Aiken language server shutting down");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn capabilities() -> ServerCapabilities {
|
|
ServerCapabilities {
|
|
text_document_sync: Some(TextDocumentSyncCapability::Options(
|
|
TextDocumentSyncOptions {
|
|
open_close: None,
|
|
change: Some(TextDocumentSyncKind::FULL),
|
|
will_save: None,
|
|
will_save_wait_until: None,
|
|
save: Some(TextDocumentSyncSaveOptions::SaveOptions(SaveOptions {
|
|
include_text: Some(false),
|
|
})),
|
|
},
|
|
)),
|
|
// definition_provider: Some(OneOf::Left(true)),
|
|
document_formatting_provider: Some(OneOf::Left(true)),
|
|
..Default::default()
|
|
}
|
|
}
|