{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "Configuration file for coc.nvim",
  "additionalProperties": false,
  "definitions": {
    "float": {
      "type": "object",
      "properties": {
        "border": {
          "type": "boolean",
          "default": false,
          "description": "Set to true to use borders."
        },
        "rounded": {
          "type": "boolean",
          "default": false,
          "description": "Use rounded borders when border is true."
        },
        "highlight": {
          "type": "string",
          "default": "CocFloating",
          "description": "Background highlight group of float window."
        },
        "title": {
          "type": "string",
          "default": "",
          "description": "Title used by float window."
        },
        "borderhighlight": {
          "type": "string",
          "default": "CocFloating",
          "description": "Border highlight group of float window."
        },
        "close": {
          "type": "boolean",
          "default": false,
          "description": "Set to true to draw close icon"
        },
        "maxWidth": {
          "type": "integer",
          "description": "Maximum width of float window, include border."
        },
        "maxHeight": {
          "type": "integer",
          "minimum": 2,
          "description": "Maximum height of float window, include border."
        },
        "focusable": {
          "type": "boolean",
          "default": true,
          "description": "Enable focus by user actions (wincmds, mouse events), neovim only."
        },
        "shadow": {
          "type": "boolean",
          "default": false,
          "description": "Drop shadow effect by blending with the background, neovim only."
        },
        "winblend": {
          "type": "integer",
          "default": 0,
          "minimum": 0,
          "maximum": 100,
          "description": "Enables pseudo-transparency by set 'winblend' option of window, neovim only."
        }
      }
    },
    "languageServerBase": {
      "type": "object",
      "properties": {
        "enable": {
          "type": "boolean",
          "default": true
        },
        "cwd": {
          "type": "string",
          "default": "",
          "description": "Working directory of languageserver, absolute path or relative to workspace folder, use workspace root by default"
        },
        "disableDynamicRegister": {
          "type": "boolean",
          "default": false,
          "description": "Disable dynamic registerCapability feature for this languageserver to avoid duplicated feature regstration."
        },
        "disableSnippetCompletion": {
          "type": "boolean",
          "default": false,
          "description": "Disable completion snippet feature for this languageserver, the languageserver may not respect it."
        },
        "disabledFeatures": {
          "type": "array",
          "default": [],
          "description": "Disabled features for this languageserver.",
          "items": {
            "type": "string",
            "enum": [
              "completion",
              "configuration",
              "workspaceFolders",
              "diagnostics",
              "willSave",
              "willSaveUntil",
              "didSaveTextDocument",
              "fileSystemWatcher",
              "hover",
              "signatureHelp",
              "definition",
              "references",
              "documentHighlight",
              "documentSymbol",
              "workspaceSymbol",
              "codeAction",
              "codeLens",
              "formatting",
              "documentFormatting",
              "documentRangeFormatting",
              "documentOnTypeFormatting",
              "rename",
              "documentLink",
              "executeCommand",
              "pullConfiguration",
              "typeDefinition",
              "implementation",
              "declaration",
              "color",
              "foldingRange",
              "selectionRange",
              "progress",
              "callHierarchy",
              "linkedEditing",
              "fileEvents",
              "semanticTokens"
            ]
          }
        },
        "formatterPriority": {
          "type": "number",
          "default": 0,
          "description": "Priority of this languageserver's formatter."
        },
        "env": {
          "type": "object",
          "default": null,
          "description": "Environment variables for child process."
        },
        "stdioEncoding": {
          "type": "string",
          "default": "utf8",
          "description": "Encoding used for stdio of child process."
        },
        "rootPatterns": {
          "type": "array",
          "default": [],
          "description": "Root patterns used to resolve rootPath from current file, default to workspace root",
          "items": {
            "type": "string"
          }
        },
        "requireRootPattern": {
          "type": "boolean",
          "default": false,
          "description": "If true, doesn't start server when root pattern not found."
        },
        "ignoredRootPaths": {
          "type": "array",
          "default": [],
          "description": "Absolute root paths that language server should not use as rootPath, higher priority than rootPatterns.",
          "items": {
            "type": "string"
          }
        },
        "filetypes": {
          "type": "array",
          "default": [],
          "description": "Supported filetypes, add * in array for all filetypes.",
          "items": {
            "type": "string"
          }
        },
        "additionalSchemes": {
          "type": "array",
          "default": [],
          "description": "Additional uri schemes, default schemes including file & untitled.",
          "items": {
            "type": "string"
          }
        },
        "revealOutputChannelOn": {
          "type": "string",
          "default": "never",
          "description": "Configure message level to show the output channel buffer",
          "enum": ["info", "warn", "error", "never"]
        },
        "progressOnInitialization": {
          "type": "boolean",
          "default": false,
          "description": "Enable progress report on languageserver initialize."
        },
        "initializationOptions": {
          "type": "object",
          "default": {},
          "description": "initializationOptions passed to languageserver"
        },
        "settings": {
          "type": "object",
          "default": {},
          "description": "Settings of languageserver"
        },
        "trace.server": {
          "type": "string",
          "default": "off",
          "enum": ["off", "messages", "verbose"],
          "description": "Trace level of communication between server and client"
        }
      }
    },
    "languageServerSocket": {
      "type": "object",
      "allOf": [{ "$ref": "#/definitions/languageServerBase" }],
      "required": ["port", "filetypes"],
      "additionalProperties": false,
      "properties": {
        "port": {
          "type": "integer",
          "description": "Port number of socket server"
        },
        "host": {
          "type": "string",
          "default": "127.0.0.1",
          "description": "Host of server"
        },
        "disableSnippetCompletion": {},
        "disableDynamicRegister": {},
        "disabledFeatures": {},
        "formatterPriority": {},
        "enable": {},
        "rootPatterns": {},
        "requireRootPattern": {},
        "ignoredRootPaths": {},
        "filetypes": {},
        "additionalSchemes": {},
        "revealOutputChannelOn": {},
        "progressOnInitialization": {},
        "initializationOptions": {},
        "settings": {},
        "stdioEncoding": {},
        "trace.server": {}
      }
    },
    "languageServerModule": {
      "type": "object",
      "allOf": [{ "$ref": "#/definitions/languageServerBase" }],
      "required": ["module", "filetypes"],
      "additionalProperties": false,
      "properties": {
        "module": {
          "type": "string",
          "default": "",
          "description": "Absolute path of javascript file, should works in IPC mode"
        },
        "args": {
          "type": "array",
          "default": [],
          "description": "Extra arguments of module",
          "items": {
            "type": "string"
          }
        },
        "runtime": {
          "type": "string",
          "default": "",
          "description": "Absolute path of node runtime."
        },
        "execArgv": {
          "type": "array",
          "default": [],
          "description": "Argv passed to node when using module, normally used for debugging, ex: [\"--nolazy\", \"--inspect-brk=6045\"]",
          "items": {
            "type": "string"
          }
        },
        "transport": {
          "type": "string",
          "default": "ipc",
          "description": "Transport kind used by server, could be 'ipc', 'stdio', 'socket' and 'pipe'",
          "enum": ["ipc", "stdio", "socket", "pipe"]
        },
        "transportPort": {
          "type": "integer",
          "description": "Port number used when transport is 'socket'"
        },
        "cwd": {},
        "env": {},
        "enable": {},
        "disableDynamicRegister": {},
        "disableSnippetCompletion": {},
        "disabledFeatures": {},
        "formatterPriority": {},
        "rootPatterns": {},
        "requireRootPattern": {},
        "ignoredRootPaths": {},
        "filetypes": {},
        "additionalSchemes": {},
        "revealOutputChannelOn": {},
        "progressOnInitialization": {},
        "initializationOptions": {},
        "stdioEncoding": {},
        "settings": {},
        "trace.server": {}
      }
    },
    "languageServerCommand": {
      "type": "object",
      "required": ["command", "filetypes"],
      "allOf": [{ "$ref": "#/definitions/languageServerBase" }],
      "additionalProperties": false,
      "properties": {
        "command": {
          "type": "string",
          "default": "",
          "description": "Executable in $PATH to start languageserver, should not used with module"
        },
        "args": {
          "type": "array",
          "default": [],
          "description": "Arguments of command",
          "items": {
            "type": "string"
          }
        },
        "detached": {
          "type": "boolean",
          "default": false,
          "description": "Detach the languageserver process"
        },
        "shell": {
          "type": "boolean",
          "default": false,
          "description": "Use shell for process"
        },
        "cwd": {},
        "env": {},
        "enable": {},
        "disableDynamicRegister": {},
        "disableSnippetCompletion": {},
        "disabledFeatures": {},
        "formatterPriority": {},
        "rootPatterns": {},
        "requireRootPattern": {},
        "ignoredRootPaths": {},
        "filetypes": {},
        "additionalSchemes": {},
        "revealOutputChannelOn": {},
        "progressOnInitialization": {},
        "initializationOptions": {},
        "stdioEncoding": {},
        "settings": {},
        "trace.server": {}
      }
    }
  },
  "properties": {
    "http.proxy": {
      "type": "string",
      "default": "",
      "pattern": "^https?://([^:]*(:[^@]*)?@)?([^:]+|\\[[:0-9a-fA-F]+\\])(:\\d+)?/?$|^$",
      "description": "The proxy setting to use. If not set, will be inherited from the `http_proxy` and `https_proxy` environment variables."
    },
    "http.proxyStrictSSL": {
      "type": "boolean",
      "description": "Controls whether the proxy server certificate should be verified against the list of supplied CAs",
      "default": true
    },
    "http.proxyAuthorization": {
      "type": ["null", "string"],
      "description": "The value to send as the `Proxy-Authorization` header for every network request.",
      "default": null
    },
    "http.proxyCA": {
      "type": "string",
      "description": "CA (file) to use as Certificate Authority",
      "default": null
    },
    "npm.binPath": {
      "type": "string",
      "default": "npm",
      "description": "Command or absolute path to npm or yarn."
    },
    "suggest.noselect": {
      "type": "boolean",
      "description": "Not make vim select first item on completion start",
      "default": false
    },
    "suggest.formatItems": {
      "type": "array",
      "items": {
        "enum": ["abbr", "menu", "kind", "shortcut"]
      },
      "contains": {
        "enum": ["abbr"]
      },
      "uniqueItems": true,
      "description": "Items shown in popup menu in order.",
      "default": ["abbr", "menu", "kind", "shortcut"]
    },
    "suggest.selection": {
      "type": "string",
      "default": "recentlyUsed",
      "description": "Controls how suggestions are pre-selected when showing the suggest list.",
      "enum": ["none", "recentlyUsed", "recentlyUsedByPrefix"]
    },
    "suggest.enablePreselect": {
      "type": "boolean",
      "description": "Enable preselect feature of LSP, works when suggest.noselect is false.",
      "default": true
    },
    "suggest.floatConfig": {
      "type": "object",
      "description": "Configure style of popup menu and documentation window of completion.",
      "allOf": [{ "$ref": "#/definitions/float" }],
      "additionalProperties": false,
      "properties": {
        "border": {},
        "rounded": {},
        "highlight": {},
        "borderhighlight": {},
        "maxWidth": {},
        "winblend": {},
        "shadow": {}
      }
    },
    "suggest.labelMaxLength": {
      "type": "number",
      "description": "Max length of abbr that shown as label of complete item.",
      "default": 200
    },
    "suggest.detailMaxLength": {
      "type": "number",
      "description": "Max length of detail that should be shown in popup menu.",
      "default": 100
    },
    "suggest.detailField": {
      "type": "string",
      "default": "preview",
      "description": "Where to show the detail text of CompleteItem from LS.",
      "enum": ["abbr", "preview"]
    },
    "suggest.autoTrigger": {
      "type": "string",
      "default": "always",
      "description": "How should completion be triggered",
      "enum": ["always", "trigger", "none"]
    },
    "suggest.languageSourcePriority": {
      "type": "number",
      "default": 99,
      "description": "Priority of language sources."
    },
    "suggest.snippetIndicator": {
      "type": "string",
      "default": "~",
      "description": "The character used in abbr of complete item to indicate the item could be expand as snippet."
    },
    "suggest.maxCompleteItemCount": {
      "type": "number",
      "default": 50,
      "description": "Maximum number of complete items shown in vim"
    },
    "suggest.preferCompleteThanJumpPlaceholder": {
      "type": "boolean",
      "description": "Confirm completion instead of jump to next placeholder when completion is activated.",
      "default": false
    },
    "suggest.fixInsertedWord": {
      "type": "boolean",
      "description": "Make inserted word replace word characters after cursor position.",
      "default": true
    },
    "suggest.localityBonus": {
      "type": "boolean",
      "description": "Boost suggestions that appear closer to the cursor position.",
      "default": true
    },
    "suggest.triggerAfterInsertEnter": {
      "type": "boolean",
      "description": "Trigger completion after InsertEnter, auto trigger should be 'always' to enable this option",
      "default": false
    },
    "suggest.minTriggerInputLength": {
      "type": "integer",
      "default": 1,
      "description": "Minimal input length for trigger completion, default 1"
    },
    "suggest.triggerCompletionWait": {
      "type": "integer",
      "default": 0,
      "minimum": 0,
      "maximum": 50,
      "description": "Wait time between text change and completion start, cancel completion when text changed during wait."
    },
    "suggest.timeout": {
      "type": "integer",
      "default": 5000,
      "minimum": 500,
      "maximum": 15000,
      "description": "Timeout for completion, in milliseconds."
    },
    "suggest.acceptSuggestionOnCommitCharacter": {
      "type": "boolean",
      "default": false,
      "description": "Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character. Requires CompleteChanged event to work."
    },
    "suggest.lowPrioritySourceLimit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Max items count for source priority lower than 90."
    },
    "suggest.highPrioritySourceLimit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Max items count for source priority bigger than or equal to 90."
    },
    "suggest.removeDuplicateItems": {
      "type": "boolean",
      "description": "Remove completion items with duplicated word for all sources, snippet items are excluded.",
      "default": false
    },
    "suggest.defaultSortMethod": {
      "type": "string",
      "description": "Default sorting behavior for suggested completion items.",
      "default": "length",
      "enum": ["length", "alphabetical", "none"]
    },
    "suggest.snippetsSupport": {
      "type": "boolean",
      "description": "Set to false to disable snippets support of completion.",
      "default": true
    },
    "suggest.completionItemKindLabels": {
      "type": "object",
      "default": {},
      "description": "Set custom labels to completion items' kinds.",
      "properties": {
        "text": { "type": "string", "maxLength": 1 },
        "method": { "type": "string", "maxLength": 1 },
        "function": { "type": "string", "maxLength": 1 },
        "constructor": { "type": "string", "maxLength": 1 },
        "field": { "type": "string", "maxLength": 1 },
        "variable": { "type": "string", "maxLength": 1 },
        "class": { "type": "string", "maxLength": 1 },
        "interface": { "type": "string", "maxLength": 1 },
        "module": { "type": "string", "maxLength": 1 },
        "property": { "type": "string", "maxLength": 1 },
        "unit": { "type": "string", "maxLength": 1 },
        "value": { "type": "string", "maxLength": 1 },
        "enum": { "type": "string", "maxLength": 1 },
        "keyword": { "type": "string", "maxLength": 1 },
        "snippet": { "type": "string", "maxLength": 1 },
        "color": { "type": "string", "maxLength": 1 },
        "file": { "type": "string", "maxLength": 1 },
        "reference": { "type": "string", "maxLength": 1 },
        "folder": { "type": "string", "maxLength": 1 },
        "enumMember": { "type": "string", "maxLength": 1 },
        "constant": { "type": "string", "maxLength": 1 },
        "struct": { "type": "string", "maxLength": 1 },
        "event": { "type": "string", "maxLength": 1 },
        "operator": { "type": "string", "maxLength": 1 },
        "typeParameter": { "type": "string", "maxLength": 1 },
        "default": { "type": "string", "maxLength": 1 }
      },
      "additionalProperties": false
    },
    "suggest.invalidInsertCharacters": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Invalid character for strip valid word when inserting text of complete item.",
      "default": [" ", "(", "<", "{", "[", "\r", "\n"]
    },
    "suggest.asciiCharactersOnly": {
      "type": "boolean",
      "description": "Trigger suggest with ASCII characters only",
      "default": false
    },
    "suggest.ignoreRegexps": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Regexps to ignore when trigger suggest",
      "default": []
    },
    "suggest.virtualText": {
      "type": "boolean",
      "description": "Show virtual text for insert word of selected item, works on neovim >= 0.5.0",
      "default": false
    },
    "documentHighlight.priority": {
      "type": "number",
      "default": -1,
      "description": "Match priority used by document highlight, see ':h matchadd'"
    },
    "documentHighlight.timeout": {
      "type": "integer",
      "default": 300,
      "minimum": 200,
      "maximum": 5000,
      "description": "Timeout for document highlight, in milliseconds."
    },
    "colors.filetypes": {
      "type": "array",
      "default": [],
      "description": "Filetypes that should be enabled for colors highlight feature, use \"*\" for all filetypes.",
      "items": {
        "type": "string"
      }
    },
    "colors.highlightPriority": {
      "type": "number",
      "description": "Priority for colors highlights, works on vim8 and neovim >= 0.6.0",
      "default": 1000,
      "maximum": 4096
    },
    "links.tooltip": {
      "type": "boolean",
      "description": "Show tooltip of link under cursor on CursorHold, neovim only",
      "default": false
    },
    "diagnostic.enable": {
      "type": "boolean",
      "description": "Set to false to disable diagnostic display",
      "default": true
    },
    "diagnostic.highlighLimit": {
      "type": "number",
      "description": "Limit count for highlighted diagnostics, too many diagnostic highlights could make vim stop responding",
      "default": 1000
    },
    "diagnostic.highlightPriority": {
      "type": "number",
      "description": "Priority for diagnostic highlights, works on vim8 and neovim >= 0.6.0",
      "default": 4096,
      "maximum": 4096,
      "minimum": 110
    },
    "diagnostic.autoRefresh": {
      "type": "boolean",
      "description": "Enable automatically refresh diagnostics, use diagnosticRefresh action when it's disabled.",
      "default": true
    },
    "diagnostic.level": {
      "type": "string",
      "description": "Used for filter diagnostics by diagnostic severity.",
      "default": "hint",
      "enum": ["hint", "information", "warning", "error"]
    },
    "diagnostic.locationlistLevel": {
      "type": ["string", "null"],
      "description": "Filter diagnostics in locationlist.",
      "default": null,
      "enum": ["hint", "information", "warning", "error"]
    },
    "diagnostic.signLevel": {
      "type": ["string", "null"],
      "description": "Filter diagnostics displayed in signcolumn.",
      "default": null,
      "enum": ["hint", "information", "warning", "error"]
    },
    "diagnostic.messageLevel": {
      "type": ["string", "null"],
      "description": "Filter diagnostic message in float window/popup.",
      "default": null,
      "enum": ["hint", "information", "warning", "error"]
    },
    "diagnostic.locationlistUpdate": {
      "type": "boolean",
      "description": "Update locationlist on diagnostics change, only works with locationlist opened by :CocDiagnostics command and first window of associated buffer.",
      "default": true
    },
    "diagnostic.checkCurrentLine": {
      "type": "boolean",
      "description": "When enabled, show all diagnostics of current line if there are none at the current position.",
      "default": false
    },
    "diagnostic.messageTarget": {
      "type": "string",
      "description": "Diagnostic message target.",
      "default": "float",
      "enum": ["echo", "float"]
    },
    "diagnostic.messageDelay": {
      "type": "number",
      "description": "How long to wait (in milliseconds) before displaying the diagnostic message with echo or float",
      "default": 200
    },
    "diagnostic.refreshOnInsertMode": {
      "type": "boolean",
      "description": "Enable diagnostic refresh on insert mode, default false.",
      "default": false
    },
    "diagnostic.displayByAle": {
      "type": "boolean",
      "description": "Use Ale for display diagnostics in vim, will disable coc for display diagnostics, restart required on change.",
      "default": false
    },
    "diagnostic.virtualText": {
      "type": "boolean",
      "description": "Use NeoVim virtual text to display diagnostics",
      "default": false
    },
    "diagnostic.virtualTextLevel": {
      "type": ["string", "null"],
      "description": "Filter diagnostic message in virtual text by level",
      "default": null,
      "enum": ["hint", "information", "warning", "error"]
    },
    "diagnostic.virtualTextWinCol": {
      "type": ["number", "null"],
      "description": "Window column number to align virtual text",
      "default": null
    },
    "diagnostic.virtualTextCurrentLineOnly": {
      "type": "boolean",
      "description": "Only show virtualText diagnostic on current cursor line",
      "default": true
    },
    "diagnostic.virtualTextPrefix": {
      "type": "string",
      "description": "The prefix added virtual text diagnostics",
      "default": " "
    },
    "diagnostic.virtualTextLines": {
      "type": "number",
      "description": "The number of non empty lines from a diagnostic to display",
      "default": 3
    },
    "diagnostic.virtualTextLineSeparator": {
      "type": "string",
      "description": "The text that will mark a line end from the diagnostic message",
      "default": " \\ "
    },
    "diagnostic.enableSign": {
      "type": "boolean",
      "default": true,
      "description": "Enable signs for diagnostics."
    },
    "diagnostic.enableHighlightLineNumber": {
      "type": "boolean",
      "default": true,
      "description": "Enable highlighting line numbers for diagnostics, only works with neovim and diagnostic.enableSign is true."
    },
    "diagnostic.enableMessage": {
      "type": "string",
      "default": "always",
      "description": "When to enable show messages of diagnostics.",
      "enum": ["always", "jump", "never"]
    },
    "diagnostic.signPriority": {
      "type": "number",
      "description": "Priority of diagnostic signs, default to 10",
      "default": 10
    },
    "diagnostic.errorSign": {
      "type": "string",
      "description": "Text of error sign",
      "default": ">>"
    },
    "diagnostic.warningSign": {
      "type": "string",
      "description": "Text of warning sign",
      "default": "⚠"
    },
    "diagnostic.infoSign": {
      "type": "string",
      "description": "Text of info sign",
      "default": ">>"
    },
    "diagnostic.hintSign": {
      "type": "string",
      "description": "Text of hint sign",
      "default": ">>"
    },
    "diagnostic.floatConfig": {
      "type": "object",
      "description": "Configure float window style of diagnostic message.",
      "allOf": [{ "$ref": "#/definitions/float" }],
      "additionalProperties": false,
      "properties": {
        "border": {},
        "rounded": {},
        "highlight": {},
        "borderhighlight": {},
        "title": {},
        "close": {},
        "maxHeight": {},
        "maxWidth": {},
        "winblend": {},
        "focusable": {},
        "shadow": {}
      }
    },
    "diagnostic.filetypeMap": {
      "type": "object",
      "description": "A map between buffer filetype and the filetype assigned to diagnostics. To syntax highlight diagnostics with their parent buffer type use `\"default\": \"bufferType\"`",
      "default": {}
    },
    "diagnostic.format": {
      "type": "string",
      "description": "Define the diagnostic format that shown in float window or echoed, available parts: source, code, severity, message",
      "default": "[%source%code] [%severity] %message"
    },
    "diagnostic.separateRelatedInformationAsDiagnostics": {
      "type": "boolean",
      "default": false,
      "description": "Separate related information as diagnostics."
    },
    "diagnostic.showUnused": {
      "type": "boolean",
      "default": true,
      "description": "Show diagnostics with unused tag, affects highlight, sign, virtual text, message"
    },
    "diagnostic.showDeprecated": {
      "type": "boolean",
      "default": true,
      "description": "Show diagnostics with deprecated tag."
    },
    "signature.enable": {
      "type": "boolean",
      "description": "Enable signature help when trigger character typed, require restart service on change.",
      "default": true
    },
    "signature.triggerSignatureWait": {
      "type": "integer",
      "default": 500,
      "minimum": 200,
      "maximum": 1000,
      "description": "Timeout for trigger signature help, in milliseconds."
    },
    "signature.target": {
      "type": "string",
      "description": "Target of signature help, use float when possible by default.",
      "default": "float",
      "enum": ["float", "echo"]
    },
    "signature.floatConfig": {
      "type": "object",
      "description": "Configure float window style of signature documents.",
      "allOf": [{ "$ref": "#/definitions/float" }],
      "additionalProperties": false,
      "properties": {
        "border": {},
        "rounded": {},
        "highlight": {},
        "borderhighlight": {},
        "title": {},
        "close": {},
        "maxHeight": {},
        "maxWidth": {},
        "winblend": {},
        "focusable": {},
        "shadow": {}
      }
    },
    "signature.preferShownAbove": {
      "type": "boolean",
      "description": "Show signature help float window above cursor when possible, require restart service on change.",
      "default": true
    },
    "signature.hideOnTextChange": {
      "type": "boolean",
      "description": "Hide signature float window when text changed on insert mode.",
      "default": false
    },
    "codeLens.enable": {
      "type": "boolean",
      "description": "Enable codeLens feature, require neovim with set virtual text feature.",
      "default": false
    },
    "codeLens.position": {
      "type": "string",
      "enum": ["top", "eol", "right_align"],
      "description": "Position of codeLens, requires nvim >= 0.6.0",
      "default": "top"
    },
    "codeLens.separator": {
      "type": "string",
      "description": "Separator text for codeLens in virtual text",
      "default": ""
    },
    "codeLens.subseparator": {
      "type": "string",
      "description": "Subseparator between codeLenses in virtual text",
      "default": " "
    },
    "refactor.openCommand": {
      "type": "string",
      "description": "Open command for refactor window.",
      "default": "vsplit"
    },
    "refactor.saveToFile": {
      "type": "boolean",
      "description": "Save changed buffer to file when write refactor buffer with ':noa wa' command.",
      "default": true
    },
    "refactor.beforeContext": {
      "type": "number",
      "default": 3,
      "description": "Print num lines of leading context before each match."
    },
    "refactor.afterContext": {
      "type": "number",
      "default": 3,
      "description": "Print num lines of trailing context after each match."
    },
    "refactor.showMenu": {
      "type": "string",
      "default": "<Tab>",
      "description": "Refactor buffer local mapping to bring up menu for this chunk."
    },
    "hover.target": {
      "type": "string",
      "description": "Target to show hover information, default is floating window when possible.",
      "enum": ["preview", "echo", "float"]
    },
    "hover.previewMaxHeight": {
      "type": "number",
      "default": 12,
      "description": "Max height of preview window for hover."
    },
    "hover.floatConfig": {
      "type": "object",
      "description": "Configure float window style of hover documents.",
      "allOf": [{ "$ref": "#/definitions/float" }],
      "additionalProperties": false,
      "properties": {
        "border": {},
        "rounded": {},
        "highlight": {},
        "borderhighlight": {},
        "title": {},
        "close": {},
        "maxHeight": {},
        "maxWidth": {},
        "winblend": {},
        "focusable": {},
        "shadow": {}
      }
    },
    "hover.autoHide": {
      "type": "boolean",
      "default": true,
      "description": "Automatically hide hover float window on CursorMove or InsertEnter."
    },
    "dialog.maxHeight": {
      "type": "number",
      "default": 30,
      "description": "Maximum height of dialog window."
    },
    "dialog.maxWidth": {
      "type": "number",
      "default": 80,
      "description": "Maximum width of dialog window."
    },
    "dialog.rounded": {
      "type": "boolean",
      "default": true,
      "description": "use rounded border for dialog window."
    },
    "dialog.confirmKey": {
      "type": "string",
      "default": "<cr>",
      "description": "Confirm key for confirm selection used by menu and picker, you can always use <esc> to cancel."
    },
    "dialog.pickerButtons": {
      "type": "boolean",
      "default": true,
      "description": "Show buttons for picker dialog window/popup."
    },
    "dialog.pickerButtonShortcut": {
      "type": "boolean",
      "default": true,
      "description": "Show shortcut in buttons of picker dialog window/popup, used when dialog.pickerButtons is true."
    },
    "dialog.floatHighlight": {
      "type": ["string", "null"],
      "default": null,
      "description": "Highlight group for dialog window/popup, default to 'CocFloating'"
    },
    "dialog.floatBorderHighlight": {
      "type": ["string", "null"],
      "default": null,
      "description": "Highlight group for border of dialog window/popup, default to 'CocFloating'"
    },
    "dialog.shortcutHighlight": {
      "type": "string",
      "default": "MoreMsg",
      "description": "Highlight group for shortcut character in menu dialog, default to 'MoreMsg'"
    },
    "notification.border": {
      "type": "boolean",
      "default": true,
      "description": "Enable rounded border for notification windows."
    },
    "notification.timeout": {
      "type": "integer",
      "default": 10000,
      "description": "Timeout for auto close notifications, in miniseconds."
    },
    "notification.marginRight": {
      "type": "integer",
      "default": 10,
      "description": "Margin right to the right of editor window."
    },
    "notification.focusable": {
      "type": "boolean",
      "default": true,
      "description": "Enable focus by user actions (wincmds, mouse events), neovim only."
    },
    "notification.maxWidth": {
      "type": "integer",
      "default": 60,
      "description": "Maximum content width of notification dialog."
    },
    "notification.maxHeight": {
      "type": "integer",
      "default": 10,
      "description": "Maximum content height of notification dialog."
    },
    "notification.disabledProgressSources": {
      "type": "array",
      "default": [],
      "description": "Soureces that should be disabled for message progress, use * to disable all message only progresses",
      "items": {
        "type": "string"
      }
    },
    "notification.minProgressWidth": {
      "type": "integer",
      "default": 30,
      "description": "Minimal with of progress notification."
    },
    "notification.highlightGroup": {
      "type": "string",
      "default": "CocFloating",
      "description": "Highlight group of notification dialog."
    },
    "notification.winblend": {
      "type": "integer",
      "default": 30,
      "minimum": 0,
      "maximum": 100,
      "description": "Winblend option of notification window, neovim only."
    },
    "workspace.openOutputCommand": {
      "type": "string",
      "default": "vs",
      "description": "Command used to open output channel."
    },
    "workspace.openResourceCommand": {
      "type": "string",
      "default": "tab drop",
      "description": "Command to open files that not loaded, load files as hidden buffers when empty."
    },
    "workspace.ignoredFiletypes": {
      "type": "array",
      "default": [],
      "description": "Filetypes that should be ignored for workspace folder resolve.",
      "items": {
        "type": "string"
      }
    },
    "workspace.bottomUpFiletypes": {
      "type": "array",
      "default": [],
      "description": "Filetypes that should have workspace folder should resolved from base directory of file, or [\"*\"] for any filetype.",
      "items": {
        "type": "string"
      }
    },
    "workspace.ignoredFolders": {
      "type": "array",
      "default": ["$HOME"],
      "description": "List of folders that should not be resolved as workspace folder, environment variables and minimatch patterns can be used.",
      "items": {
        "type": "string"
      }
    },
    "workspace.workspaceFolderCheckCwd": {
      "type": "boolean",
      "default": true,
      "description": "Whether the current working directory should be used first when checking patterns match for workspace folder."
    },
    "workspace.workspaceFolderFallbackCwd": {
      "type": "boolean",
      "default": true,
      "description": "Use current working directory as workspace folder when no root patterns resolved."
    },
    "list.indicator": {
      "type": "string",
      "default": ">",
      "description": "The character used as first character in prompt line"
    },
    "list.alignColumns": {
      "type": "boolean",
      "default": false,
      "description": "Whether to align lists in columns, default: `false`"
    },
    "list.menuAction": {
      "type": "boolean",
      "default": false,
      "description": "Use menu picker instead of confirm() for choose action."
    },
    "list.interactiveDebounceTime": {
      "type": "number",
      "default": 100,
      "description": "Debounce time for input change on interactive mode."
    },
    "list.height": {
      "type": "number",
      "default": 10,
      "description": "Height of split list window."
    },
    "list.statusLineSegments": {
      "type": ["array", "null"],
      "default": [
        "%#CocListMode#-- %{coc#list#status(\"mode\")} --%*",
        "%{coc#list#status(\"loading\")}",
        "%{coc#list#status(\"args\")}",
        "(%L/%{coc#list#status(\"total\")})",
        "%=",
        "%#CocListPath# %{coc#list#status(\"cwd\")} %l/%L%*"
      ],
      "items": {
        "types": "string"
      },
      "description": "An array of statusline segments that will be used to draw the status line for list windows."
    },
    "list.signOffset": {
      "type": "number",
      "default": 900,
      "description": "Sign offset of list, should be different from other plugins."
    },
    "list.selectedSignText": {
      "type": "string",
      "default": "*",
      "description": "Sign text for selected lines."
    },
    "list.extendedSearchMode": {
      "type": "boolean",
      "default": true,
      "description": "Enable extended search mode which allows multiple search patterns delimited by spaces."
    },
    "list.limitLines": {
      "type": ["number", "null"],
      "default": null,
      "description": "Limit lines for list buffer."
    },
    "list.maxPreviewHeight": {
      "type": "number",
      "default": 12,
      "description": "Max height for preview window of list."
    },
    "list.previewSplitRight": {
      "type": "boolean",
      "default": false,
      "description": "Use vsplit for preview window."
    },
    "list.previewHighlightGroup": {
      "type": "string",
      "default": "Search",
      "description": "Highlight group used for highlight the range in preview window."
    },
    "list.previewToplineStyle": {
      "type": "string",
      "default": "offset",
      "description": "Topline style for list previews",
      "enum": ["offset", "middle"]
    },
    "list.previewToplineOffset": {
      "type": "number",
      "default": 3,
      "description": "Topline offset for list previews"
    },
    "list.nextKeymap": {
      "type": "string",
      "default": "<C-j>",
      "description": "Key used for select next line on insert mode."
    },
    "list.previousKeymap": {
      "type": "string",
      "default": "<C-k>",
      "description": "Key used for select previous line on insert mode."
    },
    "list.normalMappings": {
      "type": "object",
      "default": {},
      "description": "Custom keymappings on normal mode."
    },
    "list.insertMappings": {
      "type": "object",
      "default": {},
      "description": "Custom keymappings on insert mode."
    },
    "list.source.diagnostics.includeCode": {
      "type": "boolean",
      "description": "Whether to show the diagnostic code in the list.",
      "default": true
    },
    "list.source.diagnostics.pathFormat": {
      "type": "string",
      "description": "Decide how the filepath is shown in the list.",
      "enum": ["full", "short", "filename", "hidden"],
      "default": "full"
    },
    "list.source.symbols.excludes": {
      "type": "array",
      "default": [],
      "description": "Patterns of minimatch for filepath to execlude from symbols list.",
      "items": {
        "type": "string"
      }
    },
    "list.source.outline.ctagsFilestypes": {
      "type": "array",
      "default": [],
      "description": "Filetypes that should use ctags for outline instead of language server.",
      "items": {
        "type": "string"
      }
    },
    "cursors.cancelKey": {
      "type": "string",
      "default": "<esc>",
      "description": "Key used for cancel cursors session."
    },
    "cursors.nextKey": {
      "type": "string",
      "default": "<C-n>",
      "description": "Key used for jump to next cursors position."
    },
    "cursors.previousKey": {
      "type": "string",
      "default": "<C-p>",
      "description": "Key used for jump to previous cursors position."
    },
    "cursors.wrapscan": {
      "type": "boolean",
      "default": true,
      "description": "Searches wrap around the first or last cursors range."
    },
    "semanticTokens.filetypes": {
      "type": "array",
      "description": "Filetypes that enable semanticTokens highlighting or [\"*\"] for any filetype",
      "default": [],
      "items": {
        "type": "string"
      }
    },
    "semanticTokens.highlightPriority": {
      "type": "number",
      "description": "Priority for semantic tokens highlight.",
      "default": 2048,
      "maximum": 4096
    },
    "semanticTokens.incrementTypes": {
      "type": "array",
      "description": "Semantic token types that should increase highlight when insert at the start and end position of token.",
      "default": ["variable", "string", "parameter"],
      "items": {
        "type": "string"
      }
    },
    "semanticTokens.combinedModifiers": {
      "type": "array",
      "description": "Semantic token modifiers that should have highlight combined with syntax highlights.",
      "default": ["deprecated"],
      "items": {
        "type": "string"
      }
    },
    "tree.closedIcon": {
      "type": "string",
      "default": "+",
      "description": "Closed icon of tree view."
    },
    "tree.openedIcon": {
      "type": "string",
      "default": "-",
      "description": "Opend icon of tree view."
    },
    "tree.key.toggleSelection": {
      "type": "string",
      "default": "<space>",
      "description": "Trigger key to select/unselect item"
    },
    "tree.key.toggle": {
      "type": "string",
      "default": "t",
      "description": "Trigger key to toggle expand state of tree node, does nothing with leaf node."
    },
    "tree.key.actions": {
      "type": "string",
      "default": "<tab>",
      "description": "Trigger key to invoke actions."
    },
    "tree.key.collapseAll": {
      "type": "string",
      "default": "M",
      "description": "Trigger key to collapse all tree node."
    },
    "tree.key.invoke": {
      "type": "string",
      "default": "<cr>",
      "description": "Trigger key to invoke default command of current node or selection."
    },
    "tree.key.close": {
      "type": "string",
      "default": "<esc>",
      "description": "Trigger key to dispose the tree and close tree window."
    },
    "tree.key.activeFilter": {
      "type": "string",
      "default": "f",
      "description": "Trigger key active filter."
    },
    "tree.key.selectNext": {
      "type": "string",
      "default": "<C-j>",
      "description": "Trigger key to select next item during filter."
    },
    "tree.key.selectPrevious": {
      "type": "string",
      "default": "<C-k>",
      "description": "Trigger key to select previous item during filter."
    },
    "outline.showLineNumber": {
      "type": "boolean",
      "default": true,
      "description": "Show line number of symbols."
    },
    "outline.detailAsDescription": {
      "type": "boolean",
      "default": true,
      "description": "Show detail as description aside with label, when false detail will be shown in tooltip on cursor hold."
    },
    "outline.splitCommand": {
      "type": "string",
      "default": "botright 30vs",
      "description": "Window split command used by outline."
    },
    "outline.followCursor": {
      "type": "boolean",
      "default": true,
      "description": "Reveal item in outline tree on cursor hold."
    },
    "outline.autoWidth": {
      "type": "boolean",
      "default": true,
      "description": "Automatically increase window width to avoid wrapped lines."
    },
    "outline.keepWindow": {
      "type": "boolean",
      "default": false,
      "description": "Jump back to original window after outline is shown."
    },
    "outline.sortBy": {
      "type": "string",
      "default": "category",
      "description": "Sort method for symbols.",
      "enum": ["position", "name", "category"]
    },
    "outline.switchSortKey": {
      "type": "string",
      "default": "<C-s>",
      "description": "The key used to switch sort method for symbols provider of current tree view."
    },
    "outline.expandLevel": {
      "type": "number",
      "default": 1,
      "description": "Expand level of tree nodes."
    },
    "outline.checkBufferSwitch": {
      "type": "boolean",
      "default": true,
      "description": "Recreate outline view after user changed to another buffer on current tab."
    },
    "outline.codeActionKinds": {
      "type": "array",
      "default": ["", "quickfix", "refactor"],
      "description": "Filter code actions in actions menu by kinds.",
      "items": {
        "type": "string",
        "enum": ["", "quickfix", "refactor", "source"]
      }
    },
    "callHierarchy.openCommand": {
      "type": "string",
      "default": "edit",
      "description": "Open command for callHierarchy tree view."
    },
    "callHierarchy.splitCommand": {
      "type": "string",
      "default": "botright 30vs",
      "description": "Window split command used by callHierarchy tree view."
    },
    "callHierarchy.enableTooltip": {
      "type": "boolean",
      "default": true,
      "description": "Enable tooltip to show relative filepath of call hierarchy."
    },
    "coc.preferences.enableLinkedEditing": {
      "type": "boolean",
      "default": false,
      "description": "Enable linked editing support."
    },
    "coc.preferences.enableMessageDialog": {
      "type": "boolean",
      "default": false,
      "description": "Enable messages shown in notification dialog."
    },
    "coc.preferences.maxFileSize": {
      "type": "string",
      "default": "10MB",
      "description": "Maximum file size in bytes that coc.nvim should handle, default '10MB'"
    },
    "coc.preferences.useQuickfixForLocations": {
      "type": "boolean",
      "description": "Use vim's quickfix list for jump locations,\n need restart on change.",
      "default": false
    },
    "coc.preferences.extensionUpdateCheck": {
      "type": "string",
      "default": "never",
      "description": "Interval for check extension update, could be daily, weekly, never",
      "enum": ["daily", "weekly", "never"]
    },
    "coc.preferences.snippetStatusText": {
      "type": "string",
      "default": "SNIP",
      "description": "Text shown in statusline to indicate snippet session is activated."
    },
    "coc.preferences.snippetHighlight": {
      "type": "boolean",
      "description": "Use highlight group 'CocSnippetVisual' to highlight placeholders with same index of current one.",
      "default": false
    },
    "coc.preferences.currentFunctionSymbolAutoUpdate": {
      "type": "boolean",
      "description": "Automatically update the value of b:coc_current_function on CursorHold event",
      "default": false
    },
    "coc.preferences.formatOnSaveFiletypes": {
      "type": "array",
      "default": [],
      "description": "Filetypes that should run format on save.",
      "items": {
        "type": "string"
      }
    },
    "coc.preferences.rootPatterns": {
      "type": "array",
      "default": [".git", ".hg", ".projections.json"],
      "description": "Root patterns to resolve workspaceFolder from parent folders of opened files, resolved from up to down.",
      "items": {
        "type": "string"
      }
    },
    "coc.preferences.watchmanPath": {
      "type": "string",
      "description": "executable path for https://facebook.github.io/watchman/, detected from $PATH by default",
      "default": null
    },
    "coc.preferences.jumpCommand": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "edit",
            "split",
            "vsplit",
            "tabe",
            "drop",
            "tab drop",
            "pedit"
          ]
        },
        { "type": "string", "minimum": 1 }
      ],
      "description": "Command used for location jump, like goto definition, goto references etc. Can be also a custom command that gives file as an argument.",
      "default": "edit"
    },
    "coc.preferences.messageLevel": {
      "type": "string",
      "description": "Message level for filter echoed messages, could be 'more', 'warning' and 'error'",
      "default": "more",
      "enum": ["more", "warning", "error"]
    },
    "coc.preferences.bracketEnterImprove": {
      "type": "boolean",
      "description": "Improve enter inside bracket `<> {} [] ()` by add new empty line below and place cursor to it. Works with `coc#on_enter()`",
      "default": true
    },
    "coc.preferences.formatOnType": {
      "type": "boolean",
      "description": "Set to true to enable formatting on typing",
      "default": false
    },
    "coc.preferences.formatOnTypeFiletypes": {
      "type": "array",
      "default": [],
      "description": "Filetypes that should run format on typing. Only take effect when `coc.preferences.formatOnType` set `true`",
      "items": {
        "type": "string"
      }
    },
    "coc.preferences.floatActions": {
      "type": "boolean",
      "description": "Set to false to disable float/popup support for actions menu, won't work on vim without float or popup window support.",
      "default": true
    },
    "coc.preferences.promptInput": {
      "type": "boolean",
      "description": "Use prompt buffer in float window for user input.",
      "default": true
    },
    "coc.preferences.enableMarkdown": {
      "type": "boolean",
      "description": "Tell the language server that markdown text format is supported, note that markdown text may not rendered as expected.",
      "default": true
    },
    "coc.preferences.excludeImageLinksInMarkdownDocument": {
      "type": "boolean",
      "description": "Exclude image links from markdown text in float window.",
      "default": true
    },
    "coc.preferences.silentAutoupdate": {
      "type": "boolean",
      "description": "Not open split window with update status when performing auto update.",
      "default": true
    },
    "coc.preferences.willSaveHandlerTimeout": {
      "type": "integer",
      "default": 500,
      "minimum": 200,
      "maximum": 5000,
      "description": "Will save handler timeout"
    },
    "coc.preferences.renameFillCurrent": {
      "type": "boolean",
      "default": true,
      "description": "Disable to stop Refactor-Rename float/popup window from populating with old name in the New Name field."
    },
    "coc.source.around.enable": {
      "type": "boolean",
      "default": true
    },
    "coc.source.around.shortcut": {
      "type": "string",
      "default": "A"
    },
    "coc.source.around.priority": {
      "type": "integer",
      "default": 1
    },
    "coc.source.around.disableSyntaxes": {
      "type": "array",
      "default": [],
      "items": {
        "type": "string"
      }
    },
    "coc.source.buffer.enable": {
      "type": "boolean",
      "default": true
    },
    "coc.source.buffer.shortcut": {
      "type": "string",
      "default": "B"
    },
    "coc.source.buffer.priority": {
      "type": "integer",
      "default": 1
    },
    "coc.source.buffer.ignoreGitignore": {
      "type": "boolean",
      "default": true,
      "description": "Ignore git ignored files for buffer words"
    },
    "coc.source.buffer.disableSyntaxes": {
      "type": "array",
      "default": [],
      "items": {
        "type": "string"
      }
    },
    "coc.source.file.enable": {
      "type": "boolean",
      "default": true
    },
    "coc.source.file.shortcut": {
      "type": "string",
      "default": "F"
    },
    "coc.source.file.priority": {
      "type": "integer",
      "default": 10
    },
    "coc.source.file.disableSyntaxes": {
      "type": "array",
      "default": [],
      "items": {
        "type": "string"
      }
    },
    "coc.source.file.triggerCharacters": {
      "type": "array",
      "default": ["/", "\\"],
      "items": {
        "type": "string"
      }
    },
    "coc.source.file.trimSameExts": {
      "type": "array",
      "default": [".ts", ".js"],
      "description": "Trim same extension on file completion",
      "items": {
        "type": "string"
      }
    },
    "coc.source.file.ignoreHidden": {
      "type": "boolean",
      "default": true,
      "description": "Ignore completion for hidden files"
    },
    "coc.source.file.ignorePatterns": {
      "type": "array",
      "default": [],
      "description": "Ignore patterns of matcher",
      "items": {
        "type": "string"
      }
    },
    "languageserver": {
      "type": "object",
      "default": {},
      "description": "Dictionary of languageservers, key is used as id of languageserver.",
      "patternProperties": {
        "^[_a-zA-Z]+$": {
          "oneOf": [
            {
              "$ref": "#/definitions/languageServerModule"
            },
            {
              "$ref": "#/definitions/languageServerCommand"
            },
            {
              "$ref": "#/definitions/languageServerSocket"
            }
          ]
        }
      }
    }
  }
}
