Visual studio code 在VisualStudio代码中创建自定义语言

Visual studio code 在VisualStudio代码中创建自定义语言,visual-studio-code,vscode-extensions,tmlanguage,Visual Studio Code,Vscode Extensions,Tmlanguage,有没有办法在Visual Studio代码中扩展受支持的语言/语法? 我想添加一个自定义语言语法,但是我还没有找到任何关于如何提供语言服务的信息 有人能指出现有语言实现的任何参考甚至示例吗?使用反向工程,您可以向VSCode添加新语言。您可以了解typescript是如何作为JavaScript插件实现的,以及它是如何通过管道与node.exe通信的。但这是一件困难的事情,因为它完全没有文档 我将在这里提供一个非常简短的文档: 您可以在plugins文件夹C:\Users\USER\AppDat

有没有办法在Visual Studio代码中扩展受支持的语言/语法? 我想添加一个自定义语言语法,但是我还没有找到任何关于如何提供语言服务的信息


有人能指出现有语言实现的任何参考甚至示例吗?

使用反向工程,您可以向VSCode添加新语言。您可以了解typescript是如何作为JavaScript插件实现的,以及它是如何通过管道与node.exe通信的。但这是一件困难的事情,因为它完全没有文档 我将在这里提供一个非常简短的文档:

您可以在plugins文件夹
C:\Users\USER\AppData\Local\code\app-0.3.0\resources\app\plugins
中定义新插件

复制typescript插件文件夹,并将所有文件中提到的文件扩展名和语言名称重命名为新语言,以便在打开.mylang文件时使用新插件

typescriptServiceClient.js
中,您可以看到一个子进程正在分叉,并且它的
stdout
与一个
新的WireProtocol.Reader
耦合。绑定您自己的
mylanguage.exe
(您可能需要自己编写该exe)。VSCode要求二进制文件获取更多特定于语言的信息

typescriptMain.js
中可以找到该语言的功能注册。删除对
monaco.Modes.xxxxxx support.register的所有调用,但
monaco.Modes.DeclarationSupport.register除外

现在在VSCode中打开一个包含.mylang文件的目录,并通过
CTRL+p+FileName
打开其中一个。右键单击标识符并选择
转到定义
。VSCode现在通过StdIn向您的exe发送一个类似这样的请求

{"seq":1,"type":"request","command":"definition","arguments":{"file":"d:/Projects/MyProj/Source/MyFile.mylang","line":45,"offset":9}}
VSCode希望得到如下答案:

Content-Length: 251
[LINE BREAK]
{ "seq" : 1, "type" : "response", "command" : "definition", "request_seq" : 1, "success" : true, "body" : [{ "file" : "d:/Projects/MyProj/Source/MyOtherFile.mylang", "start" : { "line" : 125, "offset" : 3 }, "end" : { "line" : 145, "offset" : 11} }] }
如果一切正常,VSCode将打开MyOtherFile.mylang并将光标设置为第3列的第124行


自己试试;-)

使用新版本0.9.0是可能的。有一份关于如何添加自定义语言的官方文档:

您需要一个
.tmLanguage
文件,用于要添加的语言。您可以在GitHub上找到现有文件,或者定义自己的语言文件。查看此处,了解如何创建一个:

找到
.tmLanguage
文件后,有两种方法可以基于该文件创建扩展名

选项1:使用约曼发电机

  • 安装node.js(如果尚未安装)
  • 通过执行
    npm Install-g yo
  • 安装Yo发电机代码:
    npm安装-g发电机代码
  • 运行
    yo code
    并选择
    New language support
  • 按照说明操作(定义
    .tmLangauge
    文件,定义插件名称、文件扩展名等)
  • 生成器使用当前工作目录中插件的名称为扩展创建一个目录
选项2:自己创建目录

  • 创建一个包含插件名称的目录(仅小写字母)。我们把它叫做mylang
  • 添加子文件夹
    syntaxes
    ,并将
    .tmlanguage
    文件放在其中
  • 在扩展文件夹的根目录中创建一个包含如下内容的文件
    package.json

    {
    “姓名”:“迈朗”,
    “版本”:“0.0.1”,
    “发动机”:{
    “vscode”:“>=0.9.0-pre.1”
    },
    “出版商”:“我”,
    “贡献”:{
    “语言”:[{
    “id”:“mylang”,
    “别名”:[“MyLang”,“MyLang”],
    “扩展名”:[“.mylang”,“.myl”]
    }],
    “语法”:[{
    “语言”:“mylang”,
    “scopeName”:“source.mylang”,
    “路径”:“/syntaxes/mylang.tmLanguage”
    }]
    }
    }
    
最后将扩展添加到Visual Studio代码中

将扩展文件夹复制到扩展目录。这是:

  • 在Windows上
    %USERPROFILE%\.vscode\extensions

  • 在Mac/Linux上
    $HOME/.vscode/extensions

重新启动代码。现在,每次打开具有指定文件扩展名的文件时,扩展名都将自动运行。您可以在右下角看到所用插件的名称。您可以通过单击扩展名来更改它。如果您的扩展名不是为特定文件扩展名注册的唯一扩展名,那么代码可能会选择错误的扩展名

要扩展,可选择使用
.tmLanguage
文件。使用常规的
.json
是一种非常有效的方法,在我看来,它更易于阅读

有关示例,请参见VSCode_SQF:


package.json
中,您只需将路径从
/syntaxes/mylang.tmLanguage
更改为
/syntaxes/mylang.json
到2021年第二季度:

  • 遵循中的选项2。你只需要两个文件就可以开始了。只需直接在扩展目录中创建文件夹结构。
    • package.json
  • 用于构建正则表达式。
    • 确保在“范围信息”屏幕中,与Textmate有关的任何内容都是绿色的。别担心其他编辑
    • 将“Textmate”选项卡的内容保存到上面的路径中,即
      .syntax/your_language.plist
  • 重新加载VSCode

  • 就这样。我还将IRO(左窗格)文本保存到我自己的项目中。

    您可以在线阅读内置语言扩展的源代码:

    您可以选择一个接近您的语言语法的扩展,并根据需要进行更改。(例如,您可以对