使用 GitHub Copilot 聊天模式重构代码

已完成

GitHub Copilot 可用于重构代码库中的代码。 可以使用聊天视图模式来分析、规划和实现代码重构任务。 聊天视图模式提供一个用户友好的界面,用于管理聊天对话和访问 GitHub Copilot 的功能。 聊天视图包括以下聊天模式:

  • 询问模式:使用提问模式询问有关代码库或技术概念的问题。 可以使用询问模式解释代码、建议修订或修复,或者提供与代码库相关的信息。
  • 编辑模式:使用编辑模式对代码库中的多个文件进行编辑。 可以使用编辑模式重构代码、添加注释或对代码进行其他更改。
  • 代理模式:使用代理模式启动代理编码工作流。 可以使用代理模式在工作区中运行命令、执行代码或执行其他任务。

重要

使用代理模式时,GitHub Copilot 可能会发出多个高级请求来完成单个任务。 高级请求可由用户发起的提示和 Copilot 代表你采取的后续操作使用。 所使用的高级请求总数取决于任务的复杂性、所涉及的步骤数和所选模型。

使用 ask 模式重构代码

可以使用 ask 模式获取有关编码任务的帮助、了解棘手的概念和改进代码。 Ask 模式专为与 Copilot Chat 的交互式对话而设计。 可以实时提问、获取解释或请求建议。

  1. 在询问模式下打开聊天视图。

  2. 向聊天添加上下文。

    要求模式支持聊天用户、/ 命令和聊天变量。 可以将 @workspace 聊天参与者或 #codebase 添加到聊天中,以提供上下文以及与上下文相关的文件或文件夹。

  3. 提出可帮助你了解要重构的代码以及要进行的更改的问题。

    例如,可以要求 GitHub Copilot 帮助你了解现有身份验证代码如何使用 OAuth 更新当前方法。

  4. 构造一个提示,以描述您想要实施的更新。

    提示应包含要实现的代码功能的说明。 例如:

    @workspace I need to refactor the `EnumHelper` class and remove any code that uses reflection. Use static dictionaries to supply enum description attributes. Use a separate dictionary for each enum. The dictionaries should use values from the `LoanExtensionStatus.cs`, `LoanReturnStatus.cs`, and `MembershipRenewalStatus.cs` files. Explain how to update the EnumHelper class using dictionaries and show me the updated code.
    
  5. 在聊天视图中查看建议的代码。

    聊天视图中显示的响应将包含可用于实现该功能的代码片段。 可以输入更新的提示来优化代码或询问更多详细信息。

  6. 若要实现建议的代码,可以将鼠标指针悬停在代码片段上,然后在 “应用”、“ 插入”和 “复制 ”选项之间进行选择。

    • 应用:将代码建议应用于编辑器中的当前文件。
    • 插入:在编辑器中的当前光标位置插入代码建议。
    • 复制:将代码建议复制到剪贴板。
  7. 测试重构的代码,以确保它运行时没有错误并生成预期结果。

使用编辑模式重构代码

当希望更精细地控制 Copilot 建议的编辑时,可以使用编辑模式。 在编辑模式下,可以选择哪些文件 Copilot 可以进行更改,每次迭代时都向 Copilot 提供上下文,并确定是否接受建议的编辑。

小窍门

使用请求模式评估想要重构的代码,并在开始进行更改之前评估选项。 可以使用编辑模式对代码进行更改。

  1. 在编辑模式下打开聊天视图。

  2. 向聊天添加上下文。

    编辑模式不支持聊天参与者。 使用 #codebase 并向聊天中添加文件来指定工作区上下文。

  3. 构造描述要实现的代码功能的提示。

    提示应包含要实现的代码功能的说明。 例如:

    
    #codebase I need to refactor the `EnumHelper` class and remove any code that uses reflection. Use static dictionaries to supply enum description attributes. Use a separate dictionary for each enum. The dictionaries should use values from the `LoanExtensionStatus.cs`, `LoanReturnStatus.cs`, and `MembershipRenewalStatus.cs` files.
    
    
  4. 在代码编辑器中查看建议修改。

  5. 接受或拒绝建议修改。

    可以使用向上和向下箭头浏览编辑。 可以通过对每个编辑显示的弹出菜单分别选择保留(接受)或撤销(放弃)建议的修改。 还可以使用编辑器选项卡底部的 “保留撤消 ”按钮(或聊天视图)一次性接受或拒绝所有编辑。

  6. 测试重构的代码,以确保它运行时没有错误并生成预期结果。

使用代理模式重构代码

如果要自动执行重构代码的过程,可以使用代理模式。 在代理模式下,Copilot 充当可以代表你采取行动的自治代理。 可以要求 Copilot 执行特定任务,并根据请求生成代码。

在代理模式下,可以使用自然语言来指定高级任务,让 Copilot 自主推理请求、规划所需的工作,并将更改应用于代码库。 代理模式使用代码编辑和工具调用的组合来完成指定的任务。 处理请求时,它会监控编辑和工具的结果,并不断调整以解决任何出现的问题。

重要

使用代理模式时,GitHub Copilot 可能会发出多个高级请求来完成单个任务。 高级请求可由用户发起的提示和 Copilot 代表你采取的后续操作使用。 所使用的高级请求总数取决于任务的复杂性、所涉及的步骤数和所选模型。

  1. 在代理模式下打开聊天视图。

  2. 请构造一个描述希望 GitHub Copilot 执行的任务的提示。

    假设你有一个代码项目,该项目使用两个或多个进程/技术来完成相同的任务。 可以要求 GitHub Copilot 使用单个方法来重构代码,以提高一致性、可维护性和性能。

    例如:

    
    Review the LINQ code used in the JsonData and JsonLoanRepository classes. Refactor the methods in the JsonPatronRepository class using LINQ queries. Ensure that existing code functionality is maintained.
    
    
  3. 代理模式可能会调用多个工具来完成不同的任务。 (可选)选择“工具”图标以配置可用于响应请求的工具。

  4. 确认工具调用和终端命令。

    在 Copilot 运行终端命令或未内置工具之前,它会请求确认以继续。 确认是必需的,因为工具可能在计算机上本地运行,并执行修改文件或数据的作。

  5. Copilot 检测代码编辑和终端命令中的问题和故障,并循环处理操作以解决这些问题。

    重要

    虽然科皮洛特能够自我修复,但它可能并不总是能够自行解决问题。 可以暂停该过程并提供更多上下文来帮助 Copilot 了解问题。 还可以取消该过程,并通过新的提示重新开始。

  6. 查看这些建议的修改,并选择接受或拒绝。

  7. 测试重构的代码,以确保它生成预期结果。

    代理模式应自行解决问题,但仍应测试代码以确保其按预期工作。

    可以使用聊天视图中的 “撤消 ”按钮还原代理模式所做的编辑。 还可以在编辑器中使用 “还原 ”选项来还原代理模式所做的更改。

何时选择代理模式而不是编辑模式

请考虑以下条件,在编辑模式和代理模式之间进行选择:

  • 编辑范围:代理模式自主确定要编辑的相关上下文和文件。 在编辑模式下,需要自行指定上下文。
  • 任务复杂性:代理模式更适用于需要代码编辑和调用工具或终端命令的复杂任务。
  • 持续时间:代理模式使用多个步骤来处理请求,因此生成响应可能需要更长的时间。 例如,为了确定需要编辑的相关上下文和文件、制订行动计划等,您可以执行以下步骤。
  • 自我修复:代理模式评估生成的编辑结果,并可能多次循环解决中间问题。
  • 请求配额:在代理模式下,根据任务的复杂性,一个提示可能会导致对后端发出许多请求。

概要

GitHub Copilot 可用于重构代码库中的代码。 可以使用聊天视图模式来分析、规划和实现代码重构任务。 聊天视图包括三种聊天模式:询问模式、编辑模式和代理模式。 可以使用提问模式询问有关代码库或技术概念的问题。 可以使用编辑模式跨代码库中的多个文件进行编辑。 可以使用代理模式启动代理编码工作流。