A simple CPU rendered GUI IDE experience.
Diffstat (limited to 'src/lsp/init_opts.rs')
-rw-r--r--src/lsp/init_opts.rs362
1 files changed, 362 insertions, 0 deletions
diff --git a/src/lsp/init_opts.rs b/src/lsp/init_opts.rs
new file mode 100644
index 0000000..19bd140
--- /dev/null
+++ b/src/lsp/init_opts.rs
@@ -0,0 +1,362 @@
+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(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",
+ },
+ }}),
+ trace: None,
+ workspace_folders: Some(vec![workspace]),
+
+ ..default()
+ }
+}