我有一种自定义语言,我正在尝试使代码大纲起作用。我已经成功地为我的语言生成了符号,并使函数在大纲视图中列出。现在,我试图使诸如变量之类的项显示在大纲视图的功能下。我目前具有平面轮廓视图,但是我的符号似乎包含正确的containerName
值。
这是我目前在extension.ts
中拥有的代码:
'use strict';
import * as vscode from 'vscode';
export function activate(context: vscode.ExtensionContext) {
context.subscriptions.push(vscode.languages.registerDocumentSymbolProvider(
{language: "as"}, 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 = [];
var sym = "";
for (var i = 0; i < document.lineCount; i++) {
var line = document.lineAt(i);
if (line.text.startsWith(".PROGRAM")) {
var sym = "";
symbols.push({
name: line.text.substr(9).trimRight(),
kind: vscode.SymbolKind.Function,
containerName: sym,
location: new vscode.Location(document.uri, line.range)
})
sym = line.text.substr(9).trimRight();
}
if (line.text.includes("CALL") && !(line.text.startsWith(".*"))) {
symbols.push({
name: line.text.substr(0).trimLeft(),
kind: vscode.SymbolKind.Module,
containerName: sym,
location: new vscode.Location(document.uri, line.range)
})
}
}
resolve(symbols);
});
}
}
答案 0 :(得分:0)
containerName
实际上不是造成层次结构的原因。它只是符号后面带有灰色字体的一些附加“详细信息”。
诀窍是完全不使用SymbolInformation
,而是使用最新的DocumentSymbol
API(文档符号提供者不曾使用过支持层次结构,它只是added in 1.25)。每个DocumentSymbol
可以有一个children
数组,因此层次结构可以很自然地表示为一棵树。