我正在为自己在vscode中创建一个语言扩展。因为它会关联不同的文件类型,所以我打算为特定的规则制作不同的 tmlanguge 文件。据此,我可以扩展来实现这一点。scopeName
所以我在我的./package.json
文件中创建了这样的东西:
{
"name": "tst",
"displayName": "Test Language",
"description": "A test for language extension",
"version": "0.0.1",
"engines": {
"vscode": "^1.34.0"
},
"contributes": {
"languages": [{
"id": "tst",
"aliases": ["Test", "tst"],
"extensions": [".tst",".type1",".type2"],
"configuration": "./language-configuration.json"
}],
"grammars": [{
"language": "tst",
"scopeName": "source.tst",
"path": "./syntaxes/tst.tmLanguage.json"
},
{
"scopeName": "source.tst.type1",
"path": "./syntaxes/type1.tmLanguage.json"
},
{
"scopeName": "source.tst.type2",
"path": "./syntaxes/type2.tmLanguage.json"
}]
}
}
./syntaxes/tst.tmLanguage.json
然后我在两者中创建基本规则,.type1
并.type2
已应用于我的语法。
{
"name": "Test",
"patterns": [
{
"match": "test",
"name": "constant.character"
}
],
"scopeName": "source.tst"
}
之后我也做./syntaxes/type1.tmLanguage.json
了这样的事情:
{
"name": "type1",
"patterns": [
{
"match": "type1",
"name": "constant.language"
}
],
"scopeName": "source.tst.type1"
}
中的任何规则都不适用.type1
。
我希望图片中的两个文件都能识别test
和type1
. 我检查了 vscode 预装的 cpp 语言扩展。他们还使用 scopeNamesource.c
和source.c.platform
。我想这是为了类似的目的?
我忽略了什么吗?谢谢您的帮助。