vscode插件里给我们提供了大量的对象、方法供我们使用
但其中的对象、方法如果不满足我们的需求的话,就需要对其进行扩展,这里我详细介绍下如何对其进行扩展。
<>这里我扩展的是文件的路径
<>首先定义类型
src/vscode-dts/vscode.d.ts
export namespace trash { export function getTrashRootPath(): Thenable<string>;
}
<>定义主线类方法
src/vs/workbench/api/browser/mainThreadTrash.ts
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under
the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { INativeEnvironmentService } from
'vs/platform/environment/common/environment'; import { MainContext,
MainThreadTrashShape} from 'vs/workbench/api/common/extHost.protocol'; import {
extHostNamedCustomer, IExtHostContext } from
'../../services/extensions/common/extHostCustomers'; import { Disposable } from
'vs/base/common/lifecycle'; @extHostNamedCustomer(MainContext.MainThreadTrash)
export class MainThreadTrash extends Disposable implements MainThreadTrashShape
{ // private readonly _proxy: ExtHostTrashShape; constructor( extHostContext:
IExtHostContext, @INativeEnvironmentService private readonly
environmentMainService: INativeEnvironmentService ) { super(); // this._proxy =
extHostContext.getProxy(ExtHostContext.ExtHostTrash); } $getTrashRoot(): Promise
<string> { return Promise.resolve(this.environmentMainService.trashContent.
fsPath); } }
src/vs/workbench/api/common/extHost.protocol.ts
<>接口
export interface MainThreadTrashShape extends IDisposable { $getTrashRoot():
Promise<string>; } export interface ExtHostTrashShape { $getTrashRoot(): Promise
<string>; }
<>统一注册主线类方法
src/vs/workbench/api/browser/extensionHost.contribution.ts
import './mainThreadTrash';
<>插件线程方法
src/vs/workbench/api/common/extHostTrash.ts
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under
the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IMainContext, MainThreadTrashShape, MainContext, ExtHostTrashShape }
from 'vs/workbench/api/common/extHost.protocol'; export class ExtHostTrash
implements ExtHostTrashShape { private _proxy: MainThreadTrashShape; constructor
(mainContext: IMainContext) { this._proxy = mainContext.getProxy(MainContext.
MainThreadTrash); } $getTrashRoot(): Promise<string> { return this._proxy.
$getTrashRoot(); } }
<>这里添加到插件扩展
src/vs/workbench/api/common/extHost.api.impl.ts
179
const extHostTrash = rpcProtocol.set(ExtHostContext.ExtHostTrash, new
ExtHostTrash(rpcProtocol));
259
const trash: typeof vscode.trash = { async getTrashRootPath() { return
extHostTrash.$getTrashRoot(); } };
1145
return <typeof vscode>{ version: initData.version, trash, // namespaces ... }
<>插件里使用
vscode.trash.getTrashRootPath().then(data => { console.log(123,vscode.Uri.file(
data) ) })