mirror of
https://github.com/microsoft/vscode-extension-samples.git
synced 2026-06-13 07:10:26 +08:00
Switches all samples to use eslint 9 with flat configs. I've tried to migrate existing settings as much as possible. However our eslint configs were also inconsistent so I've tried to align these too
104 lines
2.8 KiB
TypeScript
104 lines
2.8 KiB
TypeScript
import * as vscode from 'vscode';
|
|
|
|
export class TestView {
|
|
|
|
constructor(context: vscode.ExtensionContext) {
|
|
const view = vscode.window.createTreeView('testView', { treeDataProvider: aNodeWithIdTreeDataProvider(), showCollapseAll: true });
|
|
context.subscriptions.push(view);
|
|
vscode.commands.registerCommand('testView.reveal', async () => {
|
|
const key = await vscode.window.showInputBox({ placeHolder: 'Type the label of the item to reveal' });
|
|
if (key) {
|
|
await view.reveal({ key }, { focus: true, select: false, expand: true });
|
|
}
|
|
});
|
|
vscode.commands.registerCommand('testView.changeTitle', async () => {
|
|
const title = await vscode.window.showInputBox({ prompt: 'Type the new title for the Test View', placeHolder: view.title });
|
|
if (title) {
|
|
view.title = title;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
const tree: any = {
|
|
'a': {
|
|
'aa': {
|
|
'aaa': {
|
|
'aaaa': {
|
|
'aaaaa': {
|
|
'aaaaaa': {
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
'ab': {}
|
|
},
|
|
'b': {
|
|
'ba': {},
|
|
'bb': {}
|
|
}
|
|
};
|
|
const nodes: any = {};
|
|
|
|
function aNodeWithIdTreeDataProvider(): vscode.TreeDataProvider<{ key: string }> {
|
|
return {
|
|
getChildren: (element: { key: string }): { key: string }[] => {
|
|
return getChildren(element ? element.key : undefined).map(key => getNode(key));
|
|
},
|
|
getTreeItem: (element: { key: string }): vscode.TreeItem => {
|
|
const treeItem = getTreeItem(element.key);
|
|
treeItem.id = element.key;
|
|
return treeItem;
|
|
},
|
|
getParent: ({ key }: { key: string }): { key: string } | undefined => {
|
|
const parentKey = key.substring(0, key.length - 1);
|
|
return parentKey ? new Key(parentKey) : undefined;
|
|
}
|
|
};
|
|
}
|
|
|
|
function getChildren(key: string | undefined): string[] {
|
|
if (!key) {
|
|
return Object.keys(tree);
|
|
}
|
|
const treeElement = getTreeElement(key);
|
|
if (treeElement) {
|
|
return Object.keys(treeElement);
|
|
}
|
|
return [];
|
|
}
|
|
|
|
function getTreeItem(key: string): vscode.TreeItem {
|
|
const treeElement = getTreeElement(key);
|
|
// An example of how to use codicons in a MarkdownString in a tree item tooltip.
|
|
const tooltip = new vscode.MarkdownString(`$(zap) Tooltip for ${key}`, true);
|
|
return {
|
|
label: /**vscode.TreeItemLabel**/{ label: key, highlights: key.length > 1 ? [[key.length - 2, key.length - 1]] : void 0 } as any,
|
|
tooltip,
|
|
collapsibleState: treeElement && Object.keys(treeElement).length ? vscode.TreeItemCollapsibleState.Collapsed : vscode.TreeItemCollapsibleState.None
|
|
};
|
|
}
|
|
|
|
function getTreeElement(element: string): any {
|
|
let parent = tree;
|
|
for (let i = 0; i < element.length; i++) {
|
|
parent = parent[element.substring(0, i + 1)];
|
|
if (!parent) {
|
|
return null;
|
|
}
|
|
}
|
|
return parent;
|
|
}
|
|
|
|
function getNode(key: string): { key: string } {
|
|
if (!nodes[key]) {
|
|
nodes[key] = new Key(key);
|
|
}
|
|
return nodes[key];
|
|
}
|
|
|
|
class Key {
|
|
constructor(readonly key: string) { }
|
|
} |