【问题标题】:Can I combine captures in Sublime Text syntax?我可以在 Sublime Text 语法中合并捕获吗?
【发布时间】:2022-01-19 16:35:45
【问题描述】:

我正在编写 V 的语法,它定义了与 Go 语法相似的方法,其中:

fn (o MyStruct) my_function(a int) {
  // ...
}

我可能会使用类似的东西(我会将其分解为push,但只是为了简洁):

variables:
  ident: \b[A-Za-z_][A-Za-z_0-9]*\b

contexts:
  fn:
    - match: (fn)\s*\({{ident}}\s*({{ident}})\)\s*({{ident}})
      captures:
        1: keyword
        2: entity.name.type.v
        3: entity.name.function.v

但问题是MyStructmy_function 是分开索引的,所以同名的方法(str() 是一个很好的例子)不会被索引器区分。有没有办法可以将它们组合成一个价值为MyStruct.my_functionentity.name.function.v

我知道我可以将整个定义视为实体,但这太冗长并且在拆分为多行时不起作用:

captures:
  0: entity.name.function.v

【问题讨论】:

    标签: sublimetext3 sublimetext sublime-text-plugin


    【解决方案1】:

    如果您将完整/连续范围应用于文本,则可以将其定位在 .tmPreferences 文件中(与默认的 entity.name 范围相反)并对其进行索引,并使用“符号索引转换”删除) 和空格。

        - match: (fn)\s*\({{ident}}\s*(({{ident}})\)\s*({{ident}}))
          captures:
            1: keyword
            2: meta.indexed-unit.v
            3: entity.name.type.v
            4: entity.name.function.v
    

    现在meta.indexed-unit.v 的范围将应用于文本MyStruct) my_function

    符号索引转换基本上是适用于索引符号的正则表达式替换:

    https://docs.sublimetext.io/reference/symbols.html#settings-subelements

    所以你的.tmPreferences 文件可能看起来像这样:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
      <key>scope</key>
      <string>source.v meta.indexed-unit.v</string>
      <key>settings</key>
      <dict>
        <key>showInIndexedSymbolList</key>
        <string>1</string>
        <key>symbolIndexTransformation</key>
        <string>
           s/\)\s*//;
        </string>
      </dict>
    </dict>
    </plist>
    

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 2014-09-09
      • 1970-01-01
      • 2014-03-04
      • 2014-10-30
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多