Configlet

Exercism 上所有内容的权威规范


configlet 是一款帮助学习轨道维护者维护其学习轨道的工具。

代码检查

configlet 的主要功能是进行代码检查:检查学习轨道的(配置)文件结构是否正确,包括语法和语义两个方面。配置有误的学习轨道可能无法正确同步,在网站上显示异常,或者给用户带来不佳的体验,因此 configlet 的各类检查防护对维护 Exercism 的完整性起着重要作用。检查器所检查的完整规则列表见这里。

生成文档

configlet 的次要功能是生成文档。configlet 可以生成两种文档:

  1. 概念练习的 introduction.md 文件。
  2. 实践练习的 instructions.md 文件。

如何生成这些文档见这里。

将练习数据与 problem-specifications 代码仓库同步

configlet 的第三项功能是为实践练习提供各种数据。

Exercism 学习轨道上的实践练习通常是根据 exercism/problem-specifications 代码仓库中的规范实现的。

Exercism 特意要求每个练习都拥有某些文件的独立副本(例如 .docs/instructions.md),即使该练习已经存在于 problem-specifications 中也是如此。因此 configlet 提供了一个 sync 命令,它可以检查学习轨道上的这类实践练习是否与上游来源保持同步,并在有更新时进行更新。

可以从 problem-specifications 更新的数据有三类:文档、元数据和测试。还有一类数据可以从学习轨道级别的 config.json 文件填充:练习配置文件中的文件路径。

请注意,在 configlet 的 4.0.0-alpha.34 及更早版本中,sync 命令只处理测试。

为了跟踪某个实践练习实现了哪些测试,该练习必须包含一个 .meta/tests.toml 文件。该文件中的测试通过 UUID 来标识,每个测试都有一个布尔值,表示它是否由该练习实现。

关于如何同步练习各个部分的详细信息,见这里。

创建文件

Configlet 可用来为新的解题思路、文章或练习快速搭建文件骨架。

关于如何创建这些文件,见这里。

生成 UUID

练习、学习轨道和概念都通过 UUID 来标识。

如何生成 UUID 见这里。

格式化

Configlet 有一个 fmt 命令,用于帮助统一学习轨道代码仓库中 JSON 文件的格式。fmt 命令会格式化以下文件:

  • config.json
  • exercises/{concept,practice}/*/.approaches/config.json
  • exercises/{concept,practice}/*/.articles/config.json
  • exercises/{concept,practice}/*/.meta/config.json

关于 format 命令的更多信息见这里。

安装

configlet 以独立二进制文件的形式分发。每个学习轨道都应该有一个 bin/fetch-configlet 脚本,也可能还有一个 bin/fetch-configlet.ps1 脚本。前者是 bash 脚本,后者是 PowerShell 脚本。

运行其中一个脚本会把最新版本的 configlet 下载到 bin 目录。之后你就可以分别通过运行 bin/configlet 或 bin/configlet.exe 来使用 configlet。

CI

所有学习轨道都应该在其 CI 设置中集成 configlet 的代码检查功能。最简单的方法是使用 configlet CI GitHub action。