jbboehr / mustache-spec
Mustache 规范
This package is auto-updated.
Last update: 2024-09-13 02:34:08 UTC
README
位于https://github.com/mustache/spec的仓库是 Mustache 的正式标准。它定义了解析 Mustache 模板语言的库(或其超集)的正常使用和边缘情况行为。
该规范作为一系列 YAML 文件开发,位于 specs
目录下。
版本控制
此规范正在语义版本化。大致来说,主版本变更将始终代表向后不兼容的变更,次版本变更将始终代表新的语言功能且将与向后兼容,而补丁(微小)版本变更将始终是错误修复。在语义版本化的目的上,公共 API 是 specs
目录的内容及其测试算法。
Mustache 实现“应”报告规范的最新版本(主版本和次版本号)。如果实现支持任何可选模块,它们“应”在版本号旁边附上注释来表示(例如,“vX.Y,包括 lambda”或“v.X.Y+λ”)。建议不支持至少 v1.0.0 此规范的实现将自身称为“类似 Mustache”或“受 Mustache 启发”。
其他格式
由于 YAML 是一种相对复杂的格式,并非每种语言都有良好的工具来处理它,所以我们还基于最佳努力提供规范的 JSON 版本。
这些应该与 YAML 规范相同,但如果需要重新生成它们,可以通过调用 rake build
来轻松重建。
值得注意的是,某些规范(尤其是 lambda 模块)依赖于 YAML “标签”来表示特殊类型的数据(例如源代码)。由于 JSON 没有表示这种类型的方法,因此注入一个特殊键(__tag__
),其值为标签的名称。有关处理标记数据的更多信息,请参阅 TESTING.md
。
可选模块
以波浪号(~
)开始的规范文件描述了可选模块。目前,唯一描述为可选的模块是关于 lambda 的支持。作为指导,当模块满足以下条件时,它可能成为可选性的候选者:
- 它不影响语言的核心语法。
- 它不会显著影响渲染模板的输出。
- 它涉及实现语言特性或数据类型,这些特性或数据类型并非针对每种目标语言都常见或核心。
- 实现不支持不会降低 Mustache 在目标语言中的使用。
例如,lambda 模块主要涉及处理特定数据类型(代码)。这可能是一些语言中难以支持的数据类型,并且这些语言的用户不会将其视为实现之间的“不一致”。
对于特定的语法定义或语法扩展的支持,最好在此核心规范之外,作为附加规范来管理。
强烈鼓励实现者支持他们合理能够支持的任何和所有模块。