暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

golang源码分析 :gopls(10)

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

  • 文本同步
    textDocument/didOpen
    textDocument/didChange
    textDocument/didClose
  • 代码补全
    textDocument/completion
  • 定义跳转
    textDocument/definition
    textDocument/typeDefinition
  • 引用查找
    textDocument/references
  • 符号搜索
    textDocument/documentSymbol
    workspace/symbol
  • 代码诊断
    textDocument/publishDiagnostics
  • 代码格式化
    textDocument/formatting
    textDocument/rangeFormatting

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

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

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

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

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

 工具链集成接口

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

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

    文章转载自golang算法架构leetcode技术php,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论