diff --git a/internal/lsp/cmd/cmd.go b/internal/lsp/cmd/cmd.go
index 9ef778b..eff20ab 100644
--- a/internal/lsp/cmd/cmd.go
+++ b/internal/lsp/cmd/cmd.go
@@ -196,7 +196,9 @@
 	params := &protocol.ParamInitia{}
 	params.RootURI = string(span.FileURI(c.Client.app.wd))
 	params.Capabilities.Workspace.Configuration = true
-	params.Capabilities.TextDocument.Hover.ContentFormat = []protocol.MarkupKind{protocol.PlainText}
+	params.Capabilities.TextDocument.Hover = &protocol.HoverClientCapabilities{
+		ContentFormat: []protocol.MarkupKind{protocol.PlainText},
+	}
 	if _, err := c.Server.Initialize(ctx, params); err != nil {
 		return err
 	}
diff --git a/internal/lsp/general.go b/internal/lsp/general.go
index b10e603..1ecd193 100644
--- a/internal/lsp/general.go
+++ b/internal/lsp/general.go
@@ -53,8 +53,8 @@
 	}
 
 	var codeActionProvider interface{}
-	if params.Capabilities.TextDocument.CodeAction.CodeActionLiteralSupport != nil &&
-		len(params.Capabilities.TextDocument.CodeAction.CodeActionLiteralSupport.CodeActionKind.ValueSet) > 0 {
+	if ca := params.Capabilities.TextDocument.CodeAction; ca != nil && ca.CodeActionLiteralSupport != nil &&
+		len(ca.CodeActionLiteralSupport.CodeActionKind.ValueSet) > 0 {
 		// If the client has specified CodeActionLiteralSupport,
 		// send the code actions we support.
 		//
@@ -66,9 +66,9 @@
 		codeActionProvider = true
 	}
 	var renameOpts interface{}
-	if params.Capabilities.TextDocument.Rename.PrepareSupport {
+	if r := params.Capabilities.TextDocument.Rename; r != nil {
 		renameOpts = &protocol.RenameOptions{
-			PrepareProvider: true,
+			PrepareProvider: r.PrepareSupport,
 		}
 	} else {
 		renameOpts = true
diff --git a/internal/lsp/protocol/tsprotocol.go b/internal/lsp/protocol/tsprotocol.go
index 2d90152..4ac41ba 100644
--- a/internal/lsp/protocol/tsprotocol.go
+++ b/internal/lsp/protocol/tsprotocol.go
@@ -1,7 +1,7 @@
 // Package protocol contains data types and code for LSP jsonrpcs
 // generated automatically from vscode-languageserver-node
-// commit: fda16d6b63ba0fbdbd21d437ea810685528a0018
-// last fetched Fri Sep 06 2019 18:16:51 GMT-0400 (Eastern Daylight Time)
+// commit: 36ac51f057215e6e2e0408384e07ecf564a938da
+// last fetched Tue Sep 24 2019 17:44:28 GMT-0400 (Eastern Daylight Time)
 package protocol
 
 // Code generated (see typescript/README.md) DO NOT EDIT.
@@ -38,15 +38,6 @@
 	StaticRegistrationOptions
 }
 
-// ImplementationServerCapabilities is
-type ImplementationServerCapabilities struct {
-
-	/*ImplementationProvider defined:
-	 * The server provides Goto Implementation support.
-	 */
-	ImplementationProvider bool `json:"implementationProvider,omitempty"` // boolean | ImplementationOptions | ImplementationRegistrationOptions
-}
-
 // ImplementationParams is
 type ImplementationParams struct {
 	TextDocumentPositionParams
@@ -86,15 +77,6 @@
 	StaticRegistrationOptions
 }
 
-// TypeDefinitionServerCapabilities is
-type TypeDefinitionServerCapabilities struct {
-
-	/*TypeDefinitionProvider defined:
-	 * The server provides Goto Type Definition support.
-	 */
-	TypeDefinitionProvider bool `json:"typeDefinitionProvider,omitempty"` // boolean | TypeDefinitionOptions | TypeDefinitionRegistrationOptions
-}
-
 // TypeDefinitionParams is
 type TypeDefinitionParams struct {
 	TextDocumentPositionParams
@@ -236,47 +218,32 @@
 	Items []ConfigurationItem `json:"items"`
 }
 
-// ColorClientCapabilities is
-type ColorClientCapabilities struct {
+// DocumentColorClientCapabilities is
+type DocumentColorClientCapabilities struct {
 
-	/*TextDocument defined:
-	 * The text document client capabilities
+	/*DynamicRegistration defined:
+	 * Whether implementation supports dynamic registration. If this is set to `true`
+	 * the client supports the new `DocumentColorRegistrationOptions` return value
+	 * for the corresponding server capability as well.
 	 */
-	TextDocument *struct {
-
-		/*ColorProvider defined:
-		 * Capabilities specific to the colorProvider
-		 */
-		ColorProvider *struct {
-
-			/*DynamicRegistration defined:
-			 * Whether implementation supports dynamic registration. If this is set to `true`
-			 * the client supports the new `(ColorRegistrationOptions & StaticRegistrationOptions)`
-			 * return value for the corresponding server capability as well.
-			 */
-			DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-		} `json:"colorProvider,omitempty"`
-	} `json:"textDocument,omitempty"`
+	DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
 }
 
-// ColorOptions is
-type ColorOptions struct {
+// DocumentColorOptions is
+type DocumentColorOptions struct {
+
+	/*ResolveProvider defined:
+	 * Code lens has a resolve provider as well.
+	 */
+	ResolveProvider bool `json:"resolveProvider,omitempty"`
 	WorkDoneProgressOptions
 }
 
-// ColorRegistrationOptions is
-type ColorRegistrationOptions struct {
+// DocumentColorRegistrationOptions is
+type DocumentColorRegistrationOptions struct {
 	TextDocumentRegistrationOptions
-	ColorOptions
-}
-
-// ColorServerCapabilities is
-type ColorServerCapabilities struct {
-
-	/*ColorProvider defined:
-	 * The server provides color provider support.
-	 */
-	ColorProvider bool `json:"colorProvider,omitempty"` // boolean | ColorOptions | (ColorRegistrationOptions & StaticRegistrationOptions)
+	StaticRegistrationOptions
+	DocumentColorOptions
 }
 
 /*DocumentColorParams defined:
@@ -318,36 +285,24 @@
 // FoldingRangeClientCapabilities is
 type FoldingRangeClientCapabilities struct {
 
-	/*TextDocument defined:
-	 * The text document client capabilities
+	/*DynamicRegistration defined:
+	 * Whether implementation supports dynamic registration for folding range providers. If this is set to `true`
+	 * the client supports the new `FoldingRangeRegistrationOptions` return value for the corresponding server
+	 * capability as well.
 	 */
-	TextDocument *struct {
+	DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
 
-		/*FoldingRange defined:
-		 * Capabilities specific to `textDocument/foldingRange` requests
-		 */
-		FoldingRange *struct {
+	/*RangeLimit defined:
+	 * The maximum number of folding ranges that the client prefers to receive per document. The value serves as a
+	 * hint, servers are free to follow the limit.
+	 */
+	RangeLimit float64 `json:"rangeLimit,omitempty"`
 
-			/*DynamicRegistration defined:
-			 * Whether implementation supports dynamic registration for folding range providers. If this is set to `true`
-			 * the client supports the new `(FoldingRangeProviderOptions & TextDocumentRegistrationOptions & StaticRegistrationOptions)`
-			 * return value for the corresponding server capability as well.
-			 */
-			DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-
-			/*RangeLimit defined:
-			 * The maximum number of folding ranges that the client prefers to receive per document. The value serves as a
-			 * hint, servers are free to follow the limit.
-			 */
-			RangeLimit float64 `json:"rangeLimit,omitempty"`
-
-			/*LineFoldingOnly defined:
-			 * If set, the client signals that it only supports folding complete lines. If set, client will
-			 * ignore specified `startCharacter` and `endCharacter` properties in a FoldingRange.
-			 */
-			LineFoldingOnly bool `json:"lineFoldingOnly,omitempty"`
-		} `json:"foldingRange,omitempty"`
-	} `json:"textDocument,omitempty"`
+	/*LineFoldingOnly defined:
+	 * If set, the client signals that it only supports folding complete lines. If set, client will
+	 * ignore specified `startCharacter` and `endCharacter` properties in a FoldingRange.
+	 */
+	LineFoldingOnly bool `json:"lineFoldingOnly,omitempty"`
 }
 
 // FoldingRangeOptions is
@@ -359,15 +314,7 @@
 type FoldingRangeRegistrationOptions struct {
 	TextDocumentRegistrationOptions
 	FoldingRangeOptions
-}
-
-// FoldingRangeServerCapabilities is
-type FoldingRangeServerCapabilities struct {
-
-	/*FoldingRangeProvider defined:
-	 * The server provides folding provider support.
-	 */
-	FoldingRangeProvider bool `json:"foldingRangeProvider,omitempty"` // boolean | FoldingRangeOptions | (FoldingRangeRegistrationOptions & StaticRegistrationOptions)
+	StaticRegistrationOptions
 }
 
 /*FoldingRange defined:
@@ -446,15 +393,6 @@
 	StaticRegistrationOptions
 }
 
-// DeclarationServerCapabilities is
-type DeclarationServerCapabilities struct {
-
-	/*DeclarationProvider defined:
-	 * The server provides Goto Type Definition support.
-	 */
-	DeclarationProvider bool `json:"declarationProvider,omitempty"` // boolean | DeclarationOptions | DeclarationRegistrationOptions
-}
-
 // DeclarationParams is
 type DeclarationParams struct {
 	TextDocumentPositionParams
@@ -465,24 +403,12 @@
 // SelectionRangeClientCapabilities is
 type SelectionRangeClientCapabilities struct {
 
-	/*TextDocument defined:
-	 * The text document client capabilities
+	/*DynamicRegistration defined:
+	 * Whether implementation supports dynamic registration for selection range providers. If this is set to `true`
+	 * the client supports the new `SelectionRangeRegistrationOptions` return value for the corresponding server
+	 * capability as well.
 	 */
-	TextDocument *struct {
-
-		/*SelectionRange defined:
-		 * Capabilities specific to `textDocument/selectionRange` requests
-		 */
-		SelectionRange *struct {
-
-			/*DynamicRegistration defined:
-			 * Whether implementation supports dynamic registration for selection range providers. If this is set to `true`
-			 * the client supports the new `(SelectionRangeProviderOptions & TextDocumentRegistrationOptions & StaticRegistrationOptions)`
-			 * return value for the corresponding server capability as well.
-			 */
-			DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-		} `json:"selectionRange,omitempty"`
-	} `json:"textDocument,omitempty"`
+	DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
 }
 
 // SelectionRangeOptions is
@@ -494,15 +420,7 @@
 type SelectionRangeRegistrationOptions struct {
 	SelectionRangeOptions
 	TextDocumentRegistrationOptions
-}
-
-// SelectionRangeServerCapabilities is
-type SelectionRangeServerCapabilities struct {
-
-	/*SelectionRangeProvider defined:
-	 * The server provides selection range support.
-	 */
-	SelectionRangeProvider bool `json:"selectionRangeProvider,omitempty"` // boolean | SelectionRangeOptions | (SelectionRangeRegistrationOptions & StaticRegistrationOptions)
+	StaticRegistrationOptions
 }
 
 /*SelectionRangeParams defined:
@@ -678,7 +596,7 @@
 	/*Declaration defined:
 	 * Capabilities specific to the `textDocument/declaration`
 	 *
-	 * Since 3.14.0
+	 * @since 3.14.0
 	 */
 	Declaration *DeclarationClientCapabilities `json:"declaration,omitempty"`
 
@@ -690,14 +608,14 @@
 	/*TypeDefinition defined:
 	 * Capabilities specific to the `textDocument/typeDefinition`
 	 *
-	 * Since 3.6.0
+	 * @since 3.6.0
 	 */
 	TypeDefinition *TypeDefinitionClientCapabilities `json:"typeDefinition,omitempty"`
 
 	/*Implementation defined:
 	 * Capabilities specific to the `textDocument/implementation`
 	 *
-	 * Since 3.6.0
+	 * @since 3.6.0
 	 */
 	Implementation *ImplementationClientCapabilities `json:"implementation,omitempty"`
 
@@ -721,77 +639,54 @@
 	 */
 	CodeAction *CodeActionClientCapabilities `json:"codeAction,omitempty"`
 
-	/*Formatting defined:
-	 * Capabilities specific to the `textDocument/formatting`
-	 */
-	Formatting *struct {
-
-		/*DynamicRegistration defined:
-		 * Whether formatting supports dynamic registration.
-		 */
-		DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-	} `json:"formatting,omitempty"`
-
-	/*RangeFormatting defined:
-	 * Capabilities specific to the `textDocument/rangeFormatting`
-	 */
-	RangeFormatting *struct {
-
-		/*DynamicRegistration defined:
-		 * Whether range formatting supports dynamic registration.
-		 */
-		DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-	} `json:"rangeFormatting,omitempty"`
-
-	/*OnTypeFormatting defined:
-	 * Capabilities specific to the `textDocument/onTypeFormatting`
-	 */
-	OnTypeFormatting *struct {
-
-		/*DynamicRegistration defined:
-		 * Whether on type formatting supports dynamic registration.
-		 */
-		DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-	} `json:"onTypeFormatting,omitempty"`
-
 	/*CodeLens defined:
 	 * Capabilities specific to the `textDocument/codeLens`
 	 */
-	CodeLens *struct {
-
-		/*DynamicRegistration defined:
-		 * Whether code lens supports dynamic registration.
-		 */
-		DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-	} `json:"codeLens,omitempty"`
+	CodeLens *CodeLensClientCapabilities `json:"codeLens,omitempty"`
 
 	/*DocumentLink defined:
 	 * Capabilities specific to the `textDocument/documentLink`
 	 */
-	DocumentLink *struct {
+	DocumentLink *DocumentLinkClientCapabilities `json:"documentLink,omitempty"`
 
-		/*DynamicRegistration defined:
-		 * Whether document link supports dynamic registration.
-		 */
-		DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-	} `json:"documentLink,omitempty"`
+	/*ColorProvider defined:
+	 * Capabilities specific to the `textDocument/documentColor`
+	 */
+	ColorProvider *DocumentColorClientCapabilities `json:"colorProvider,omitempty"`
+
+	/*Formatting defined:
+	 * Capabilities specific to the `textDocument/formatting`
+	 */
+	Formatting *DocumentFormattingClientCapabilities `json:"formatting,omitempty"`
+
+	/*RangeFormatting defined:
+	 * Capabilities specific to the `textDocument/rangeFormatting`
+	 */
+	RangeFormatting *DocumentRangeFormattingClientCapabilities `json:"rangeFormatting,omitempty"`
+
+	/*OnTypeFormatting defined:
+	 * Capabilities specific to the `textDocument/onTypeFormatting`
+	 */
+	OnTypeFormatting *DocumentOnTypeFormattingClientCapabilities `json:"onTypeFormatting,omitempty"`
 
 	/*Rename defined:
 	 * Capabilities specific to the `textDocument/rename`
 	 */
-	Rename *struct {
+	Rename *RenameClientCapabilities `json:"rename,omitempty"`
 
-		/*DynamicRegistration defined:
-		 * Whether rename supports dynamic registration.
-		 */
-		DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
+	/*FoldingRange defined:
+	 * Capabilities specific to `textDocument/foldingRange` requests.
+	 *
+	 * @since 3.10.0
+	 */
+	FoldingRange *FoldingRangeClientCapabilities `json:"foldingRange,omitempty"`
 
-		/*PrepareSupport defined:
-		 * Client supports testing for validity of rename operations
-		 * before execution.
-		 */
-		PrepareSupport bool `json:"prepareSupport,omitempty"`
-	} `json:"rename,omitempty"`
+	/*SelectionRange defined:
+	 * Capabilities specific to `textDocument/selectionRange` requests
+	 *
+	 * @since 3.15.0
+	 */
+	SelectionRange *SelectionRangeClientCapabilities `json:"selectionRange,omitempty"`
 
 	/*PublishDiagnostics defined:
 	 * Capabilities specific to `textDocument/publishDiagnostics`.
@@ -879,202 +774,7 @@
 	/*TextDocument defined:
 	 * Text document specific client capabilities.
 	 */
-	TextDocument struct {
-
-		/*Synchronization defined:
-		 * Defines which synchronization capabilities the client supports.
-		 */
-		Synchronization TextDocumentSyncClientCapabilities `json:"synchronization,omitempty"`
-
-		/*Completion defined:
-		 * Capabilities specific to the `textDocument/completion`
-		 */
-		Completion CompletionClientCapabilities `json:"completion,omitempty"`
-
-		/*Hover defined:
-		 * Capabilities specific to the `textDocument/hover`
-		 */
-		Hover HoverClientCapabilities `json:"hover,omitempty"`
-
-		/*SignatureHelp defined:
-		 * Capabilities specific to the `textDocument/signatureHelp`
-		 */
-		SignatureHelp SignatureHelpClientCapabilities `json:"signatureHelp,omitempty"`
-
-		/*Declaration defined:
-		 * Capabilities specific to the `textDocument/declaration`
-		 *
-		 * Since 3.14.0
-		 */
-		Declaration DeclarationClientCapabilities `json:"declaration,omitempty"`
-
-		/*Definition defined:
-		 * Capabilities specific to the `textDocument/definition`
-		 */
-		Definition DefinitionClientCapabilities `json:"definition,omitempty"`
-
-		/*TypeDefinition defined:
-		 * Capabilities specific to the `textDocument/typeDefinition`
-		 *
-		 * Since 3.6.0
-		 */
-		TypeDefinition TypeDefinitionClientCapabilities `json:"typeDefinition,omitempty"`
-
-		/*Implementation defined:
-		 * Capabilities specific to the `textDocument/implementation`
-		 *
-		 * Since 3.6.0
-		 */
-		Implementation ImplementationClientCapabilities `json:"implementation,omitempty"`
-
-		/*References defined:
-		 * Capabilities specific to the `textDocument/references`
-		 */
-		References ReferenceClientCapabilities `json:"references,omitempty"`
-
-		/*DocumentHighlight defined:
-		 * Capabilities specific to the `textDocument/documentHighlight`
-		 */
-		DocumentHighlight DocumentHighlightClientCapabilities `json:"documentHighlight,omitempty"`
-
-		/*DocumentSymbol defined:
-		 * Capabilities specific to the `textDocument/documentSymbol`
-		 */
-		DocumentSymbol DocumentSymbolClientCapabilities `json:"documentSymbol,omitempty"`
-
-		/*CodeAction defined:
-		 * Capabilities specific to the `textDocument/codeAction`
-		 */
-		CodeAction CodeActionClientCapabilities `json:"codeAction,omitempty"`
-
-		/*Formatting defined:
-		 * Capabilities specific to the `textDocument/formatting`
-		 */
-		Formatting struct {
-
-			/*DynamicRegistration defined:
-			 * Whether formatting supports dynamic registration.
-			 */
-			DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-		} `json:"formatting,omitempty"`
-
-		/*RangeFormatting defined:
-		 * Capabilities specific to the `textDocument/rangeFormatting`
-		 */
-		RangeFormatting struct {
-
-			/*DynamicRegistration defined:
-			 * Whether range formatting supports dynamic registration.
-			 */
-			DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-		} `json:"rangeFormatting,omitempty"`
-
-		/*OnTypeFormatting defined:
-		 * Capabilities specific to the `textDocument/onTypeFormatting`
-		 */
-		OnTypeFormatting struct {
-
-			/*DynamicRegistration defined:
-			 * Whether on type formatting supports dynamic registration.
-			 */
-			DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-		} `json:"onTypeFormatting,omitempty"`
-
-		/*CodeLens defined:
-		 * Capabilities specific to the `textDocument/codeLens`
-		 */
-		CodeLens struct {
-
-			/*DynamicRegistration defined:
-			 * Whether code lens supports dynamic registration.
-			 */
-			DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-		} `json:"codeLens,omitempty"`
-
-		/*DocumentLink defined:
-		 * Capabilities specific to the `textDocument/documentLink`
-		 */
-		DocumentLink struct {
-
-			/*DynamicRegistration defined:
-			 * Whether document link supports dynamic registration.
-			 */
-			DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-		} `json:"documentLink,omitempty"`
-
-		/*Rename defined:
-		 * Capabilities specific to the `textDocument/rename`
-		 */
-		Rename struct {
-
-			/*DynamicRegistration defined:
-			 * Whether rename supports dynamic registration.
-			 */
-			DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-
-			/*PrepareSupport defined:
-			 * Client supports testing for validity of rename operations
-			 * before execution.
-			 */
-			PrepareSupport bool `json:"prepareSupport,omitempty"`
-		} `json:"rename,omitempty"`
-
-		/*PublishDiagnostics defined:
-		 * Capabilities specific to `textDocument/publishDiagnostics`.
-		 */
-		PublishDiagnostics PublishDiagnosticsClientCapabilities `json:"publishDiagnostics,omitempty"`
-
-		/*ColorProvider defined:
-		 * Capabilities specific to the colorProvider
-		 */
-		ColorProvider struct {
-
-			/*DynamicRegistration defined:
-			 * Whether implementation supports dynamic registration. If this is set to `true`
-			 * the client supports the new `(ColorRegistrationOptions & StaticRegistrationOptions)`
-			 * return value for the corresponding server capability as well.
-			 */
-			DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-		} `json:"colorProvider,omitempty"`
-
-		/*FoldingRange defined:
-		 * Capabilities specific to `textDocument/foldingRange` requests
-		 */
-		FoldingRange struct {
-
-			/*DynamicRegistration defined:
-			 * Whether implementation supports dynamic registration for folding range providers. If this is set to `true`
-			 * the client supports the new `(FoldingRangeProviderOptions & TextDocumentRegistrationOptions & StaticRegistrationOptions)`
-			 * return value for the corresponding server capability as well.
-			 */
-			DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-
-			/*RangeLimit defined:
-			 * The maximum number of folding ranges that the client prefers to receive per document. The value serves as a
-			 * hint, servers are free to follow the limit.
-			 */
-			RangeLimit float64 `json:"rangeLimit,omitempty"`
-
-			/*LineFoldingOnly defined:
-			 * If set, the client signals that it only supports folding complete lines. If set, client will
-			 * ignore specified `startCharacter` and `endCharacter` properties in a FoldingRange.
-			 */
-			LineFoldingOnly bool `json:"lineFoldingOnly,omitempty"`
-		} `json:"foldingRange,omitempty"`
-
-		/*SelectionRange defined:
-		 * Capabilities specific to `textDocument/selectionRange` requests
-		 */
-		SelectionRange struct {
-
-			/*DynamicRegistration defined:
-			 * Whether implementation supports dynamic registration for selection range providers. If this is set to `true`
-			 * the client supports the new `(SelectionRangeProviderOptions & TextDocumentRegistrationOptions & StaticRegistrationOptions)`
-			 * return value for the corresponding server capability as well.
-			 */
-			DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-		} `json:"selectionRange,omitempty"`
-	} `json:"textDocument,omitempty"`
+	TextDocument TextDocumentClientCapabilities `json:"textDocument,omitempty"`
 
 	/*Window defined:
 	 * Window specific client capabilities.
@@ -1087,18 +787,11 @@
 	Experimental interface{} `json:"experimental,omitempty"`
 
 	/*DynamicRegistration defined:
-	 * Whether implementation supports dynamic registration. If this is set to `true`
-	 * the client supports the new `ImplementationRegistrationOptions` return value
-	 * for the corresponding server capability as well.
+	 * Whether implementation supports dynamic registration for selection range providers. If this is set to `true`
+	 * the client supports the new `SelectionRangeRegistrationOptions` return value for the corresponding server
+	 * capability as well.
 	 */
 	DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
-
-	/*LinkSupport defined:
-	 * The client supports additional metadata in the form of definition links.
-	 *
-	 * Since 3.14.0
-	 */
-	LinkSupport bool `json:"linkSupport,omitempty"`
 }
 
 /*StaticRegistrationOptions defined:
@@ -1126,72 +819,6 @@
 	DocumentSelector DocumentSelector `json:"documentSelector"`
 }
 
-/*CodeLensOptions defined:
- * Code Lens options.
- */
-type CodeLensOptions struct {
-
-	/*ResolveProvider defined:
-	 * Code lens has a resolve provider as well.
-	 */
-	ResolveProvider bool `json:"resolveProvider,omitempty"`
-	WorkDoneProgressOptions
-}
-
-/*DocumentFormattingOptions defined:
- * Document formatting options.
- */
-type DocumentFormattingOptions struct {
-	WorkDoneProgressOptions
-}
-
-/*DocumentRangeFormattingOptions defined:
- * Document range formatting options.
- */
-type DocumentRangeFormattingOptions struct {
-	WorkDoneProgressOptions
-}
-
-/*DocumentOnTypeFormattingOptions defined:
- * Format document on type options
- */
-type DocumentOnTypeFormattingOptions struct {
-
-	/*FirstTriggerCharacter defined:
-	 * A character on which formatting should be triggered, like `}`.
-	 */
-	FirstTriggerCharacter string `json:"firstTriggerCharacter"`
-
-	/*MoreTriggerCharacter defined:
-	 * More trigger characters.
-	 */
-	MoreTriggerCharacter []string `json:"moreTriggerCharacter,omitempty"`
-}
-
-/*RenameOptions defined:
- * Rename options
- */
-type RenameOptions struct {
-
-	/*PrepareProvider defined:
-	 * Renames should be checked and tested before being executed.
-	 */
-	PrepareProvider bool `json:"prepareProvider,omitempty"`
-	WorkDoneProgressOptions
-}
-
-/*DocumentLinkOptions defined:
- * Document link options
- */
-type DocumentLinkOptions struct {
-
-	/*ResolveProvider defined:
-	 * Document links have a resolve provider as well.
-	 */
-	ResolveProvider bool `json:"resolveProvider,omitempty"`
-	WorkDoneProgressOptions
-}
-
 /*SaveOptions defined:
  * Save options.
  */
@@ -1222,26 +849,41 @@
 	 */
 	TextDocumentSync interface{} `json:"textDocumentSync,omitempty"` // TextDocumentSyncOptions | TextDocumentSyncKind
 
-	/*HoverProvider defined:
-	 * The server provides hover support.
-	 */
-	HoverProvider bool `json:"hoverProvider,omitempty"` // boolean | HoverOptions
-
 	/*CompletionProvider defined:
 	 * The server provides completion support.
 	 */
 	CompletionProvider *CompletionOptions `json:"completionProvider,omitempty"`
 
+	/*HoverProvider defined:
+	 * The server provides hover support.
+	 */
+	HoverProvider bool `json:"hoverProvider,omitempty"` // boolean | HoverOptions
+
 	/*SignatureHelpProvider defined:
 	 * The server provides signature help support.
 	 */
 	SignatureHelpProvider *SignatureHelpOptions `json:"signatureHelpProvider,omitempty"`
 
+	/*DeclarationProvider defined:
+	 * The server provides Goto Declaration support.
+	 */
+	DeclarationProvider bool `json:"declarationProvider,omitempty"` // boolean | DeclarationOptions | DeclarationRegistrationOptions
+
 	/*DefinitionProvider defined:
 	 * The server provides goto definition support.
 	 */
 	DefinitionProvider bool `json:"definitionProvider,omitempty"` // boolean | DefinitionOptions
 
+	/*TypeDefinitionProvider defined:
+	 * The server provides Goto Type Definition support.
+	 */
+	TypeDefinitionProvider bool `json:"typeDefinitionProvider,omitempty"` // boolean | TypeDefinitionOptions | TypeDefinitionRegistrationOptions
+
+	/*ImplementationProvider defined:
+	 * The server provides Goto Implementation support.
+	 */
+	ImplementationProvider bool `json:"implementationProvider,omitempty"` // boolean | ImplementationOptions | ImplementationRegistrationOptions
+
 	/*ReferencesProvider defined:
 	 * The server provides find references support.
 	 */
@@ -1264,16 +906,26 @@
 	 */
 	CodeActionProvider interface{} `json:"codeActionProvider,omitempty"` // boolean | CodeActionOptions
 
-	/*WorkspaceSymbolProvider defined:
-	 * The server provides workspace symbol support.
-	 */
-	WorkspaceSymbolProvider bool `json:"workspaceSymbolProvider,omitempty"` // boolean | WorkspaceSymbolOptions
-
 	/*CodeLensProvider defined:
 	 * The server provides code lens.
 	 */
 	CodeLensProvider *CodeLensOptions `json:"codeLensProvider,omitempty"`
 
+	/*DocumentLinkProvider defined:
+	 * The server provides document link support.
+	 */
+	DocumentLinkProvider *DocumentLinkOptions `json:"documentLinkProvider,omitempty"`
+
+	/*ColorProvider defined:
+	 * The server provides color provider support.
+	 */
+	ColorProvider bool `json:"colorProvider,omitempty"` // boolean | DocumentColorOptions | DocumentColorRegistrationOptions
+
+	/*WorkspaceSymbolProvider defined:
+	 * The server provides workspace symbol support.
+	 */
+	WorkspaceSymbolProvider bool `json:"workspaceSymbolProvider,omitempty"` // boolean | WorkspaceSymbolOptions
+
 	/*DocumentFormattingProvider defined:
 	 * The server provides document formatting.
 	 */
@@ -1296,10 +948,15 @@
 	 */
 	RenameProvider interface{} `json:"renameProvider,omitempty"` // boolean | RenameOptions
 
-	/*DocumentLinkProvider defined:
-	 * The server provides document link support.
+	/*FoldingRangeProvider defined:
+	 * The server provides folding provider support.
 	 */
-	DocumentLinkProvider *DocumentLinkOptions `json:"documentLinkProvider,omitempty"`
+	FoldingRangeProvider bool `json:"foldingRangeProvider,omitempty"` // boolean | FoldingRangeOptions | FoldingRangeRegistrationOptions
+
+	/*SelectionRangeProvider defined:
+	 * The server provides selection range support.
+	 */
+	SelectionRangeProvider bool `json:"selectionRangeProvider,omitempty"` // boolean | SelectionRangeOptions | SelectionRangeRegistrationOptions
 
 	/*ExecuteCommandProvider defined:
 	 * The server provides execute command support.
@@ -1321,26 +978,41 @@
 	 */
 	TextDocumentSync interface{} `json:"textDocumentSync,omitempty"` // TextDocumentSyncOptions | TextDocumentSyncKind
 
-	/*HoverProvider defined:
-	 * The server provides hover support.
-	 */
-	HoverProvider bool `json:"hoverProvider,omitempty"` // boolean | HoverOptions
-
 	/*CompletionProvider defined:
 	 * The server provides completion support.
 	 */
 	CompletionProvider *CompletionOptions `json:"completionProvider,omitempty"`
 
+	/*HoverProvider defined:
+	 * The server provides hover support.
+	 */
+	HoverProvider bool `json:"hoverProvider,omitempty"` // boolean | HoverOptions
+
 	/*SignatureHelpProvider defined:
 	 * The server provides signature help support.
 	 */
 	SignatureHelpProvider *SignatureHelpOptions `json:"signatureHelpProvider,omitempty"`
 
+	/*DeclarationProvider defined:
+	 * The server provides Goto Declaration support.
+	 */
+	DeclarationProvider bool `json:"declarationProvider,omitempty"` // boolean | DeclarationOptions | DeclarationRegistrationOptions
+
 	/*DefinitionProvider defined:
 	 * The server provides goto definition support.
 	 */
 	DefinitionProvider bool `json:"definitionProvider,omitempty"` // boolean | DefinitionOptions
 
+	/*TypeDefinitionProvider defined:
+	 * The server provides Goto Type Definition support.
+	 */
+	TypeDefinitionProvider bool `json:"typeDefinitionProvider,omitempty"` // boolean | TypeDefinitionOptions | TypeDefinitionRegistrationOptions
+
+	/*ImplementationProvider defined:
+	 * The server provides Goto Implementation support.
+	 */
+	ImplementationProvider bool `json:"implementationProvider,omitempty"` // boolean | ImplementationOptions | ImplementationRegistrationOptions
+
 	/*ReferencesProvider defined:
 	 * The server provides find references support.
 	 */
@@ -1363,16 +1035,26 @@
 	 */
 	CodeActionProvider interface{} `json:"codeActionProvider,omitempty"` // boolean | CodeActionOptions
 
-	/*WorkspaceSymbolProvider defined:
-	 * The server provides workspace symbol support.
-	 */
-	WorkspaceSymbolProvider bool `json:"workspaceSymbolProvider,omitempty"` // boolean | WorkspaceSymbolOptions
-
 	/*CodeLensProvider defined:
 	 * The server provides code lens.
 	 */
 	CodeLensProvider *CodeLensOptions `json:"codeLensProvider,omitempty"`
 
+	/*DocumentLinkProvider defined:
+	 * The server provides document link support.
+	 */
+	DocumentLinkProvider *DocumentLinkOptions `json:"documentLinkProvider,omitempty"`
+
+	/*ColorProvider defined:
+	 * The server provides color provider support.
+	 */
+	ColorProvider bool `json:"colorProvider,omitempty"` // boolean | DocumentColorOptions | DocumentColorRegistrationOptions
+
+	/*WorkspaceSymbolProvider defined:
+	 * The server provides workspace symbol support.
+	 */
+	WorkspaceSymbolProvider bool `json:"workspaceSymbolProvider,omitempty"` // boolean | WorkspaceSymbolOptions
+
 	/*DocumentFormattingProvider defined:
 	 * The server provides document formatting.
 	 */
@@ -1395,10 +1077,15 @@
 	 */
 	RenameProvider interface{} `json:"renameProvider,omitempty"` // boolean | RenameOptions
 
-	/*DocumentLinkProvider defined:
-	 * The server provides document link support.
+	/*FoldingRangeProvider defined:
+	 * The server provides folding provider support.
 	 */
-	DocumentLinkProvider *DocumentLinkOptions `json:"documentLinkProvider,omitempty"`
+	FoldingRangeProvider bool `json:"foldingRangeProvider,omitempty"` // boolean | FoldingRangeOptions | FoldingRangeRegistrationOptions
+
+	/*SelectionRangeProvider defined:
+	 * The server provides selection range support.
+	 */
+	SelectionRangeProvider bool `json:"selectionRangeProvider,omitempty"` // boolean | SelectionRangeOptions | SelectionRangeRegistrationOptions
 
 	/*ExecuteCommandProvider defined:
 	 * The server provides execute command support.
@@ -1410,16 +1097,6 @@
 	 */
 	Experimental interface{} `json:"experimental,omitempty"`
 
-	/*ImplementationProvider defined:
-	 * The server provides Goto Implementation support.
-	 */
-	ImplementationProvider bool `json:"implementationProvider,omitempty"` // boolean | ImplementationOptions | ImplementationRegistrationOptions
-
-	/*TypeDefinitionProvider defined:
-	 * The server provides Goto Type Definition support.
-	 */
-	TypeDefinitionProvider bool `json:"typeDefinitionProvider,omitempty"` // boolean | TypeDefinitionOptions | TypeDefinitionRegistrationOptions
-
 	/*Workspace defined:
 	 * The workspace server capabilities
 	 */
@@ -1445,26 +1122,6 @@
 			ChangeNotifications string `json:"changeNotifications,omitempty"` // string | boolean
 		} `json:"workspaceFolders,omitempty"`
 	} `json:"workspace,omitempty"`
-
-	/*ColorProvider defined:
-	 * The server provides color provider support.
-	 */
-	ColorProvider bool `json:"colorProvider,omitempty"` // boolean | ColorOptions | (ColorRegistrationOptions & StaticRegistrationOptions)
-
-	/*FoldingRangeProvider defined:
-	 * The server provides folding provider support.
-	 */
-	FoldingRangeProvider bool `json:"foldingRangeProvider,omitempty"` // boolean | FoldingRangeOptions | (FoldingRangeRegistrationOptions & StaticRegistrationOptions)
-
-	/*DeclarationProvider defined:
-	 * The server provides Goto Type Definition support.
-	 */
-	DeclarationProvider bool `json:"declarationProvider,omitempty"` // boolean | DeclarationOptions | DeclarationRegistrationOptions
-
-	/*SelectionRangeProvider defined:
-	 * The server provides selection range support.
-	 */
-	SelectionRangeProvider bool `json:"selectionRangeProvider,omitempty"` // boolean | SelectionRangeOptions | (SelectionRangeRegistrationOptions & StaticRegistrationOptions)
 }
 
 /*InnerInitializeParams defined:
@@ -1478,6 +1135,24 @@
 	 */
 	ProcessID float64 `json:"processId"`
 
+	/*ClientInfo defined:
+	 * Information about the client
+	 *
+	 * @since 3.15.0
+	 */
+	ClientInfo *struct {
+
+		/*Name defined:
+		 * The name of the client as defined by the client.
+		 */
+		Name string `json:"name"`
+
+		/*Version defined:
+		 * The client's version as defined by the client.
+		 */
+		Version string `json:"version,omitempty"`
+	} `json:"clientInfo,omitempty"`
+
 	/*RootPath defined:
 	 * The rootPath of the workspace. Is null
 	 * if no folder is open.
@@ -1521,6 +1196,24 @@
 	 */
 	ProcessID float64 `json:"processId"`
 
+	/*ClientInfo defined:
+	 * Information about the client
+	 *
+	 * @since 3.15.0
+	 */
+	ClientInfo *struct {
+
+		/*Name defined:
+		 * The name of the client as defined by the client.
+		 */
+		Name string `json:"name"`
+
+		/*Version defined:
+		 * The client's version as defined by the client.
+		 */
+		Version string `json:"version,omitempty"`
+	} `json:"clientInfo,omitempty"`
+
 	/*RootPath defined:
 	 * The rootPath of the workspace. Is null
 	 * if no folder is open.
@@ -1569,6 +1262,24 @@
 	 */
 	Capabilities ServerCapabilities `json:"capabilities"`
 
+	/*ServerInfo defined:
+	 * Information about the server.
+	 *
+	 * @since 3.15.0
+	 */
+	ServerInfo *struct {
+
+		/*Name defined:
+		 * The name of the server as defined by the server.
+		 */
+		Name string `json:"name"`
+
+		/*Version defined:
+		 * The servers's version as defined by the server.
+		 */
+		Version string `json:"version,omitempty"`
+	} `json:"serverInfo,omitempty"`
+
 	/*Custom defined:
 	 * Custom initialization results.
 	 */
@@ -1904,10 +1615,17 @@
 
 	/*TagSupport defined:
 	 * Client supports the tag property to provide meta data about a diagnostic.
+	 * Clients supporting tags have to handle unknown tags gracefully.
 	 *
-	 * Since 3.15
+	 * @since 3.15.0
 	 */
-	TagSupport bool `json:"tagSupport,omitempty"`
+	TagSupport *struct {
+
+		/*ValueSet defined:
+		 * The tags supported by the client.
+		 */
+		ValueSet []DiagnosticTag `json:"valueSet"`
+	} `json:"tagSupport,omitempty"`
 }
 
 /*PublishDiagnosticsParams defined:
@@ -1923,7 +1641,7 @@
 	/*Version defined:
 	 * Optional the version number of the document the diagnostics are published for.
 	 *
-	 * @since 3.15
+	 * @since 3.15.0
 	 */
 	Version float64 `json:"version,omitempty"`
 
@@ -1979,6 +1697,22 @@
 		 * Client supports the preselect property on a completion item.
 		 */
 		PreselectSupport bool `json:"preselectSupport,omitempty"`
+
+		/*TagSupport defined:
+		 * Client supports the tag property on a completion item. Clients supporting
+		 * tags have to handle unknown tags gracefully. Clients especially need to
+		 * preserve unknown tags when sending a completion item back to the server in
+		 * a resolve call.
+		 *
+		 * @since 3.15.0
+		 */
+		TagSupport *struct {
+
+			/*ValueSet defined:
+			 * The tags supported by the client.
+			 */
+			ValueSet []CompletionItemTag `json:"valueSet"`
+		} `json:"tagSupport,omitempty"`
 	} `json:"completionItem,omitempty"`
 
 	// CompletionItemKind is
@@ -2028,7 +1762,7 @@
 
 	/*Context defined:
 	 * The completion context. This is only available it the client specifies
-	 * to send this using `ClientCapabilities.textDocument.completion.contextSupport === true`
+	 * to send this using the client capability `textDocument.completion.contextSupport === true`
 	 */
 	Context *CompletionContext `json:"context,omitempty"`
 	TextDocumentPositionParams
@@ -2058,7 +1792,7 @@
 	 * if clients don't support individual commmit characters per completion item. See
 	 * `ClientCapabilities.textDocument.completion.completionItem.commitCharactersSupport`
 	 *
-	 * Since 3.2.0
+	 * @since 3.2.0
 	 */
 	AllCommitCharacters []string `json:"allCommitCharacters,omitempty"`
 
@@ -2147,11 +1881,21 @@
 			 * The client supports processing label offsets instead of a
 			 * simple label string.
 			 *
-			 * Since 3.14.0
+			 * @since 3.14.0
 			 */
 			LabelOffsetSupport bool `json:"labelOffsetSupport,omitempty"`
 		} `json:"parameterInformation,omitempty"`
 	} `json:"signatureInformation,omitempty"`
+
+	/*ContextSupport defined:
+	 * The client supports to send additional context information for a
+	 * `textDocument/signatureHelp` request. A client that opts into
+	 * contextSupport will also support the `retriggerCharacters` on
+	 * `SignatureHelpOptions`.
+	 *
+	 * @since 3.15.0
+	 */
+	ContextSupport bool `json:"contextSupport,omitempty"`
 }
 
 /*SignatureHelpOptions defined:
@@ -2160,17 +1904,70 @@
 type SignatureHelpOptions struct {
 
 	/*TriggerCharacters defined:
-	 * The characters that trigger signature help
-	 * automatically.
+	 * List of characters that trigger signature help.
 	 */
 	TriggerCharacters []string `json:"triggerCharacters,omitempty"`
+
+	/*RetriggerCharacters defined:
+	 * List of characters that re-trigger signature help.
+	 *
+	 * These trigger characters are only active when signature help is already showing. All trigger characters
+	 * are also counted as re-trigger characters.
+	 *
+	 * @since 3.15.0
+	 */
+	RetriggerCharacters []string `json:"retriggerCharacters,omitempty"`
 	WorkDoneProgressOptions
 }
 
+/*SignatureHelpContext defined:
+ * Additional information about the context in which a signature help request was triggered.
+ *
+ * @since 3.15.0
+ */
+type SignatureHelpContext struct {
+
+	/*TriggerKind defined:
+	 * Action that caused signature help to be triggered.
+	 */
+	TriggerKind SignatureHelpTriggerKind `json:"triggerKind"`
+
+	/*TriggerCharacter defined:
+	 * Character that caused signature help to be triggered.
+	 *
+	 * This is undefined when `triggerKind !== SignatureHelpTriggerKind.TriggerCharacter`
+	 */
+	TriggerCharacter string `json:"triggerCharacter,omitempty"`
+
+	/*IsRetrigger defined:
+	 * `true` if signature help was already showing when it was triggered.
+	 *
+	 * Retriggers occur when the signature help is already active and can be caused by actions such as
+	 * typing a trigger character, a cursor move, or document content changes.
+	 */
+	IsRetrigger bool `json:"isRetrigger"`
+
+	/*ActiveSignatureHelp defined:
+	 * The currently active `SignatureHelp`.
+	 *
+	 * The `activeSignatureHelp` has its `SignatureHelp.activeSignature` field updated based on
+	 * the user navigating through available signatures.
+	 */
+	ActiveSignatureHelp *SignatureHelp `json:"activeSignatureHelp,omitempty"`
+}
+
 /*SignatureHelpParams defined:
  * Parameters for a [SignatureHelpRequest](#SignatureHelpRequest).
  */
 type SignatureHelpParams struct {
+
+	/*Context defined:
+	 * The signature help context. This is only available if the client specifies
+	 * to send this using the client capability `textDocument.signatureHelp.contextSupport === true`
+	 *
+	 * @since 3.15.0
+	 */
+	Context *SignatureHelpContext `json:"context,omitempty"`
 	TextDocumentPositionParams
 	WorkDoneProgressParams
 }
@@ -2196,7 +1993,7 @@
 	/*LinkSupport defined:
 	 * The client supports additional metadata in the form of definition links.
 	 *
-	 * Since 3.14.0
+	 * @since 3.14.0
 	 */
 	LinkSupport bool `json:"linkSupport,omitempty"`
 }
@@ -2374,7 +2171,7 @@
 	 * The client support code action literals as a valid
 	 * response of the `textDocument/codeAction` request.
 	 *
-	 * Since 3.8.0
+	 * @since 3.8.0
 	 */
 	CodeActionLiteralSupport *struct {
 
@@ -2393,6 +2190,12 @@
 			ValueSet []CodeActionKind `json:"valueSet"`
 		} `json:"codeActionKind"`
 	} `json:"codeActionLiteralSupport,omitempty"`
+
+	/*IsPreferredSupport defined:
+	 * Whether code action supports the `isPreferred` property.
+	 * @since 3.15.0
+	 */
+	IsPreferredSupport bool `json:"isPreferredSupport,omitempty"`
 }
 
 /*CodeActionParams defined:
@@ -2476,7 +2279,8 @@
 type WorkspaceSymbolParams struct {
 
 	/*Query defined:
-	 * A non-empty query string
+	 * A query string to filter symbols by. Clients may send an empty
+	 * string here to request all symbols.
 	 */
 	Query string `json:"query"`
 	WorkDoneProgressParams
@@ -2497,6 +2301,17 @@
 	WorkspaceSymbolOptions
 }
 
+/*CodeLensClientCapabilities defined:
+ * The client capabilities  of a [CodeLensRequest](#CodeLensRequest).
+ */
+type CodeLensClientCapabilities struct {
+
+	/*DynamicRegistration defined:
+	 * Whether code lens supports dynamic registration.
+	 */
+	DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
+}
+
 /*CodeLensParams defined:
  * The parameters of a [CodeLensRequest](#CodeLensRequest).
  */
@@ -2510,6 +2325,18 @@
 	PartialResultParams
 }
 
+/*CodeLensOptions defined:
+ * Code Lens provider options of a [CodeLensRequest](#CodeLensRequest).
+ */
+type CodeLensOptions struct {
+
+	/*ResolveProvider defined:
+	 * Code lens has a resolve provider as well.
+	 */
+	ResolveProvider bool `json:"resolveProvider,omitempty"`
+	WorkDoneProgressOptions
+}
+
 /*CodeLensRegistrationOptions defined:
  * Registration options for a [CodeLensRequest](#CodeLensRequest).
  */
@@ -2518,6 +2345,68 @@
 	CodeLensOptions
 }
 
+/*DocumentLinkClientCapabilities defined:
+ * The client capabilities of a [DocumentLinkRequest](#DocumentLinkRequest).
+ */
+type DocumentLinkClientCapabilities struct {
+
+	/*DynamicRegistration defined:
+	 * Whether document link supports dynamic registration.
+	 */
+	DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
+
+	/*TooltipSupport defined:
+	 * Whether the client support the `tooltip` property on `DocumentLink`.
+	 *
+	 * @since 3.15.0
+	 */
+	TooltipSupport bool `json:"tooltipSupport,omitempty"`
+}
+
+/*DocumentLinkParams defined:
+ * The parameters of a [DocumentLinkRequest](#DocumentLinkRequest).
+ */
+type DocumentLinkParams struct {
+
+	/*TextDocument defined:
+	 * The document to provide document links for.
+	 */
+	TextDocument TextDocumentIdentifier `json:"textDocument"`
+	WorkDoneProgressParams
+	PartialResultParams
+}
+
+/*DocumentLinkOptions defined:
+ * Provider options for a [DocumentLinkRequest](#DocumentLinkRequest).
+ */
+type DocumentLinkOptions struct {
+
+	/*ResolveProvider defined:
+	 * Document links have a resolve provider as well.
+	 */
+	ResolveProvider bool `json:"resolveProvider,omitempty"`
+	WorkDoneProgressOptions
+}
+
+/*DocumentLinkRegistrationOptions defined:
+ * Registration options for a [DocumentLinkRequest](#DocumentLinkRequest).
+ */
+type DocumentLinkRegistrationOptions struct {
+	TextDocumentRegistrationOptions
+	DocumentLinkOptions
+}
+
+/*DocumentFormattingClientCapabilities defined:
+ * Client capabilities of a [DocumentFormattingRequest](#DocumentFormattingRequest).
+ */
+type DocumentFormattingClientCapabilities struct {
+
+	/*DynamicRegistration defined:
+	 * Whether formatting supports dynamic registration.
+	 */
+	DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
+}
+
 /*DocumentFormattingParams defined:
  * The parameters of a [DocumentFormattingRequest](#DocumentFormattingRequest).
  */
@@ -2535,6 +2424,13 @@
 	WorkDoneProgressParams
 }
 
+/*DocumentFormattingOptions defined:
+ * Provider options for a [DocumentFormattingRequest](#DocumentFormattingRequest).
+ */
+type DocumentFormattingOptions struct {
+	WorkDoneProgressOptions
+}
+
 /*DocumentFormattingRegistrationOptions defined:
  * Registration options for a [DocumentFormattingRequest](#DocumentFormattingRequest).
  */
@@ -2543,6 +2439,17 @@
 	DocumentFormattingOptions
 }
 
+/*DocumentRangeFormattingClientCapabilities defined:
+ * Client capabilities of a [DocumentRangeFormattingRequest](#DocumentRangeFormattingRequest).
+ */
+type DocumentRangeFormattingClientCapabilities struct {
+
+	/*DynamicRegistration defined:
+	 * Whether range formatting supports dynamic registration.
+	 */
+	DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
+}
+
 /*DocumentRangeFormattingParams defined:
  * The parameters of a [DocumentRangeFormattingRequest](#DocumentRangeFormattingRequest).
  */
@@ -2565,6 +2472,13 @@
 	WorkDoneProgressParams
 }
 
+/*DocumentRangeFormattingOptions defined:
+ * Provider options for a [DocumentRangeFormattingRequest](#DocumentRangeFormattingRequest).
+ */
+type DocumentRangeFormattingOptions struct {
+	WorkDoneProgressOptions
+}
+
 /*DocumentRangeFormattingRegistrationOptions defined:
  * Registration options for a [DocumentRangeFormattingRequest](#DocumentRangeFormattingRequest).
  */
@@ -2573,6 +2487,17 @@
 	DocumentRangeFormattingOptions
 }
 
+/*DocumentOnTypeFormattingClientCapabilities defined:
+ * Client capabilities of a [DocumentOnTypeFormattingRequest](#DocumentOnTypeFormattingRequest).
+ */
+type DocumentOnTypeFormattingClientCapabilities struct {
+
+	/*DynamicRegistration defined:
+	 * Whether on type formatting supports dynamic registration.
+	 */
+	DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
+}
+
 /*DocumentOnTypeFormattingParams defined:
  * The parameters of a [DocumentOnTypeFormattingRequest](#DocumentOnTypeFormattingRequest).
  */
@@ -2599,6 +2524,22 @@
 	Options FormattingOptions `json:"options"`
 }
 
+/*DocumentOnTypeFormattingOptions defined:
+ * Provider options for a [DocumentOnTypeFormattingRequest](#DocumentOnTypeFormattingRequest).
+ */
+type DocumentOnTypeFormattingOptions struct {
+
+	/*FirstTriggerCharacter defined:
+	 * A character on which formatting should be triggered, like `}`.
+	 */
+	FirstTriggerCharacter string `json:"firstTriggerCharacter"`
+
+	/*MoreTriggerCharacter defined:
+	 * More trigger characters.
+	 */
+	MoreTriggerCharacter []string `json:"moreTriggerCharacter,omitempty"`
+}
+
 /*DocumentOnTypeFormattingRegistrationOptions defined:
  * Registration options for a [DocumentOnTypeFormattingRequest](#DocumentOnTypeFormattingRequest).
  */
@@ -2607,6 +2548,23 @@
 	DocumentOnTypeFormattingOptions
 }
 
+// RenameClientCapabilities is
+type RenameClientCapabilities struct {
+
+	/*DynamicRegistration defined:
+	 * Whether rename supports dynamic registration.
+	 */
+	DynamicRegistration bool `json:"dynamicRegistration,omitempty"`
+
+	/*PrepareSupport defined:
+	 * Client supports testing for validity of rename operations
+	 * before execution.
+	 *
+	 * @since version 3.12.0
+	 */
+	PrepareSupport bool `json:"prepareSupport,omitempty"`
+}
+
 /*RenameParams defined:
  * The parameters of a [RenameRequest](#RenameRequest).
  */
@@ -2631,6 +2589,20 @@
 	WorkDoneProgressParams
 }
 
+/*RenameOptions defined:
+ * Provider options for a [RenameRequest](#RenameRequest).
+ */
+type RenameOptions struct {
+
+	/*PrepareProvider defined:
+	 * Renames should be checked and tested before being executed.
+	 *
+	 * @since version 3.12.0
+	 */
+	PrepareProvider bool `json:"prepareProvider,omitempty"`
+	WorkDoneProgressOptions
+}
+
 /*RenameRegistrationOptions defined:
  * Registration options for a [RenameRequest](#RenameRequest).
  */
@@ -2645,27 +2617,6 @@
 	WorkDoneProgressParams
 }
 
-/*DocumentLinkParams defined:
- * The parameters of a [DocumentLinkRequest](#DocumentLinkRequest).
- */
-type DocumentLinkParams struct {
-
-	/*TextDocument defined:
-	 * The document to provide document links for.
-	 */
-	TextDocument TextDocumentIdentifier `json:"textDocument"`
-	WorkDoneProgressParams
-	PartialResultParams
-}
-
-/*DocumentLinkRegistrationOptions defined:
- * Registration options for a [DocumentLinkRequest](#DocumentLinkRequest).
- */
-type DocumentLinkRegistrationOptions struct {
-	TextDocumentRegistrationOptions
-	DocumentLinkOptions
-}
-
 /*ExecuteCommandClientCapabilities defined:
  * The client capabilities of a [ExecuteCommandRequest](#ExecuteCommandRequest).
  */
@@ -2725,7 +2676,7 @@
 	 * The resource operations the client supports. Clients should at least
 	 * support 'create', 'rename' and 'delete' files and folders.
 	 *
-	 * Since 3.13
+	 * @since 3.13.0
 	 */
 	ResourceOperations []ResourceOperationKind `json:"resourceOperations,omitempty"`
 
@@ -2733,7 +2684,7 @@
 	 * The failure handling strategy of a client if applying the workspace edit
 	 * fails.
 	 *
-	 * Since 3.13
+	 * @since 3.13.0
 	 */
 	FailureHandling FailureHandlingKind `json:"failureHandling,omitempty"`
 }
@@ -3340,6 +3291,13 @@
 	 */
 	Kind CompletionItemKind `json:"kind,omitempty"`
 
+	/*Tags defined:
+	 * Tags for this completion item.
+	 *
+	 * @since 3.15.0
+	 */
+	Tags []CompletionItemTag `json:"tags,omitempty"`
+
 	/*Detail defined:
 	 * A human-readable string with additional information
 	 * about this item, like type or symbol information.
@@ -3353,6 +3311,7 @@
 
 	/*Deprecated defined:
 	 * Indicates if this item is deprecated.
+	 * @deprecated Use `tags` instead.
 	 */
 	Deprecated bool `json:"deprecated,omitempty"`
 
@@ -3720,6 +3679,17 @@
 	 */
 	Diagnostics []Diagnostic `json:"diagnostics,omitempty"`
 
+	/*IsPreferred defined:
+	 * Marks this as a preferred action. Preferred actions are used by the `auto fix` command and can be targeted
+	 * by keybindings.
+	 *
+	 * A quick fix should be marked preferred if it properly addresses the underlying error.
+	 * A refactoring should be marked preferred if it is the most reasonable choice of actions to take.
+	 *
+	 * @since 3.15.0
+	 */
+	IsPreferred bool `json:"isPreferred,omitempty"`
+
 	/*Edit defined:
 	 * The workspace edit this code action performs.
 	 */
@@ -3777,16 +3747,22 @@
 
 	/*TrimTrailingWhitespace defined:
 	 * Trim trailing whitespaces on a line.
+	 *
+	 * @since 3.15.0
 	 */
 	TrimTrailingWhitespace bool `json:"trimTrailingWhitespace,omitempty"`
 
 	/*InsertFinalNewline defined:
 	 * Insert a newline character at the end of the file if one does not exist.
+	 *
+	 * @since 3.15.0
 	 */
 	InsertFinalNewline bool `json:"insertFinalNewline,omitempty"`
 
 	/*TrimFinalNewlines defined:
 	 * Trim all newlines after the final newline at the end of the file.
+	 *
+	 * @since 3.15.0
 	 */
 	TrimFinalNewlines bool `json:"trimFinalNewlines,omitempty"`
 
@@ -3812,6 +3788,17 @@
 	 */
 	Target string `json:"target,omitempty"`
 
+	/*Tooltip defined:
+	 * The tooltip text when you hover over this link.
+	 *
+	 * If a tooltip is provided, is will be displayed in a string that includes instructions on how to
+	 * trigger the link, such as `{0} (ctrl + click)`. The specific instructions vary depending on OS,
+	 * user settings, and localization.
+	 *
+	 * @since 3.15.0
+	 */
+	Tooltip string `json:"tooltip,omitempty"`
+
 	/*Data defined:
 	 * A data entry field that is preserved on a document link between a
 	 * DocumentLinkRequest and a DocumentLinkResolveRequest.
@@ -3982,6 +3969,9 @@
 // CompletionTriggerKind defines constants
 type CompletionTriggerKind float64
 
+// SignatureHelpTriggerKind defines constants
+type SignatureHelpTriggerKind float64
+
 // DiagnosticSeverity defines constants
 type DiagnosticSeverity float64
 
@@ -3997,6 +3987,9 @@
 // InsertTextFormat defines constants
 type InsertTextFormat float64
 
+// CompletionItemTag defines constants
+type CompletionItemTag float64
+
 // DocumentHighlightKind defines constants
 type DocumentHighlightKind float64
 
@@ -4176,6 +4169,11 @@
 	 */
 	TriggerForIncompleteCompletions CompletionTriggerKind = 3
 
+	/*ContentChange defined:
+	 * Signature help was triggered by the cursor moving or by the document content changing.
+	 */
+	ContentChange SignatureHelpTriggerKind = 3
+
 	/*SeverityError defined:
 	 * Reports an error.
 	 */
diff --git a/internal/lsp/protocol/typescript/go.ts b/internal/lsp/protocol/typescript/go.ts
index 3f4290c..49b135b 100644
--- a/internal/lsp/protocol/typescript/go.ts
+++ b/internal/lsp/protocol/typescript/go.ts
@@ -53,7 +53,7 @@
   `${srcDir}/protocol/src/protocol.ts`, `${srcDir}/types/src/main.ts`,
   `${srcDir}/jsonrpc/src/main.ts`
 ];
-let gitHash = 'fda16d6b63ba0fbdbd21d437ea810685528a0018';
+let gitHash = '36ac51f057215e6e2e0408384e07ecf564a938da';
 let outFname = 'tsprotocol.go';
 let fda: number, fdb: number, fde: number;  // file descriptors
 
diff --git a/internal/lsp/source/options.go b/internal/lsp/source/options.go
index 07d7c45..7d35fa6 100644
--- a/internal/lsp/source/options.go
+++ b/internal/lsp/source/options.go
@@ -143,8 +143,7 @@
 
 func (o *Options) ForClientCapabilities(caps protocol.ClientCapabilities) {
 	// Check if the client supports snippets in completion items.
-	if caps.TextDocument.Completion.CompletionItem != nil &&
-		caps.TextDocument.Completion.CompletionItem.SnippetSupport {
+	if c := caps.TextDocument.Completion; c != nil && c.CompletionItem != nil && c.CompletionItem.SnippetSupport {
 		o.InsertTextFormat = protocol.SnippetTextFormat
 	}
 	// Check if the client supports configuration messages.
@@ -153,11 +152,13 @@
 	o.DynamicWatchedFilesSupported = caps.Workspace.DidChangeWatchedFiles.DynamicRegistration
 
 	// Check which types of content format are supported by this client.
-	if len(caps.TextDocument.Hover.ContentFormat) > 0 {
-		o.PreferredContentFormat = caps.TextDocument.Hover.ContentFormat[0]
+	if hover := caps.TextDocument.Hover; hover != nil && len(hover.ContentFormat) > 0 {
+		o.PreferredContentFormat = hover.ContentFormat[0]
 	}
 	// Check if the client supports only line folding.
-	o.LineFoldingOnly = caps.TextDocument.FoldingRange.LineFoldingOnly
+	if fr := caps.TextDocument.FoldingRange; fr != nil {
+		o.LineFoldingOnly = fr.LineFoldingOnly
+	}
 }
 
 func (o *Options) set(name string, value interface{}) OptionResult {
