# 在合并拉取请求之前修复代码质量问题

在质量问题到达默认分支之前进行捕获，并使用 Copilot自动修复 和 Copilot云代理 进行修复。

> \[!NOTE]
> GitHub Code Quality 当前正处于 公共预览版 阶段，并可能会发生变化。
> 在 公共预览版期间，Code Quality 不会计费，尽管 Code Quality 扫描将使用 GitHub Actions 分钟。

## 介绍

本教程介绍如何在 GitHub Code Quality 上处理拉取请求，以识别出更改可能无意中引入的代码质量问题，以及如何利用 Copilot自动修复 和 Copilot云代理 来解决代码质量问题中的发现。

### 提前捕获问题的好处

尽早捕获代码质量问题使团队的代码库保持状态。
GitHub Code Quality 对代码进行检查：

* **可靠性**：例如，逻辑错误、不安全的错误处理或可能导致应用崩溃或行为不可预知的争用条件。 通过尽早解决此类问题，使软件更可靠且更可依赖。
* **可维护性**：例如，重复的代码、过于复杂的逻辑、未使用的变量或违反编码最佳做法。 解决这些问题可使代码更简洁、更易于阅读，因此将来的更改速度更快且风险更低。

## 1.了解GitHub Code Quality在拉取请求中如何工作

打开拉取请求时，GitHub Code Quality 使用 CodeQL 自动扫描您的更改，以发现质量问题，例如上面描述的问题。

扫描 CodeQL 的结果将作为拉取请求上的注释报告，由 `github-code-quality[bot]`留下。 每个注释对应于在您的更改中检测到的特定代码质量问题，并附带建议的自动修复。

注释按严重性（**错误**、 **警告**、 **注意**）进行标记，因此可以看到哪些发现最关键。

## 2.根据严重性确定修复的优先级

扫描注释，并首先识别具有最高严重级别（“错误”）的发现。

如果没有“错误”发现，请查找下一个严重性级别的发现（“警告”），等等。

高严重性发现表明更严重的代码质量问题，这些问题更有可能在代码库中引入可靠性或可维护性问题。 通过解决高严重性发现，你正在执行最有影响力的工作来维护团队代码的质量。

> \[!NOTE]
> 如果拉取请求包含\*\*\*\* 特定严重性级别或更高级别的发现，存储库管理员可能已设置代码质量门，该入口Code Quality对拉取请求进行合并。 请参阅“[解决拉取请求中的阻塞](/zh/code-security/code-quality/how-tos/unblock-your-pr)”。

## 3. 利用 Copilot自动修复 或 Copilot云代理 修复发现

### Copilot自动修复

对拉取请求讨论的注释包括建议的 **自动修复** ，你可以直接将其提交到你的拉取请求。 仔细检查建议的自动修复，从逻辑、安全性和样式方面进行评估，然后单击 **提交建议**。

无需Copilot许可证来应用这些建议。

### Copilot云代理

或者，如果你有 Copilot 许可证，则可以将修正工作委托给 Copilot云代理。 对提到 `@Copilot` 的拉取请求进行评论，并请求 Copilot 修复检测到的问题。

![显示调用 Copilot 云智能体的 PR 注释的屏幕截图。](/assets/images/help/code-quality/invoke-cloud-agent.png)

```
          Copilot 使用眼睛表情符号 (👀) 响应你的批注，启动新的代理会话，并打开具有必要修复的拉取请求。
```

可以跟踪 Copilot云代理'工作：

* 在拉取请求中，摘要会随着工作推进而更新。
* 使用[智能体页](https://github.com/copilot/agents?ref_product=copilot\&ref_type=engagement\&ref_style=text)或会话日志，请参阅 [跟踪 GitHub Copilot 的会话](/zh/copilot/how-tos/use-copilot-agents/cloud-agent/track-copilot-sessions)。

你需要一个Copilot许可证来调用Copilot云代理。 <br> <a href="https://github.com/features/copilot/plans?ref_product=copilot&ref_type=purchase&ref_style=button" target="_blank" class="btn btn-primary mt-3 mr-3 no-underline"> <span>注册 Copilot</span><svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-link-external" aria-label="link external icon" role="img"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a>

## 4. 消除无关的发现

如果在代码库的上下文中不相关或不可执行，则可以忽略该检测结果。 常见驳回发现的原因包括：

* 该发现位于不再维护的旧代码中。
* 团队的编码标准中有一个为众所知的例外。
* 这是一个误报，不会构成真正的质量风险。

消除不相关的警报可使质量检查专注于有意义的问题。

## 5. 推送更改并等待扫描结果。

修复或驳回调查结果后，将更改推送到与拉取请求关联的分支。
GitHub Code Quality 将自动重新扫描您的更改并相应地更新拉取请求上的评论。

## 6.检查存储库的代码质量分级

具有写入访问权限的任何人都可以查看存储库的总体代码质量分级，该分级汇总了代码在默认分支中的可靠性和可维护性的状态。

若要查看存储库的评级，请导航到 **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield" aria-label="shield" role="img"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> Security and quality** 存储库的选项卡，在边栏中展开 **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-code-review" aria-label="code review" role="img"><path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 13H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25v-8.5C0 1.784.784 1 1.75 1ZM1.5 2.75v8.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm5.28 1.72a.75.75 0 0 1 0 1.06L5.31 7l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.75.75 0 0 1 1.06 0Zm2.44 0a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L10.69 7 9.22 5.53a.75.75 0 0 1 0-1.06Z"></path></svg>代码质量** ，然后单击 **常规发现**。

通过在合并拉取请求之前解决问题，你直接帮助维护了这些评分。

## 后续步骤

* 解决默认分支中的代码质量发现问题，并了解存储库的可靠性和可维护性评级。 请参阅“[提高存储库代码的质量](/zh/code-security/code-quality/tutorials/improve-your-codebase)”。
* 在<c1>社区讨论</c1>中提供关于<c0>的反馈。