跳至主要内容

使用内容 linter

你可以使用内容 linter 来检查你的贡献是否有错误。

关于 GitHub Docs 内容 linter

我们的内容 linter 在我们的 Markdown 内容中强制执行风格指南规则。

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

运行 GitHub Docs 内容 linter

GitHub Docs 内容 linter 将在预提交时自动运行,但你也可以手动运行它。

在预提交时自动运行 linter

当你使用命令行在本地编写内容并提交文件时,这些暂存的文件将由内容 linter 自动进行 linting。警告和错误都会被报告,但只有错误会阻止你的提交完成。

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

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

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

手动运行 linter

对暂存和已更改的文件运行 linter

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

npm run lint-content

对暂存和已更改的文件运行 linter,仅报告错误

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

npm run lint-content -- --errors

对特定文件或目录运行 linter

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

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

运行一组特定 linter 规则

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

对所有暂存和已更改的文件运行指定的 linter 规则

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

在特定文件或目录上运行指定的 linter 规则

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

绕过提交挂钩

如果 linter 捕获到您未引入的错误,您可以在提交更改时使用 --no-verify 选项绕过 git 提交挂钩。

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

显示内容 linter 脚本的帮助菜单

npm run lint-content -- --help

Linting 规则

每个规则都在 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
MD030列表标记空格列表标记后的空格errorol、ul、空格
MD031围栏代码块围栏代码块应使用空行包围error代码、空行
MD037强调标记内无空格强调标记内的空格error空格、强调
MD039链接文本内无空格链接文本内的空格error空格、链接
MD040围栏代码语言围栏代码块应指定语言error代码、语言
MD042无空链接无空链接errorlinks
MD047单个尾随换行符文件应以单个换行符结尾error空行
MD049强调样式强调样式error强调
MD050加粗样式加粗样式error强调
搜索替换todocs 占位符捕获 TODOCS 占位符的出现。error
搜索替换文档域捕获 docs.github.com 域的出现。error
搜索替换帮助域捕获 help.github.com 域的出现。error
搜索替换预览域捕获 preview.ghdocs.com 域的出现。error
搜索替换开发者域捕获 developer.github.com 域的出现。error
搜索替换已弃用的 liquid 语法:site.data捕获已弃用的 liquid 数据语法的出现。error
搜索替换已弃用的 liquid 语法:octicon-使用的 octicon liquid 语法已弃用。请改用此格式 octicon "<octicon-name>" aria-label="<Octicon aria label>"error
GH001无默认替代文本图像应具有有意义的替代文本(alt 文本)error可访问性、图像
GH002无通用链接文本避免使用诸如 了解更多点击此处 之类的通用链接文本error可访问性、链接
GHD030代码围栏行长代码围栏行不应超过最大长度警告代码、可访问性
GHD032图像替代文本结束标点图像的替代文本应以标点符号结尾error可访问性、图像
GHD004图像文件名 kebab-case图像文件名必须使用 kebab-caseerror图像
GHD033替代文本长度不正确图像替代文本应在 40-150 个字符之间警告可访问性、图像
GHD002内部链接无语言内部链接不得包含硬编码的语言代码error链接、网址
GHD003内部链接斜杠内部链接必须以 / 开头error链接、网址
GHD031图像替代文本排除词图像的替代文本不应以“图像”或“图形”等词开头error可访问性、图像
GHD034列表首字母大写列表项的首字母应大写警告ul、ol
GHD001链接标点内部链接标题不得包含标点符号error链接、网址
GHD008早期访问引用非早期访问的文件不应引用早期访问或早期访问文件error功能、早期访问
GHD021yaml 定时作业包含定时工作流的 YAML 片段不得在整点运行,且必须唯一error功能、操作
GHD006内部链接旧版本内部链接不得使用旧版本语法硬编码版本error链接、URL、版本控制
GHD005硬编码数据变量包含“个人访问令牌”的字符串应使用产品变量代替error单一来源
GHD013GitHub 自有操作引用GitHub 自有操作引用不应硬编码error功能、操作
GHD016Liquid 带引号的条件参数Liquid 条件标签不应引用条件参数errorLiquid、格式
GHD014Liquid 数据引用已定义在内容中发现了 Liquid 数据或缩进数据引用,但这些引用没有值或在数据目录中不存在errorLiquid
GHD015Liquid 数据标签格式Liquid 数据或缩进数据引用标签必须格式正确,并具有正确数量的参数和间距errorLiquid、格式
GHD010前端隐藏文档具有前端属性 hidden 的文章只能位于特定产品中error前端、功能、早期访问
GHD009前端早期访问引用非早期访问的文件不应具有引用早期访问的前端error前端、功能、早期访问
GHD011前端视频转录视频转录必须正确配置error前端、功能、视频转录
GHD012前端架构前端必须符合架构error前端、架构
GHD007代码注释Markdown 中定义的代码注释必须包含特定的布局前端属性error代码、功能、注释、前端
GHD017前端 Liquid 语法前端属性必须使用有效的 LiquiderrorLiquid、前端
GHD018Liquid 语法Markdown 内容必须使用有效的 LiquiderrorLiquid
GHD019Liquid if 标签当参数为有效版本时,应使用 Liquid ifversion 标签,而不是 if 标签errorLiquid、版本控制
GHD020Liquid ifversion 标签Liquid ifversion 标签应包含有效版本名称作为参数errorLiquid、版本控制
GHD022liquid-ifversion-versionsLiquid ifversion(和 elsif)不应始终为真警告Liquid、版本控制
GHD035rai-reusable-usageRAI 文章和可重用内容只能引用 data/reusables/rai 目录中的可重用内容errorfeature, rai
GHD036image-no-gif图像不得为 gif,风格指南参考:contributing/style-guide-and-content-model/style-guide.md#imageserror图像
GHD038expired-content必须修复已过期的内容。errorexpired
GHD039expiring-soon应主动处理即将过期的内容。警告expired

语法用于 linting 规则

一些 linting 规则根据你可以添加到文章中的 HTML 注释返回警告或错误。

语法用于过期和已过期的内容

规则 GHD038GHD039 检查手动指定了到期日期的内容。在指定日期前 14 天,内容 linter 将返回警告,表明内容即将过期。从指定日期开始,内容 linter 将返回错误并标记内容以进行修复。

你可以通过将内容包装在包含到期日期的 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 has been deprecated and will no longer be available after 28 June 2024.
</td>
</tr>
<!-- end expires 2024-06-28 -->

禁止 linter 规则

在极少数情况下,你可能需要记录违反一条或多条 linter 规则的内容。在这些情况下,你可以通过向 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 -->禁用下一行的按名称指定的一个或多个规则