markdownlint MD044 实战:用 `code_blocks: false` 精准控制代码块中的专有名词大小写检查

发布时间:2026/10/16 1:55:05
markdownlint MD044 实战:用 `code_blocks: false` 精准控制代码块中的专有名词大小写检查 开发工具代码质量Lint静态分析【免费下载链接】markdownlintA Node.js style checker and lint tool for Markdown/CommonMark files.项目地址https://gitcode.com/gh_mirrors/ma/markdownlint点击查看免费下载markdownlint 的MD044proper-names规则用于强制项目/产品专有名词保持正确的大小写拼写例如把Javascript纠正为JavaScript。本文以仓库测试文件 test/proper-names-no-code.md 为核心讲解如何通过code_blocks: false参数豁免代码块与行内代码中的大小写检查并结合 lib/md044.mjs 源码与测试快照逐行拆解规则的匹配原理、适用场景与边界行为。一、规则定位与参数总览MD044在 markdownlint 中的完整定义位于 doc/md044.md别名Aliasesproper-names标签Tagsspelling是否可自动修复Fixable部分违规可由工具自动修复解析器Parsermicromark见 lib/md044.mjs 中的parser: micromark规则参数共三个参数类型默认值作用namesstring[][]需要强制正确大小写的专有名词列表code_blocksbooleantrue是否检查代码块与行内代码code spanhtml_elementsbooleantrue是否检查 HTML 元素与属性内容names为空数组时规则不执行任何检查可视为“零开销短路”——这一点在 lib/md044.mjs 的源码中有明确体现if (names.length 0) { // Nothing to check; avoid doing any work return; }二、测试文件全景一份“只豁免代码”的验收样例test/proper-names-no-code.md 是 markdownlint 场景测试体系由 test/markdownlint-test-scenarios.mjs 驱动逐个读取test/目录下所有.md文件并与 test/markdownlint-test-scenarios.mjs.snapshot 中的快照比对中的一份专项测试。它通过文件尾部的内联配置同时验证了 MD044 与 MD046!-- markdownlint-configure-file { proper-names: { names: [ Internet Explorer, markdownlint, JavaScript, Node.js, GitHub, npm ], code_blocks: false } } --该测试配置了六个专有名词并明确关闭代码块检查随后围绕“正文与代码内容并存”精心铺设了十余组用例其设计意图可以归纳为三个维度2.1 验证代码类内容全部豁免以下内容在code_blocks: false下均不产生 MD044 报告行内代码javascript、via the node.js engine四空格缩进的代码块javascript is code、node.js is runtime围栏代码块js内的javascript is code、node.js is runtime此时唯一被标记的是{MD046:-1}属于代码块样式规则而非 MD044多行 code span 中跨行出现的javascript如code\njavascript、code\njavascript\ncode、javascript\ncode这些用例直接证明了关闭code_blocks后MD044 的扫描范围会从代码内容中整体移除。2.2 验证正文内容仍然严格检查正文中的违规拼写必须继续被捕获并在快照中记录为带修复信息的错误行号文本期望值Expected实际值Actual修复动作3Markdownlint is a toolmarkdownlintMarkdownlint替换为小写9Nor is it Javascript.JavaScriptJavascript替换为JavaScript24about node.js andNode.jsnode.js替换为Node.js25also javascript.JavaScriptjavascript替换为JavaScript42text javascript text \javascript text|JavaScript|javascript正文部分 | 替换为JavaScript43text \javascript text javascript text|JavaScript|javascript正文部分 | 替换为JavaScript上表的“期望值/实际值”来自快照中errorDetail字段的原始格式例如errorDetail: Expected: markdownlint; Actual: Markdownlint, errorRange: [1, 12], fixInfo: { editColumn: 1, deleteCount: 12, insertText: markdownlint }fixInfo的存在意味着该错误可通过 markdownlint 的applyFixesfix模式自动修复。快照末尾的fixed字段正是applyFixes作用后的全文可以看到正文中所有违规都被纠正而代码内容保持原样。2.3 验证同一行内“正文与代码并存”的精确区分第 3943 行是这份测试最核心的看点——同一行内同时出现正文与行内代码时规则必须做到“只报正文、放过代码”text JavaScript text javascript text JavaScript text !-- 无报告 -- text javascript text JavaScript text javascript text !-- 无报告 -- text javascript text javascript text {MD044} !-- 报第 6 列 -- text javascript text javascript text {MD044} !-- 报第 24 列 --前两行大小写全部正确无报告后两行的违规分别落在正文位置的javascript上而同行内代码里的javascript被正确豁免。快照中对应的errorRange为[6, 10]与[24, 10]即列位置精确指向正文中的违规词代码 span 所在列未被标记。三、源码级原理MD044 如何做到“只扫正文”要理解code_blocks: false的行为需要看 lib/md044.mjs 的实现。规则基于 micromark 解析出的 token 树工作核心逻辑分为三层3.1 按参数构建“扫描类型集合”const scannedTypes new Set([ data ]); if (includeCodeBlocks) { scannedTypes.add(codeFlowValue); scannedTypes.add(codeTextData); } if (includeHtmlElements) { scannedTypes.add(htmlFlowData); scannedTypes.add(htmlTextData); }data正文普通文本始终被扫描codeFlowValue围栏/缩进代码块的文本内容只有code_blocks: true才扫描codeTextData行内代码code span的内容同样受code_blocks控制htmlFlowData/htmlTextDataHTML 块与行内 HTML 的内容受html_elements控制。默认值在源码中显式给出code_blocks与html_elements未配置时均视为truelib/md044.mjs。随后通过filterByPredicate实现于 helpers/micromark-helpers.cjs从 token 树中按集合筛选出待检查的内容 token。3.2 排序 正则匹配 自动修复信息names.sort((a, b) (b.length - a.length) || a.localeCompare(b));names按长度降序排列保证长名字如Internet Explorer优先匹配、不被短名字的子串匹配抢占。每个名字经escapeForRegExphelpers/helpers.cjs转义后构造正则并自动加上词边界\b_*/_*\\b——注意 test/proper-names-non-word-boundaries.md 演示了当名字本身以.等非单词字符开头/结尾时边界模式会被按需省略从而允许.NET这类名字的精确匹配。匹配到候选词后代码会判断若候选词不等于names中的任何一项大小写不符则通过addErrorDetailIf报告错误并附带Expected: X; Actual: Y的详细说明与fixInfoeditColumndeleteCountinsertText这正是快照中可自动修复数据的来源若候选词与某个literalAutolink自动链接...范围重叠则跳过报告——这是对 URL 内容的豁免处理每次匹配后都会将命中范围记入exclusions用于避免后续名字的重复/重叠报告。3.3 与 MD046 的叠加验证测试文件第 1821 行的围栏代码块同时被标记了{MD046:-1}这是因为测试环境对代码块样式fenced vs indented有独立约束与code_blocks: false无关。快照中该错误对应的规则为MD046code-block-style说明两个规则各自独立扫描、互不干扰——MD044 忽略代码内容MD046 仍正常检查代码块的书写样式。四、内联配置的落地机制测试文件使用的markdownlint-configure-file注释是 markdownlint 的内联配置语法。在 lib/markdownlint.mjs 中configureFile会解析该注释内的 JSON 并通过parseConfiguration合并进当前文件的配置if (action CONFIGURE-FILE) { const { config: parsed } parseConfiguration( CONFIGURE-FILE, parameter, configParsers ); if (parsed) { config { ...config, ...parsed }; } }这意味着配置只对当前文件生效适合作为“单一文件豁免”手段若要全仓库统一豁免则应把proper-names配置写入仓库级.markdownlint.json/.markdownlint.yaml或package.json的markdownlint.config字段详见 doc/CustomRules.md 与仓库 README.md 中的规则索引。五、参数组合从“全查”到“全不查”的完整谱系仓库中的其他测试文件为参数边界提供了全景对照测试文件关键配置行为要点test/proper-names.md无豁免代码块、行内代码、HTML 属性、链接、注释、标题全部被查test/proper-names-no-code.mdcode_blocks: false代码块与行内代码豁免正文/HTML 仍查test/proper-names-no-html.mdhtml_elements: falseHTML 元素与属性如idjavascript、src路径、注释豁免正文与代码仍查test/proper-names-projects.mdcode_blocks: false 混合名字演示github.com、vue-router等多词/带域名名字与代码文件名的区分test/proper-names-alternate.md默认参数验证引号、加粗、标题内的错误大小写都能被定位与修复test/proper-names-substrings.md默认参数验证aws-control-tower等带特殊前缀/连字符名字按子串语义匹配test/proper-names-non-word-boundaries.md默认参数验证.NET这类以点号收尾名字的边界处理实际工程中的典型取舍文档站点如 README、API 文档code_blocks保持默认true更严格因为代码块中误写Javascript同样值得提醒含大量真实代码片段的教程/示例仓库建议设置code_blocks: false避免对代码中不可避免的变量名、路径、CLI 输出产生噪音——test/proper-names-no-code.md 正是这一场景的验收基准含大量 HTML 的文档若专有名词常出现在href/src路径中可考虑html_elements: false对照 test/proper-names-no-html.md。六、验证与回归如何用仓库测试复核该测试文件已纳入自动化回归。运行方式在仓库根目录下npm test或单独执行场景测试套件对比 test/markdownlint-test-scenarios.mjs.snapshot 中proper-names-no-code.md 1的快照。断言逻辑位于 test/markdownlint-test-scenarios.mjs测试用{MD044}、{MD046:-1}这类标记在源文件里标注期望行号lint实际报告的行号必须与之完全一致随后对applyFixes的结果再次lint要求所有可修复错误均已被消除test/markdownlint-test-scenarios.mjs。这正是proper-names-no-code.md的价值所在它不仅是一份示例更是一份“行为契约”——任何对 MD044 扫描逻辑的改动都必须通过这份快照的精确校验从而保证code_blocks: false的豁免语义永不回归。七、小结围绕 test/proper-names-no-code.md 可以得到三条可直接落地的结论豁免粒度可控proper-names通过code_blocks与html_elements两个开关把检查范围精确切分为正文、代码、HTML 三类内容可按需开关参考 doc/md044.md 与 lib/md044.mjs正文检查不放松关闭code_blocks仅豁免代码正文中的Javascript、node.js等错误拼写仍会报告且附带可自动修复的fixInfo同一行也能精确区分正文与行内代码并存时违规定位精确到列代码 span 内容不受影响——这是由 micromark token 扫描机制保证的helpers/micromark-helpers.cjs 中的filterByPredicate与 lib/md044.mjs 中的scannedTypes集合共同实现。配置代码块豁免、保留正文大小写检查是文档工程中最常见的“严格与宽容并存”需求而这份测试文件恰好给出了该需求最完整的可执行答案。赞分享开发工具代码质量Lint静态分析【免费下载链接】markdownlintA Node.js style checker and lint tool for Markdown/CommonMark files.项目地址https://gitcode.com/gh_mirrors/ma/markdownlint点击查看免费下载相关推荐markdownlint MD044 规则实战代码块与行内代码 span 中的专有名词大小写检查markdownlint MD044 规则实战代码块与行内代码 span 中的专有名词大小写检查 导读 本文围绕 markdownlint 仓库中的专项测试场开发工具代码质量Lint静态分析markdownlint 规则实战用 MD044/proper-names 强制统一专有名词大小写markdownlint 规则实战用 MD044/proper names 强制统一专有名词大小写 本篇文章围绕 markdownlint 仓库中的测试用例开发工具代码质量Lint静态分析markdownlint MD044 规则实战用 proper-names 精确控制专有名词大小写与 HTML 元素扫描范围markdownlint MD044 规则实战用 proper names 精确控制专有名词大小写与 HTML 元素扫描范围 导读 本篇文章围绕 markdo开发工具代码质量Lint静态分析上一篇Ant Design Blazor Icon 图标组件详解主题切换、旋转动画、双色图标与自定义 SVG下一篇vim-airline语法高亮文件类型添加新类型创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询