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

golang源码分析 :gopls(10)

作者头像
golangLeetcode
发布2026-03-18 18:22:02
发布2026-03-18 18:22:02
780
举报

分析完一个featureCommands后,其他的22个都是类似的。它们的作用是将编辑器对源码的操作接口进行标准化,它的核心接口如下:‌

  • 文本同步textDocument/didOpentextDocument/didChangetextDocument/didClose
  • 代码补全textDocument/completion
  • 定义跳转textDocument/definitiontextDocument/typeDefinition
  • 引用查找textDocument/references
  • 符号搜索textDocument/documentSymbolworkspace/symbol
  • 代码诊断textDocument/publishDiagnostics
  • 代码格式化textDocument/formattingtextDocument/rangeFormatting

gopls除了实现上述标准接口外还实现了Go 语言特有扩展接口‌

  • 代码生成textDocument/codeAction(支持生成测试、实现接口等)
  • 重构操作textDocument/renametextDocument/prepareRename
  • 语义令牌textDocument/semanticTokens/full(增强语法高亮)
  • 工作区模块管理workspace/executeCommandgo.mod 依赖操作)

除此之外还实现了一系列其他能力:

内部核心接口(非 LSP 标准)

  • 缓存管理View(文件快照)、Snapshot(模块状态缓存)
  • 类型检查Package(集成 go/typesx/tools/go/packages
  • 代码分析Analyzer(静态检查规则,如 nilnessunused

工具链集成接口

  • 构建系统交互‌ 解析 go/buildgo list 输出
  • 调试支持Debug 端点(如 gopls/check_updates) server的接口定义位于internal/protocol/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)
}

研究这个文件的注释发现,这些接口都是通过代码生成的。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • gopls除了实现上述标准接口外还实现了Go 语言特有扩展接口‌
  • 除此之外还实现了一系列其他能力:
  • ‌ 内部核心接口(非 LSP 标准)‌
  • ‌ 工具链集成接口‌
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档