diff --git a/internal/lsp/cmd/cmd.go b/internal/lsp/cmd/cmd.go index 3155f425..af05dcd8 100644 --- a/internal/lsp/cmd/cmd.go +++ b/internal/lsp/cmd/cmd.go @@ -190,7 +190,7 @@ func (c *baseClient) LogMessage(ctx context.Context, p *protocol.LogMessageParam } return nil } -func (c *baseClient) Telemetry(ctx context.Context, t interface{}) error { return nil } +func (c *baseClient) Event(ctx context.Context, t *interface{}) error { return nil } func (c *baseClient) RegisterCapability(ctx context.Context, p *protocol.RegistrationParams) error { return nil } @@ -218,8 +218,8 @@ func (c *baseClient) Configuration(ctx context.Context, p *protocol.Configuratio } return results, nil } -func (c *baseClient) ApplyEdit(ctx context.Context, p *protocol.ApplyWorkspaceEditParams) (bool, error) { - return false, nil +func (c *baseClient) ApplyEdit(ctx context.Context, p *protocol.ApplyWorkspaceEditParams) (*protocol.ApplyWorkspaceEditResponse, error) { + return &protocol.ApplyWorkspaceEditResponse{Applied: false, FailureReason: "not implemented"}, nil } func (c *baseClient) PublishDiagnostics(ctx context.Context, p *protocol.PublishDiagnosticsParams) error { return nil diff --git a/internal/lsp/protocol/client.go b/internal/lsp/protocol/tsclient.go similarity index 68% rename from internal/lsp/protocol/client.go rename to internal/lsp/protocol/tsclient.go index 2962a777..71d6c116 100644 --- a/internal/lsp/protocol/client.go +++ b/internal/lsp/protocol/tsclient.go @@ -1,9 +1,7 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - package protocol +//automatically generated + import ( "context" "encoding/json" @@ -14,15 +12,15 @@ import ( type Client interface { ShowMessage(context.Context, *ShowMessageParams) error - ShowMessageRequest(context.Context, *ShowMessageRequestParams) (*MessageActionItem, error) LogMessage(context.Context, *LogMessageParams) error - Telemetry(context.Context, interface{}) error - RegisterCapability(context.Context, *RegistrationParams) error - UnregisterCapability(context.Context, *UnregistrationParams) error + Event(context.Context, *interface{}) error + PublishDiagnostics(context.Context, *PublishDiagnosticsParams) error WorkspaceFolders(context.Context) ([]WorkspaceFolder, error) Configuration(context.Context, *ConfigurationParams) ([]interface{}, error) - ApplyEdit(context.Context, *ApplyWorkspaceEditParams) (bool, error) - PublishDiagnostics(context.Context, *PublishDiagnosticsParams) error + RegisterCapability(context.Context, *RegistrationParams) error + UnregisterCapability(context.Context, *UnregistrationParams) error + ShowMessageRequest(context.Context, *ShowMessageRequestParams) (*MessageActionItem, error) + ApplyEdit(context.Context, *ApplyWorkspaceEditParams) (*ApplyWorkspaceEditResponse, error) } func clientHandler(log xlog.Logger, client Client) jsonrpc2.Handler { @@ -35,8 +33,7 @@ func clientHandler(log xlog.Logger, client Client) jsonrpc2.Handler { return } conn.Cancel(params.ID) - - case "window/showMessage": + case "window/showMessage": // notif var params ShowMessageParams if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) @@ -45,19 +42,7 @@ func clientHandler(log xlog.Logger, client Client) jsonrpc2.Handler { if err := client.ShowMessage(ctx, ¶ms); err != nil { log.Errorf(ctx, "%v", err) } - - case "window/showMessageRequest": - var params ShowMessageRequestParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := client.ShowMessageRequest(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "window/logMessage": + case "window/logMessage": // notif var params LogMessageParams if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) @@ -66,38 +51,25 @@ func clientHandler(log xlog.Logger, client Client) jsonrpc2.Handler { if err := client.LogMessage(ctx, ¶ms); err != nil { log.Errorf(ctx, "%v", err) } - - case "telemetry/event": + case "telemetry/event": // notif var params interface{} if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) return } - if err := client.Telemetry(ctx, ¶ms); err != nil { + if err := client.Event(ctx, ¶ms); err != nil { log.Errorf(ctx, "%v", err) } - - case "client/registerCapability": - var params RegistrationParams + case "textDocument/publishDiagnostics": // notif + var params PublishDiagnosticsParams if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) return } - if err := client.RegisterCapability(ctx, ¶ms); err != nil { + if err := client.PublishDiagnostics(ctx, ¶ms); err != nil { log.Errorf(ctx, "%v", err) } - - case "client/unregisterCapability": - var params UnregistrationParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - if err := client.UnregisterCapability(ctx, ¶ms); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "workspace/workspaceFolders": + case "workspace/workspaceFolders": // req if r.Params != nil { conn.Reply(ctx, r, nil, jsonrpc2.NewErrorf(jsonrpc2.CodeInvalidParams, "Expected no params")) return @@ -106,8 +78,7 @@ func clientHandler(log xlog.Logger, client Client) jsonrpc2.Handler { if err := conn.Reply(ctx, r, resp, err); err != nil { log.Errorf(ctx, "%v", err) } - - case "workspace/configuration": + case "workspace/configuration": // req var params ConfigurationParams if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) @@ -117,8 +88,35 @@ func clientHandler(log xlog.Logger, client Client) jsonrpc2.Handler { if err := conn.Reply(ctx, r, resp, err); err != nil { log.Errorf(ctx, "%v", err) } - - case "workspace/applyEdit": + case "client/registerCapability": // req + var params RegistrationParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := client.RegisterCapability(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "client/unregisterCapability": // req + var params UnregistrationParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := client.UnregisterCapability(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "window/showMessageRequest": // req + var params ShowMessageRequestParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := client.ShowMessageRequest(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "workspace/applyEdit": // req var params ApplyWorkspaceEditParams if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) @@ -129,16 +127,6 @@ func clientHandler(log xlog.Logger, client Client) jsonrpc2.Handler { log.Errorf(ctx, "%v", err) } - case "textDocument/publishDiagnostics": - var params PublishDiagnosticsParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - if err := client.PublishDiagnostics(ctx, ¶ms); err != nil { - log.Errorf(ctx, "%v", err) - } - default: if r.IsNotify() { conn.Reply(ctx, r, nil, jsonrpc2.NewErrorf(jsonrpc2.CodeMethodNotFound, "method %q not found", r.Method)) @@ -151,58 +139,57 @@ type clientDispatcher struct { *jsonrpc2.Conn } -func (c *clientDispatcher) ShowMessage(ctx context.Context, params *ShowMessageParams) error { - return c.Conn.Notify(ctx, "window/showMessage", params) +func (s *clientDispatcher) ShowMessage(ctx context.Context, params *ShowMessageParams) error { + return s.Conn.Notify(ctx, "window/showMessage", params) } -func (c *clientDispatcher) ShowMessageRequest(ctx context.Context, params *ShowMessageRequestParams) (*MessageActionItem, error) { +func (s *clientDispatcher) LogMessage(ctx context.Context, params *LogMessageParams) error { + return s.Conn.Notify(ctx, "window/logMessage", params) +} + +func (s *clientDispatcher) Event(ctx context.Context, params *interface{}) error { + return s.Conn.Notify(ctx, "telemetry/event", params) +} + +func (s *clientDispatcher) PublishDiagnostics(ctx context.Context, params *PublishDiagnosticsParams) error { + return s.Conn.Notify(ctx, "textDocument/publishDiagnostics", params) +} +func (s *clientDispatcher) WorkspaceFolders(ctx context.Context) ([]WorkspaceFolder, error) { + var result []WorkspaceFolder + if err := s.Conn.Call(ctx, "workspace/workspaceFolders", nil, &result); err != nil { + return nil, err + } + return result, nil +} + +func (s *clientDispatcher) Configuration(ctx context.Context, params *ConfigurationParams) ([]interface{}, error) { + var result []interface{} + if err := s.Conn.Call(ctx, "workspace/configuration", params, &result); err != nil { + return nil, err + } + return result, nil +} + +func (s *clientDispatcher) RegisterCapability(ctx context.Context, params *RegistrationParams) error { + return s.Conn.Notify(ctx, "client/registerCapability", params) // Notify? (not Call?) +} + +func (s *clientDispatcher) UnregisterCapability(ctx context.Context, params *UnregistrationParams) error { + return s.Conn.Notify(ctx, "client/unregisterCapability", params) // Notify? (not Call?) +} + +func (s *clientDispatcher) ShowMessageRequest(ctx context.Context, params *ShowMessageRequestParams) (*MessageActionItem, error) { var result MessageActionItem - if err := c.Conn.Call(ctx, "window/showMessageRequest", params, &result); err != nil { + if err := s.Conn.Call(ctx, "window/showMessageRequest", params, &result); err != nil { return nil, err } return &result, nil } -func (c *clientDispatcher) LogMessage(ctx context.Context, params *LogMessageParams) error { - return c.Conn.Notify(ctx, "window/logMessage", params) -} - -func (c *clientDispatcher) Telemetry(ctx context.Context, params interface{}) error { - return c.Conn.Notify(ctx, "telemetry/event", params) -} - -func (c *clientDispatcher) RegisterCapability(ctx context.Context, params *RegistrationParams) error { - return c.Conn.Notify(ctx, "client/registerCapability", params) -} - -func (c *clientDispatcher) UnregisterCapability(ctx context.Context, params *UnregistrationParams) error { - return c.Conn.Notify(ctx, "client/unregisterCapability", params) -} - -func (c *clientDispatcher) WorkspaceFolders(ctx context.Context) ([]WorkspaceFolder, error) { - var result []WorkspaceFolder - if err := c.Conn.Call(ctx, "workspace/workspaceFolders", nil, &result); err != nil { +func (s *clientDispatcher) ApplyEdit(ctx context.Context, params *ApplyWorkspaceEditParams) (*ApplyWorkspaceEditResponse, error) { + var result ApplyWorkspaceEditResponse + if err := s.Conn.Call(ctx, "workspace/applyEdit", params, &result); err != nil { return nil, err } - return result, nil -} - -func (c *clientDispatcher) Configuration(ctx context.Context, params *ConfigurationParams) ([]interface{}, error) { - var result []interface{} - if err := c.Conn.Call(ctx, "workspace/configuration", params, &result); err != nil { - return nil, err - } - return result, nil -} - -func (c *clientDispatcher) ApplyEdit(ctx context.Context, params *ApplyWorkspaceEditParams) (bool, error) { - var result bool - if err := c.Conn.Call(ctx, "workspace/applyEdit", params, &result); err != nil { - return false, err - } - return result, nil -} - -func (c *clientDispatcher) PublishDiagnostics(ctx context.Context, params *PublishDiagnosticsParams) error { - return c.Conn.Notify(ctx, "textDocument/publishDiagnostics", params) + return &result, nil } diff --git a/internal/lsp/protocol/tsprotocol.go b/internal/lsp/protocol/tsprotocol.go index 923cb005..62afa965 100644 --- a/internal/lsp/protocol/tsprotocol.go +++ b/internal/lsp/protocol/tsprotocol.go @@ -3378,6 +3378,27 @@ type TextDocumentContentChangeEvent struct { Text string `json:"text"` } +// SetTraceParams is +type SetTraceParams struct { + + // Value is + Value TraceValues `json:"value"` +} + +// LogTraceParams is +type LogTraceParams struct { + + // Message is + Message string `json:"message"` + + // Verbose is + Verbose string `json:"verbose,omitempty"` +} + +// Tracer is +type Tracer struct { +} + // FoldingRangeKind defines constants type FoldingRangeKind string @@ -3435,6 +3456,24 @@ type CodeActionKind string // TextDocumentSaveReason defines constants type TextDocumentSaveReason float64 +// ErrorCodes defines constants +type ErrorCodes float64 + +// Touch defines constants +type Touch float64 + +// Trace defines constants +type Trace string + +// TraceFormat defines constants +type TraceFormat string + +// ConnectionErrors defines constants +type ConnectionErrors float64 + +// ConnectionState defines constants +type ConnectionState float64 + const ( /*Comment defined: @@ -3890,6 +3929,42 @@ const ( * When the editor lost focus. */ FocusOut TextDocumentSaveReason = 3 + + // MessageWriteError is + MessageWriteError ErrorCodes = 1 + + // MessageReadError is + MessageReadError ErrorCodes = 2 + + // First is + First Touch = 1 + + // Last is + Last Touch = 2 + + // JSON is + JSON TraceFormat = "json" + + /*Closed defined: + * The connection is closed. + */ + Closed ConnectionErrors = 1 + + /*Disposed defined: + * The connection got disposed. + */ + Disposed ConnectionErrors = 2 + + /*AlreadyListening defined: + * The connection is already in listening mode. + */ + AlreadyListening ConnectionErrors = 3 + + // New is + New ConnectionState = 1 + + // Listening is + Listening ConnectionState = 2 ) // DocumentFilter is a type @@ -3949,3 +4024,12 @@ type DefinitionLink LocationLink * by the client. */ type DeclarationLink LocationLink + +// LSPMessageType is a type +/** + * A LSP Log Entry. + */ +type LSPMessageType string + +// TraceValues is a type +type TraceValues string diff --git a/internal/lsp/protocol/server.go b/internal/lsp/protocol/tsserver.go similarity index 80% rename from internal/lsp/protocol/server.go rename to internal/lsp/protocol/tsserver.go index d2cbb669..e756b79c 100644 --- a/internal/lsp/protocol/server.go +++ b/internal/lsp/protocol/tsserver.go @@ -1,9 +1,7 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - package protocol +//automatically generated + import ( "context" "encoding/json" @@ -13,49 +11,234 @@ import ( ) type Server interface { - Initialize(context.Context, *InitializeParams) (*InitializeResult, error) - Initialized(context.Context, *InitializedParams) error - Shutdown(context.Context) error - Exit(context.Context) error DidChangeWorkspaceFolders(context.Context, *DidChangeWorkspaceFoldersParams) error + Initialized(context.Context, *InitializedParams) error + Exit(context.Context) error DidChangeConfiguration(context.Context, *DidChangeConfigurationParams) error - DidChangeWatchedFiles(context.Context, *DidChangeWatchedFilesParams) error - Symbol(context.Context, *WorkspaceSymbolParams) ([]SymbolInformation, error) - ExecuteCommand(context.Context, *ExecuteCommandParams) (interface{}, error) DidOpen(context.Context, *DidOpenTextDocumentParams) error DidChange(context.Context, *DidChangeTextDocumentParams) error - WillSave(context.Context, *WillSaveTextDocumentParams) error - WillSaveWaitUntil(context.Context, *WillSaveTextDocumentParams) ([]TextEdit, error) - DidSave(context.Context, *DidSaveTextDocumentParams) error DidClose(context.Context, *DidCloseTextDocumentParams) error + DidSave(context.Context, *DidSaveTextDocumentParams) error + WillSave(context.Context, *WillSaveTextDocumentParams) error + DidChangeWatchedFiles(context.Context, *DidChangeWatchedFilesParams) error + SetTraceNotification(context.Context, *SetTraceParams) error + LogTraceNotification(context.Context, *LogTraceParams) error + Implementation(context.Context, *TextDocumentPositionParams) ([]Location, error) + TypeDefinition(context.Context, *TextDocumentPositionParams) ([]Location, error) + DocumentColor(context.Context, *DocumentColorParams) ([]ColorInformation, error) + ColorPresentation(context.Context, *ColorPresentationParams) ([]ColorPresentation, error) + FoldingRange(context.Context, *FoldingRangeParams) ([]FoldingRange, error) + Declaration(context.Context, *TextDocumentPositionParams) ([]DeclarationLink, error) + SelectionRange(context.Context, *SelectionRangeParams) ([][]SelectionRange, error) + Initialize(context.Context, *InitializeParams) (*InitializeResult, error) + Shutdown(context.Context) error + WillSaveWaitUntil(context.Context, *WillSaveTextDocumentParams) ([]TextEdit, error) Completion(context.Context, *CompletionParams) (*CompletionList, error) - CompletionResolve(context.Context, *CompletionItem) (*CompletionItem, error) + Resolve(context.Context, *CompletionItem) (*CompletionItem, error) Hover(context.Context, *TextDocumentPositionParams) (*Hover, error) SignatureHelp(context.Context, *TextDocumentPositionParams) (*SignatureHelp, error) Definition(context.Context, *TextDocumentPositionParams) ([]Location, error) - TypeDefinition(context.Context, *TextDocumentPositionParams) ([]Location, error) - Implementation(context.Context, *TextDocumentPositionParams) ([]Location, error) References(context.Context, *ReferenceParams) ([]Location, error) DocumentHighlight(context.Context, *TextDocumentPositionParams) ([]DocumentHighlight, error) DocumentSymbol(context.Context, *DocumentSymbolParams) ([]DocumentSymbol, error) + Symbol(context.Context, *WorkspaceSymbolParams) ([]SymbolInformation, error) CodeAction(context.Context, *CodeActionParams) ([]CodeAction, error) CodeLens(context.Context, *CodeLensParams) ([]CodeLens, error) - CodeLensResolve(context.Context, *CodeLens) (*CodeLens, error) - DocumentLink(context.Context, *DocumentLinkParams) ([]DocumentLink, error) - DocumentLinkResolve(context.Context, *DocumentLink) (*DocumentLink, error) - DocumentColor(context.Context, *DocumentColorParams) ([]ColorInformation, error) - ColorPresentation(context.Context, *ColorPresentationParams) ([]ColorPresentation, error) + ResolveCodeLens(context.Context, *CodeLens) (*CodeLens, error) Formatting(context.Context, *DocumentFormattingParams) ([]TextEdit, error) RangeFormatting(context.Context, *DocumentRangeFormattingParams) ([]TextEdit, error) OnTypeFormatting(context.Context, *DocumentOnTypeFormattingParams) ([]TextEdit, error) - Rename(context.Context, *RenameParams) ([]WorkspaceEdit, error) - FoldingRange(context.Context, *FoldingRangeParams) ([]FoldingRange, error) + Rename(context.Context, *RenameParams) (*WorkspaceEdit, error) + PrepareRename(context.Context, *TextDocumentPositionParams) (*Range, error) + DocumentLink(context.Context, *DocumentLinkParams) ([]DocumentLink, error) + ResolveDocumentLink(context.Context, *DocumentLink) (*DocumentLink, error) + ExecuteCommand(context.Context, *ExecuteCommandParams) (interface{}, error) } func serverHandler(log xlog.Logger, server Server) jsonrpc2.Handler { return func(ctx context.Context, conn *jsonrpc2.Conn, r *jsonrpc2.Request) { switch r.Method { - case "initialize": + case "$/cancelRequest": + var params CancelParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + conn.Cancel(params.ID) + case "workspace/didChangeWorkspaceFolders": // notif + var params DidChangeWorkspaceFoldersParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := server.DidChangeWorkspaceFolders(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "initialized": // notif + var params InitializedParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := server.Initialized(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "exit": // notif + if err := server.Exit(ctx); err != nil { + log.Errorf(ctx, "%v", err) + } + case "workspace/didChangeConfiguration": // notif + var params DidChangeConfigurationParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := server.DidChangeConfiguration(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/didOpen": // notif + var params DidOpenTextDocumentParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := server.DidOpen(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/didChange": // notif + var params DidChangeTextDocumentParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := server.DidChange(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/didClose": // notif + var params DidCloseTextDocumentParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := server.DidClose(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/didSave": // notif + var params DidSaveTextDocumentParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := server.DidSave(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/willSave": // notif + var params WillSaveTextDocumentParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := server.WillSave(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "workspace/didChangeWatchedFiles": // notif + var params DidChangeWatchedFilesParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := server.DidChangeWatchedFiles(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "$/setTraceNotification": // notif + var params SetTraceParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := server.SetTraceNotification(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "$/logTraceNotification": // notif + var params LogTraceParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + if err := server.LogTraceNotification(ctx, ¶ms); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/implementation": // req + var params TextDocumentPositionParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.Implementation(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/typeDefinition": // req + var params TextDocumentPositionParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.TypeDefinition(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/documentColor": // req + var params DocumentColorParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.DocumentColor(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/colorPresentation": // req + var params ColorPresentationParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.ColorPresentation(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/foldingRange": // req + var params FoldingRangeParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.FoldingRange(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/declaration": // req + var params TextDocumentPositionParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.Declaration(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/selectionRange": // req + var params SelectionRangeParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.SelectionRange(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "initialize": // req var params InitializeParams if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) @@ -65,76 +248,105 @@ func serverHandler(log xlog.Logger, server Server) jsonrpc2.Handler { if err := conn.Reply(ctx, r, resp, err); err != nil { log.Errorf(ctx, "%v", err) } - - case "initialized": - var params InitializedParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - if err := server.Initialized(ctx, ¶ms); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "shutdown": + case "shutdown": // req if r.Params != nil { conn.Reply(ctx, r, nil, jsonrpc2.NewErrorf(jsonrpc2.CodeInvalidParams, "Expected no params")) return } - if err := server.Shutdown(ctx); err == nil { - conn.Reply(ctx, r, nil, nil) - } else { + if err := server.Shutdown(ctx); err != nil { log.Errorf(ctx, "%v", err) } - - case "exit": - if r.Params != nil { - conn.Reply(ctx, r, nil, jsonrpc2.NewErrorf(jsonrpc2.CodeInvalidParams, "Expected no params")) - return - } - if err := server.Exit(ctx); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "$/cancelRequest": - var params CancelParams + case "textDocument/willSaveWaitUntil": // req + var params WillSaveTextDocumentParams if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) return } - conn.Cancel(params.ID) - - case "workspace/didChangeWorkspaceFolders": - var params DidChangeWorkspaceFoldersParams + resp, err := server.WillSaveWaitUntil(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/completion": // req + var params CompletionParams if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) return } - if err := server.DidChangeWorkspaceFolders(ctx, ¶ms); err != nil { + resp, err := server.Completion(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { log.Errorf(ctx, "%v", err) } - - case "workspace/didChangeConfiguration": - var params DidChangeConfigurationParams + case "completionItem/resolve": // req + var params CompletionItem if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) return } - if err := server.DidChangeConfiguration(ctx, ¶ms); err != nil { + resp, err := server.Resolve(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { log.Errorf(ctx, "%v", err) } - - case "workspace/didChangeWatchedFiles": - var params DidChangeWatchedFilesParams + case "textDocument/hover": // req + var params TextDocumentPositionParams if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) return } - if err := server.DidChangeWatchedFiles(ctx, ¶ms); err != nil { + resp, err := server.Hover(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { log.Errorf(ctx, "%v", err) } - - case "workspace/symbol": + case "textDocument/signatureHelp": // req + var params TextDocumentPositionParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.SignatureHelp(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/definition": // req + var params TextDocumentPositionParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.Definition(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/references": // req + var params ReferenceParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.References(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/documentHighlight": // req + var params TextDocumentPositionParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.DocumentHighlight(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/documentSymbol": // req + var params DocumentSymbolParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.DocumentSymbol(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "workspace/symbol": // req var params WorkspaceSymbolParams if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) @@ -144,8 +356,107 @@ func serverHandler(log xlog.Logger, server Server) jsonrpc2.Handler { if err := conn.Reply(ctx, r, resp, err); err != nil { log.Errorf(ctx, "%v", err) } - - case "workspace/executeCommand": + case "textDocument/codeAction": // req + var params CodeActionParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.CodeAction(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/codeLens": // req + var params CodeLensParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.CodeLens(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "codeLens/resolve": // req + var params CodeLens + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.ResolveCodeLens(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/formatting": // req + var params DocumentFormattingParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.Formatting(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/rangeFormatting": // req + var params DocumentRangeFormattingParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.RangeFormatting(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/onTypeFormatting": // req + var params DocumentOnTypeFormattingParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.OnTypeFormatting(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/rename": // req + var params RenameParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.Rename(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/prepareRename": // req + var params TextDocumentPositionParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.PrepareRename(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "textDocument/documentLink": // req + var params DocumentLinkParams + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.DocumentLink(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "documentLink/resolve": // req + var params DocumentLink + if err := json.Unmarshal(*r.Params, ¶ms); err != nil { + sendParseError(ctx, log, conn, r, err) + return + } + resp, err := server.ResolveDocumentLink(ctx, ¶ms) + if err := conn.Reply(ctx, r, resp, err); err != nil { + log.Errorf(ctx, "%v", err) + } + case "workspace/executeCommand": // req var params ExecuteCommandParams if err := json.Unmarshal(*r.Params, ¶ms); err != nil { sendParseError(ctx, log, conn, r, err) @@ -156,308 +467,6 @@ func serverHandler(log xlog.Logger, server Server) jsonrpc2.Handler { log.Errorf(ctx, "%v", err) } - case "textDocument/didOpen": - var params DidOpenTextDocumentParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - if err := server.DidOpen(ctx, ¶ms); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/didChange": - var params DidChangeTextDocumentParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - if err := server.DidChange(ctx, ¶ms); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/willSave": - var params WillSaveTextDocumentParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - if err := server.WillSave(ctx, ¶ms); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/willSaveWaitUntil": - var params WillSaveTextDocumentParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.WillSaveWaitUntil(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/didSave": - var params DidSaveTextDocumentParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - if err := server.DidSave(ctx, ¶ms); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/didClose": - var params DidCloseTextDocumentParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - if err := server.DidClose(ctx, ¶ms); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/completion": - var params CompletionParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.Completion(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "completionItem/resolve": - var params CompletionItem - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.CompletionResolve(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/hover": - var params TextDocumentPositionParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.Hover(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/signatureHelp": - var params TextDocumentPositionParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.SignatureHelp(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/definition": - var params TextDocumentPositionParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.Definition(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/typeDefinition": - var params TextDocumentPositionParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.TypeDefinition(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/implementation": - var params TextDocumentPositionParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.Implementation(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/references": - var params ReferenceParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.References(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/documentHighlight": - var params TextDocumentPositionParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.DocumentHighlight(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/documentSymbol": - var params DocumentSymbolParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.DocumentSymbol(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/codeAction": - var params CodeActionParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.CodeAction(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/codeLens": - var params CodeLensParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.CodeLens(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "codeLens/resolve": - var params CodeLens - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.CodeLensResolve(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/documentLink": - var params DocumentLinkParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.DocumentLink(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "documentLink/resolve": - var params DocumentLink - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.DocumentLinkResolve(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/documentColor": - var params DocumentColorParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.DocumentColor(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/colorPresentation": - var params ColorPresentationParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.ColorPresentation(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/formatting": - var params DocumentFormattingParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.Formatting(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/rangeFormatting": - var params DocumentRangeFormattingParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.RangeFormatting(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/onTypeFormatting": - var params DocumentOnTypeFormattingParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.OnTypeFormatting(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/rename": - var params RenameParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.Rename(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } - - case "textDocument/foldingRange": - var params FoldingRangeParams - if err := json.Unmarshal(*r.Params, ¶ms); err != nil { - sendParseError(ctx, log, conn, r, err) - return - } - resp, err := server.FoldingRange(ctx, ¶ms) - if err := conn.Reply(ctx, r, resp, err); err != nil { - log.Errorf(ctx, "%v", err) - } default: if r.IsNotify() { conn.Reply(ctx, r, nil, jsonrpc2.NewErrorf(jsonrpc2.CodeMethodNotFound, "method %q not found", r.Method)) @@ -470,54 +479,22 @@ type serverDispatcher struct { *jsonrpc2.Conn } -func (s *serverDispatcher) Initialize(ctx context.Context, params *InitializeParams) (*InitializeResult, error) { - var result InitializeResult - if err := s.Conn.Call(ctx, "initialize", params, &result); err != nil { - return nil, err - } - return &result, nil +func (s *serverDispatcher) DidChangeWorkspaceFolders(ctx context.Context, params *DidChangeWorkspaceFoldersParams) error { + return s.Conn.Notify(ctx, "workspace/didChangeWorkspaceFolders", params) } func (s *serverDispatcher) Initialized(ctx context.Context, params *InitializedParams) error { return s.Conn.Notify(ctx, "initialized", params) } -func (s *serverDispatcher) Shutdown(ctx context.Context) error { - return s.Conn.Call(ctx, "shutdown", nil, nil) -} - func (s *serverDispatcher) Exit(ctx context.Context) error { return s.Conn.Notify(ctx, "exit", nil) } -func (s *serverDispatcher) DidChangeWorkspaceFolders(ctx context.Context, params *DidChangeWorkspaceFoldersParams) error { - return s.Conn.Notify(ctx, "workspace/didChangeWorkspaceFolders", params) -} - func (s *serverDispatcher) DidChangeConfiguration(ctx context.Context, params *DidChangeConfigurationParams) error { return s.Conn.Notify(ctx, "workspace/didChangeConfiguration", params) } -func (s *serverDispatcher) DidChangeWatchedFiles(ctx context.Context, params *DidChangeWatchedFilesParams) error { - return s.Conn.Notify(ctx, "workspace/didChangeWatchedFiles", params) -} - -func (s *serverDispatcher) Symbol(ctx context.Context, params *WorkspaceSymbolParams) ([]SymbolInformation, error) { - var result []SymbolInformation - if err := s.Conn.Call(ctx, "workspace/symbol", params, &result); err != nil { - return nil, err - } - return result, nil -} - -func (s *serverDispatcher) ExecuteCommand(ctx context.Context, params *ExecuteCommandParams) (interface{}, error) { - var result interface{} - if err := s.Conn.Call(ctx, "workspace/executeCommand", params, &result); err != nil { - return nil, err - } - return result, nil -} - func (s *serverDispatcher) DidOpen(ctx context.Context, params *DidOpenTextDocumentParams) error { return s.Conn.Notify(ctx, "textDocument/didOpen", params) } @@ -526,10 +503,97 @@ func (s *serverDispatcher) DidChange(ctx context.Context, params *DidChangeTextD return s.Conn.Notify(ctx, "textDocument/didChange", params) } +func (s *serverDispatcher) DidClose(ctx context.Context, params *DidCloseTextDocumentParams) error { + return s.Conn.Notify(ctx, "textDocument/didClose", params) +} + +func (s *serverDispatcher) DidSave(ctx context.Context, params *DidSaveTextDocumentParams) error { + return s.Conn.Notify(ctx, "textDocument/didSave", params) +} + func (s *serverDispatcher) WillSave(ctx context.Context, params *WillSaveTextDocumentParams) error { return s.Conn.Notify(ctx, "textDocument/willSave", params) } +func (s *serverDispatcher) DidChangeWatchedFiles(ctx context.Context, params *DidChangeWatchedFilesParams) error { + return s.Conn.Notify(ctx, "workspace/didChangeWatchedFiles", params) +} + +func (s *serverDispatcher) SetTraceNotification(ctx context.Context, params *SetTraceParams) error { + return s.Conn.Notify(ctx, "$/setTraceNotification", params) +} + +func (s *serverDispatcher) LogTraceNotification(ctx context.Context, params *LogTraceParams) error { + return s.Conn.Notify(ctx, "$/logTraceNotification", params) +} +func (s *serverDispatcher) Implementation(ctx context.Context, params *TextDocumentPositionParams) ([]Location, error) { + var result []Location + if err := s.Conn.Call(ctx, "textDocument/implementation", params, &result); err != nil { + return nil, err + } + return result, nil +} + +func (s *serverDispatcher) TypeDefinition(ctx context.Context, params *TextDocumentPositionParams) ([]Location, error) { + var result []Location + if err := s.Conn.Call(ctx, "textDocument/typeDefinition", params, &result); err != nil { + return nil, err + } + return result, nil +} + +func (s *serverDispatcher) DocumentColor(ctx context.Context, params *DocumentColorParams) ([]ColorInformation, error) { + var result []ColorInformation + if err := s.Conn.Call(ctx, "textDocument/documentColor", params, &result); err != nil { + return nil, err + } + return result, nil +} + +func (s *serverDispatcher) ColorPresentation(ctx context.Context, params *ColorPresentationParams) ([]ColorPresentation, error) { + var result []ColorPresentation + if err := s.Conn.Call(ctx, "textDocument/colorPresentation", params, &result); err != nil { + return nil, err + } + return result, nil +} + +func (s *serverDispatcher) FoldingRange(ctx context.Context, params *FoldingRangeParams) ([]FoldingRange, error) { + var result []FoldingRange + if err := s.Conn.Call(ctx, "textDocument/foldingRange", params, &result); err != nil { + return nil, err + } + return result, nil +} + +func (s *serverDispatcher) Declaration(ctx context.Context, params *TextDocumentPositionParams) ([]DeclarationLink, error) { + var result []DeclarationLink + if err := s.Conn.Call(ctx, "textDocument/declaration", params, &result); err != nil { + return nil, err + } + return result, nil +} + +func (s *serverDispatcher) SelectionRange(ctx context.Context, params *SelectionRangeParams) ([][]SelectionRange, error) { + var result [][]SelectionRange + if err := s.Conn.Call(ctx, "textDocument/selectionRange", params, &result); err != nil { + return nil, err + } + return result, nil +} + +func (s *serverDispatcher) Initialize(ctx context.Context, params *InitializeParams) (*InitializeResult, error) { + var result InitializeResult + if err := s.Conn.Call(ctx, "initialize", params, &result); err != nil { + return nil, err + } + return &result, nil +} + +func (s *serverDispatcher) Shutdown(ctx context.Context) error { + return s.Conn.Call(ctx, "shutdown", nil, nil) +} + func (s *serverDispatcher) WillSaveWaitUntil(ctx context.Context, params *WillSaveTextDocumentParams) ([]TextEdit, error) { var result []TextEdit if err := s.Conn.Call(ctx, "textDocument/willSaveWaitUntil", params, &result); err != nil { @@ -538,14 +602,6 @@ func (s *serverDispatcher) WillSaveWaitUntil(ctx context.Context, params *WillSa return result, nil } -func (s *serverDispatcher) DidSave(ctx context.Context, params *DidSaveTextDocumentParams) error { - return s.Conn.Notify(ctx, "textDocument/didSave", params) -} - -func (s *serverDispatcher) DidClose(ctx context.Context, params *DidCloseTextDocumentParams) error { - return s.Conn.Notify(ctx, "textDocument/didClose", params) -} - func (s *serverDispatcher) Completion(ctx context.Context, params *CompletionParams) (*CompletionList, error) { var result CompletionList if err := s.Conn.Call(ctx, "textDocument/completion", params, &result); err != nil { @@ -554,7 +610,7 @@ func (s *serverDispatcher) Completion(ctx context.Context, params *CompletionPar return &result, nil } -func (s *serverDispatcher) CompletionResolve(ctx context.Context, params *CompletionItem) (*CompletionItem, error) { +func (s *serverDispatcher) Resolve(ctx context.Context, params *CompletionItem) (*CompletionItem, error) { var result CompletionItem if err := s.Conn.Call(ctx, "completionItem/resolve", params, &result); err != nil { return nil, err @@ -586,22 +642,6 @@ func (s *serverDispatcher) Definition(ctx context.Context, params *TextDocumentP return result, nil } -func (s *serverDispatcher) TypeDefinition(ctx context.Context, params *TextDocumentPositionParams) ([]Location, error) { - var result []Location - if err := s.Conn.Call(ctx, "textDocument/typeDefinition", params, &result); err != nil { - return nil, err - } - return result, nil -} - -func (s *serverDispatcher) Implementation(ctx context.Context, params *TextDocumentPositionParams) ([]Location, error) { - var result []Location - if err := s.Conn.Call(ctx, "textDocument/implementation", params, &result); err != nil { - return nil, err - } - return result, nil -} - func (s *serverDispatcher) References(ctx context.Context, params *ReferenceParams) ([]Location, error) { var result []Location if err := s.Conn.Call(ctx, "textDocument/references", params, &result); err != nil { @@ -626,6 +666,14 @@ func (s *serverDispatcher) DocumentSymbol(ctx context.Context, params *DocumentS return result, nil } +func (s *serverDispatcher) Symbol(ctx context.Context, params *WorkspaceSymbolParams) ([]SymbolInformation, error) { + var result []SymbolInformation + if err := s.Conn.Call(ctx, "workspace/symbol", params, &result); err != nil { + return nil, err + } + return result, nil +} + func (s *serverDispatcher) CodeAction(ctx context.Context, params *CodeActionParams) ([]CodeAction, error) { var result []CodeAction if err := s.Conn.Call(ctx, "textDocument/codeAction", params, &result); err != nil { @@ -642,7 +690,7 @@ func (s *serverDispatcher) CodeLens(ctx context.Context, params *CodeLensParams) return result, nil } -func (s *serverDispatcher) CodeLensResolve(ctx context.Context, params *CodeLens) (*CodeLens, error) { +func (s *serverDispatcher) ResolveCodeLens(ctx context.Context, params *CodeLens) (*CodeLens, error) { var result CodeLens if err := s.Conn.Call(ctx, "codeLens/resolve", params, &result); err != nil { return nil, err @@ -650,38 +698,6 @@ func (s *serverDispatcher) CodeLensResolve(ctx context.Context, params *CodeLens return &result, nil } -func (s *serverDispatcher) DocumentLink(ctx context.Context, params *DocumentLinkParams) ([]DocumentLink, error) { - var result []DocumentLink - if err := s.Conn.Call(ctx, "textDocument/documentLink", params, &result); err != nil { - return nil, err - } - return result, nil -} - -func (s *serverDispatcher) DocumentLinkResolve(ctx context.Context, params *DocumentLink) (*DocumentLink, error) { - var result DocumentLink - if err := s.Conn.Call(ctx, "documentLink/resolve", params, &result); err != nil { - return nil, err - } - return &result, nil -} - -func (s *serverDispatcher) DocumentColor(ctx context.Context, params *DocumentColorParams) ([]ColorInformation, error) { - var result []ColorInformation - if err := s.Conn.Call(ctx, "textDocument/documentColor", params, &result); err != nil { - return nil, err - } - return result, nil -} - -func (s *serverDispatcher) ColorPresentation(ctx context.Context, params *ColorPresentationParams) ([]ColorPresentation, error) { - var result []ColorPresentation - if err := s.Conn.Call(ctx, "textDocument/colorPresentation", params, &result); err != nil { - return nil, err - } - return result, nil -} - func (s *serverDispatcher) Formatting(ctx context.Context, params *DocumentFormattingParams) ([]TextEdit, error) { var result []TextEdit if err := s.Conn.Call(ctx, "textDocument/formatting", params, &result); err != nil { @@ -706,17 +722,41 @@ func (s *serverDispatcher) OnTypeFormatting(ctx context.Context, params *Documen return result, nil } -func (s *serverDispatcher) Rename(ctx context.Context, params *RenameParams) ([]WorkspaceEdit, error) { - var result []WorkspaceEdit +func (s *serverDispatcher) Rename(ctx context.Context, params *RenameParams) (*WorkspaceEdit, error) { + var result WorkspaceEdit if err := s.Conn.Call(ctx, "textDocument/rename", params, &result); err != nil { return nil, err } + return &result, nil +} + +func (s *serverDispatcher) PrepareRename(ctx context.Context, params *TextDocumentPositionParams) (*Range, error) { + var result Range + if err := s.Conn.Call(ctx, "textDocument/prepareRename", params, &result); err != nil { + return nil, err + } + return &result, nil +} + +func (s *serverDispatcher) DocumentLink(ctx context.Context, params *DocumentLinkParams) ([]DocumentLink, error) { + var result []DocumentLink + if err := s.Conn.Call(ctx, "textDocument/documentLink", params, &result); err != nil { + return nil, err + } return result, nil } -func (s *serverDispatcher) FoldingRange(ctx context.Context, params *FoldingRangeParams) ([]FoldingRange, error) { - var result []FoldingRange - if err := s.Conn.Call(ctx, "textDocument/foldingRange", params, &result); err != nil { +func (s *serverDispatcher) ResolveDocumentLink(ctx context.Context, params *DocumentLink) (*DocumentLink, error) { + var result DocumentLink + if err := s.Conn.Call(ctx, "documentLink/resolve", params, &result); err != nil { + return nil, err + } + return &result, nil +} + +func (s *serverDispatcher) ExecuteCommand(ctx context.Context, params *ExecuteCommandParams) (interface{}, error) { + var result interface{} + if err := s.Conn.Call(ctx, "workspace/executeCommand", params, &result); err != nil { return nil, err } return result, nil diff --git a/internal/lsp/server.go b/internal/lsp/server.go index 1f2d37bc..63533e80 100644 --- a/internal/lsp/server.go +++ b/internal/lsp/server.go @@ -206,16 +206,16 @@ func (s *Server) CodeLens(context.Context, *protocol.CodeLensParams) ([]protocol return nil, nil // ignore } -func (s *Server) CodeLensResolve(context.Context, *protocol.CodeLens) (*protocol.CodeLens, error) { - return nil, notImplemented("CodeLensResolve") +func (s *Server) ResolveCodeLens(context.Context, *protocol.CodeLens) (*protocol.CodeLens, error) { + return nil, notImplemented("ResolveCodeLens") } func (s *Server) DocumentLink(context.Context, *protocol.DocumentLinkParams) ([]protocol.DocumentLink, error) { return nil, nil // ignore } -func (s *Server) DocumentLinkResolve(context.Context, *protocol.DocumentLink) (*protocol.DocumentLink, error) { - return nil, notImplemented("DocumentLinkResolve") +func (s *Server) ResolveDocumentLink(context.Context, *protocol.DocumentLink) (*protocol.DocumentLink, error) { + return nil, notImplemented("ResolveDocumentLink") } func (s *Server) DocumentColor(context.Context, *protocol.DocumentColorParams) ([]protocol.ColorInformation, error) { @@ -238,14 +238,37 @@ func (s *Server) OnTypeFormatting(context.Context, *protocol.DocumentOnTypeForma return nil, notImplemented("OnTypeFormatting") } -func (s *Server) Rename(context.Context, *protocol.RenameParams) ([]protocol.WorkspaceEdit, error) { +func (s *Server) Rename(context.Context, *protocol.RenameParams) (*protocol.WorkspaceEdit, error) { return nil, notImplemented("Rename") } +func (s *Server) Declaration(context.Context, *protocol.TextDocumentPositionParams) ([]protocol.DeclarationLink, error) { + return nil, notImplemented("Declaration") +} + func (s *Server) FoldingRange(context.Context, *protocol.FoldingRangeParams) ([]protocol.FoldingRange, error) { return nil, notImplemented("FoldingRange") } +func (s *Server) LogTraceNotification(context.Context, *protocol.LogTraceParams) error { + return notImplemented("LogtraceNotification") +} + +func (s *Server) PrepareRename(context.Context, *protocol.TextDocumentPositionParams) (*protocol.Range, error) { + return nil, notImplemented("PrepareRename") +} + +func (s *Server) Resolve(context.Context, *protocol.CompletionItem) (*protocol.CompletionItem, error) { + return nil, notImplemented("Resolve") +} + +func (s *Server) SelectionRange(context.Context, *protocol.SelectionRangeParams) ([][]protocol.SelectionRange, error) { + return nil, notImplemented("SelectionRange") +} + +func (s *Server) SetTraceNotification(context.Context, *protocol.SetTraceParams) error { + return notImplemented("SetTraceNotification") +} func notImplemented(method string) *jsonrpc2.Error { return jsonrpc2.NewErrorf(jsonrpc2.CodeMethodNotFound, "method %q not yet implemented", method) }