Bru*_*ett 5 javascript visual-studio-code
我正忙于在 Visual Studio Code 中制作自己的语法扩展。例如,该语言称为 Snake,当打开“*.snk”类型的文件(例如“hello-world.snk”)时,语法就会生效。到现在为止还挺好。我可以教 VS Code 在语法文件中突出显示 Snake 的语法,并且一切正常。
但我无法让嵌入式语言语法突出显示工作。
在“.snk”文件中,可以包含 javascript 代码块。我能够让 VS Code 为 这些嵌入的 javascript 代码块中的 javascript(如片段)提供编程语言支持(通过文件中的embeddedLanguages
属性tmLanguage.json
)。但我无法让 javascript语法高亮显示在 javascript 代码块中工作。
事实上,文档完全没有提到让嵌入式语言的语法突出显示工作。它只讨论了诸如注释代码和触发代码片段之类的编程功能。
谁能帮我?
小智 6
在packages.json中
"embeddedLanguages": {
"source.js": "javascript",
"meta.embedded.block.javascript": "javascript"
}
Run Code Online (Sandbox Code Playgroud)
在你的语法 def 文件中:
"jscode": {
"patterns": [
{
"name": "js.block.sl",
"begin": "js:\\s*{{{",
"end": "^\\s*}}}\\s*$",
"patterns": [
{
"begin": "(^|\\G)(\\s*)(.*)",
"end": "^\\s*}}}\\s*$",
"contentName": "meta.embedded.block.javascript",
"patterns": [
{
"include": "source.js"
}
]
}
]
}
]
},
Run Code Online (Sandbox Code Playgroud)
调整开始和结束模式。
简而言之,您需要匹配块的开始和结束。然后在匹配块中,匹配js并包含所有js高亮模式。
我如何学习这个?来自 vscode 源代码。
https://github.com/microsoft/vscode/blob/master/extensions/markdown-basics/package.json
小智 2
我一直在寻找类似的东西,这就是令我震惊的东西。
.tmLanguage.json
这是我的语言“mylang”的示例模式。它适用于以'
or开头"
并以相同字符结尾的字符串。在字符串中,有不同颜色的转义字符,并且因为“mylang”支持字符串插值,所以您可以有类似 的内容"value is $value"
,其中变量引用应该以不同的颜色(与整体字符串颜色相比)。
这是基本的嵌入式突出显示,如果您有明确的锚点来标记嵌入式语言片段的开始和结束,您可以调整begin
和end
,它应该可以工作。
"strings": {
"name": "string.quoted.double.mylang",
"begin": "(\"|')",
"end": "\\1",
"patterns": [
{
"name": "constant.character.escape.mylang",
"match": "\\{[a-z.0-9,A-Z*_/~-]*\\}|\\\\|\\\\0\\d\\d|\\\\\\w"
},
{
"name": "variable.name.mylang",
"match": "\\$[a-z][a-z.0-9A-Z]*|\\$\\([a-z.0-9,A-Z-]*\\)(\\([.0-9-]+\\))?"
}
]
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我要在代码中定义一个新对象,例如使用以下语法:
var mjs = JSON('{"value": 42}')
Run Code Online (Sandbox Code Playgroud)
var
是语言关键字,JSON
是类/类型名称。构造JSON
函数获取包含 JSON 文本的字符串,并将其解析为树。
他们有自己的高亮颜色。里面的绳子''
有自己的整体颜色。我现在希望正则表达式之间的所有内容都JSON\\('
根据'\\)
各种子模式进行着色(例如键可能是".*"\s+:
等等)
请注意,如果我从字面上指定JSON\\(
为开始模式,则JSON
将会成为其中的一部分,并且不会使用类型名称的颜色突出显示。使用后视可能会有所帮助:(?<JSON)\\(
如果内存正确的话。
并重复整个过程YAML('...')
,XML('...')
, ...
归档时间: |
|
查看次数: |
1322 次 |
最近记录: |