一个用于YAML中突出显示嵌入语言的VSCode插件

banq


在YAML块标量中为50多种内置语言添加高亮显示,并能够使用yaml-embedded-languages.include配置设置为任何其他语言添加高亮显示。

YAML 是一种数据序列化格式,支持 块标量(如 | 或 > 开头的多行字符串),常用于嵌入代码、配置或其他文本内容。例如:

script: |
  This is a Bash script
  echo "Hello World"
  ls -la

开发者用户在多语言环境中使用 YAML(如 CI/CD 配置、文档生成)。现有工具缺乏灵活的高亮支持,导致可读性差。

开发者用户希望在 YAML 中嵌入的代码(如 Bash、Python、JSON 等)能像在原生编辑器中一样 高亮显示,提升可读性。

  • 用户体验提升:开发者能直观区分不同语言块。


实现 YAML 块标量的语法高亮需要解决:

  • 语言识别:如何判断块标量中的内容属于哪种语言?
  • 高亮引擎:如何动态应用对应语言的语法规则?
  • 性能:高亮不应显著拖慢编辑器/解析器的速度。

技术实现细节

  • 语法分析器:YAML 解析器需与语法高亮引擎(如 Tree-sitter、TextMate grammars)协作。
  • 高亮流程:
    1. 解析 YAML 结构,识别块标量。
    2. 根据配置或启发式规则确定嵌入语言类型。
    3. 调用对应语言的语法规则生成高亮标记。
  • 性能优化:可能采用懒加载(仅当展开块标量时解析)或缓存机制。

典型应用场景

  • DevOps 工具:如 GitHub Actions、Ansible 的 YAML 文件中嵌入脚本。
  • 文档生成:在 Markdown/YAML 中混合代码示例。
  • 配置即代码:如 Kubernetes Helm Charts 的模板逻辑。


内置语言支持
若要突出显示单个块,请在块标识符旁边放置带有语言标识符的注释。

example: | <language-identifier>
  highlighted

要突出显示从某个点开始的所有块,请放置一个注释,注释中的扩展名后跟语言标识符。

yaml-embedded-languages: <language-identifier>
example: |
  highlighted

若要停止高亮显示块,请添加带有扩展名的注释。

yaml-embedded-languages
example: |
  not highlighted