本页面介绍了 bat 中语法高亮定义是如何构建和管理的,以及如何向系统中添加新的语言支持。内容涵盖语法定义的格式、它们如何集成到代码库中,以及添加新语言支持的流程。
有关语法定义如何被检测和映射到文件类型的信息,请参阅 语法检测与映射。有关资源如何构建和分发的详细信息,请参阅 资源管理与构建流程。
bat 使用 syntect库来提供语法高亮。Syntect基于Sublime Text的语法定义格式,该格式使用YAML编写的.sublime-syntax文件来定义语言语法。
bat 中的语法定义使用 .sublime-syntax 格式,这是一种基于 YAML 的格式,最初为 Sublime Text 开发。每个语法定义文件包含:
以下是 .sublime-syntax 文件的简化结构示例
来源:assets/syntaxes/02_Extra/syslog.sublime-syntax1-66 assets/syntaxes/02_Extra/log.sublime-syntax1-185
我们以 syslog.sublime-syntax 文件中的简化示例为例进行说明
此示例展示了
main 上下文来源:assets/syntaxes/02_Extra/syslog.sublime-syntax1-15
要向 bat 添加新语言,需要遵循以下步骤:
首先,找到你想要添加的语言的现有 Sublime Text 语法定义。理想情况下,它应该位于一个单独的 Git 仓库中,可以作为子模块包含进来。
如果语法仅以 .tmLanguage 格式(TextMate 格式)提供,则需要将其转换为 .sublime-syntax 格式。这可以使用 Sublime Text 或其他转换工具完成。
将语法仓库添加为 Git 子模块
git submodule add <https github link> ./assets/syntaxes/02_Extra/<repo name>
对于没有独立仓库的语法,你可以手动将其添加到 assets/syntaxes 目录中。
来源:doc/assets.md11-14 doc/assets.md92-106
运行 assets/create.sh 脚本将语法定义构建为二进制格式。
./assets/create.sh
此脚本会调用 bat cache --build 来解析所有可用的 .sublime-syntax 文件,并将它们序列化为一个 syntaxes.bin 文件。
bat重新编译 bat 以包含新的语法定义。
cargo build
在编译时,syntaxes.bin 文件将被嵌入到 bat 二进制文件中。
验证新语言是否可用。
bat --list-languages
你可能需要调整你的 PATH 环境变量,以确保你使用的是本地编译的版本。
创建语法测试以确保高亮正常工作,并防止回归问题。
bat 默认不包含所有语法定义。要纳入,语法应满足以下标准:
这确保了只包含广泛使用的语法,从而使二进制文件的大小保持在可控范围内。
一些语法定义在从原始格式转换后需要手动修改。这些修改记录在 doc/assets.md 文件中,通常包括:
手动修改的语法示例包括:
Apache.sublime_syntax:删除了 conf 和 CONF 文件类型INI.sublime-syntax:添加了各种配置文件扩展名Robot.sublime_syntax:更改名称为“Robot Framework”,添加了 .resource 扩展名有些语法定义是手动添加的,而不是作为子模块。这发生在以下情况:
示例包括
Assembly (x86_64):因 Git 递归问题而手动添加Nim.sublime-syntax:从 Zola 项目添加,因为没有合适的 Git 仓库Rego.sublime-syntax:从 OPA 项目添加bat 包含一个全面的语法高亮测试系统,以防止回归。
语法测试系统的工作原理如下:
tests/syntax-tests/source/<Language>/update.sh 脚本生成高亮版本。这确保了语法高亮在不同版本之间保持一致,并防止了回归。
来源:doc/assets.md37-68 tests/syntax-tests/source/Syslog/example.syslog1-18 tests/syntax-tests/highlighted/Syslog/example.syslog1-18
让我们来看一些 bat 中的语法定义示例。
log.sublime-syntax 文件为通用日志文件提供高亮。
来源:assets/syntaxes/02_Extra/log.sublime-syntax1-185 tests/syntax-tests/highlighted/Log/example.log1-4
INI.sublime-syntax 文件处理各种配置文件格式。
.ini, .inf, .cfg 等)来源:assets/syntaxes/02_Extra/INI.sublime-syntax1-51 tests/syntax-tests/source/INI/test.inf1-6 tests/syntax-tests/highlighted/INI/test.inf1-6
DotENV.sublime-syntax 文件支持各种环境变量文件格式
.env 文件变体来源:assets/syntaxes/02_Extra/DotENV.sublime-syntax1-99
在使用语法定义时,您可能会遇到问题。以下是一些故障排除技巧
清除本地缓存,确保它不会干扰内部存储的语法
bat cache --clear
如果语法未被正确检测,请检查文件扩展名映射和语言检测规则。
对于语法高亮问题,请检查语法定义文件并确保模式与预期内容匹配。
bat 中的语法定义系统基于 Sublime Text 的 .sublime-syntax 格式,并通过 Git 子模块和手动添加进行管理。添加新的语言支持涉及查找或创建语法定义,将其添加到项目中,构建资产,并测试结果。
该系统设计为可扩展的,同时保持了包含的语法的高质量标准。全面的测试系统确保语法高亮保持一致并防止回归。