Topics

用 Claude Code 制作了一个 VSCode 扩展

  • column

公司内部引入了 Claude Code 后,我想开发一些能在工作中使用的便捷工具,于是尝试制作了一款 VSCode 扩展,它可以在编辑器中监控拼写错误、标签错误等问题!

本文整理了从“要是有这样的功能就好了”的构想到实现的全过程!

开发过程

在实现过程中,经常会出现“忘记写 alt=""了!”或“全角和半角混用了!”之类的疏忽错误,这让人十分困扰……

我设想了这样一个工具,于是先尝试以聊天对话的形式提出需求。

我想做一个能防止这类疏忽的应用,比如在浏览器中高亮显示差异,或者指出代码中的错误!

  • 代码审查检查清单 | 提交前需要确认的自定义检查清单
  • HTML/CSS 可视化差异 | 粘贴两段代码,直观呈现差异
  • 截图差异检查器 | 对修改前后的图片进行像素级比较
  • 实时 HTML/CSS 错误审查工具 | 只需粘贴代码,AI 即可给出指正

AI 提出了几项建议,我们又追加了新的需求,继续尝试。

AI 给出指正的功能非常好!!不过,我们希望不只是粘贴代码,而是能在 VSCode 中进行实时监控,并在工作结束后进行确认!

决定将其开发为 VSCode 扩展,而不是浏览器应用。

由于实时监控的 API 成本较高,因此我们采用了通过执行命令进行作业后审查的方式。

最初建议使用 Claude API,但由于需要付费,因此改为使用我们已经签约的 GitHub Copilot。

该扩展的概要是:在作业完成后获取 git diff,将其连同提示词发送给 GitHub Copilot,从而自动检测疏忽导致的错误。

机制

完成工作后,点击状态栏按钮
↓
获取 git diff HEAD 并比较差异
↓
解析 diff,提取变更文件和行号
↓
将 diff 和提示词发送给 GitHub Copilot(vscode.lm API)
↓
Copilot 以 JSON 格式返回审查结果
↓
在 VSCode 视图中显示审查结果
↓
点击问题的行号,即可跳转到对应文件和行
↓
累积 AI 检测到的倾向

界面大致如下。

完成全部工作后,在提交到 GitHub 之前启动 Code Review 扩展。它会将当前内容与上一次提交进行比较,检查是否存在异常之处。

将 AI 检测到的倾向存入存储,直观呈现自己常犯哪些错误。

提示词大致如下。

チェック観点:
- テキスト内の不自然なスペース(全角・半角スペースの混入など)
- 大文字・小文字の不統一(クラス名・テキストなど)
- 誤字脱字の可能性がある箇所
- 括弧・記号の全角・半角混在(例: ()・() のように開き括弧と閉じ括弧で全角半角が混ざっている、テキスト中に全角の()[]{}が使われているなど)
- <a> の href属性が "#" のままになっている(未設定・仮置きの可能性)
- HTMLのネスト構造の意味的な違反(以下は特に重点チェック):
  - <ul>・<ol> の直下に <li> 以外の要素(<div>など)が入っている
  - <h1>〜<h6> の中に <div>・<p>・<section> などブロック要素が入っている
  - <p> の中に <div>・<ul>・<table>・<h1>〜<h6> などブロック要素が入っている
  - <a> の中に <a> がネストしている
  - <button> の中に <button>・<a>・<input> などインタラクティブ要素が入っている
  - <tr> の中に <td>・<th> 以外の要素が入っている

在此基础上持续添加内容并更新扩展,就能重点检查自己的常见错误,性能也会不断提升!

技术层面・实现

本扩展仅使用 TypeScript + VSCode 标准 API + Node.js 标准功能开发,完全未使用任何外部库。文件结构也很简单,主要的 .ts 文件只有 5 个。

VSCode 标准 API 中有 vscode.lm(Language Model API),可以直接调用 GitHub Copilot 的模型。使用它,无需 Anthropic 或 OpenAI 的 API 密钥即可实现 AI 审查,但由于这是较新的 API,官方文档也较少,通常仅调研规格就会花费不少时间。

我在使用 Claude Code 实现的过程中,询问了“如何在 VSCode 扩展中调用 Copilot 的模型”,因此能够当场掌握 vscode.lm.selectChatModels() 的用法,以及响应流式接收(for await (const chunk of response.text))等具体实现方法。

同样,在与 Claude Code 逐步确认的过程中推进开发,WebviewPanel 的双向通信(Webview 与 Node.js 之间的消息收发)以及使用 context.globalState 的持久化存储机制等,也大幅减少了深入查阅文档的时间。

总结

本文介绍了我开发一款 VSCode 扩展的过程,该扩展旨在在提交代码之前集中发现粗心导致的错误。

通过结合 git diff 与 Copilot,可以在减少遗漏的同时增加检查维度,逐步打造出专门针对自身易错点的工具。

我新发现,VSCode 扩展其实可以借助 VSCode 标准 API 相当轻松地开发出来。如果没有 Claude Code,我大概根本不会想到要做扩展开发!(笑)

当然,理解代码的内容和运行机制非常重要,但即使把一切都交给 AI,只要先动手尝试“先做出来看看”,往往也能发现新的想法和收获。

撰写本文的人

主要从事标记(Markup)工作,并使用 JavaScript、React 和 Next.js 进行前端开发。看到自己参与的网站顺利上线,我会非常开心!爱好是弹吉他。喜欢猫和烤红薯🐱🍠

Hirappi

前端工程师 / 2022年入职

查看此员工的文章

以稳健的团队体制和迅速的应对能力为傲

Liberogic 的资深团队积极推动项目,因此深受客户好评。
我们致力于合理配置项目经理与总监,确保整个项目顺利推进。 我们采用按需投入的方式,避免不必要的全员投入导致成本增加,合理分配资源、人尽其才。同时,我们在掌握业务内容、制作与提交报价方面的速度也广受好评。

※ 当社不积极开展 SES 类驻场业务,敬请谅解。

您可以使用 Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom、Webex 等几乎所有主流的项目管理工具和聊天工具。

Web 方面的烦恼,欢迎随时咨询。

案例分析