使用TreeDataProvider中的“ vscode.open”命令

问题描述

创作vscode扩展名时如何从自定义树视图项目中打开文件?这是一个示例树视图项目:

import { URI } from 'vscode-uri';
import { TreeDataProvider,ProviderResult,TreeItem } from 'vscode';

export class CustomTreeProvider implements TreeDataProvider<TreeItem>{

    public getChildren(element?: TreeItem): ProviderResult<TreeItem[]> {
        if (!element) {
            return [{
                id: 'some-unique-id',label: 'some-unique-label',command: {
                    command: 'vscode.open',title: 'Open',arguments: [URI.file('path/to/file']
                }
            }];
        }
    }

}

但是,每当我单击该树视图项目时,它都会在控制台中失败并显示以下消息:

[renderer7] [错误]运行提供的命令:'vscode.open'失败。非法参数'resource'-打开资源:错误:运行贡献的命令:'vscode.open'失败。非法参数'resource'-要打开的资源

我有一个解决方法,可以注册我自己的自定义命令来打开文件,但如果可能的话,我宁愿使用内置的“ vscode.open”命令。

解决方法

问题是vscode.open命令不喜欢Uri包生成的vscode-uri。请改用vscode.Uri

import { TreeDataProvider,ProviderResult,TreeItem,Uri } from 'vscode';

export class CustomTreeProvider implements TreeDataProvider<TreeItem>{

    public getChildren(element?: TreeItem): ProviderResult<TreeItem[]> {
        if (!element) {
            return [{
                id: 'some-unique-id',label: 'some-unique-label',command: {
                    command: 'vscode.open',title: 'Open',arguments: [Uri.file('path/to/file']
                }
            }];
        }
    }

}