super-linter 中的自然语言检查(NATURAL_LANGUAGE):textlint 规则配置与源码实现解析
代码质量CI/CD【免费下载链接】super-linterCombination of multiple linters to run as a GitHub Action or standalone项目地址https://gitcode.com/gh_mirrors/su/super-linter点击查看免费下载NATURAL_LANGUAGE 是 super-linter 中专门用于对 Markdown 文档进行自然语言拼写与文风检查的 lint 语言模块其底层引擎为 textlint。本文围绕该模块在 super-linter 中的完整工作链路展开从测试用例的设计意图bad/good 文件到源码中文件的收集、规则配置文件的解析再到 textlint 命令的实际拼装帮助你理解如何在 CI 中为中文/英文文档配置并启用自然语言检查并掌握从仓库源码定位配置与验证行为的方法。该模块解决的痛点Markdown 拼写与文风问题在软件开发流程中代码本身可以被各种 linter 约束但仓库里的 Markdown 文档README、CHANGELOG、docs 等却常常缺乏自动化质量保障。自然语言文档中最常见的两类问题拼写/大小写错误例如把JavaScript写成Javascript、changelogs写成change logs专有名词与术语不统一例如source maps与source-maps混用。super-linter 的 NATURAL_LANGUAGE 模块正是为这类问题而生它借助 textlint 对 Markdown 文本进行规则化校验让文档质量和代码质量一样可控。测试用例设计bad 与 good 文件如何定义“对与错”super-linter 的每个语言模块在 test/linters 下都维护一套测试用例命名约定如下文件名或路径中包含good的用例应通过校验包含bad的用例应被判定为失败。NATURAL_LANGUAGE 模块的两个测试文件恰好展示了 textlint 能捕获的真实问题test/linters/natural_language/natural_language_bad_01.md期望 lint 失败内容如下My **Javascript** is good Write change logs about source-mapstest/linters/natural_language/natural_language_good_01.md期望 lint 通过内容如下My **JavaScript** is good Write changelogs about source maps对照两个文件可以清晰看出该模块的校验目标问题类型bad 文件写法good 文件写法专有名词大小写JavascriptJavaScript复合词/连字符用法source-mapssource maps词汇拼写change logschangelogs从 test/linters/README.md 可知测试只关注 super-linter 如何调用每个 linter 及其退出码不校验 linter 的具体输出内容——这是各 linter 自身职责。因此这两个文件本质上是给“super-linter 是否把 Markdown 交给 textlint 并正确传播退出码”做回归验证。文件收集哪些 Markdown 会进入 NATURAL_LANGUAGE 队列NATURAL_LANGUAGE 检查的输入由 lib/functions/buildFileList.sh 决定。在文件类型分发的elif链中md扩展名分支如下见 buildFileList.sh 第 706-713 行elif [ ${FILE_TYPE} md ]; then echo ${FILE} ${FILE_ARRAYS_DIRECTORY_PATH}/file-array-MARKDOWN if IsNotSymbolicLink ${FILE}; then echo ${FILE} ${FILE_ARRAYS_DIRECTORY_PATH}/file-array-MARKDOWN_PRETTIER else debug Skip adding ${FILE} to MARKDOWN_PRETTIER file array because Prettier doesnt support following symbolic links fi echo ${FILE} ${FILE_ARRAYS_DIRECTORY_PATH}/file-array-NATURAL_LANGUAGE可以看出每个.md文件会同时进入 MARKDOWNmarkdownlint、MARKDOWN_PRETTIERPrettier与 NATURAL_LANGUAGEtextlint三个文件数组三者互不替代与 Prettier 分支不同NATURAL_LANGUAGE 不排除符号链接文件即所有被检测到的.md文件都会进入 textlint 检查队列文件是否进入该队列与是否自定义规则无关属于全局文件发现流程的一部分。规则配置.textlintrc的查找与回退机制NATURAL_LANGUAGE 的规则文件默认名为.textlintrc这一默认值定义在 lib/globals/linterRules.sh 第 106 行NATURAL_LANGUAGE_FILE_NAME${NATURAL_LANGUAGE_CONFIG_FILE:-.textlintrc}也就是说你可以通过环境变量NATURAL_LANGUAGE_CONFIG_FILE覆盖默认文件名。而规则文件的实际路径解析逻辑在 lib/functions/linterRules.sh 的LinterRules函数中见第 16-73 行其核心行为若LINTER_RULES_PATH为.或/则将其置空第 6-7 行即不再拼接子目录当LINTER_RULES_PATH非空时规则路径解析为${GITHUB_WORKSPACE}/${LINTER_RULES_PATH}/${NATURAL_LANGUAGE_FILE_NAME}第 36 行当LINTER_RULES_PATH为空时回退到镜像内置路径${DEFAULT_RULES_LOCATION}/${NATURAL_LANGUAGE_FILE_NAME}第 49 行其中DEFAULT_RULES_LOCATION在 lib/globals/linterRules.sh 第 5 行 定义为/action/lib/.automation若解析出的规则文件不存在除 Java 的少数内置兜底外会调用fatal终止第 70 行保证配置缺失时快速失败而不是静默降级。LINTER_RULES_PATH的默认值是.github/linterslib/globals/linterRules.sh 第 8 行这也是绝大多数 super-linter 语言模块共用的规则目录约定。因此在你的仓库中放置.github/linters/.textlintrc即可让该配置对 NATURAL_LANGUAGE 生效。命令拼装textlint 如何被调用NATURAL_LANGUAGE 的实际执行命令定义在 lib/functions/linterCommands.sh 第 216 行LINTER_COMMANDS_ARRAY_NATURAL_LANGUAGE(textlint -c ${NATURAL_LANGUAGE_LINTER_RULES})这条命令与相邻的 MARKDOWN 命令markdownlint -c ...保持一致的风格通过-c显式指定配置文件路径即上一步LinterRules函数解析出的${NATURAL_LANGUAGE_LINTER_RULES}变量值其余参数由 worker 统一追加。因此最终对每个.md文件执行的实质命令为textlint -c 规则文件路径 markdown文件此外在 lib/globals/linterCommandsOptions.sh 第 78 行 中定义了修复模式选项NATURAL_LANGUAGE_FIX_MODE_OPTIONS(--fix)当开启 super-linter 的 FIX_MODE 时textlint 会以--fix参数运行自动修复可自动处理的拼写/文风问题不可自动修复的问题仍会以失败退出。这是该模块与普通 lint 模式最大的行为差异。工作流全景与实操建议综合以上源码证据NATURAL_LANGUAGE 的完整工作链路为文件发现buildFileList.sh收集所有 .md → 规则定位linterRules.sh解析 .textlintrc → 命令拼装linterCommands.shtextlint -c ... → 执行与退出码传播worker → 失败时产出检查报告实操要点总结如下启用方式无需额外开关任何.md文件默认都会被 NATURAL_LANGUAGE 检查若想跳过可结合 super-linter 的 FILTER_REGEX_INCLUDE/EXCLUDE 配置但这会同时影响其他模块的文件收集。自定义规则在仓库根目录创建.github/linters/.textlintrcJSON 格式的 textlint 配置即可替换镜像内置默认配置如不想使用该默认目录可通过LINTER_RULES_PATH与NATURAL_LANGUAGE_CONFIG_FILE两个环境变量调整查找位置与文件名。配置缺失行为若解析出的.textlintrc不存在super-linter 会直接fatal终止而不是跳过因此使用自定义规则前务必保证文件真实存在。修复模式在 FIX_MODE 下 textlint 会以--fix运行可对部分拼写问题自动修复建议将 bad/good 两个测试用例natural_language_bad_01.md 与 natural_language_good_01.md作为本地验证的最小样例。回归验证若你 fork 或扩展了 NATURAL_LANGUAGE 相关逻辑可运行 test/run-super-linter-tests.sh 中对应的测试套件确认 textlint 的退出码被正确传播。综上NATURAL_LANGUAGE 是 super-linter 中文本即代码理念的具体落地通过统一的文件收集、规则定位与命令拼装机制把 textlint 无缝接入 GitHub Action 的 lint 流水线让 Markdown 文档的拼写、大小写与术语风格在合并前就能被自动化拦截。赞分享代码质量CI/CD【免费下载链接】super-linterCombination of multiple linters to run as a GitHub Action or standalone项目地址https://gitcode.com/gh_mirrors/su/super-linter点击查看免费下载相关推荐Super-Linter 的 Markdown 检查实战基于 markdownlint 的规范写法与规则配置解析Super Linter 的 Markdown 检查实战基于 markdownlint 的规范写法与规则配置解析 导读 本文以 super linter 仓库代码质量CI/CD如何构建智能AI记忆系统终极完整指南让AI从经验中学习和成长如何构建智能AI记忆系统终极完整指南让AI从经验中学习和成长 在当今AI技术快速发展的时代大多数AI系统面临着一个根本性挑战它们无法真正从经验中学习。传统人工智能AI AgentAgent 记忆MCP 服务Super-Linter多语言代码规范和风格检查工具Super Linter多语言代码规范和风格检查工具 Super Linter 是一个开源项目旨在为多种编程语言提供代码规范和风格检查。该项目主要通过 Py代码质量CI/CD上一篇ncmdump网易云音乐NCM格式解密技术深度解析下一篇NCM解密工具实战从格式限制到音乐自由的完整解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Go 零拷贝 JSON 路径解析实战:深入 buger/jsonparser 的 API 设计、源码实现与性能基准

Go 零拷贝 JSON 路径解析实战:深入 buger/jsonparser 的 API 设计、源码实现与性能基准

网络安全 【免费下载链接】sliver Adversary Emulation Framework 项目地址: https://gitcode.com/gh_mirrors/sl/sliver 点击查看 免费下载 本篇文章以 Sliver 仓库中以 vendor 方式引入的 jsonparser 库(版本 v1.1.1)为主体,系…

2026/9/24 16:54:03 阅读更多 →
F´ 中的 Fw::FilePacket:CFDP 风格的文件分包协议与 C++ 实现解析

F´ 中的 Fw::FilePacket:CFDP 风格的文件分包协议与 C++ 实现解析

F 中的 Fw::FilePacket:CFDP 风格的文件分包协议与 C 实现解析 【免费下载链接】fprime F - A flight software and embedded systems framework 项目地址: https://gitcode.com/gh_mirrors/fp/fprime 导读 Fw::FilePacket 是 F(F Prime&#xf…

2026/9/24 16:54:02 阅读更多 →
8个必知的Tftpd64高级选项:blksize协商、虚拟根目录到MD5校验配置全解

8个必知的Tftpd64高级选项:blksize协商、虚拟根目录到MD5校验配置全解

8个必知的Tftpd64高级选项:blksize协商、虚拟根目录到MD5校验配置全解 【免费下载链接】tftpd64 The working repository of the famous TFTP server. 项目地址: https://gitcode.com/gh_mirrors/tf/tftpd64 Tftpd64 是一款轻量级的多线程 TFTP 服务器&#…

2026/9/24 16:53:02 阅读更多 →

最新新闻

Maven+SpringBoot

Maven+SpringBoot

一,Spring定义 Spring让Java程序更加快速,简单和安全。Spring对于速度、简单性和生产力的关注使其成为世界上最流行的Java框架 Spring的两个含义: 1)泛指Spring家族产业 2)Spring Framework/Spring Core 1.1 Mave…

2026/9/24 17:42:40 阅读更多 →
大数据深度学习|计算机毕设项目|计算机毕设答辩|一种基于格的数字签名算法研究与实现

大数据深度学习|计算机毕设项目|计算机毕设答辩|一种基于格的数字签名算法研究与实现

标题:一种基于格的数字签名算法研究与实现文档介绍:1 绪论1.1研究背景与意义依靠大整数分解,离散对数这些传统数学难题而形成的数字签名技术经过长时间发展,已变成金融,政务,军事等重要领域安全稳固的基础…

2026/9/24 17:42:40 阅读更多 →
ARM学习笔记(六)——时钟、PLL、EPIT与GPT定时器

ARM学习笔记(六)——时钟、PLL、EPIT与GPT定时器

一、今天的主要学习内容时钟和时钟源;PLL 锁相环;Prescaler 分频器;PFD 分数分频器;i.MX6ULL 时钟树;AHB、IPG、PERCLK 时钟;51 单片机定时器;EPIT 增强型周期中断定时器;GPT 通用定…

2026/9/24 17:42:40 阅读更多 →
Prisma API Mutations 完全指南:对象、嵌套与批量变更操作详解

Prisma API Mutations 完全指南:对象、嵌套与批量变更操作详解

后端数据库GraphQL 【免费下载链接】prisma1 💾 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB) [deprecated] 项目地址: https://gitcode.com/gh_mirrors/pr/prisma1 点击查看 免费下载 本指南以 Prisma 1.x 系列…

2026/9/24 17:42:40 阅读更多 →
【无标题】厨电食品接触涂层怎么确认合规?一份送检与审证清单,附五家同赛道涂料企业资质对照

【无标题】厨电食品接触涂层怎么确认合规?一份送检与审证清单,附五家同赛道涂料企业资质对照

一、为什么厨电涂层合规需要单独做一次测评 厨电涂层的合规门槛和普通工业防护涂层不在一个量级。 普通工业涂层出问题,影响的是设备寿命和维护成本;厨电涂层出问题,直接触及食品安全。电饭煲内胆、炒锅、煎锅、空气炸锅内胆、烤盘——这些部…

2026/9/24 17:42:40 阅读更多 →
14-02-对比-CSharp-dotNET-vs-Java-JVM数据结构对比

14-02-对比-CSharp-dotNET-vs-Java-JVM数据结构对比

C#/.NET 与 Java/JVM 数据结构对比:从契约、布局到运行时比较基线:以 .NET 8 BCL/CoreCLR 与 Java 21 标准集合/HotSpot 为主要语义参照;不同 JVM、GC、AOT 与第三方集合库不在统一结论中 比较原则:语言语法、标准库公开契约、固定…

2026/9/24 17:41:39 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →