我正在尝试在Sublime Text 3中为Gradle编写语法定义.Gradle构建文件的许多部分实际上只是Groovy,所以我试图通过使用{{1来利用当前的Groovy突出显示支持}}。到目前为止,这一点工作得相当好,因为我一直坚持如何将它应用到特定的部分。
以下是我要强调的Gradle片段:
include
这是我用来匹配该片段的语法:
task copyTask (group: 'Install NGA - deploy', type: Copy, dependsOn: 'whoCares') {
from 'resources'
into 'target'
include('**/*.txt')
}
大部分内容似乎都符合预期。 (总是很难用RegEx知道。)我的问题是第三次捕获。我想将
澄清:文本被“捕获”并标记为source.groovy,但这实际上并不是我想要的。我不希望它简单地标记为source.groovy,我希望在评估文本时使用source.groovy中的规则。我的示例的最后一行成功地执行了“内容”部分(大括号之间的文本),但简单地使用include不起作用。
- name: copy.task.source.gradle
begin: '\s*(task)\s+(\w+)\s*\((.*type: Copy.*)\)\s*{'
comment: 'Copy task definition'
beginCaptures:
'1': {name: keyword.task.source.gradle}
'2': {name: entity.name.function}
'3': {name: source.groovy}
end: '}'
contentName: copy.body.source.gradle
patterns:
- include: source.groovy
如果有一种语法直接应用于捕获我无法找到它,我无法弄清楚另一种技术。也许嵌套了'3': {include: source.groovy} # This gets an error.
和begin
标签的东西?
答案 0 :(得分:1)
如果我理解正确,您希望第三个捕获组source.groovy
与您示例中的group: 'Install NGA - deploy', type: Copy, dependsOn: 'whoCares'
部分匹配。
在这种情况下,您只需要更改表达式以捕获更多字符串,如下所示:
begin: '\s*(task)\s+(\w+)\s*\((.*type: Copy.*?)\)\s*{'