Skip to content

代码分析

Dish AI Commit Gen 集成了强大的代码分析功能,能够智能理解代码变更,生成更准确的提交消息。

功能介绍

代码分析功能基于先进的 AI 模型,深入分析您的代码变更内容,理解修改的意图和上下文,从而生成高质量、符合规范的提交消息。它支持多种 AI 提供商,如 OpenAI、VSCode 内置 AI (GitHub Copilot)、智谱 AI、Gemini AI 等,并可以根据您的设置选择最合适的 AI 模型进行分析。

代码分析系统与提交格式功能紧密集成,支持分层提交消息生成,可以同时生成全局摘要和每个文件的详细变更说明。在 v0.12.4 版本中,代码分析功能得到了进一步的优化,提供更准确的代码意图识别和更清晰的变更描述。

基本使用

代码分析功能在您生成提交消息时自动启用,无需额外操作。系统会分析以下内容:

  • 修改的文件类型和路径
  • 代码变更(添加、删除、修改)
  • 函数和类的变化
  • 变量和常量的修改
  • 导入模块的变化

差异内容简化

对于大型代码变更,您可以启用差异内容简化功能,帮助 AI 更好地理解核心变化:

json
{
  "dish-ai-commit.features.codeAnalysis.simplifyDiff": true
}

启用此功能后,系统会:

  1. 过滤掉不重要的空白改动和格式变化
  2. 重点关注关键代码逻辑的修改
  3. 智能合并相似类型的变更
  4. 提取变更的核心意图

简化效果示例

原始差异:

diff
@@ -1,5 +1,7 @@
 import React from 'react';
+import { useEffect } from 'react';
 import styles from './styles.module.css';
+import { fetchUserData } from '../../api/user';

 const UserProfile = ({ userId }) => {
+  const [userData, setUserData] = useState(null);
+  const [loading, setLoading] = useState(true);

@@ -10,8 +12,17 @@
-  return (
-    <div className={styles.container}>
-      <h1>User Profile</h1>
-    </div>
-  );
+  useEffect(() => {
+    const loadUserData = async () => {
+      setLoading(true);
+      try {
+        const data = await fetchUserData(userId);
+        setUserData(data);
+      } catch (error) {
+        console.error('Failed to load user data:', error);
+      } finally {
+        setLoading(false);
+      }
+    };
+    loadUserData();
+  }, [userId]);

简化后的理解:

  • 添加了用户数据获取功能
  • 实现了加载状态管理
  • 引入了异步数据获取
  • 添加了错误处理机制

自动作用域检测

代码分析功能会自动从修改的文件路径和内容中推断适当的作用域:

  1. 文件路径分析:从文件路径中识别可能的作用域

    • 例如:src/components/auth/LoginForm.js → 作用域:auth
  2. 代码内容分析:从代码变更内容中提取语义信息

    • 识别修改涉及的模块、类、函数等
    • 提取关键术语作为潜在作用域
  3. 多文件智能聚合:当多个文件被修改时,尝试找到共同作用域

    • 如修改了 src/api/user.jssrc/components/user/Profile.js
    • 可能推断作用域为 user

语义理解与上下文感知

代码分析不仅仅是表面的文本分析,还包括:

1. 变更目的理解

系统能够区分不同类型的代码变更:

  • 新功能添加
  • Bug 修复
  • 性能优化
  • 重构
  • 样式调整

例如,如果您修改了一个函数并添加了性能优化代码,系统能够理解这是一个性能改进,而不仅仅是功能修改。

2. 依赖关系分析

系统会分析代码中的依赖关系变化:

  • 新增或移除的导入语句
  • 第三方库的使用变化
  • 内部模块依赖调整

这有助于更准确地生成提交消息,尤其是在涉及依赖管理的变更时。

3. API 和接口变更检测

系统能够识别 API 和接口的重要变更:

  • 函数签名的修改
  • 接口契约的变更
  • 公共 API 的添加或移除

对于这类变更,系统会在提交消息中特别标注,提醒团队成员注意接口变化。

语言和框架感知

代码分析模块支持多种编程语言和框架,能够根据不同技术栈的特点进行专门的分析:

语言/框架特别支持的分析
JavaScript/TypeScriptReact 组件生命周期,hooks 使用,状态管理
Python装饰器使用,类继承,异步函数
Java类设计模式,注解使用,接口实现
Go错误处理,goroutine,接口实现
Vue组件属性,生命周期方法,指令
C#LINQ 查询,异步/等待模式,属性访问器

提交消息质量提升

通过深入的代码分析,生成的提交消息质量会得到显著提升:

  1. 更准确的类型识别:准确区分 featfixrefactor 等提交类型
  2. 更具体的描述:基于实际代码变更生成具体描述,而非笼统概括
  3. 更相关的上下文:在提交信息中包含关键的上下文信息
  4. 更专业的术语:使用与代码库一致的技术术语和命名

最佳实践

为了获得最佳的代码分析结果,建议:

  1. 保持合理的提交大小:每次提交尽量聚焦于单一目的
  2. 对于大型变更:启用 simplifyDiff 选项
  3. 保持一致的代码风格:有助于系统更好地理解代码结构
  4. 使用主流编码规范:系统对主流的编码规范有更好的理解能力
  5. 选择合适的 AI 模型:更强大的模型(如 GPT-4)对复杂代码的理解更好

使用 MIT 许可发布