Move server capabilities into an individual mod

This commit is contained in:
oxalica 2022-09-21 17:28:42 +08:00
parent 6a7ecb4386
commit 2f0231fde9
3 changed files with 50 additions and 47 deletions

View file

@ -0,0 +1,44 @@
use crate::semantic_tokens::{SEMANTIC_TOKEN_MODIFIERS, SEMANTIC_TOKEN_TYPES};
use lsp_types::{
CompletionOptions, OneOf, RenameOptions, SelectionRangeProviderCapability,
SemanticTokensFullOptions, SemanticTokensLegend, SemanticTokensOptions,
SemanticTokensServerCapabilities, ServerCapabilities, TextDocumentSyncCapability,
TextDocumentSyncKind, TextDocumentSyncOptions, WorkDoneProgressOptions,
};
pub(crate) fn server_capabilities() -> ServerCapabilities {
ServerCapabilities {
text_document_sync: Some(TextDocumentSyncCapability::Options(
TextDocumentSyncOptions {
open_close: Some(true),
change: Some(TextDocumentSyncKind::INCREMENTAL),
will_save: None,
will_save_wait_until: None,
save: None,
},
)),
definition_provider: Some(OneOf::Left(true)),
completion_provider: Some(CompletionOptions {
trigger_characters: Some(vec![".".into()]),
..Default::default()
}),
references_provider: Some(OneOf::Left(true)),
selection_range_provider: Some(SelectionRangeProviderCapability::Simple(true)),
rename_provider: Some(OneOf::Right(RenameOptions {
prepare_provider: Some(true),
work_done_progress_options: WorkDoneProgressOptions::default(),
})),
semantic_tokens_provider: Some(SemanticTokensServerCapabilities::SemanticTokensOptions(
SemanticTokensOptions {
work_done_progress_options: WorkDoneProgressOptions::default(),
legend: SemanticTokensLegend {
token_types: SEMANTIC_TOKEN_TYPES.to_vec(),
token_modifiers: SEMANTIC_TOKEN_MODIFIERS.to_vec(),
},
range: Some(true),
full: Some(SemanticTokensFullOptions::Delta { delta: Some(false) }),
},
)),
..Default::default()
}
}

View file

@ -1,55 +1,13 @@
use crate::semantic_tokens::{SEMANTIC_TOKEN_MODIFIERS, SEMANTIC_TOKEN_TYPES};
use crate::{convert, Result, StateSnapshot};
use ide::FileRange;
use lsp_types::{
CompletionOptions, CompletionParams, CompletionResponse, GotoDefinitionParams,
GotoDefinitionResponse, Location, OneOf, PrepareRenameResponse, ReferenceParams, RenameOptions,
RenameParams, SelectionRange, SelectionRangeParams, SelectionRangeProviderCapability,
SemanticTokens, SemanticTokensFullOptions, SemanticTokensLegend, SemanticTokensOptions,
SemanticTokensParams, SemanticTokensRangeParams, SemanticTokensRangeResult,
SemanticTokensResult, SemanticTokensServerCapabilities, ServerCapabilities,
TextDocumentPositionParams, TextDocumentSyncCapability, TextDocumentSyncKind,
TextDocumentSyncOptions, WorkDoneProgressOptions, WorkspaceEdit,
CompletionParams, CompletionResponse, GotoDefinitionParams, GotoDefinitionResponse, Location,
PrepareRenameResponse, ReferenceParams, RenameParams, SelectionRange, SelectionRangeParams,
SemanticTokens, SemanticTokensParams, SemanticTokensRangeParams, SemanticTokensRangeResult,
SemanticTokensResult, TextDocumentPositionParams, WorkspaceEdit,
};
use text_size::TextRange;
pub(crate) fn server_capabilities() -> ServerCapabilities {
ServerCapabilities {
text_document_sync: Some(TextDocumentSyncCapability::Options(
TextDocumentSyncOptions {
open_close: Some(true),
change: Some(TextDocumentSyncKind::INCREMENTAL),
will_save: None,
will_save_wait_until: None,
save: None,
},
)),
definition_provider: Some(OneOf::Left(true)),
completion_provider: Some(CompletionOptions {
trigger_characters: Some(vec![".".into()]),
..Default::default()
}),
references_provider: Some(OneOf::Left(true)),
selection_range_provider: Some(SelectionRangeProviderCapability::Simple(true)),
rename_provider: Some(OneOf::Right(RenameOptions {
prepare_provider: Some(true),
work_done_progress_options: WorkDoneProgressOptions::default(),
})),
semantic_tokens_provider: Some(SemanticTokensServerCapabilities::SemanticTokensOptions(
SemanticTokensOptions {
work_done_progress_options: WorkDoneProgressOptions::default(),
legend: SemanticTokensLegend {
token_types: SEMANTIC_TOKEN_TYPES.to_vec(),
token_modifiers: SEMANTIC_TOKEN_MODIFIERS.to_vec(),
},
range: Some(true),
full: Some(SemanticTokensFullOptions::Delta { delta: Some(false) }),
},
)),
..Default::default()
}
}
pub(crate) fn goto_definition(
snap: StateSnapshot,
params: GotoDefinitionParams,

View file

@ -1,3 +1,4 @@
mod capabilities;
mod convert;
mod handler;
mod semantic_tokens;
@ -31,7 +32,7 @@ pub type Result<T, E = Error> = std::result::Result<T, E>;
pub fn main_loop(conn: Connection) -> Result<()> {
let init_params =
conn.initialize(serde_json::to_value(&handler::server_capabilities()).unwrap())?;
conn.initialize(serde_json::to_value(&capabilities::server_capabilities()).unwrap())?;
tracing::info!("Init params: {}", init_params);
let init_params = serde_json::from_value::<InitializeParams>(init_params)?;