
下面分别看下生成的四个文件 tsclient.go
type Client interface {
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#logTrace
LogTrace(context.Context, *LogTraceParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#progress
Progress(context.Context, *ProgressParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#client_registerCapability
RegisterCapability(context.Context, *RegistrationParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#client_unregisterCapability
UnregisterCapability(context.Context, *UnregistrationParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#telemetry_event
Event(context.Context, *any) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_publishDiagnostics
PublishDiagnostics(context.Context, *PublishDiagnosticsParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#window_logMessage
LogMessage(context.Context, *LogMessageParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#window_showDocument
ShowDocument(context.Context, *ShowDocumentParams) (*ShowDocumentResult, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#window_showMessage
ShowMessage(context.Context, *ShowMessageParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#window_showMessageRequest
ShowMessageRequest(context.Context, *ShowMessageRequestParams) (*MessageActionItem, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#window_workDoneProgress_create
WorkDoneProgressCreate(context.Context, *WorkDoneProgressCreateParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_applyEdit
ApplyEdit(context.Context, *ApplyWorkspaceEditParams) (*ApplyWorkspaceEditResult, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_codeLens_refresh
CodeLensRefresh(context.Context) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_configuration
Configuration(context.Context, *ParamConfiguration) ([]LSPAny, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_diagnostic_refresh
DiagnosticRefresh(context.Context) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_foldingRange_refresh
FoldingRangeRefresh(context.Context) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_inlayHint_refresh
InlayHintRefresh(context.Context) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_inlineValue_refresh
InlineValueRefresh(context.Context) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_semanticTokens_refresh
SemanticTokensRefresh(context.Context) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_textDocumentContent_refresh
TextDocumentContentRefresh(context.Context, *TextDocumentContentRefreshParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_workspaceFolders
WorkspaceFolders(context.Context) ([]WorkspaceFolder, error)
}实现了client接口和client的具体实现,并且生成了一个分发函数
func clientDispatch(ctx context.Context, client Client, reply jsonrpc2.Replier, r jsonrpc2.Request) (bool, error) {
defer recoverHandlerPanic(r.Method())
switch r.Method() {
case "$/logTrace":
var params LogTraceParams
if err := UnmarshalJSON(r.Params(), ¶ms); err != nil {
return true, sendParseError(ctx, reply, err)
}
err := client.LogTrace(ctx, ¶ms)
return true, reply(ctx, nil, err)tsserver.go也是类似的
type Server interface {
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#progress
Progress(context.Context, *ProgressParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#setTrace
SetTrace(context.Context, *SetTraceParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchy_incomingCalls
IncomingCalls(context.Context, *CallHierarchyIncomingCallsParams) ([]CallHierarchyIncomingCall, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchy_outgoingCalls
OutgoingCalls(context.Context, *CallHierarchyOutgoingCallsParams) ([]CallHierarchyOutgoingCall, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeAction_resolve
ResolveCodeAction(context.Context, *CodeAction) (*CodeAction, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeLens_resolve
ResolveCodeLens(context.Context, *CodeLens) (*CodeLens, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionItem_resolve
ResolveCompletionItem(context.Context, *CompletionItem) (*CompletionItem, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentLink_resolve
ResolveDocumentLink(context.Context, *DocumentLink) (*DocumentLink, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#exit
Exit(context.Context) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#initialize
Initialize(context.Context, *ParamInitialize) (*InitializeResult, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#initialized
Initialized(context.Context, *InitializedParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlayHint_resolve
Resolve(context.Context, *InlayHint) (*InlayHint, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocument_didChange
DidChangeNotebookDocument(context.Context, *DidChangeNotebookDocumentParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocument_didClose
DidCloseNotebookDocument(context.Context, *DidCloseNotebookDocumentParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocument_didOpen
DidOpenNotebookDocument(context.Context, *DidOpenNotebookDocumentParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocument_didSave
DidSaveNotebookDocument(context.Context, *DidSaveNotebookDocumentParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#shutdown
Shutdown(context.Context) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_codeAction
CodeAction(context.Context, *CodeActionParams) ([]CodeAction, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_codeLens
CodeLens(context.Context, *CodeLensParams) ([]CodeLens, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_colorPresentation
ColorPresentation(context.Context, *ColorPresentationParams) ([]ColorPresentation, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_completion
Completion(context.Context, *CompletionParams) (*CompletionList, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_declaration
Declaration(context.Context, *DeclarationParams) (*Or_textDocument_declaration, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_definition
Definition(context.Context, *DefinitionParams) ([]Location, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_diagnostic
Diagnostic(context.Context, *DocumentDiagnosticParams) (*DocumentDiagnosticReport, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_didChange
DidChange(context.Context, *DidChangeTextDocumentParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_didClose
DidClose(context.Context, *DidCloseTextDocumentParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_didOpen
DidOpen(context.Context, *DidOpenTextDocumentParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_didSave
DidSave(context.Context, *DidSaveTextDocumentParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_documentColor
DocumentColor(context.Context, *DocumentColorParams) ([]ColorInformation, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_documentHighlight
DocumentHighlight(context.Context, *DocumentHighlightParams) ([]DocumentHighlight, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_documentLink
DocumentLink(context.Context, *DocumentLinkParams) ([]DocumentLink, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_documentSymbol
DocumentSymbol(context.Context, *DocumentSymbolParams) ([]any, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_foldingRange
FoldingRange(context.Context, *FoldingRangeParams) ([]FoldingRange, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_formatting
Formatting(context.Context, *DocumentFormattingParams) ([]TextEdit, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_hover
Hover(context.Context, *HoverParams) (*Hover, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_implementation
Implementation(context.Context, *ImplementationParams) ([]Location, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_inlayHint
InlayHint(context.Context, *InlayHintParams) ([]InlayHint, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_inlineCompletion
InlineCompletion(context.Context, *InlineCompletionParams) (*Or_Result_textDocument_inlineCompletion, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_inlineValue
InlineValue(context.Context, *InlineValueParams) ([]InlineValue, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_linkedEditingRange
LinkedEditingRange(context.Context, *LinkedEditingRangeParams) (*LinkedEditingRanges, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_moniker
Moniker(context.Context, *MonikerParams) ([]Moniker, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_onTypeFormatting
OnTypeFormatting(context.Context, *DocumentOnTypeFormattingParams) ([]TextEdit, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_prepareCallHierarchy
PrepareCallHierarchy(context.Context, *CallHierarchyPrepareParams) ([]CallHierarchyItem, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_prepareRename
PrepareRename(context.Context, *PrepareRenameParams) (*PrepareRenameResult, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_prepareTypeHierarchy
PrepareTypeHierarchy(context.Context, *TypeHierarchyPrepareParams) ([]TypeHierarchyItem, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_rangeFormatting
RangeFormatting(context.Context, *DocumentRangeFormattingParams) ([]TextEdit, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_rangesFormatting
RangesFormatting(context.Context, *DocumentRangesFormattingParams) ([]TextEdit, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_references
References(context.Context, *ReferenceParams) ([]Location, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_rename
Rename(context.Context, *RenameParams) (*WorkspaceEdit, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_selectionRange
SelectionRange(context.Context, *SelectionRangeParams) ([]SelectionRange, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_semanticTokens_full
SemanticTokensFull(context.Context, *SemanticTokensParams) (*SemanticTokens, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_semanticTokens_full_delta
SemanticTokensFullDelta(context.Context, *SemanticTokensDeltaParams) (any, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_semanticTokens_range
SemanticTokensRange(context.Context, *SemanticTokensRangeParams) (*SemanticTokens, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_signatureHelp
SignatureHelp(context.Context, *SignatureHelpParams) (*SignatureHelp, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_typeDefinition
TypeDefinition(context.Context, *TypeDefinitionParams) ([]Location, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_willSave
WillSave(context.Context, *WillSaveTextDocumentParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_willSaveWaitUntil
WillSaveWaitUntil(context.Context, *WillSaveTextDocumentParams) ([]TextEdit, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeHierarchy_subtypes
Subtypes(context.Context, *TypeHierarchySubtypesParams) ([]TypeHierarchyItem, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeHierarchy_supertypes
Supertypes(context.Context, *TypeHierarchySupertypesParams) ([]TypeHierarchyItem, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#window_workDoneProgress_cancel
WorkDoneProgressCancel(context.Context, *WorkDoneProgressCancelParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_diagnostic
DiagnosticWorkspace(context.Context, *WorkspaceDiagnosticParams) (*WorkspaceDiagnosticReport, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_didChangeConfiguration
DidChangeConfiguration(context.Context, *DidChangeConfigurationParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_didChangeWatchedFiles
DidChangeWatchedFiles(context.Context, *DidChangeWatchedFilesParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_didChangeWorkspaceFolders
DidChangeWorkspaceFolders(context.Context, *DidChangeWorkspaceFoldersParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_didCreateFiles
DidCreateFiles(context.Context, *CreateFilesParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_didDeleteFiles
DidDeleteFiles(context.Context, *DeleteFilesParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_didRenameFiles
DidRenameFiles(context.Context, *RenameFilesParams) error
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_executeCommand
ExecuteCommand(context.Context, *ExecuteCommandParams) (any, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_symbol
Symbol(context.Context, *WorkspaceSymbolParams) ([]SymbolInformation, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_textDocumentContent
TextDocumentContent(context.Context, *TextDocumentContentParams) (*string, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_willCreateFiles
WillCreateFiles(context.Context, *CreateFilesParams) (*WorkspaceEdit, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_willDeleteFiles
WillDeleteFiles(context.Context, *DeleteFilesParams) (*WorkspaceEdit, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_willRenameFiles
WillRenameFiles(context.Context, *RenameFilesParams) (*WorkspaceEdit, error)
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceSymbol_resolve
ResolveWorkspaceSymbol(context.Context, *WorkspaceSymbol) (*WorkspaceSymbol, error)
}func serverDispatch(ctx context.Context, server Server, reply jsonrpc2.Replier, r jsonrpc2.Request) (bool, error) {
defer recoverHandlerPanic(r.Method())
switch r.Method() {
case "$/progress":
var params ProgressParams
if err := UnmarshalJSON(r.Params(), ¶ms); err != nil {
return true, sendParseError(ctx, reply, err)
}
err := server.Progress(ctx, ¶ms)
return true, reply(ctx, nil, err)tsprotocol.go定义了交互需要的结构体和一些枚举
type CallHierarchyItem struct {
// The name of this item.
Name string `json:"name"`
// The kind of this item.
Kind SymbolKind `json:"kind"`
// Tags for this item.
Tags []SymbolTag `json:"tags,omitempty"`
// More detail for this item, e.g. the signature of a function.
Detail string `json:"detail,omitempty"`
// The resource identifier of this item.
URI DocumentURI `json:"uri"`
// The range enclosing this symbol not including leading/trailing whitespace but everything else, e.g. comments and code.
Range Range `json:"range"`
// The range that should be selected and revealed when this symbol is being picked, e.g. the name of a function.
// Must be contained by the {@link CallHierarchyItem.range `range`}.
SelectionRange Range `json:"selectionRange"`
// A data entry field that is preserved between a call hierarchy prepare and
// incoming calls or outgoing calls requests.
Data any `json:"data,omitempty"`
}tsjson.go定义了结构体的json序列化
func (t OrPLocation_workspace_symbol) MarshalJSON() ([]byte, error) {
switch x := t.Value.(type) {
case Location:
return json.Marshal(x)
case LocationUriOnly:
return json.Marshal(x)
case nil:
return []byte("null"), nil
}
return nil, fmt.Errorf("type %T not one of [Location LocationUriOnly]", t)
}整体看来,你可以把它和proto生成的pb文件对应,即根据lsp协议生成的json-rpc的定义文件。
本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!