如何在tmLanguge文件中交错两个语言支持文件?

时间:2018-07-24 23:46:24

标签: regex racket syntax-highlighting

我正在尝试进行VS Code扩展,以突出显示花粉标记文件。这些是带有嵌入式变量和Racket代码的纯文本文件。变量具有这样的语法(然后由预处理器拼接成文本):

Some text ◊variable-name text continued

并且可以使用类似的语法嵌入Racket函数:

One plus two is ◊(number->string (+ 1 2)).

我有一个支持Racket语法的tmLanguage文件,还有一个支持Pollen语法(文本+变量+带有source.racket的嵌入式函数)的tmlLanguage文件。我也希望它能正确地突出显示此代码,但无法想到一个干净的解决方案:

◊n plus ◊m is ◊(number->string (+ ◊n ◊m)).

换句话说,花粉语法中的球拍语法中的花粉语法中。是否可以仅在花粉方面实现这种语法高亮显示,而无需制作特殊的source.racket文件来支持嵌入式花粉代码?

像是先突出显示球拍,然后再 再次浏览文本,用花粉规则突出显示(并覆盖当前颜色,如果存在的话)吗?

1 个答案:

答案 0 :(得分:0)

我发现了injections,这是一个完全符合我需要的顶层子句:

"injections": {
    "L:meta.function-call.racket": {
        "patterns": [
            {
                "include": "text.pollen"
            }
        ]
    }
},

它会在每个{ "include": "text.pollen" }范围内注入一个meta.function-call.racket-无需我编辑使用该范围的每个位置(这很有用,因为在很多地方在另一个文件中。)

更多信息可以在in this thread in Atom's forumsin this gist describing a making-of grammar for Atom中找到。