use crate::server::lsp::capabilities::{
BoolOrEmpty, FullCapability,
server::{SemanticTokenModifiers, SemanticTokensOptions},
};
use super::lsp::capabilities::server::{
CompletionOptions, DiagnosticOptions, DocumentFormattingOptions,
DocumentOnTypeFormattingOptions, ExecuteCommandOptions, ServerCapabilities,
TextDocumentSyncKind, WorkDoneProgressOptions,
};
pub(super) fn create_capabilities() -> ServerCapabilities {
ServerCapabilities {
text_document_sync: TextDocumentSyncKind::Incremental,
hover_provider: true,
code_action_provider: true,
execute_command_provider: ExecuteCommandOptions {
work_done_progress_options: WorkDoneProgressOptions {
work_done_progress: true,
},
commands: vec![String::from("publish diagnostics")],
},
diagnostic_provider: DiagnosticOptions {
identifier: "qlue-ls".to_string(),
inter_file_dependencies: false,
workspace_diagnostics: false,
},
completion_provider: CompletionOptions {
trigger_characters: vec!["?".to_string(), " ".to_string()],
},
document_formatting_provider: DocumentFormattingOptions {},
document_on_type_formatting_provider: DocumentOnTypeFormattingOptions {
first_trigger_character: "\n".to_string(),
more_trigger_character: Some(vec![";".to_string(), ".".to_string()]),
},
folding_range_provider: true,
semantic_tokens_provider: SemanticTokensOptions {
work_done_progress_options: WorkDoneProgressOptions {
work_done_progress: true,
},
legend: crate::server::lsp::capabilities::server::SemanticTokensLegend {
token_types: crate::server::message_handler::semantic_tokens::TOKEN_TYPES.to_vec(),
token_modifiers: vec![SemanticTokenModifiers::Async],
},
range: Some(BoolOrEmpty::Bool(true)),
full: Some(FullCapability::Bool(true)),
},
}
}