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) )
})