首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在vscode扩展名中使用多个tmLanguage文件

如何在vscode扩展名中使用多个tmLanguage文件
EN

Stack Overflow用户
提问于 2019-05-27 17:46:53
回答 1查看 733关注 0票数 2

我正在为自己在vscode中创建一个语言扩展。因为它将与不同的文件类型相关联,所以我计划为特定的规则创建不同的tmlanguge文件。根据的说法,我可以扩展scopeName来实现这一点。

因此,我在我的./package.json文件中创建了如下所示:

代码语言:javascript
复制
{
    "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都是用我的语法应用的。

代码语言:javascript
复制
{
    "name": "Test",
    "patterns": [
        {
            "match": "test",
            "name": "constant.character"
        }
    ],
    "scopeName": "source.tst"
}

之后,我还制作了类似于以下内容的./syntaxes/type1.tmLanguage.json

代码语言:javascript
复制
{
    "name": "type1",
    "patterns": [
        {
            "match": "type1",
            "name": "constant.language"
        }
    ],  
    "scopeName": "source.tst.type1"
}

.type1中,任何规则都不起作用。

我希望图片中的两个文件都能识别testtype1.。我检查了vscode预装的cpp语言扩展。他们还将scopeName用于source.csource.c.platform。我想是为了类似的目的吧?

我是不是忽略了什么?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-28 11:35:15

如果要在主语法中使用来自不同tmLanguage文件的这些作用域,则必须显式地include它们:

代码语言:javascript
复制
{
    "name": "Test",
    "patterns": [
        {
            "match": "test",
            "name": "constant.character"
        },
        {
            "include": "source.tst.type1"
        },
        {
            "include": "source.tst.type2"
        }
    ],
    "scopeName": "source.tst"
}

关于内置的cpp扩展和platform.tmLanguage.json,据我所知,c和cpp语法并没有积极使用它。在cpp/build/update-grammars.js中有这样的评论

代码语言:javascript
复制
// `source.c.platform` which is still included by other grammars

因此,这听起来更像是一种向后兼容的措施,以防任何第三方语法仍然使用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56330454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档