使用 GitHub Copilot 聊天模式重构代码
GitHub Copilot 可用于重构代码库中的代码。 可以使用聊天视图模式来分析、规划和实现代码重构任务。 聊天视图模式提供一个用户友好的界面,用于管理聊天对话和访问 GitHub Copilot 的功能。 聊天视图包括以下聊天模式:
- 询问模式:使用提问模式询问有关代码库或技术概念的问题。 可以使用询问模式解释代码、建议修订或修复,或者提供与代码库相关的信息。
- 编辑模式:使用编辑模式对代码库中的多个文件进行编辑。 可以使用编辑模式重构代码、添加注释或对代码进行其他更改。
- 代理模式:使用代理模式启动代理编码工作流。 可以使用代理模式在工作区中运行命令、执行代码或执行其他任务。
重要
使用代理模式时,GitHub Copilot 可能会发出多个高级请求来完成单个任务。 高级请求可由用户发起的提示和 Copilot 代表你采取的后续操作使用。 所使用的高级请求总数取决于任务的复杂性、所涉及的步骤数和所选模型。
使用 ask 模式重构代码
可以使用 ask 模式获取有关编码任务的帮助、了解棘手的概念和改进代码。 Ask 模式专为与 Copilot Chat 的交互式对话而设计。 可以实时提问、获取解释或请求建议。
在询问模式下打开聊天视图。
向聊天添加上下文。
要求模式支持聊天用户、/ 命令和聊天变量。 可以将
@workspace聊天参与者或#codebase添加到聊天中,以提供上下文以及与上下文相关的文件或文件夹。提出可帮助你了解要重构的代码以及要进行的更改的问题。
例如,可以要求 GitHub Copilot 帮助你了解现有身份验证代码如何使用 OAuth 更新当前方法。
构造一个提示,以描述您想要实施的更新。
提示应包含要实现的代码功能的说明。 例如:
@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.在聊天视图中查看建议的代码。
聊天视图中显示的响应将包含可用于实现该功能的代码片段。 可以输入更新的提示来优化代码或询问更多详细信息。
若要实现建议的代码,可以将鼠标指针悬停在代码片段上,然后在 “应用”、“ 插入”和 “复制 ”选项之间进行选择。
- 应用:将代码建议应用于编辑器中的当前文件。
- 插入:在编辑器中的当前光标位置插入代码建议。
- 复制:将代码建议复制到剪贴板。
测试重构的代码,以确保它运行时没有错误并生成预期结果。
使用编辑模式重构代码
当希望更精细地控制 Copilot 建议的编辑时,可以使用编辑模式。 在编辑模式下,可以选择哪些文件 Copilot 可以进行更改,每次迭代时都向 Copilot 提供上下文,并确定是否接受建议的编辑。
小窍门
使用请求模式评估想要重构的代码,并在开始进行更改之前评估选项。 可以使用编辑模式对代码进行更改。
在编辑模式下打开聊天视图。
向聊天添加上下文。
编辑模式不支持聊天参与者。 使用
#codebase并向聊天中添加文件来指定工作区上下文。构造描述要实现的代码功能的提示。
提示应包含要实现的代码功能的说明。 例如:
#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.在代码编辑器中查看建议修改。
接受或拒绝建议修改。
可以使用向上和向下箭头浏览编辑。 可以通过对每个编辑显示的弹出菜单分别选择保留(接受)或撤销(放弃)建议的修改。 还可以使用编辑器选项卡底部的 “保留 和 撤消 ”按钮(或聊天视图)一次性接受或拒绝所有编辑。
测试重构的代码,以确保它运行时没有错误并生成预期结果。
使用代理模式重构代码
如果要自动执行重构代码的过程,可以使用代理模式。 在代理模式下,Copilot 充当可以代表你采取行动的自治代理。 可以要求 Copilot 执行特定任务,并根据请求生成代码。
在代理模式下,可以使用自然语言来指定高级任务,让 Copilot 自主推理请求、规划所需的工作,并将更改应用于代码库。 代理模式使用代码编辑和工具调用的组合来完成指定的任务。 处理请求时,它会监控编辑和工具的结果,并不断调整以解决任何出现的问题。
重要
使用代理模式时,GitHub Copilot 可能会发出多个高级请求来完成单个任务。 高级请求可由用户发起的提示和 Copilot 代表你采取的后续操作使用。 所使用的高级请求总数取决于任务的复杂性、所涉及的步骤数和所选模型。
在代理模式下打开聊天视图。
请构造一个描述希望 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.代理模式可能会调用多个工具来完成不同的任务。 (可选)选择“工具”图标以配置可用于响应请求的工具。
确认工具调用和终端命令。
在 Copilot 运行终端命令或未内置工具之前,它会请求确认以继续。 确认是必需的,因为工具可能在计算机上本地运行,并执行修改文件或数据的作。
Copilot 检测代码编辑和终端命令中的问题和故障,并循环处理操作以解决这些问题。
重要
虽然科皮洛特能够自我修复,但它可能并不总是能够自行解决问题。 可以暂停该过程并提供更多上下文来帮助 Copilot 了解问题。 还可以取消该过程,并通过新的提示重新开始。
查看这些建议的修改,并选择接受或拒绝。
测试重构的代码,以确保它生成预期结果。
代理模式应自行解决问题,但仍应测试代码以确保其按预期工作。
可以使用聊天视图中的 “撤消 ”按钮还原代理模式所做的编辑。 还可以在编辑器中使用 “还原 ”选项来还原代理模式所做的更改。
何时选择代理模式而不是编辑模式
请考虑以下条件,在编辑模式和代理模式之间进行选择:
- 编辑范围:代理模式自主确定要编辑的相关上下文和文件。 在编辑模式下,需要自行指定上下文。
- 任务复杂性:代理模式更适用于需要代码编辑和调用工具或终端命令的复杂任务。
- 持续时间:代理模式使用多个步骤来处理请求,因此生成响应可能需要更长的时间。 例如,为了确定需要编辑的相关上下文和文件、制订行动计划等,您可以执行以下步骤。
- 自我修复:代理模式评估生成的编辑结果,并可能多次循环解决中间问题。
- 请求配额:在代理模式下,根据任务的复杂性,一个提示可能会导致对后端发出许多请求。
概要
GitHub Copilot 可用于重构代码库中的代码。 可以使用聊天视图模式来分析、规划和实现代码重构任务。 聊天视图包括三种聊天模式:询问模式、编辑模式和代理模式。 可以使用提问模式询问有关代码库或技术概念的问题。 可以使用编辑模式跨代码库中的多个文件进行编辑。 可以使用代理模式启动代理编码工作流。