vscode 支持无代码语言服务器集成

niknxzdl  于 6个月前  发布在  Vscode
关注(0)|答案(3)|浏览(66)

我创建了一个集成了语言服务器的VSCode扩展。这基本上是一个教科书级别的扩展示例。

import {workspace} from 'vscode'
import {LanguageClient, TransportKind} from 'vscode-languageclient/node.js'

let client

export async function activate(context) {
  const run = {
    module: context.asAbsolutePath('out/remark-language-server.js'),
    transport: TransportKind.ipc,
  }

  const serverOptions = {
    run,
    debug: {...run, options: {execArgv: ['--inspect=6009']}}
  }

  const clientOptions = {
    documentSelector: [{scheme: 'file', language: 'markdown'}],
    synchronize: {
      fileEvents: [
        workspace.createFileSystemWatcher(
          '**/.remark{ignore,rc,rc.cjs,rc.js,rc.json,rc.mjs,rc.yaml,rc.yml}'
        ),
        workspace.createFileSystemWatcher('**/package.json')
      ]
    }
  }

  client = new LanguageClient('remark', serverOptions, clientOptions)

  await client.start()
}

export async function deactivate() {
  if (client) {
    await client.stop()
  }
}

所有这些都是带有一些配置选项的样板代码。除了处理语言服务器之外,扩展开发人员还负责正确的拆卸和构建扩展。此外,这个小扩展还会向包中添加约350kB的压缩后的JavaScript。
如果可以在package.json中指定语言服务器集成,以替换扩展包,那就太好了。这样,开发人员可以专注于语言服务器功能,并减小扩展大小。

{
  "name": "vscode-remark",
  "displayName": "remark",

  // This line would no longer be needed
  // "main": "out/extension.js",

  "contributes": {
    "languageServer": {
      // Defaults to displayName
      // "name": "remark",
      "serverOptions": {
        "run": {
          "module": "out/remark-language-server.js",
          "transport": "ipc"
        },
        // Inherits properties from run
        "debug": {
          "options": {
            "execArgv": [
              "--inspect=6009"
            ]
          }
        }
      },
      "clientOptions": {
        "documentSelector": [
          {
            "scheme": "file",
            "language": "markdown"
          }
        ],
        "synchronize": {
          "fileEvents": [
            "**/package.json",
            "**/.remark{ignore,rc,rc.cjs,rc.js,rc.json,rc.mjs,rc.yaml,rc.yml}"
          ]
        }
      }
    },
    // …
  },
}

当然,这里还有很多未使用的功能。某些功能仍然需要扩展手动初始化客户端。每个接受的选项都应该单独考虑,以便以这种方式获得支持。

eh57zj3b

eh57zj3b1#

这个功能请求现在是我们待办事项列表的候选项目。社区有60天的时间对这个问题进行投票。如果它收到20个赞成票,我们将把它移到我们的待办事项列表中。如果没有,我们将关闭它。要了解更多关于我们如何处理功能请求的信息,请参阅我们的documentation
快乐编码!

iyfjxgzm

iyfjxgzm2#

我们已经获得了20个赞!😁

pxiryf3j

pxiryf3j3#

这个功能请求收到了足够多的社区投票,我们将其移动到了我们的待办事项列表中。要了解更多关于我们如何处理功能请求的信息,请参阅我们的documentation
快乐编码!

相关问题