在 Visual Studio 代码扩展中嵌入语言语法
Embedding Language Syntax in Visual Studio Code Extension
我正在尝试让 VSCode 在我正在编写的扩展程序中对嵌入式语言使用语法突出显示。
很像 Razor,我希望在 @{
和 }
之间突出显示 c# 代码。
在我的 package.json
我的 contributes
部分有以下内容:
"languages": [
{
"id": "csasm",
"aliases": ["CS Asm", "csasm"],
"extensions": [".csasm"],
"configuration": "./language-configuration.csasm.json"
}],
"grammars": [
{
"language": "csasm",
"scopeName": "source.csasm",
"path": "./syntaxes/csasm.tmLanguage.json",
"embeddedLanguages": {
"meta.embedded.block.csharp" : "csharp"
}
}]
和 csasm.tmLanguage.json
文件:
{
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
"name": "CS Asm",
"patterns": [
{
"include":"#csasm"
}
],
"repository": {
"csasm" :{
"patterns": [{
"name" : "meta.embedded.block.csharp",
"begin": "@{",
"end": "}",
}]
}
},
"scopeName": "source.csasm"
}
我的理解是 @{
和 }
的匹配会标记带有 meta.embedded.block.csharp
的行,它链接到 project.json
中的 embeddedLanguages
,但情况似乎并非如此。
我找不到 embeddedLanguages
标签的任何示例。 (我已经尝试搜索 Razor 如何实现这一点,但他们似乎有合适的语言服务器?)
我什至找不到调试问题的方法。
如何让 embeddedLanguages
工作?或者失败了,我该如何调试它?
编辑:
更改了语言文件,使 csasm
如下所示,并删除了 embeddedLanguages
部分。
"patterns": [{
"name" : "meta.embedded.block.csharp",
"begin": "@{",
"end": "}",
"patterns" : [{
"include" : "source.csharp"
}]
},
对 C# 仍然不满意。我再开一个问题。
可在此处找到 reStructuredText 语言的工作示例,
https://github.com/trond-snekvik/vscode-rst/blob/v1.5.1/syntaxes/rst.tmLanguage.json#L284
语法规则 (domain-cpp
) 捕获一段文本,然后将其中的一部分标记为 C/C++ 源代码 (source.cpp
)。
然后 VSCode 足够聪明,可以使用 C/C++ 语法突出显示该嵌入部分,并且您不需要 project.json
.[=15= 中的 embeddedLanguages
]
我正在尝试让 VSCode 在我正在编写的扩展程序中对嵌入式语言使用语法突出显示。
很像 Razor,我希望在 @{
和 }
之间突出显示 c# 代码。
在我的 package.json
我的 contributes
部分有以下内容:
"languages": [
{
"id": "csasm",
"aliases": ["CS Asm", "csasm"],
"extensions": [".csasm"],
"configuration": "./language-configuration.csasm.json"
}],
"grammars": [
{
"language": "csasm",
"scopeName": "source.csasm",
"path": "./syntaxes/csasm.tmLanguage.json",
"embeddedLanguages": {
"meta.embedded.block.csharp" : "csharp"
}
}]
和 csasm.tmLanguage.json
文件:
{
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
"name": "CS Asm",
"patterns": [
{
"include":"#csasm"
}
],
"repository": {
"csasm" :{
"patterns": [{
"name" : "meta.embedded.block.csharp",
"begin": "@{",
"end": "}",
}]
}
},
"scopeName": "source.csasm"
}
我的理解是 @{
和 }
的匹配会标记带有 meta.embedded.block.csharp
的行,它链接到 project.json
中的 embeddedLanguages
,但情况似乎并非如此。
我找不到 embeddedLanguages
标签的任何示例。 (我已经尝试搜索 Razor 如何实现这一点,但他们似乎有合适的语言服务器?)
我什至找不到调试问题的方法。
如何让 embeddedLanguages
工作?或者失败了,我该如何调试它?
编辑:
更改了语言文件,使 csasm
如下所示,并删除了 embeddedLanguages
部分。
"patterns": [{
"name" : "meta.embedded.block.csharp",
"begin": "@{",
"end": "}",
"patterns" : [{
"include" : "source.csharp"
}]
},
对 C# 仍然不满意。我再开一个问题。
可在此处找到 reStructuredText 语言的工作示例,
https://github.com/trond-snekvik/vscode-rst/blob/v1.5.1/syntaxes/rst.tmLanguage.json#L284
语法规则 (domain-cpp
) 捕获一段文本,然后将其中的一部分标记为 C/C++ 源代码 (source.cpp
)。
然后 VSCode 足够聪明,可以使用 C/C++ 语法突出显示该嵌入部分,并且您不需要 project.json
.[=15= 中的 embeddedLanguages
]