【发布时间】:2019-07-12 17:36:21
【问题描述】:
我有一种自定义语言,我正在尝试让代码大纲工作。我已经成功地为我的语言生成符号并让函数在大纲视图中列出。现在我试图让变量之类的项目显示在大纲视图的函数下。我目前有一个平面轮廓视图,但我的符号似乎包含正确的 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);
});
}
}
更新 #2:
public provideDocumentSymbols(document: vscode.TextDocument,token: vscode.CancellationToken): Thenable<vscode.DocumentSymbol[]> {
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 = "";
var childrens = [];
symbols.push({
name: line.text.substr(9).trimRight(),
kind: vscode.SymbolKind.Function,
children: [],
range: line.range,
detail: "",
selectionRange: line.range
//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,
children: [],
range: line.range,
detail: "",
selectionRange: line.range
//location: new vscode.Location(document.uri, line.range)
})
}
}
resolve(symbols);
});
}
}
【问题讨论】:
标签: typescript visual-studio-code vscode-extensions