AgentHarness 课程

代码补全与内联对话

4.5K字·12分钟·
实时续写、行间对话、代码优化、错误修复

引言:让 AI 成为你的编码搭档

想象一下:你正在编写一个 React 组件,刚写完函数签名,AI 就自动补全了整个函数体;你遇到一个类型错误,选中代码按一个快捷键,AI 就给出修复方案。这不是未来,这是 CodeBuddy 的代码补全和内联对话功能。

本章将深入讲解这两个核心功能的工作原理、使用技巧和实战场景。


1. 代码补全的工作原理

1.1 项目级上下文理解

CodeBuddy 的代码补全不仅仅是简单的语法补全,它基于对整个项目上下文的理解:

上下文来源作用
当前文件理解当前代码结构和逻辑
项目文件理解模块间的关系和依赖
类型定义提供准确的类型信息
编码风格学习团队的代码风格
最近编辑优先补全相关的代码

1.2 补全触发机制

场景触发方式说明
自动触发输入时自动显示输入 2-3 个字符后触发
手动触发Ctrl+Space强制触发补全
接受建议Tab接受完整建议
拒绝建议Escape关闭补全面板
逐词接受Cmd+Right只接受下一个词
部分行接受Ctrl+Down接受到下一行

2. 多行补全实战

2.1 函数体补全

当你写完函数签名,AI 会自动补全函数体:

// 你写的代码:
function calculateTotal(items: CartItem[]): number {

// AI 补全的代码:
  return items.reduce((total, item) => {
    const itemPrice = item.price * item.quantity;
    const discount = item.discountRate ? itemPrice * item.discountRate : 0;
    return total + itemPrice - discount;
  }, 0);
}

2.2 接口实现补全

定义接口后,AI 可以补全实现类:

// 你写的接口:
interface UserRepository {
  findById(id: string): Promise<User | null>;
  findByEmail(email: string): Promise<User | null>;
  create(data: CreateUserDTO): Promise<User>;
  update(id: string, data: UpdateUserDTO): Promise<User>;
  delete(id: string): Promise<void>;
}

// AI 补全的实现:
class PostgresUserRepository implements UserRepository {
  constructor(private prisma: PrismaClient) {}

  async findById(id: string): Promise<User | null> {
    return this.prisma.user.findUnique({ where: { id } });
  }

  async findByEmail(email: string): Promise<User | null> {
    return this.prisma.user.findUnique({ where: { email } });
  }

  async create(data: CreateUserDTO): Promise<User> {
    return this.prisma.user.create({ data });
  }

  async update(id: string, data: UpdateUserDTO): Promise<User> {
    return this.prisma.user.update({ where: { id }, data });
  }

  async delete(id: string): Promise<void> {
    await this.prisma.user.delete({ where: { id } });
  }
}

2.3 测试用例补全

// 你写的测试描述:
describe('calculateTotal', () => {
  it('should calculate total with discounts', () => {

// AI 补全的测试体:
    const items = [
      { price: 100, quantity: 2, discountRate: 0.1 },
      { price: 50, quantity: 1, discountRate: 0 },
    ];
    const result = calculateTotal(items);
    expect(result).toBe(230); // (200 - 20) + 50
  });
});

3. 内联对话的四种场景

内联对话允许你在代码编辑区直接与 AI 对话,无需切换到侧边面板。

3.1 场景一:解释代码

选中一段复杂代码,按 Cmd+I(Mac)/ Ctrl+I(Win),输入:

用中文解释这段代码的逻辑

AI 会在代码旁边显示解释,不会修改代码。

3.2 场景二:修改代码

选中代码后:

将这段回调风格的代码改为 async/await

AI 会直接在编辑区内联修改代码,你可以逐行审查。

3.3 场景三:修复错误

当代码有红色波浪线时:

修复这个类型错误

AI 会分析错误信息,给出修复方案并直接应用。

3.4 场景四:添加注释和文档

为这个函数添加 JSDoc 文档注释,包括参数说明和返回值

AI 会在函数上方添加标准的文档注释。

3.5 内联对话 vs 侧边对话

特性内联对话侧边对话
位置代码编辑区内右侧面板
上下文自动包含选中代码需手动引用
适用场景快速修改、解释复杂任务、多文件操作
快捷键Cmd+I / Ctrl+ICmd+K / Ctrl+K
修改方式直接在编辑区修改生成代码块

4. 错误修复流程

4.1 自动诊断

CodeBuddy 会实时检测代码错误:

  • 红色波浪线:语法错误,立即标红并建议修复
  • 黄色波浪线:类型警告,提供类型修正方案
  • 蓝色标记:代码异味,建议重构方案

4.2 一键修复流程

光标移到错误位置
    -> 点击灯泡图标
    -> 选择 CodeBuddy 修复建议
    -> 一键应用

4.3 批量修复

对于项目中的同类错误:

项目中所有使用 any 类型的地方,都改为具体的类型定义

AI 会遍历项目文件,逐一修复。


5. 实战技巧

5.1 用注释引导补全

在代码中写注释,AI 会根据注释补全:

// 创建一个防抖函数,支持泛型和取消功能
function debounce<T extends (...args: any[]) => any>(
// AI 会自动补全完整的防抖函数实现

5.2 用类型引导补全

定义类型后,AI 补全会更准确:

interface ApiResponse<T> {
  data: T;
  status: number;
  message: string;
}

// AI 补全时会自动使用这个类型
async function fetchUsers(): Promise<ApiResponse<User[]>> {
// AI 知道要返回 ApiResponse<User[]> 格式

5.3 链式调用补全

AI 支持链式调用的智能补全:

users
  .filter(u => u.isActive)
  .map(u => ({
// AI 会根据 users 的类型补全 map 的回调

6. 常见陷阱

陷阱 1:补全建议不准确

现象:AI 补全的代码与项目风格不一致

解决

  • 在 Rules 中定义编码规范
  • 使用注释引导补全方向
  • 确保项目类型定义完整

陷阱 2:大文件补全延迟

现象:超过 1000 行的文件,补全有明显延迟

解决

  • 将大文件拆分为多个小文件
  • 使用 @ 引用关键文件
  • 关闭不必要的扩展

陷阱 3:过度依赖补全

现象:不理解代码逻辑就接受补全

解决

  • 补全是辅助工具,不是替代品
  • 逐词接受,理解每一步
  • 复杂逻辑先理解再接受

总结

功能核心价值
代码补全基于项目上下文的智能补全,支持多行和链式调用
内联对话在编辑区直接对话,快速修改和解释代码
错误修复自动诊断 + 一键修复,支持批量修复
注释引导用注释和类型引导 AI 生成更准确的代码

下一章预告:我们将学习 Figma 集成功能,了解如何将设计稿一键转为代码。