我创建了一个集成了语言服务器的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}"
]
}
}
},
// …
},
}
当然,这里还有很多未使用的功能。某些功能仍然需要扩展手动初始化客户端。每个接受的选项都应该单独考虑,以便以这种方式获得支持。
3条答案
按热度按时间eh57zj3b1#
这个功能请求现在是我们待办事项列表的候选项目。社区有60天的时间对这个问题进行投票。如果它收到20个赞成票,我们将把它移到我们的待办事项列表中。如果没有,我们将关闭它。要了解更多关于我们如何处理功能请求的信息,请参阅我们的documentation。
快乐编码!
iyfjxgzm2#
我们已经获得了20个赞!😁
pxiryf3j3#
这个功能请求收到了足够多的社区投票,我们将其移动到了我们的待办事项列表中。要了解更多关于我们如何处理功能请求的信息,请参阅我们的documentation。
快乐编码!