跳至主要内容

使用内容代码检查器

您可以使用内容代码检查器检查您的贡献是否存在错误。

关于 GitHub Docs 内容代码检查器

我们的内容代码检查器会在我们的 Markdown 内容中强制执行样式指南规则。

代码检查器使用 markdownlint 作为执行检查、报告缺陷并在可能的情况下自动修复内容的框架。此框架可以灵活地运行特定规则,提供描述性错误消息并修复错误。GitHub Docs 内容代码检查器使用一些现有的 markdownlint 规则和一些额外的自定义规则来检查我们 contentdata 目录中的 Markdown 内容。我们的自定义规则实现了尚未在 markdownlint 框架中提供的检查,或者特定于 GitHub Docs 内容的检查。规则会检查 Markdown 和 Liquid 的语法。

运行 GitHub Docs 内容代码检查器

GitHub Docs 内容代码检查器将在预提交时自动运行,但您也可以手动运行它。

在预提交时自动运行代码检查器

当您在本地编写内容并使用命令行提交文件时,这些暂存的文件将由内容代码检查器自动进行代码检查。将报告警告和错误,但只有错误才会阻止您的提交完成。

如果报告了任何错误,您的提交将无法完成。您需要修复报告的错误,重新添加已更改的文件,然后再次提交更改。必须修复报告的任何错误,以防止在内容中引入违反 GitHub Docs 样式指南的错误。如果报告了任何警告,您可以选择修复或不修复它们。

当您在本地编写内容时,您可以使用命令行自动修复一些规则。如果您想自动修复可以修复的错误,请参阅“自动修复可以修复的错误”。

如果您在 GitHub UI 中编辑文件,则无法自动修复错误或在提交时运行代码检查器,但如果内容违反了任何严重性为 error 的规则,则会收到 CI 失败。

手动运行代码检查器

在暂存和已更改的文件上运行代码检查器

使用以下命令在本地对暂存和已更改的文件运行代码检查器。它将输出 warningerror 严重性缺陷。

npm run lint-content

在暂存和已更改的文件上运行代码检查器,仅报告错误

使用以下命令在本地对暂存和已更改的文件运行代码检查器,并仅报告 error 严重性缺陷。

npm run lint-content -- --errors

在特定文件或目录上运行代码检查器

使用以下命令在本地对特定文件或目录运行代码检查器。用空格分隔多个路径。您可以在同一命令中包含文件和目录。

Shell
npm run lint-content -- \
  --paths content/FILENAME.md content/DIRECTORY

自动修复可以修复的错误

如果错误在其描述中包含 fixable: true,则可以使用以下命令自动修复它们。

运行此命令仅修复暂存和已更改的文件

npm run lint-content -- --fix

运行此命令修复特定文件或目录

npm run lint-content -- \
  --fix --paths content/FILENAME.md content/DIRECTORY

运行一组特定的代码检查规则

使用以下命令运行一个或多个特定的代码检查规则。这些示例运行 heading-incrementcode-fence-line-length 规则。将 heading-increment code-fence-line-length 替换为您想要运行的一个或多个代码检查器别名。若要查看可以传递给此选项的代码检查规则列表,请运行 npm run lint-content -- --help。您可以使用代码检查规则的短名称(例如,MD001)或长名称(例如,heading-increment)。

在所有暂存和已更改的文件上运行指定的代码检查规则

npm run lint-content -- \
  --rules heading-increment code-fence-line-length

在特定文件或目录上运行指定的代码检查规则

npm run lint-content -- \
  --rules heading-increment code-fence-line-length \
  --path content/FILENAME.md content/DIRECTORY

绕过提交钩子

如果代码检查器捕获了您未引入的错误,则可以在提交更改时使用 --no-verify 选项绕过 git 提交钩子。

git commit -m 'MESSAGE' --no-verify

显示内容代码检查器脚本的帮助菜单

npm run lint-content -- --help

代码检查规则

每个规则都配置在 src/content-linter/style 中的文件中,规则的严重性是在此处定义的。

必须在将您的更改合并到 main 分支之前解决错误。应解决警告,但不会阻止更改合并到 main 分支。大多数规则最终将升级为错误,一旦内容不再有警告违规。

规则 ID规则名称描述严重性标签
MD001heading-increment标题级别每次只能递增一级errorheadings
MD004ul-style无序列表样式errorbullet, ul
MD009no-trailing-spaces尾随空格errorwhitespace
MD011no-reversed-links反向链接语法errorlinks
MD012no-multiple-blanks多个连续的空行errorwhitespace, blank_lines
MD014commands-show-output在命令前使用美元符号但不显示输出errorcode
MD018no-missing-space-atxAtx 样式标题的井号后没有空格errorheadings, atx, spaces
MD019no-multiple-space-atxAtx 样式标题的井号后有多个空格errorheadings, atx, spaces
MD022blanks-around-headings标题应由空行包围errorheadings, blank_lines
MD023heading-start-left标题必须以行首开头errorheadings, spaces
MD027no-multiple-space-blockquote块引用符号后有多个空格errorblockquote, whitespace, indentation
MD029ol-prefix有序列表项前缀errorol
MD030list-marker-space列表标记后的空格errorol, ul, whitespace
MD031blanks-around-fences带围栏的代码块应由空行包围errorcode, blank_lines
MD037no-space-in-emphasis强调标记内的空格errorwhitespace, emphasis
MD039no-space-in-links链接文本内的空格errorwhitespace, links
MD040fenced-code-language带围栏的代码块应指定语言errorcode, language
MD042no-empty-links没有空链接errorlinks
MD047single-trailing-newline文件应以单个换行符结尾errorblank_lines
MD049emphasis-style强调样式erroremphasis
MD050strong-style强样式erroremphasis
search-replacetodocs-placeholder捕获 TODOCS 占位符的出现。error
search-replacedocs-domain捕获 docs.github.com 域名的出现。

error
search-replace帮助域捕获 help.github.com 域名的出现。error
search-replace预览域捕获 preview.ghdocs.com 域名的出现。error
search-replace开发者域捕获 developer.github.com 域名的出现。error
search-replace已弃用的 Liquid 语法:site.data捕获已弃用的 Liquid 数据语法的出现。error
search-replace已弃用的 Liquid 语法:octicon-使用的 octicon Liquid 语法已弃用。请改用以下格式 octicon "<octicon-name>" aria-label="<Octicon aria label>"error
GH001无默认替代文本图像应具有有意义的替代文本(alt 文本)。error辅助功能,图像
GH002无通用链接文本避免使用诸如 了解更多点击此处 之类的通用链接文本。error辅助功能,链接
GHD030代码围栏行长度代码围栏行不得超过最大长度。警告代码,辅助功能
GHD032图像替代文本末尾标点图像的替代文本应以标点结尾。error辅助功能,图像
GHD004图像文件使用连字符命名法图像文件名必须使用连字符命名法。error图像
GHD033不正确的替代文本长度图像的替代文本应在 40 到 150 个字符之间。警告辅助功能,图像
GHD002内部链接无语言代码内部链接不得包含硬编码的语言代码。error链接,URL
GHD003内部链接斜杠内部链接必须以 / 开头。error链接,URL
GHD031图像替代文本排除词语图像的替代文本不得以“图像”或“图形”等词语开头。error辅助功能,图像
GHD034列表首字母大写列表项的首字母应大写。警告ul,ol
GHD001链接标点内部链接标题不得包含标点符号。error链接,URL
GHD008抢先体验引用非抢先体验的文件不得引用抢先体验或抢先体验文件。error功能,抢先体验
GHD021YAML 计划作业包含计划工作流的 YAML 代码段不得在整点运行,并且必须唯一。error功能,操作
GHD006内部链接旧版本内部链接不得使用旧版本语法硬编码版本。error链接,URL,版本控制
GHD005硬编码数据变量包含“个人访问令牌”的字符串应改用产品变量。error单一来源
GHD013GitHub 拥有操作的引用不得硬编码 GitHub 拥有的操作引用。error功能,操作
GHD016Liquid 带引号的条件参数Liquid 条件标签不得为条件参数加引号。errorLiquid,格式
GHD014Liquid 数据引用已定义在内容中发现 Liquid 数据或缩进数据引用,这些内容在数据目录中没有值或不存在。errorLiquid
GHD015Liquid 数据标签格式Liquid 数据或缩进数据引用标签必须格式正确,并且参数和间距数量正确。errorLiquid,格式
GHD010前置 matter 隐藏文档具有前置 matter 属性 hidden 的文章只能位于特定产品中。error前置 matter,功能,抢先体验
GHD009前置 matter 抢先体验引用非抢先体验的文件不得具有引用抢先体验的前置 matter。error前置 matter,功能,抢先体验
GHD011前置 matter 视频抄本视频抄本必须正确配置。error前置 matter,功能,视频抄本
GHD012前置 matter 架构前置 matter 必须符合架构。error前置 matter,架构
GHD007代码注释在 Markdown 中定义的代码注释必须包含特定的布局前置 matter 属性。error代码,功能,注释,前置 matter
GHD017前置 matter Liquid 语法前置 matter 属性必须使用有效的 Liquid。errorLiquid,前置 matter
GHD018Liquid 语法Markdown 内容必须使用有效的 Liquid。errorLiquid
GHD019Liquid if 标签当参数为有效版本时,应使用 Liquid ifversion 标签代替 if 标签。errorLiquid,版本控制
GHD020Liquid ifversion 标签Liquid ifversion 标签应包含有效的版本名称作为参数。errorLiquid,版本控制
GHD022Liquid ifversion 版本Liquid ifversion(和 elsif)不应始终为真。警告Liquid,版本控制
GHD035RAI 可复用内容的使用RAI 文章和可复用内容只能引用 data/reusables/rai 目录中的可复用内容。error功能,RAI
GHD036图像不得为 GIF图像不得为 GIF,样式指南参考:contributing/style-guide-and-content-model/style-guide.md#images。error图像
GHD038内容已过期必须修复已过期的内容。error过期
GHD039即将过期应主动解决即将过期的内容。警告过期
GHD040表格 Liquid 版本控制表格必须使用正确的 Liquid 版本控制格式。error表格
GHD041第三方操作固定使用第三方操作的代码示例必须始终固定到完整的提交 SHA。error功能,操作
GHD042Liquid 标签空格Liquid 标签应以一个空格开头和结尾。Liquid 标签参数之间应只用一个空格隔开。errorLiquid,格式

Lint 规则的语法

某些 Lint 规则会根据您可以添加到文章中的 HTML 注释返回警告或错误。

即将过期和已过期内容的语法

规则 GHD038GHD039 检查手动指定过期日期的内容。在指定日期之前的十四天,内容 Lint 程序将返回一条警告,提示内容即将过期。从指定日期开始,内容 Lint 程序将返回错误并标记内容以进行修复。

您可以通过将其包装在包含以下格式的过期日期的 HTML 标签中,将过期日期添加到内容中:<!-- expires yyyy-mm-dd --> <!-- end expires yyyy-mm-dd -->

使用

This content does not expire.
<!-- expires 2022-01-28 -->
This content expires on January 28, 2022.
<!-- end expires 2022-01-28 -->
This content also does not expire.

请注意,如果将过期标签放在 HTML table 元素中,请确保标签围绕整个行,而不仅仅是单元格。例如

<!-- expires 2024-06-28 -->
<tr>
<td>
macOS
</td>
<td>
The <code>macos-11</code> label is closing down and will no longer be available after 28 June 2024.
</td>
</tr>
<!-- end expires 2024-06-28 -->

禁用 Lint 规则

在极少数情况下,您可能需要记录违反一个或多个 Lint 规则的内容。在这些情况下,您可以通过向 Markdown 文件添加注释来禁用规则。您可以禁用所有规则或特定规则。始终尝试限制尽可能少的规则。您可以为整个文件、Markdown 文件的一部分、特定行或下一行禁用规则。

例如,如果您正在编写一篇包含正则表达式 (^|/)[Cc]+odespace/ 的文章,该表达式检查反向链接语法,它将触发检查反向链接的 MD011 规则。您可以通过添加以下注释来禁用该特定行的 MD011 规则。

(^|/)[Cc]+odespace/ <!-- markdownlint-disable-line MD011 -->

如果要忽略的行位于代码块中,则可以通过以下注释将其括起来以忽略代码块。

<!-- markdownlint-disable MD011 -->
```
(^|/)[Cc]+odespace/
```
<!-- markdownlint-enable MD011 -->

您可以使用这些注释启用或禁用规则。

注释效果
<!-- markdownlint-disable -->禁用所有规则
<!-- markdownlint-enable -->启用所有规则
<!-- markdownlint-disable-line -->禁用当前行的所有规则
<!-- markdownlint-disable-next-line -->禁用下一行的所有规则
<!-- markdownlint-disable RULE-ONE RULE-TWO -->
<!-- markdownlint-enable RULE-ONE RULE-TWO -->按名称启用一个或多个规则
<!-- markdownlint-disable-line RULE-NAME -->禁用当前行的一个或多个规则(按名称)
<!-- markdownlint-disable-next-line RULE-NAME -->禁用下一行的一个或多个规则(按名称)