分析完一个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#progressProgress(context.Context, *ProgressParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#setTraceSetTrace(context.Context, *SetTraceParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchy_incomingCallsIncomingCalls(context.Context, *CallHierarchyIncomingCallsParams) ([]CallHierarchyIncomingCall, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchy_outgoingCallsOutgoingCalls(context.Context, *CallHierarchyOutgoingCallsParams) ([]CallHierarchyOutgoingCall, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeAction_resolveResolveCodeAction(context.Context, *CodeAction) (*CodeAction, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeLens_resolveResolveCodeLens(context.Context, *CodeLens) (*CodeLens, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionItem_resolveResolveCompletionItem(context.Context, *CompletionItem) (*CompletionItem, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentLink_resolveResolveDocumentLink(context.Context, *DocumentLink) (*DocumentLink, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#exitExit(context.Context) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#initializeInitialize(context.Context, *ParamInitialize) (*InitializeResult, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#initializedInitialized(context.Context, *InitializedParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlayHint_resolveResolve(context.Context, *InlayHint) (*InlayHint, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocument_didChangeDidChangeNotebookDocument(context.Context, *DidChangeNotebookDocumentParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocument_didCloseDidCloseNotebookDocument(context.Context, *DidCloseNotebookDocumentParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocument_didOpenDidOpenNotebookDocument(context.Context, *DidOpenNotebookDocumentParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocument_didSaveDidSaveNotebookDocument(context.Context, *DidSaveNotebookDocumentParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#shutdownShutdown(context.Context) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_codeActionCodeAction(context.Context, *CodeActionParams) ([]CodeAction, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_codeLensCodeLens(context.Context, *CodeLensParams) ([]CodeLens, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_colorPresentationColorPresentation(context.Context, *ColorPresentationParams) ([]ColorPresentation, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_completionCompletion(context.Context, *CompletionParams) (*CompletionList, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_declarationDeclaration(context.Context, *DeclarationParams) (*Or_textDocument_declaration, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_definitionDefinition(context.Context, *DefinitionParams) ([]Location, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_diagnosticDiagnostic(context.Context, *DocumentDiagnosticParams) (*DocumentDiagnosticReport, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_didChangeDidChange(context.Context, *DidChangeTextDocumentParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_didCloseDidClose(context.Context, *DidCloseTextDocumentParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_didOpenDidOpen(context.Context, *DidOpenTextDocumentParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_didSaveDidSave(context.Context, *DidSaveTextDocumentParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_documentColorDocumentColor(context.Context, *DocumentColorParams) ([]ColorInformation, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_documentHighlightDocumentHighlight(context.Context, *DocumentHighlightParams) ([]DocumentHighlight, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_documentLinkDocumentLink(context.Context, *DocumentLinkParams) ([]DocumentLink, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_documentSymbolDocumentSymbol(context.Context, *DocumentSymbolParams) ([]any, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_foldingRangeFoldingRange(context.Context, *FoldingRangeParams) ([]FoldingRange, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_formattingFormatting(context.Context, *DocumentFormattingParams) ([]TextEdit, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_hoverHover(context.Context, *HoverParams) (*Hover, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_implementationImplementation(context.Context, *ImplementationParams) ([]Location, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_inlayHintInlayHint(context.Context, *InlayHintParams) ([]InlayHint, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_inlineCompletionInlineCompletion(context.Context, *InlineCompletionParams) (*Or_Result_textDocument_inlineCompletion, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_inlineValueInlineValue(context.Context, *InlineValueParams) ([]InlineValue, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_linkedEditingRangeLinkedEditingRange(context.Context, *LinkedEditingRangeParams) (*LinkedEditingRanges, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_monikerMoniker(context.Context, *MonikerParams) ([]Moniker, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_onTypeFormattingOnTypeFormatting(context.Context, *DocumentOnTypeFormattingParams) ([]TextEdit, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_prepareCallHierarchyPrepareCallHierarchy(context.Context, *CallHierarchyPrepareParams) ([]CallHierarchyItem, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_prepareRenamePrepareRename(context.Context, *PrepareRenameParams) (*PrepareRenameResult, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_prepareTypeHierarchyPrepareTypeHierarchy(context.Context, *TypeHierarchyPrepareParams) ([]TypeHierarchyItem, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_rangeFormattingRangeFormatting(context.Context, *DocumentRangeFormattingParams) ([]TextEdit, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_rangesFormattingRangesFormatting(context.Context, *DocumentRangesFormattingParams) ([]TextEdit, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_referencesReferences(context.Context, *ReferenceParams) ([]Location, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_renameRename(context.Context, *RenameParams) (*WorkspaceEdit, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_selectionRangeSelectionRange(context.Context, *SelectionRangeParams) ([]SelectionRange, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_semanticTokens_fullSemanticTokensFull(context.Context, *SemanticTokensParams) (*SemanticTokens, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_semanticTokens_full_deltaSemanticTokensFullDelta(context.Context, *SemanticTokensDeltaParams) (any, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_semanticTokens_rangeSemanticTokensRange(context.Context, *SemanticTokensRangeParams) (*SemanticTokens, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_signatureHelpSignatureHelp(context.Context, *SignatureHelpParams) (*SignatureHelp, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_typeDefinitionTypeDefinition(context.Context, *TypeDefinitionParams) ([]Location, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_willSaveWillSave(context.Context, *WillSaveTextDocumentParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocument_willSaveWaitUntilWillSaveWaitUntil(context.Context, *WillSaveTextDocumentParams) ([]TextEdit, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeHierarchy_subtypesSubtypes(context.Context, *TypeHierarchySubtypesParams) ([]TypeHierarchyItem, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeHierarchy_supertypesSupertypes(context.Context, *TypeHierarchySupertypesParams) ([]TypeHierarchyItem, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#window_workDoneProgress_cancelWorkDoneProgressCancel(context.Context, *WorkDoneProgressCancelParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_diagnosticDiagnosticWorkspace(context.Context, *WorkspaceDiagnosticParams) (*WorkspaceDiagnosticReport, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_didChangeConfigurationDidChangeConfiguration(context.Context, *DidChangeConfigurationParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_didChangeWatchedFilesDidChangeWatchedFiles(context.Context, *DidChangeWatchedFilesParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_didChangeWorkspaceFoldersDidChangeWorkspaceFolders(context.Context, *DidChangeWorkspaceFoldersParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_didCreateFilesDidCreateFiles(context.Context, *CreateFilesParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_didDeleteFilesDidDeleteFiles(context.Context, *DeleteFilesParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_didRenameFilesDidRenameFiles(context.Context, *RenameFilesParams) error// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_executeCommandExecuteCommand(context.Context, *ExecuteCommandParams) (any, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_symbolSymbol(context.Context, *WorkspaceSymbolParams) ([]SymbolInformation, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_textDocumentContentTextDocumentContent(context.Context, *TextDocumentContentParams) (*string, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_willCreateFilesWillCreateFiles(context.Context, *CreateFilesParams) (*WorkspaceEdit, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_willDeleteFilesWillDeleteFiles(context.Context, *DeleteFilesParams) (*WorkspaceEdit, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspace_willRenameFilesWillRenameFiles(context.Context, *RenameFilesParams) (*WorkspaceEdit, error)// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceSymbol_resolveResolveWorkspaceSymbol(context.Context, *WorkspaceSymbol) (*WorkspaceSymbol, error)}
研究这个文件的注释发现,这些接口都是通过代码生成的。


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




