掘金 人工智能 07月23日 14:40
谁说前端改动看不出影响范围?我用 Cursor 找到了隐藏炸弹
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文分享了利用AI工具Cursor进行代码影响范围分析的实践经验。作者通过构建一个半自动化的工具,将Git diff内容作为输入,并结合精心设计的“专家级”Prompt,引导Cursor识别代码变更可能带来的影响。实践表明,AI在理解语义变更、识别依赖关系方面表现出色,能提前预警潜在风险,如同一个可靠的Code Reviewer。尽管存在Token成本和偶尔的“过度解读”问题,但AI在代码分析领域的潜力已初步显现,为开发流程提供了新的可能性。

💡 **AI辅助代码影响分析的必要性**:传统的前端项目维护中,开发者常面临代码修改后引发连锁反应的难题。全局搜索和AST分析工具虽有帮助,但难以理解语义层面的变更,导致潜在风险难以预测。AI工具(如Cursor)的出现,为解决这一痛点提供了新的思路,能够理解代码的深层含义,预测变更的潜在影响。

🚀 **基于Cursor的代码影响分析MVP尝试**:文章详细介绍了构建一个半自动化工具的流程。第一步提取Code Diff;第二步构造包含角色扮演和任务引导的“专家级”Prompt,将AI引导至“有经验的前端+QA工程师”的角色;第三步将Prompt输入Cursor,生成结构化的代码影响范围分析报告。这种方法能有效识别出受影响的文件、具体位置以及影响程度。

✅ **Cursor在代码影响分析中的能力亮点**:实践证明,Cursor在处理代码影响分析方面具备显著优势。它能够准确识别函数调用、组件引用、Mixin等依赖关系,并能理解诸如emit事件名变化这类语义层面的变更,将其视为“高风险”改动。这相当于一次自动化的Code Review,能提前揭示逻辑和兼容性等潜在风险点。

⚠️ **Cursor在代码影响分析中存在的问题**:尽管Cursor表现出色,但也存在一些挑战。首先,当代码改动范围较大时,Prompt的Token成本会显著上升。其次,AI有时会给出冗余或不完全准确的建议,尤其是在处理动态依赖或大量依赖文件时,准确性仍需人工判断和验证。

🤝 **AI作为智能开发伙伴的潜力**:本次尝试虽然只是基础探索,但充分展示了Cursor在代码分析领域的巨大潜力。它不能替代实际测试,但能作为可靠的Reviewer,帮助开发者划定测试范围,并提醒可能被忽略的潜在影响点。AI正逐渐从“辅助编码”工具,转变为具备阅读、分析和推理能力的智能伙伴,为开发流程带来更多创新。

一、引言

“就改了一行工具函数,怎么有五个页面都受影响了?”

“这个组件的 props 我只是加了个可选值,线上怎么有个弹窗直接崩了?”

这些“意外”,大概是每个维护老项目的前端都经历过的。我们也遇到过不少这样的情况,开了很多次复盘会。逐渐让我们开始反思。

我们逐渐意识到,问题未必是“自测不够”,而是我们缺少一种在测试前评估风险的能力——代码影响范围分析


二、传统 VS AI

我当时就在想一个问题:有没有办法,在写完代码之后,就能提前判断这次改动可能影响到哪些地方?

我们现在常用的方法,大致就这几类:

这些方法确实在一些场景下能帮上忙,但它们的共同局限是:只能看到语法结构,难以理解语义层面的变更影响

比如:

所以我开始好奇,AI 工具能不能补上这块短板?比如 Cursor,它有没有可能看懂“你到底改了什么”,甚至进一步去推断这次改动可能带来的连锁反应?

三、一次 MVP 尝试:用 Cursor 做代码影响范围分析

带着这个想法,我尝试构建了一个基于 Cursor 的代码影响范围分析的半自动化工具,流程图如下:

简单来说分三步:

第一步:提取 Code Diff

第一步是准备好改动内容,给 Cursor 一个清晰的输入。用 Node + Child_process 执行 Git 命令,提取当前分支相对于 origin/master 的改动,提取内容包括:

# 1. 获取改动的文件git diff origin/master --name-only# 2. 获取每个文件的具体 diff 内容git diff origin/master <file_path> > diffs/<file_name>.diff

这些 Diff 后面会作为 Prompt 的一部分喂给 Cursor。

第二步:构造“专家级” Prompt

光把 Diff 扔给 AI 没有意义,AI 不知道你想干嘛。于是我们设计了一个 Prompt 模板,用角色扮演 + 问题引导的方式,把 Cursor 带入“有经验的前端 + QA 工程师”这个角色里。

模板核心长这样:

# 角色: 你是vue2高级开发人员&QA专家你是一位拥有 10 年经验的高级开发人员,正在开发一个复杂的 Vue 2 项目。你的任务是进行严格的代码影响分析。## 任务基于提供的 Code diff,生成结构化的代码影响范围分析报告。## 分析重点- Vue 组件:props、$emit、mixins、computed、watch- 路由:页面跳转、路由守卫- API:接口调用、数据流- Vuex:状态管理、actions/mutations- 公共组件/工具函数的影响范围## 执行策略1. 解析 diff 提取关键变更2. 并行搜索:grep_search 精确查找 + codebase_search 语义分析3. 深入分析受影响文件4. 评估风险并给出验证建议---以下是我的 Vue2 项目代码变更 diff,请分析影响范围:{Code Diff}

在获取完Code Diff后,会将其动态拼接到 Prompt 中,构建出一个包含角色设定、任务目标和上下文信息的完整 Prompt。


第三步:把 Prompt 扔给 Cursor,让它来分析

最后,把生成的 Prompt 投喂给 Cursor,让它输出一份 Markdown 格式的代码影响范围分析报告。下面是一份示例输出:

代码影响范围分析修改内容将头像组件(src/components/user-item/avatar.vue)点击事件的emit事件名从 click 改为 clicktest。this.$emit('click', it)改为:this.$emit('clicktest', it)🔴 受影响的文件1. src/components/user-item/index.vue位置: 第16行<avatar  class="avatar"  :width="avatarSize"  :src="user.headImgUrl"  :alt="user.nickName"  :borderImg="user?.avatarFrame"  @click.stop="handleNav"  <!--会失效 -->  zz-sortId="1"  zz-sortName="头像"/>影响: 头像点击跳转用户主页功能失效2. src/views/mine/index/index.vue位置: 第23行<avatar  @click="goSetting"  <!--会失效 -->  class="avatar mine-wrap-header-avatar"  width="156"  :src="userInfo?.profilePhoto"  :borderImg="userInfo?.avatarFrame"  zz-sectionid="100"  zz-sortId="6"  zz-sortName="头像"  :zz-backup="legoBackupStr">影响: 个人中心头像点击跳转设置页面功能失效3. src/views/group-chat/apply-confirm/index.vue位置: 第12行<avatar  class="avatar"  width="88"  :src="record.profilePhoto"  :borderImg="record?.avatarFrame"  @click.stop="handleNav"  <!--会失效 -->  zz-sortId="1"  zz-sortName="申请人头像"/>影响: 申请确认页面头像点击跳转用户主页功能失效✅ 不受影响的文件以下文件虽然使用了 avatar 组件,但没有监听 @click 事件,因此不会受到影响:src/components/product-card/widgets/user-info.vuesrc/components/post-card/index.vuesrc/components/group-card/index.vuesrc/views/mine/poster/index.vuesrc/views/group-chat/group-detail/index.vuesrc/views/market/goods-detail/index.vuesrc/views/market/goods-detail/widgets/area-navbar.vue以及其他所有只使用 avatar 组件进行展示而不监听点击事件的文件📋 总结受影响文件数量: 3个影响等级: 中等 - 功能性问题主要影响: 头像点击跳转功能失效建议: 如果要进行此修改,需要同时将这3个文件中的 @click 改为 @clicktest

四、使用体验:AI 能不能“看懂改动”?

从这次尝试来看,Cursor 的表现其实比我预期中要好一些。总结下来,有几个让我觉得“确实能用”的点:

👍 能力亮点:

👎 存在的问题:


五、总结

这次只是一次基础的尝试,但已经让我看到了 Cursor 在代码分析方面的潜力。

它虽然无法替你完成测试,但却能像一个可靠的 Reviewer 一样,帮你划定合理的测试范围,甚至在你遗漏时提醒:“这里也可能受影响,别忘了。”

比起只会“帮你写代码”的工具,Cursor 更像是一个具备阅读、分析和推理能力的智能伙伴。这次的探索只是个起点,希望能借这个案例,让大家看到 Cursor 在开发流程中的更多可能性。

转转研发中心及业界小伙伴们的技术学习交流平台,定期分享一线的实战经验及业界前沿的技术话题。关注公众号「转转技术」(综合性)、「大转转FE」(专注于FE)、「转转QA」(专注于QA),更多干货实践,欢迎交流分享~

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

AI代码分析 Cursor 前端开发 代码影响范围 敏捷开发
相关文章