You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode Go函数注释扩展开发:实现函数名自动补全建议

实现Go函数上方自动生成注释函数名的VSCode扩展

问题分析

你当前的实现依赖手动调用命令插入注释,但需求是自动触发的补全提示——当光标位于Go函数声明的上一行时,自动弹出带函数名的注释建议。这需要用到VSCode扩展API中的CompletionItemProvider,而非命令触发的方式。

解决方案代码

替换你当前的命令注册逻辑,改用以下实现:

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
    // 注册Go语言专属的补全提供者
    const disposable = vscode.languages.registerCompletionItemProvider(
        'go',
        {
            provideCompletionItems(document: vscode.TextDocument, position: vscode.Position) {
                // 检查光标下一行是否存在
                const nextLineNum = position.line + 1;
                if (nextLineNum >= document.lineCount) {
                    return [];
                }

                // 获取下一行文本并匹配Go函数声明
                const nextLineText = document.lineAt(nextLineNum).text.trimStart();
                const funcRegex = /^func(\s+(\*?[a-zA-Z0-9_]+))?\s+(?<functionName>[a-zA-Z_][a-zA-Z0-9_]*)\s*\(/;
                const match = nextLineText.match(funcRegex);

                if (!match?.groups?.functionName) {
                    return [];
                }

                // 生成补全项
                const functionName = match.groups.functionName;
                const completionItem = new vscode.CompletionItem(`// ${functionName} `, vscode.CompletionItemKind.Snippet);
                completionItem.insertText = new vscode.SnippetString(`// ${functionName} `);
                completionItem.sortText = '0'; // 提高优先级,让建议排在最前面

                return [completionItem];
            }
        }
        // 留空触发条件,让VSCode在光标位于空行时自动触发补全
    );

    context.subscriptions.push(disposable);
}

export function deactivate() {}

关键细节说明

  • CompletionItemProvider:VSCode实现代码自动补全的核心API,针对Go语言注册后,会在符合条件的场景自动触发补全建议。
  • 函数声明匹配:正则支持普通函数(func foo())、带指针/值接收者的方法(func (s *Struct) bar()),覆盖大部分Go函数场景。
  • 补全行为:当你在函数声明的上一行空行中时,VSCode会自动弹出// 函数名 的补全建议,按Tab或Enter即可快速插入。

原代码问题修正

你原来的代码存在重复编辑操作(同时使用WorkspaceEdit和editor.edit),且依赖手动命令触发,无法满足自动提示的需求,直接替换为上述补全提供者实现即可。

内容的提问来源于stack exchange,提问作者Dassy Areg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:52:28