gpt4 book ai didi

visual-studio-code - 如何在 vscode 中使用自定义语言启用 "Go to symbol"?

转载 作者:行者123 更新时间:2023-12-04 11:34:02 25 4
gpt4 key购买 nike

我做了一个自定义语言扩展,我想启用“转到符号”功能。我已尝试遵循指南 here ,但我还是有点失落。

我想我需要做的就是实现一个 DocumentSymbolProvider ,但我真的不知道该怎么做。

更新

example language server docs指向 repo已弃用。替换为 this one ,这要复杂得多。我想我能找到的最简单的例子是 lsp-sample ,但它不使用 DocumentSymbolProvider .

我发现其他确实使用符号提供程序的存储库,但它们有点压倒性。我不知道需要去哪里(例如,我需要客户端和服务器吗?有些包似乎只使用 extension.ts 没有客户端和服务器文件夹)。

我真正想做的就是检测以 @ 开头的行并在 Go to Symbol Pane 中显示它们。我很想看到一个简单的教程。

最佳答案

Do I need both a client and a server?



不必要。作为 language support docs you linked显示,通常有两种选择:一种是“直接实现”,另一种是使用语言服务器协议(protocol)。对于前者,您不需要客户端/服务器架构。语言服务器具有与编辑器无关的优势,理论上您可以在任何实现该协议(protocol)的编辑器中使用它们。直接实现仅限于在 VSCode 中使用。

All I really want to do in my language is detect lines that start with @ and show them in the Go to Symbol pane.



这是 extension.ts一个非常简单的“直接实现”示例:

'use strict';
import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
context.subscriptions.push(vscode.languages.registerDocumentSymbolProvider(
{language: "foo"}, new FooDocumentSymbolProvider()
));
}

class FooDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
public provideDocumentSymbols(document: vscode.TextDocument,
token: vscode.CancellationToken): Thenable<vscode.SymbolInformation[]> {
return new Promise((resolve, reject) => {
var symbols = [];

for (var i = 0; i < document.lineCount; i++) {
var line = document.lineAt(i);
if (line.text.startsWith("@")) {
symbols.push({
name: line.text.substr(1),
kind: vscode.SymbolKind.Field,
location: new vscode.Location(document.uri, line.range)
})
}
}

resolve(symbols);
});
}
}

您还需要将此添加到 package.json由 VSCode 扩展模板生成。它注册 foo语言并在文件带有 .foo 时激活扩展名扩展打开:

"activationEvents": [
"onLanguage:foo"
],
"contributes": {
"languages": [{
"id": "foo",
"extensions": [".foo"]
}]
}

这是在行动:

关于visual-studio-code - 如何在 vscode 中使用自定义语言启用 "Go to symbol"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46045245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com