VS Code 扩展开发实战:AI 自动生成 Git 提交信息

VS Code扩展Git提交信息AI生成 本内容遵循CC 4.0 BY-SA版权协议
Robeon Lee Robeon Lee 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要

1. 为什么我要自己折腾一个提交信息生成工具

每次写完代码,打开终端敲下 git commit,然后对着那个空荡荡的提交信息编辑框发呆——这个场景我猜你肯定不陌生。尤其是赶项目的时候,一天要提交十几次,每次都要想“这次到底改了啥”“用什么词描述才准确”“要不要写 scope”“type 选 feat 还是 fix”,脑子已经在下一个功能上了,还得回头翻 diff 确认自己改了什么。更别提团队协作的时候,有人写“update”,有人写“修改bug”,有人写“111”,回头查 git log 跟看天书一样。

VSCode Commit AI 这个项目,解决的就是这个具体到不能再具体的问题:在 VS Code 里点一下,自动读取当前暂存区的改动,生成一条符合 Conventional Commits 规范的提交信息,你确认或者微调一下就能直接提交。它不是一个泛泛的“AI 写代码”工具,而是把 AI 能力精准地卡在“写提交信息”这一个动作上,把原本需要 30 秒到 2 分钟的脑力劳动压缩到 3 秒。

这个项目适合谁?如果你是个人开发者,它能帮你保持提交历史的整洁,以后回头看自己的项目不至于一脸懵;如果你是团队里的 Tech Lead,它可以统一整个团队的提交规范,code review 的时候一眼就能看出每个 commit 的性质;如果你刚开始学 Git,它还能顺带教你 Conventional Commits 的写法。不管你是哪种,核心诉求都是一样的:别让我在提交信息上浪费时间,但提交历史还得像样。

我花了大概两周的业余时间把这个扩展从想法做到能日常使用,中间踩了不少坑,也积累了一些关于 VS Code 扩展开发、Git 操作、AI 接口调用的实战经验。下面我把整个项目的设计思路、核心实现、实操步骤和踩坑记录完整地梳理一遍,你如果想自己做一个类似的工具,或者想直接拿我的方案改改用,都可以直接参考。

2. 整体设计与技术选型:为什么这么搭

2.1 核心需求拆解与功能边界

在动手之前,我先把这个工具的需求拆成了几个层次。最核心的需求是:读取 Git 暂存区的 diff,调用 AI 生成提交信息,展示给用户确认后执行提交。围绕这个核心,衍生出几个必须解决的问题。

第一个问题是触发时机。用户什么时候需要生成提交信息?显然是在 git add 之后、git commit 之前。所以扩展需要感知当前工作区的 Git 状态,知道有没有暂存的改动。如果暂存区是空的,那就不应该触发,或者提示用户先暂存文件。

第二个问题是信息展示方式。生成的信息是直接填入 commit message 输入框,还是弹出一个面板让用户选择?我试过直接填入的方式,但有时候 AI 生成的不够准确,用户需要对比多个选项。所以最终方案是弹出一个 Quick Pick 面板,展示 AI 生成的候选信息,用户选一个或者手动编辑。

第三个问题是AI 接口的选择。这里涉及一个关键决策:用云端 API 还是本地模型?云端 API 的好处是生成质量高、响应快,但需要网络和 API Key;本地模型的好处是隐私安全、不依赖网络,但对机器配置有要求,而且生成质量参差不齐。我的选择是优先支持云端 API,同时预留本地模型的接口,让用户根据自己的情况配置。

第四个问题是规范约束。AI 生成的内容如果不加约束,可能会写出“更新了代码”这种毫无信息量的提交信息。所以我需要在 prompt 里明确要求 AI 遵循 Conventional Commits 规范,并且根据 diff 内容自动判断 type(feat、fix、docs、style、refactor 等)。

2.2 技术栈选择与理由

VS Code 扩展的开发语言选择其实不多,主流就是 TypeScript 和 JavaScript。我选了 TypeScript,原因很简单:类型系统能在编译期帮我发现很多低级错误,尤其是涉及 VS Code API 和 Git 操作的时候,类型提示能省掉大量查文档的时间。

构建工具方面,我用了 esbuild 而不是 webpack。esbuild 的构建速度快得离谱,一个几百行的扩展项目,构建时间基本在 100ms 以内,webpack 可能要好几秒。对于需要频繁调试的扩展开发来说,这个速度差异直接影响开发体验。

Git 操作方面,我没有直接调用 child_process 执行 git 命令,而是用了 VS Code 内置的 Git 扩展 API。VS Code 本身集成了 Git 功能,通过 vscode.extensions.getExtension('vscode.git') 可以拿到 Git 扩展的 API,直接读取仓库状态、暂存区 diff 等信息。这样做的好处是不需要自己处理 Git 的路径问题、权限问题,而且和 VS Code 的 Git 面板状态完全同步。

AI 接口方面,我抽象了一层 CommitMessageProvider 接口,目前实现了两个 Provider:一个是基于 OpenAI 兼容接口的云端 Provider,另一个是基于 Ollama 的本地 Prov

最低 0.47元/天 开通会员,解锁全文
left
成为会员后, 你将解锁
right
benefits 下载资源随意下
benefits 优质VIP博文免费学
benefits 优质文库回答免费看
benefits 付费资源9折优惠

相关推荐

基于Python+Open CV的手势识别算法设计

伴随着人工智能时代的到来,人机交互的领域也逐渐成为研究的一大方向;其中,手势识别是人机交互领域的一项关键技术,自此手势识别也迎来了一波高潮,近几年无论是在消费领域、电子领域、数码领域、家电领域甚至汽车领域上,都能或多或少的见到手势识别的身影。 手势识别在设计智能高效的人机界面方面具有至关重要的作用, 目前手势识别已应用到手语识别、智能监控、到虚拟现实等各个领域,手势识别的原理都是利用各种传感器(例如红外、摄像头等)对手部的形态进行捕捉并进行建模,形成一个模型信息的序列帧,而后将这些信息序列转换为机器能够识别的相对应指令(例如打开、切换菜单、移动等)来完成控制。 采用Python的集成开发环境Pycharm进行本次课程设计,在Pycharm中进行需要库(模块)的下载,调取电脑摄像头,按帧读取摄像头采集到的头像,形态学处理,图像旋转(由于摄像头采集到的图像是镜像,需要用cv2.flip将摄像头采集到的图像进行处理),选取图片中固定位置作为手势输入,用红线画出手势识别框,基于hsv的肤色检测,进行高斯滤波,找出轮廓,求出图像中手势的凹凸点,手指间角度求取。

努力学习前端的小陈

ROS-CV-ImageConverter:将ROS图像转换为OpenCV(cv :: Mat)类型的图像

ROS-CV图像转换器 依存关系 cv_bridge(ROS软件包)

Willis Wang

计算机视觉图像处理-CV2与图像插值算法

用最近邻插值与双线性插值原理完成图像缩放 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输。缺点:使用最近邻插值算法处理图像放大时,在图象中可能出现明显的块状效应 双线性插值,在两个方向上做三次线性插值。使用双线性插值算法处理图像放大时,在图象中可能出现马赛克 代码 import cv2 img = cv2.imread(’./xiabang.jpg’, cv2.IMREAD_UNCHANGED) #缩放比例 scale_percent = 0.3 width = int(img.shape[1] * scale_percent) height = int

weixin_38697274

基于水平集CV模型的图像分割(Matlab代码)

基于水平集CV模型的图像分割(Matlab代码),全套代码

小宇QAQ

导向滤波(guide_filter)的python实现

导向滤波(guide_filter)的python实现,可以结合暗通道;理论实现比较好的图像去噪效果。

zachzhan_g
返回顶部
Robeon Lee
博客等级 码龄7年 45粉丝 2,609原创