VS Code 中的“普通代码/文本”使用什么 TextMate 作用域?

What TextMate scope is used for "normal code/text" in VS Code?

提问人:AnHeuermann 提问时间:6/29/2023 最后编辑:AnHeuermann 更新时间:6/29/2023 访问量:38

问:

我正在尝试为一种可以在任何字符串中插入代码段的语言创建一个 TextMate 语法。因此,任何字符串之间和内部的所有内容都是“正常”代码,可以再次包含字符串。 我想使用 VS Code 扩展的语法。<%%>

我的多行字符串用 - 括起来。<<>>

我认为不可能处理任意深度的这种情况,所以我很乐意让它适用于嵌套到一定深度的简单情况。

以下代码的模式是什么样子的?

<<
This is some string
<%This is normal code
  <<
  This is more <%Normal code%>string <%More code%>
  >>%>
And of course more string
>>

我尝试使用以下内容:myLanguage.tmGrammar.yaml

name: myLanguage
scopeName: source.myLanguage

patterns:
  - begin: <<
    end: ">>"
    name: string.quoted.double
    patterns:
        - begin: <%
          end: "%>"
          include: source.myLanguage

  - begin: <%
    end: "%>"
    name: variable  # <--- What is the name for "default code"?
    patterns:
        - begin: <<
          end: ">>"
          include: source.myLanguage

ighlighted code snipped

它大部分有效,但我需要使用“普通”代码而不是突出显示。keyword

正则表达式 visual-studio-code vscode-extensions textmate

评论

0赞 rioV8 6/29/2023
因为你的字符串以第一个找到的结尾,TextMate 不保留状态,你必须在语法中建立嵌套级别>>
0赞 starball 6/29/2023
try 或sourcesource.<your language's ID>
0赞 rioV8 6/29/2023
您可以在 JavaScript 的 TextMate 语法中查看它们如何执行模板/反引号字符串或 Python 如何执行字符串f

答:

0赞 AnHeuermann 6/29/2023 #1

我听从了建议,查看了 JavaScript 的 TestMate 语法,并根据我的语言调整了反引号字符串。

下面是生成的语法:

name: myLanguage
scopeName: source.myLanguage

patterns:
  - include: '#strings'

repository:
  strings:
    begin: '<<'
    end: '>>'
    name: string.quoted.double
    patterns:
      - include: '#interpolation'
  interpolation:
    begin: '<%'
    end: '%>'
    contentName: source.myLanguage
    name: meta.embedded
    patterns:
      - include: $self

Highlighted code snipped

普通代码部分将突出显示为普通文本。 在此基础上,我能够在 --blocks 内的“普通代码”部分进行更多突出显示。<%&>