sublime text heredoc 标签的完整列表?

Full list of sublime text heredoc tags?

我注意到 并相应地突出显示了语法。

这是一个简单的示例,其中第一个 heredoc 知道根据 SQL 突出显示语法,但第二个不知道,即使其内容相同。所以可以推导出 sublime 'knows' 第一个是 SQL 因为 heredoc 标签是 SQL).

问题:可用的 heredoc 标签的完整列表是什么?

注意:这是在 ruby heredoc 中,但我想它可能也适用于其他语言,尽管我无法确认。

这是正在使用的语法定义的函数(在您的例子中,是 Ruby 语法)。或者,如果您愿意,这并不是到处都可以使用的东西,必须有一种语言专门支持它。

因此,此类 heredocs 的列表确实被限制在一个已知列表中,为了了解您需要查看相关语言的语法定义。

对于 Ruby(自 build 3211 起),该列表为 HTMLSQLCSSJS(或 JAVASCRIPT),以及 RUBY。在 build 4092 中,语法还包括 SH(或 SHELL)。所有其他人(例如上面的 DOC 都是“普通”)。

如果您想更深入地了解它的工作原理,请使用命令面板中的 View Package File,您可以打开 Ruby/Ruby.sublime-syntax 以查看与该语言匹配的规则。如果你搜索 heredoc,你会看到一个 context,其中包含所有匹配它的规则,它通常看起来像这样(在 build 3211 中;它在 build 4092 中更高级):

    # heredoc with embedded SQL and indented terminator
    - match: '(<<[-~]"?((?:[_\w]+_|)SQL)\b"?)'
      scope: punctuation.definition.string.begin.ruby
      push: [heredoc-sql, trailing-heredoc-start]

在这种情况下,规则说明后跟 SQL 的 heredoc 说明符应该 push 一个名为 heredoc-sql 的上下文,它就在下面:

  heredoc-sql:
    - meta_scope: string.unquoted.embedded.sql.ruby
    - meta_content_scope: text.sql.embedded.ruby
    - match: ^\s*$
      scope: punctuation.definition.string.end.ruby
      pop: true
    - include: scope:source.sql
    - include: interpolated-ruby
    - include: escaped-char

这里的 include: scope:source.sql 是说语言应该切换到 SQL 模式的魔法调味料。它上面带有 pop 的规则是导致它“退出”heredoc 并返回到 Ruby.

的原因

使用这个公式,可以进行语法修改以包括 Sublime 支持的其他语言。这在 Sublime Text“4”构建中可能更容易实现,其中语法系统增强之一是扩展语法定义的能力。