Cómo extender el objeto vscode en el cuerpo principal del complemento para el desarrollo secundario de vscode

vscodeEl complemento nos proporciona una gran cantidad de objetos y métodos para que los usemos
inserte la descripción de la imagen aquí
, pero si los objetos y métodos no satisfacen nuestras necesidades, debemos extenderlos. Aquí presentaré cómo extenderlos en detalle.

Aquí amplío la ruta del archivo.

Primero define el tipo

src/vscode-dts/vscode.d.ts

export namespace trash {
    
    
    export function getTrashRootPath(): Thenable<string>;
}

Definir el método de clase principal

src/vs/workbench/api/navegador/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

interfaz

export interface MainThreadTrashShape extends IDisposable {
    
    
    $getTrashRoot(): Promise<string>;
}

export interface ExtHostTrashShape {
    
    
    $getTrashRoot(): Promise<string>;
}

Registro unificado de métodos de clase principales

src/vs/workbench/api/navegador/extensionHost.contribution.ts

import './mainThreadTrash';

Método de subproceso de complemento

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

Agregar aquí a la extensión del complemento

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

usado en complementos

vscode.trash.getTrashRootPath().then(data => {
    
    
		console.log(123,vscode.Uri.file(data) )
	})

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/woyebuzhidao321/article/details/131071724
Recomendado
Clasificación