vscode插件开发之 - Treeview视图

2024-06-19 18:36

本文主要是介绍vscode插件开发之 - Treeview视图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  一些测试类插件,往往需要加载测试文件,并执行这些测试文件。以playwright vscode为例,该插件可以显示目录下所有的测试文件。如下图所示,显示了tests目录下的所有xxx.spec.js文件,那么如何在vscode插件开发中显示TreeView呢?主要有三个步骤

 步骤一:在package.json文件中配置TreeView

如下所示,在views中配置了explorer类型的view,含义是资源管理器是默认的视图容器,它显示工作区的文件和文件夹结构。在视图部分中的“explorer”键表示在这里定义的自定义视图将被添加到VS Code中的资源管理器视图容器中。自定义的视图名称是Sample,id是sample。

"contributes": {"views": {"explorer": [{"id": "sample","name": "Sample"}]},"commands": [{"command": "sampleExplorer.refresh","title": "Refresh Sample Explorer"}]},

步骤二:自定义TreeDataProvider

在VS Code中,自定义TreeDataProvider可以让你在侧边栏中显示自定义的数据结构,比如文件树、任务列表等。
要自定义自己的TreeDataProvider,需要实现以下几个核心方法。实现TreeDataProvider接口:
getTreeItem(element: T): TreeItem | Thenable<TreeItem>:返回给定元素对应的TreeItem实例。
getChildren(element?: T): ProviderResult<T[]>:返回给定元素的子元素。如果没有传入元素,则返回根元素。
(可选)getParent?(element: T): ProviderResult<T>:返回给定元素的父元素,用于支持“焦点模式”。
(可选)onDidChangeTreeData?: 事件,用于通知视图数据已更改。

  以下面的代码为例子,这里继承了vscode.TreeDataProvider,getChidren方法中主要是读取workspace的tests目录下的文件,这里调用getFiles方法。getFiles方法中,判断files中如果是folder则进行折叠,如果不是folder则设置为true。通过设置是否vscode.TreeItemCollapsibleState.Collapsed控制treeItem的显示。

class SampleProvider implements vscode.TreeDataProvider<SampleItem> {private _onDidChangeTreeData: vscode.EventEmitter<SampleItem | undefined | null | void> = new vscode.EventEmitter<SampleItem | undefined | null | void>();readonly onDidChangeTreeData: vscode.Event<SampleItem | undefined | null | void> = this._onDidChangeTreeData.event;constructor(private workspaceRoot: string) { }refresh(): void {this._onDidChangeTreeData.fire();}getTreeItem(element: SampleItem): vscode.TreeItem {return element;}getChildren(element?: SampleItem): Thenable<SampleItem[]> {if (!this.workspaceRoot) {vscode.window.showInformationMessage('No file in empty workspace');return Promise.resolve([]);}const testDirPath = path.join(this.workspaceRoot, 'tests');if (element) {console.log(element.label)return Promise.resolve(this.getFiles(path.join(testDirPath, element.label)));} else {return Promise.resolve(this.getFiles(testDirPath));}}private getFiles(dir: string): SampleItem[] {if (!fs.existsSync(dir)) {vscode.window.showInformationMessage('Test directory does not exist');return [];}const files: string[] = fs.readdirSync(dir);if (files.length === 0) {vscode.window.showInformationMessage('No files found in test directory');return [];}return files.map(file => {const filePath = path.join(dir, file);const stat = fs.lstatSync(filePath);return new SampleItem(file, stat.isDirectory() ? vscode.TreeItemCollapsibleState.Collapsed : vscode.TreeItemCollapsibleState.None);});}
}class SampleItem extends vscode.TreeItem {constructor(public readonly label: string,public readonly collapsibleState: vscode.TreeItemCollapsibleState) {super(label, collapsibleState);}iconPath = {light: path.join(__filename, '..', '..', 'resources', 'light', 'dependency.svg'),dark: path.join(__filename, '..', '..', 'resources', 'dark', 'dependency.svg')};
}

   SampleItem对象实际继承了vscode.TreeItem,包含两个属性,label和collapsibleState。假设workspace目录的tests目录下有如下文件和文件夹,调用getFiles()方法后,生成的SampleItem对象信息如下图所示,vscode在显示的时候会根据collapsibleState值来控制是否折叠显示。

步骤三:在active中注册TreeDataProvider

构建好TreeDataProvider后,还需要在activate函数中注册该provider

export function activate(context: vscode.ExtensionContext) {const sampleProvider = new SampleProvider(vscode.workspace.rootPath || '');vscode.window.registerTreeDataProvider('sample', sampleProvider);vscode.commands.registerCommand('sampleExplorer.refresh', () => sampleProvider.refresh());
}

  执行插件,可以看到,在左侧资源管理视图容器中,显示了名称为SAMPLE的视图,显示的内容正是tests目录下的文件名称,如果是folder,会折叠显示,点击folder,会显示folder下的文件名称。

这篇关于vscode插件开发之 - Treeview视图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075825

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD