use Default::default; use lsp_types::*; use serde_json::json; pub fn get(workspace: WorkspaceFolder) -> InitializeParams { InitializeParams { process_id: Some(std::process::id()), capabilities: ClientCapabilities { window: Some(WindowClientCapabilities { work_done_progress: Some(true), ..default() }), workspace: Some(WorkspaceClientCapabilities { symbol: Some(WorkspaceSymbolClientCapabilities { symbol_kind: Some(SymbolKindCapability { value_set: Some(SymbolKind::ALL.to_vec()), }), tag_support: Some(TagSupport { value_set: SymbolTag::ALL.to_vec(), }), resolve_support: Some( WorkspaceSymbolResolveSupportCapability { properties: vec!["location".into()], }, ), ..default() }), diagnostic: Some(DiagnosticWorkspaceClientCapabilities { refresh_support: Some(true), }), inlay_hint: Some(InlayHintWorkspaceClientCapabilities { refresh_support: Some(true), }), workspace_edit: Some(WorkspaceEditClientCapabilities { document_changes: Some(true), resource_operations: Some(vec![ ResourceOperationKind::Create, ResourceOperationKind::Rename, ResourceOperationKind::Delete, ]), failure_handling: Some(FailureHandlingKind::Abort), normalizes_line_endings: Some(false), change_annotation_support: Some( ChangeAnnotationWorkspaceEditClientCapabilities { groups_on_label: Some(false), }, ), }), ..default() }), text_document: Some(TextDocumentClientCapabilities { on_type_formatting: Some( DocumentOnTypeFormattingClientCapabilities { dynamic_registration: Some(false), }, ), document_highlight: Some(default()), formatting: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(false), }), inlay_hint: Some(InlayHintClientCapabilities { dynamic_registration: None, resolve_support: Some( InlayHintResolveClientCapabilities { properties: vec![ "textEdits".into(), "tooltip".into(), "label.tooltip".into(), "label.command".into(), ], }, ), }), document_symbol: Some(DocumentSymbolClientCapabilities { tag_support: Some(TagSupport { value_set: SymbolTag::ALL.to_vec(), }), symbol_kind: Some(SymbolKindCapability { value_set: Some(SymbolKind::ALL.to_vec()), }), hierarchical_document_symbol_support: Some(true), ..default() }), definition: Some(GotoCapability { link_support: Some(true), ..default() }), code_action: Some(CodeActionClientCapabilities { data_support: Some(true), resolve_support: Some( CodeActionCapabilityResolveSupport { properties: vec!["edit".to_string()], }, ), code_action_literal_support: Some( CodeActionLiteralSupport { code_action_kind: CodeActionKindLiteralSupport { value_set: [ "", "Empty", "QuickFix", "Refactor", "RefactorExtract", "RefactorInline", "RefactorRewrite", "Source", "SourceOrganizeImports", "quickfix", "refactor", "refactor.extract", "refactor.inline", "refactor.rewrite", "source", "source.organizeImports", ] .map(String::from) .into(), }, }, ), ..default() }), rename: Some(RenameClientCapabilities { prepare_support: Some(true), prepare_support_default_behavior: Some( PrepareSupportDefaultBehavior::IDENTIFIER, ), honors_change_annotations: Some(false), ..default() }), hover: Some(HoverClientCapabilities { dynamic_registration: None, content_format: Some(vec![ MarkupKind::PlainText, MarkupKind::Markdown, ]), }), diagnostic: Some(DiagnosticClientCapabilities { dynamic_registration: None, related_document_support: Some(true), }), publish_diagnostics: Some( PublishDiagnosticsClientCapabilities { related_information: Some(true), code_description_support: Some(true), data_support: Some(true), ..default() }, ), signature_help: Some(SignatureHelpClientCapabilities { dynamic_registration: None, signature_information: Some( SignatureInformationSettings { documentation_format: Some(vec![ MarkupKind::Markdown, MarkupKind::PlainText, ]), parameter_information: Some( ParameterInformationSettings { label_offset_support: Some(true), }, ), active_parameter_support: Some(true), }, ), context_support: Some(false), }), completion: Some(CompletionClientCapabilities { dynamic_registration: Some(false), completion_item: Some(CompletionItemCapability { snippet_support: Some(true), commit_characters_support: Some(true), documentation_format: Some(vec![ MarkupKind::Markdown, MarkupKind::PlainText, ]), deprecated_support: None, preselect_support: None, tag_support: Some(TagSupport { value_set: vec![CompletionItemTag::DEPRECATED], }), resolve_support: Some( CompletionItemCapabilityResolveSupport { properties: vec![ "additionalTextEdits".into(), "documentation".into(), ], }, ), insert_replace_support: Some(false), insert_text_mode_support: Some( InsertTextModeSupport { value_set: vec![InsertTextMode::AS_IS], }, ), label_details_support: Some(true), ..default() }), completion_item_kind: Some( CompletionItemKindCapability { value_set: Some(vec![ CompletionItemKind::TEXT, CompletionItemKind::METHOD, CompletionItemKind::FUNCTION, CompletionItemKind::CONSTRUCTOR, CompletionItemKind::FIELD, CompletionItemKind::VARIABLE, CompletionItemKind::CLASS, CompletionItemKind::INTERFACE, CompletionItemKind::MODULE, CompletionItemKind::PROPERTY, CompletionItemKind::UNIT, CompletionItemKind::VALUE, CompletionItemKind::ENUM, CompletionItemKind::KEYWORD, CompletionItemKind::SNIPPET, CompletionItemKind::COLOR, CompletionItemKind::FILE, CompletionItemKind::REFERENCE, CompletionItemKind::FOLDER, CompletionItemKind::ENUM_MEMBER, CompletionItemKind::CONSTANT, CompletionItemKind::STRUCT, CompletionItemKind::EVENT, CompletionItemKind::OPERATOR, CompletionItemKind::TYPE_PARAMETER, ]), // value_set: Some(vec![CompletionItemKind::]), }, ), context_support: None, insert_text_mode: Some(InsertTextMode::AS_IS), completion_list: Some(CompletionListCapability { item_defaults: None, }), }), semantic_tokens: Some(SemanticTokensClientCapabilities { dynamic_registration: Some(false), requests: SemanticTokensClientCapabilitiesRequests { range: Some(true), full: Some( lsp_types::SemanticTokensFullOptions::Bool( true, ), ), }, token_modifiers: [ "associated", "attribute", "callable", "constant", "consuming", "controlFlow", "crateRoot", "injected", "intraDocLink", "library", "macro", "mutable", "procMacro", "public", "reference", "trait", "unsafe", ] .map(|x| x.into()) .to_vec(), overlapping_token_support: Some(true), multiline_token_support: Some(true), server_cancel_support: Some(false), augments_syntax_tokens: Some(false), ..default() }), ..default() }), general: Some(GeneralClientCapabilities { markdown: Some(MarkdownClientCapabilities { version: Some("1.0.0".into()), parser: "markdown".into(), allowed_tags: Some(vec![]), }), position_encodings: Some(vec![PositionEncodingKind::UTF8]), ..default() }), experimental: Some(json! {{ "matchingBrace": true, "snippetTextEdit": true, "colorDiagnosticOutput": true, "codeActionGroup": true, "serverStatusNotification": true, "hoverActions": true, "workspaceSymbolScopeKindFiltering": true, "onEnter": true, "localDocs": true, }}), ..default() }, client_info: Some(ClientInfo { name: "gracilaria".into(), version: Some(env!("CARGO_PKG_VERSION").into()), }), initialization_options: Some(ra_config()), trace: None, workspace_folders: Some(vec![workspace]), ..default() } } pub fn ra_config() -> serde_json::Value { json! {{ "cargo": { "buildScripts": { "enable": true } }, "procMacro": { "enable": true, "attributes": { "enable": true } }, "hover": { "documentation": { "keywords": { "enable": false }, }, }, "inlayHints": { "closureReturnTypeHints": { "enable": "with_block" }, "closingBraceHints": { "minLines": 5 }, "closureStyle": "rust_analyzer", "genericParameterHints": { "type": { "enable": true } }, "rangeExclusiveHints": { "enable": true }, "closureCaptureHints": { "enable": true }, }, "typing": { "triggerChars": ".=<>{(+" }, "assist": { "preferSelf": true }, "checkOnSave": true, "diagnostics": { "enable": true }, "semanticHighlighting": { "punctuation": { "separate": { "macroBang": true }, "specialization": { "enable": true }, "enable": true } }, "workspace": { "symbol": { "search": { "limit": 1024 } } }, "showUnlinkedFileNotification": false, "completion": { "fullFunctionSignatures": { "enable": true, }, "autoIter": { "enable": false, }, "autoImport": { "enable": true, }, "termSearch": { "enable": true, }, "autoself": { "enable": true, }, "privateEditable": { "enable": true }, }, "imports": { "granularity": "group", }, } } }