首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >golang源码分析 :gopls(12)

golang源码分析 :gopls(12)

作者头像
golangLeetcode
发布2026-03-18 18:19:50
发布2026-03-18 18:19:50
830
举报

下面分别看下生成的四个文件 tsclient.go

代码语言:javascript
复制
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的具体实现,并且生成了一个分发函数

代码语言:javascript
复制
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(), &params); err != nil {
            return true, sendParseError(ctx, reply, err)
        }
        err := client.LogTrace(ctx, &params)
        return true, reply(ctx, nil, err)

tsserver.go也是类似的

代码语言:javascript
复制
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)
}
代码语言:javascript
复制
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(), &params); err != nil {
            return true, sendParseError(ctx, reply, err)
        }
        err := server.Progress(ctx, &params)
        return true, reply(ctx, nil, err)

tsprotocol.go定义了交互需要的结构体和一些枚举

代码语言:javascript
复制
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序列化

代码语言:javascript
复制
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的定义文件。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档