跳转到内容

REF-001 链接断裂

验证 Markdown 中的相对链接(形如 [text](./file.md))指向实际存在的文件。链接目标不存在时,会报告为 error。锚点片段(#section)不参与链接目标判定,其有效性由 REF-005 锚点 负责。

在 Markdown 运维中,因文件重命名、删除、移动导致的链接损坏是最常见的劣化形式。AI 生成时也可能混入指向不存在文件的链接。即便链接断裂,markdownlint 与 CI 仍会通过,因此机械化检测是必要的。

字段类型必填说明
excludestring[]从链接目标验证中排除的路径 glob 数组
siteRouterobject将 SSG 的 routed URL(如 /docs/x/)解析为实际文件的配置

省略全部选项也可工作。exclude 用于像外部文档或生成物那样不在 include 范围内、但被有意引用的文件。

默认情况下 REF-001 把 ./file.md 这类相对链接当作 file system 路径解析。但 Astro Starlight 等 SSG 生成的 routed URL/docs/x//ja/docs/x/)作为 file path 并不存在,因此不指定 siteRouter 就会被判定为 broken link。

子字段类型必填说明
presetstring已知的 SSG 预设。目前仅支持 "starlight"
contentDirstring内容目录(如 "packages/site/src/content/docs"
defaultLocalestring默认 locale。Starlight 无前缀的 root locale 指定为 "root"
localesstring[]支持的 locale 列表(如 ["root", "ja", "ko", "zh"]
urlPrefixstring(不使用 preset 的通用配置) 从 URL 中剥离的前缀
indexFilestring最先尝试的 index 文件名(默认: "index.md"

Starlight (i18n) 示例:

{
"rule": "ref001",
"options": {
"siteRouter": {
"preset": "starlight",
"contentDir": "packages/site/src/content/docs",
"defaultLocale": "root",
"locales": ["root", "ja", "ko", "zh"]
}
}
}

/docs/get-started/ 解析为 <contentDir>/docs/get-started/index.md<contentDir>/docs/get-started.md/ja/docs/get-started/ 解析为 <contentDir>/ja/docs/get-started/index.md

通用配置(无 preset)示例:

{
"rule": "ref001",
"options": {
"siteRouter": {
"contentDir": "src/pages",
"urlPrefix": "/wiki",
"indexFile": "README.md"
}
}
}

/wiki/some-page/ 解析为 src/pages/some-page/README.md

详见 [架构](./architecture.md)

./architecture.md 不存在时,判定为违例。

docs/overview.md
line 1 error Link target "./architecture.md" does not exist REF-001
详见 [架构](./architecture.md)

创建链接目标文件 architecture.md,或将链接修正为正确的路径。

{
"rule": "ref001",
"options": {
"exclude": ["generated/**/*.md"]
}
}