{
    "type": "object",
    "properties": {
        "initializeParams": {
            "$ref": "#/definitions/InitializeParams"
        },
        "initializeResult": {
            "$ref": "#/definitions/InitializeResult"
        },
        "intializeError": {
            "$ref": "#/definitions/InitializeError"
        },
        "clientCapabilities": {
            "$ref": "#/definitions/ClientCapabilities"
        },
        "serverCapabilities": {
            "$ref": "#/definitions/ServerCapabilities"
        },
        "textDocumentSyncKind": {
            "$ref": "#/definitions/TextDocumentSyncKind"
        },
        "logMessageParams": {
            "$ref": "#/definitions/LogMessageParams"
        },
        "messageType": {
            "$ref": "#/definitions/MessageType"
        },
        "showMessageParams": {
            "$ref": "#/definitions/ShowMessageParams"
        },
        "showMessageRequestParams": {
            "$ref": "#/definitions/ShowMessageRequestParams"
        },
        "didChangeConfigurationParams": {
            "$ref": "#/definitions/DidChangeConfigurationParams"
        },
        "textDocumentPositionParams": {
            "$ref": "#/definitions/TextDocumentPositionParams"
        },
        "didOpenTextDocumentParams": {
            "$ref": "#/definitions/DidOpenTextDocumentParams"
        },
        "didChangeTextDocumentParams": {
            "$ref": "#/definitions/DidChangeTextDocumentParams"
        },
        "didCloseTextDocumentParams": {
            "$ref": "#/definitions/DidCloseTextDocumentParams"
        },
        "didSaveTextDocumentParams": {
            "$ref": "#/definitions/DidSaveTextDocumentParams"
        },
        "didChangeWatchedFilesParams": {
            "$ref": "#/definitions/DidChangeWatchedFilesParams"
        },
        "fileEvent": {
            "$ref": "#/definitions/FileEvent"
        },
        "fileChangeType": {
            "$ref": "#/definitions/FileChangeType"
        },
        "publishDiagnosticsParams": {
            "$ref": "#/definitions/PublishDiagnosticsParams"
        },
        "workspaceSymbolParams": {
            "$ref": "#/definitions/WorkspaceSymbolParams"
        },
        "codeActionParams": {
            "$ref": "#/definitions/CodeActionParams"
        },
        "documentFormattingParams": {
            "$ref": "#/definitions/DocumentFormattingParams"
        },
        "documentRangeFormattingParams": {
            "$ref": "#/definitions/DocumentRangeFormattingParams"
        },
        "documentOnTypeFormattingParams": {
            "$ref": "#/definitions/DocumentOnTypeFormattingParams"
        },
        "renameParams": {
            "$ref": "#/definitions/RenameParams"
        },
        "documentSymbolParams": {
            "$ref": "#/definitions/DocumentSymbolParams"
        },
        "referenceParams": {
            "$ref": "#/definitions/ReferenceParams"
        },
        "codeLensParams": {
            "$ref": "#/definitions/CodeLensParams"
        }
    },
    "additionalProperties": false,
    "required": [
        "initializeParams",
        "initializeResult",
        "intializeError",
        "clientCapabilities",
        "serverCapabilities",
        "textDocumentSyncKind",
        "logMessageParams",
        "messageType",
        "showMessageParams",
        "showMessageRequestParams",
        "didChangeConfigurationParams",
        "textDocumentPositionParams",
        "didOpenTextDocumentParams",
        "didChangeTextDocumentParams",
        "didCloseTextDocumentParams",
        "didSaveTextDocumentParams",
        "didChangeWatchedFilesParams",
        "fileEvent",
        "fileChangeType",
        "publishDiagnosticsParams",
        "workspaceSymbolParams",
        "codeActionParams",
        "documentFormattingParams",
        "documentRangeFormattingParams",
        "documentOnTypeFormattingParams",
        "renameParams",
        "documentSymbolParams",
        "referenceParams",
        "codeLensParams"
    ],
    "definitions": {
        "InitializeParams": {
            "type": "object",
            "properties": {
                "processId": {
                    "description": "The process Id of the parent process that started\n\nthe server.",
                    "type": "number"
                },
                "rootPath": {
                    "description": "The rootPath of the workspace. Is null\n\nif no folder is open.",
                    "type": "string"
                },
                "capabilities": {
                    "$ref": "#/definitions/ClientCapabilities",
                    "description": "The capabilities provided by the client (editor)"
                },
                "initializationOptions": {
                    "description": "User provided initialization options."
                },
                "trace": {
                    "description": "The initial trace setting. If omitted trace is disabled ('off').",
                    "type": "string"
                }
            },
            "additionalProperties": false,
            "required": [
                "processId",
                "rootPath",
                "capabilities"
            ]
        },
        "ClientCapabilities": {
            "description": "Defines the capabilities provided by the client.",
            "type": "object",
            "properties": {},
            "additionalProperties": false
        },
        "InitializeResult": {
            "type": "object",
            "properties": {
                "capabilities": {
                    "$ref": "#/definitions/ServerCapabilities",
                    "description": "The capabilities the language server provides."
                }
            },
            "additionalProperties": false,
            "required": [
                "capabilities"
            ]
        },
        "ServerCapabilities": {
            "description": "Defines the capabilities provided by a language\n\nserver.",
            "type": "object",
            "properties": {
                "textDocumentSync": {
                    "description": "Defines how text documents are synced.",
                    "type": "number"
                },
                "hoverProvider": {
                    "description": "The server provides hover support.",
                    "type": "boolean"
                },
                "completionProvider": {
                    "$ref": "#/definitions/CompletionOptions",
                    "description": "The server provides completion support."
                },
                "signatureHelpProvider": {
                    "$ref": "#/definitions/SignatureHelpOptions",
                    "description": "The server provides signature help support."
                },
                "definitionProvider": {
                    "description": "The server provides goto definition support.",
                    "type": "boolean"
                },
                "referencesProvider": {
                    "description": "The server provides find references support.",
                    "type": "boolean"
                },
                "documentHighlightProvider": {
                    "description": "The server provides document highlight support.",
                    "type": "boolean"
                },
                "documentSymbolProvider": {
                    "description": "The server provides document symbol support.",
                    "type": "boolean"
                },
                "workspaceSymbolProvider": {
                    "description": "The server provides workspace symbol support.",
                    "type": "boolean"
                },
                "codeActionProvider": {
                    "description": "The server provides code actions.",
                    "type": "boolean"
                },
                "codeLensProvider": {
                    "$ref": "#/definitions/CodeLensOptions",
                    "description": "The server provides code lens."
                },
                "documentFormattingProvider": {
                    "description": "The server provides document formatting.",
                    "type": "boolean"
                },
                "documentRangeFormattingProvider": {
                    "description": "The server provides document range formatting.",
                    "type": "boolean"
                },
                "documentOnTypeFormattingProvider": {
                    "$ref": "#/definitions/DocumentOnTypeFormattingOptions",
                    "description": "The server provides document formatting on typing."
                },
                "renameProvider": {
                    "description": "The server provides rename support.",
                    "type": "boolean"
                },
                "documentLinkProvider": {
                    "$ref": "#/definitions/DocumentLinkOptions",
                    "description": "The server provides document link support."
                }
            },
            "additionalProperties": false
        },
        "CompletionOptions": {
            "description": "Completion options.",
            "type": "object",
            "properties": {
                "resolveProvider": {
                    "description": "The server provides support to resolve additional\n\ninformation for a completion item.",
                    "type": "boolean"
                },
                "triggerCharacters": {
                    "description": "The characters that trigger completion automatically.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "additionalProperties": false
        },
        "SignatureHelpOptions": {
            "description": "Signature help options.",
            "type": "object",
            "properties": {
                "triggerCharacters": {
                    "description": "The characters that trigger signature help\n\nautomatically.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "additionalProperties": false
        },
        "CodeLensOptions": {
            "description": "Code Lens options.",
            "type": "object",
            "properties": {
                "resolveProvider": {
                    "description": "Code lens has a resolve provider as well.",
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "DocumentOnTypeFormattingOptions": {
            "description": "Format document on type options",
            "type": "object",
            "properties": {
                "firstTriggerCharacter": {
                    "description": "A character on which formatting should be triggered, like `}`.",
                    "type": "string"
                },
                "moreTriggerCharacter": {
                    "description": "More trigger characters.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "additionalProperties": false,
            "required": [
                "firstTriggerCharacter"
            ]
        },
        "DocumentLinkOptions": {
            "description": "Document link options",
            "type": "object",
            "properties": {
                "resolveProvider": {
                    "description": "Document links have a resolve provider as well.",
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "InitializeError": {
            "type": "object",
            "properties": {
                "retry": {
                    "description": "Indicates whether the client should retry to send the\n\ninitilize request after showing the message provided\n\nin the {",
                    "type": "boolean"
                }
            },
            "additionalProperties": false,
            "required": [
                "retry"
            ]
        },
        "TextDocumentSyncKind": {
            "type": "string"
        },
        "LogMessageParams": {
            "type": "object",
            "properties": {
                "type": {
                    "description": "The message type. See {",
                    "type": "number"
                },
                "message": {
                    "description": "The actual message",
                    "type": "string"
                }
            },
            "additionalProperties": false,
            "required": [
                "type",
                "message"
            ]
        },
        "MessageType": {
            "type": "string"
        },
        "ShowMessageParams": {
            "type": "object",
            "properties": {
                "type": {
                    "description": "The message type. See {",
                    "type": "number"
                },
                "message": {
                    "description": "The actual message",
                    "type": "string"
                }
            },
            "additionalProperties": false,
            "required": [
                "type",
                "message"
            ]
        },
        "ShowMessageRequestParams": {
            "type": "object",
            "properties": {
                "type": {
                    "description": "The message type. See {",
                    "type": "number"
                },
                "message": {
                    "description": "The actual message",
                    "type": "string"
                },
                "actions": {
                    "description": "The message action items to present.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/MessageActionItem"
                    }
                }
            },
            "additionalProperties": false,
            "required": [
                "type",
                "message"
            ]
        },
        "MessageActionItem": {
            "type": "object",
            "properties": {
                "title": {
                    "description": "A short title like 'Retry', 'Open Log' etc.",
                    "type": "string"
                }
            },
            "additionalProperties": false,
            "required": [
                "title"
            ]
        },
        "DidChangeConfigurationParams": {
            "type": "object",
            "properties": {
                "settings": {
                    "description": "The actual changed settings"
                }
            },
            "additionalProperties": false,
            "required": [
                "settings"
            ]
        },
        "TextDocumentPositionParams": {
            "type": "object",
            "properties": {
                "textDocument": {
                    "$ref": "#/definitions/TextDocumentIdentifier",
                    "description": "The text document."
                },
                "position": {
                    "$ref": "#/definitions/Position",
                    "description": "The position inside the text document."
                }
            },
            "additionalProperties": false,
            "required": [
                "textDocument",
                "position"
            ]
        },
        "TextDocumentIdentifier": {
            "type": "object",
            "properties": {
                "uri": {
                    "description": "The text document's uri.",
                    "type": "string"
                }
            },
            "additionalProperties": false,
            "required": [
                "uri"
            ]
        },
        "Position": {
            "type": "object",
            "properties": {
                "line": {
                    "description": "Line position in a document (zero-based).",
                    "type": "number"
                },
                "character": {
                    "description": "Character offset on a line in a document (zero-based).",
                    "type": "number"
                }
            },
            "additionalProperties": false,
            "required": [
                "line",
                "character"
            ]
        },
        "DidOpenTextDocumentParams": {
            "type": "object",
            "properties": {
                "textDocument": {
                    "$ref": "#/definitions/TextDocumentItem",
                    "description": "The document that was opened."
                }
            },
            "additionalProperties": false,
            "required": [
                "textDocument"
            ]
        },
        "TextDocumentItem": {
            "type": "object",
            "properties": {
                "uri": {
                    "description": "The text document's uri.",
                    "type": "string"
                },
                "languageId": {
                    "description": "The text document's language identifier",
                    "type": "string"
                },
                "version": {
                    "description": "The version number of this document (it will strictly increase after each\n\nchange, including undo/redo).",
                    "type": "number"
                },
                "text": {
                    "description": "The content of the opened text document.",
                    "type": "string"
                }
            },
            "additionalProperties": false,
            "required": [
                "uri",
                "languageId",
                "version",
                "text"
            ]
        },
        "DidChangeTextDocumentParams": {
            "type": "object",
            "properties": {
                "textDocument": {
                    "$ref": "#/definitions/VersionedTextDocumentIdentifier",
                    "description": "The document that did change. The version number points\n\nto the version after all provided content changes have\n\nbeen applied."
                },
                "contentChanges": {
                    "description": "The actual content changes.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/TextDocumentContentChangeEvent",
                        "description": "An event describing a change to a text document. If range and rangeLength are omitted\n\nthe new text is considered to be the full content of the document."
                    }
                }
            },
            "additionalProperties": false,
            "required": [
                "textDocument",
                "contentChanges"
            ]
        },
        "VersionedTextDocumentIdentifier": {
            "type": "object",
            "properties": {
                "version": {
                    "description": "The version number of this document.",
                    "type": "number"
                },
                "uri": {
                    "description": "The text document's uri.",
                    "type": "string"
                }
            },
            "additionalProperties": false,
            "required": [
                "version",
                "uri"
            ]
        },
        "TextDocumentContentChangeEvent": {
            "type": "object",
            "properties": {
                "range": {
                    "$ref": "#/definitions/Range",
                    "description": "The range of the document that changed."
                },
                "rangeLength": {
                    "description": "The length of the range that got replaced.",
                    "type": "number"
                },
                "text": {
                    "description": "The new text of the document.",
                    "type": "string"
                }
            },
            "additionalProperties": false,
            "required": [
                "text"
            ]
        },
        "Range": {
            "description": "A range in a text document expressed as (zero-based) start and end positions.\n\nThe Range namespace provides helper functions to work with\n\n[Range](#Range) literals.",
            "type": "object",
            "properties": {
                "start": {
                    "$ref": "#/definitions/Position",
                    "description": "The range's start position"
                },
                "end": {
                    "$ref": "#/definitions/Position",
                    "description": "The range's end position"
                }
            },
            "additionalProperties": false,
            "required": [
                "start",
                "end"
            ]
        },
        "DidCloseTextDocumentParams": {
            "type": "object",
            "properties": {
                "textDocument": {
                    "$ref": "#/definitions/TextDocumentIdentifier",
                    "description": "The document that was closed."
                }
            },
            "additionalProperties": false,
            "required": [
                "textDocument"
            ]
        },
        "DidSaveTextDocumentParams": {
            "type": "object",
            "properties": {
                "textDocument": {
                    "$ref": "#/definitions/TextDocumentIdentifier",
                    "description": "The document that was closed."
                }
            },
            "additionalProperties": false,
            "required": [
                "textDocument"
            ]
        },
        "DidChangeWatchedFilesParams": {
            "type": "object",
            "properties": {
                "changes": {
                    "description": "The actual file events.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/FileEvent",
                        "description": "An event describing a file change."
                    }
                }
            },
            "additionalProperties": false,
            "required": [
                "changes"
            ]
        },
        "FileEvent": {
            "type": "object",
            "properties": {
                "uri": {
                    "description": "The file's uri.",
                    "type": "string"
                },
                "type": {
                    "description": "The change type.",
                    "type": "number"
                }
            },
            "additionalProperties": false,
            "required": [
                "uri",
                "type"
            ]
        },
        "FileChangeType": {
            "type": "string"
        },
        "PublishDiagnosticsParams": {
            "type": "object",
            "properties": {
                "uri": {
                    "description": "The URI for which diagnostic information is reported.",
                    "type": "string"
                },
                "diagnostics": {
                    "description": "An array of diagnostic information items.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Diagnostic",
                        "description": "Represents a diagnostic, such as a compiler error or warning. Diagnostic objects\n\nare only valid in the scope of a resource.\n\nThe Diagnostic namespace provides helper functions to work with\n\n[Diagnostic](#Diagnostic) literals."
                    }
                }
            },
            "additionalProperties": false,
            "required": [
                "uri",
                "diagnostics"
            ]
        },
        "Diagnostic": {
            "type": "object",
            "properties": {
                "range": {
                    "$ref": "#/definitions/Range",
                    "description": "The range at which the message applies"
                },
                "severity": {
                    "description": "The diagnostic's severity. Can be omitted. If omitted it is up to the\n\nclient to interpret diagnostics as error, warning, info or hint.",
                    "type": "number"
                },
                "code": {
                    "description": "The diagnostic's code. Can be omitted.",
                    "oneOf": [
                        {
                            "type": "number"
                        },
                        {
                            "type": "string"
                        }
                    ]
                },
                "source": {
                    "description": "A human-readable string describing the source of this\n\ndiagnostic, e.g. 'typescript' or 'super lint'.",
                    "type": "string"
                },
                "message": {
                    "description": "The diagnostic's message.",
                    "type": "string"
                }
            },
            "additionalProperties": false,
            "required": [
                "range",
                "message"
            ]
        },
        "WorkspaceSymbolParams": {
            "type": "object",
            "properties": {
                "query": {
                    "description": "A non-empty query string",
                    "type": "string"
                }
            },
            "additionalProperties": false,
            "required": [
                "query"
            ]
        },
        "CodeActionParams": {
            "type": "object",
            "properties": {
                "textDocument": {
                    "$ref": "#/definitions/TextDocumentIdentifier",
                    "description": "The document in which the command was invoked."
                },
                "range": {
                    "$ref": "#/definitions/Range",
                    "description": "The range for which the command was invoked."
                },
                "context": {
                    "$ref": "#/definitions/CodeActionContext",
                    "description": "Context carrying additional information."
                }
            },
            "additionalProperties": false,
            "required": [
                "textDocument",
                "range",
                "context"
            ]
        },
        "CodeActionContext": {
            "type": "object",
            "properties": {
                "diagnostics": {
                    "description": "An array of diagnostics.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Diagnostic",
                        "description": "Represents a diagnostic, such as a compiler error or warning. Diagnostic objects\n\nare only valid in the scope of a resource.\n\nThe Diagnostic namespace provides helper functions to work with\n\n[Diagnostic](#Diagnostic) literals."
                    }
                }
            },
            "additionalProperties": false,
            "required": [
                "diagnostics"
            ]
        },
        "DocumentFormattingParams": {
            "type": "object",
            "properties": {
                "textDocument": {
                    "$ref": "#/definitions/TextDocumentIdentifier",
                    "description": "The document to format."
                },
                "options": {
                    "$ref": "#/definitions/FormattingOptions",
                    "description": "The format options"
                }
            },
            "additionalProperties": false,
            "required": [
                "textDocument",
                "options"
            ]
        },
        "FormattingOptions": {
            "type": "object",
            "properties": {
                "tabSize": {
                    "description": "Size of a tab in spaces.",
                    "type": "number"
                },
                "insertSpaces": {
                    "description": "Prefer spaces over tabs.",
                    "type": "boolean"
                }
            },
            "additionalProperties": false,
            "required": [
                "tabSize",
                "insertSpaces"
            ]
        },
        "DocumentRangeFormattingParams": {
            "type": "object",
            "properties": {
                "textDocument": {
                    "$ref": "#/definitions/TextDocumentIdentifier",
                    "description": "The document to format."
                },
                "range": {
                    "$ref": "#/definitions/Range",
                    "description": "The range to format"
                },
                "options": {
                    "$ref": "#/definitions/FormattingOptions",
                    "description": "The format options"
                }
            },
            "additionalProperties": false,
            "required": [
                "textDocument",
                "range",
                "options"
            ]
        },
        "DocumentOnTypeFormattingParams": {
            "type": "object",
            "properties": {
                "textDocument": {
                    "$ref": "#/definitions/TextDocumentIdentifier",
                    "description": "The document to format."
                },
                "position": {
                    "$ref": "#/definitions/Position",
                    "description": "The position at which this request was send."
                },
                "ch": {
                    "description": "The character that has been typed.",
                    "type": "string"
                },
                "options": {
                    "$ref": "#/definitions/FormattingOptions",
                    "description": "The format options."
                }
            },
            "additionalProperties": false,
            "required": [
                "textDocument",
                "position",
                "ch",
                "options"
            ]
        },
        "RenameParams": {
            "type": "object",
            "properties": {
                "textDocument": {
                    "$ref": "#/definitions/TextDocumentIdentifier",
                    "description": "The document to format."
                },
                "position": {
                    "$ref": "#/definitions/Position",
                    "description": "The position at which this request was send."
                },
                "newName": {
                    "description": "The new name of the symbol. If the given name is not valid the\n\nrequest must return a [ResponseError](#ResponseError) with an\n\nappropriate message set.",
                    "type": "string"
                }
            },
            "additionalProperties": false,
            "required": [
                "textDocument",
                "position",
                "newName"
            ]
        },
        "DocumentSymbolParams": {
            "type": "object",
            "properties": {
                "textDocument": {
                    "$ref": "#/definitions/TextDocumentIdentifier",
                    "description": "The text document."
                }
            },
            "additionalProperties": false,
            "required": [
                "textDocument"
            ]
        },
        "ReferenceParams": {
            "type": "object",
            "properties": {
                "context": {
                    "$ref": "#/definitions/ReferenceContext"
                },
                "textDocument": {
                    "$ref": "#/definitions/TextDocumentIdentifier",
                    "description": "The text document."
                },
                "position": {
                    "$ref": "#/definitions/Position",
                    "description": "The position inside the text document."
                }
            },
            "additionalProperties": false,
            "required": [
                "context",
                "textDocument",
                "position"
            ]
        },
        "ReferenceContext": {
            "type": "object",
            "properties": {
                "includeDeclaration": {
                    "description": "Include the declaration of the current symbol.",
                    "type": "boolean"
                }
            },
            "additionalProperties": false,
            "required": [
                "includeDeclaration"
            ]
        },
        "CodeLensParams": {
            "type": "object",
            "properties": {
                "textDocument": {
                    "$ref": "#/definitions/TextDocumentIdentifier",
                    "description": "The document to request code lens for."
                }
            },
            "additionalProperties": false,
            "required": [
                "textDocument"
            ]
        }
    },
    "$schema": "http://json-schema.org/draft-04/schema#"
}