语言扩展项目似乎没有加载语法(没有提供语法的消息)

Ren*_*ira 6 visual-studio-code

我正在尝试为 Visual Studio 代码创建一个简单的语言扩展。我使用“yo code”来生成语言支持扩展。添加我的语言名称、ID、扩展名等后,即使 vscode 识别了语言,在扩展调试主机中运行 tm 范围检查器时,我仍然收到此消息“没有为 < source.arc 提供语法”。

错误

不确定此时我可以尝试什么,因为样本应该立即起作用

archsim.tmLanguage.json:

{
    "name": "ArchsimC",
    "scopeName": "source.arc",
    "patterns": [
        {
            "include": "#keywords"
        },
        {
            "include": "#strings"
        }
    ],
    "repository": {
        "keywords": {
            "patterns": [
                {
                    "name": "keyword.control.archsimc",
                    "match": "\\b(if|while|for|return)\\b"                  
                },
            ]
        },
        "strings": {
            "name": "string.quoted.double.archsimc",
            "begin": "\"",
            "end": "\"",
            "patterns": [
                {
                    "name": "constant.character.escape.archsimc",
                    "match": "\\\\."
                }
            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

包.json:

{
    "name": "languagetest",
    "displayName": "LanguageTest",
    "description": "language server test",
    "version": "0.0.1",
    "engines": {
        "vscode": "^1.29.0"
    },
    "categories": [
        "Programming Languages"
    ],
    "contributes": {
        "languages": [
            {
                "id": "archsimc",
                "aliases": [
                    "ArchsimC",
                    "archsimc"
                ],
                "extensions": [
                    ".arc"
                ],
                "configuration": "./language-configuration.json"
            }
        ],
        "grammars": [
            {
                "language": "archsimc",
                "scopeName": "source.arc",
                "path": "./syntaxes/archsimc.tmLanguage.json"
            }
        ]
    }
}

Run Code Online (Sandbox Code Playgroud)

测试弧

{
    "name": "ArchsimC",
    "scopeName": "source.arc",
    "patterns": [
        {
            "include": "#keywords"
        },
        {
            "include": "#strings"
        }
    ],
    "repository": {
        "keywords": {
            "patterns": [
                {
                    "name": "keyword.control.archsimc",
                    "match": "\\b(if|while|for|return)\\b"                  
                },
            ]
        },
        "strings": {
            "name": "string.quoted.double.archsimc",
            "begin": "\"",
            "end": "\"",
            "patterns": [
                {
                    "name": "constant.character.escape.archsimc",
                    "match": "\\\\."
                }
            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

根据我在 vscode 文档中看到的内容,通过在“if”上运行检查 TM 范围应该指向 tmLanguage 文件。

关于这里有什么问题的任何想法,如果我做错了什么?

小智 0

我建议仔细检查该属性,contributes.grammars.path看看它是否指向正确的位置,文件名是否正确,等等。

就我而言,我已经移动了文件。以您的摘录为基础,我对此进行了更改:

"path": "./syntaxes/archsimc.tmLanguage.json"
Run Code Online (Sandbox Code Playgroud)

对此:

"path": "./src/syntaxes/archsimc.tmLanguage.json"
Run Code Online (Sandbox Code Playgroud)

这样就可以正常工作了。