Path: blob/main/src/vs/workbench/contrib/chat/common/chatCodeMapperService.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { CancellationToken } from '../../../../base/common/cancellation.js';6import { IDisposable } from '../../../../base/common/lifecycle.js';7import { URI } from '../../../../base/common/uri.js';8import { TextEdit } from '../../../../editor/common/languages.js';9import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';10import { ICellEditOperation } from '../../notebook/common/notebookCommon.js';1112export interface ICodeMapperResponse {13textEdit: (resource: URI, textEdit: TextEdit[]) => void;14notebookEdit: (resource: URI, edit: ICellEditOperation[]) => void;15}1617export interface ICodeMapperCodeBlock {18readonly code: string;19readonly resource: URI;20readonly markdownBeforeBlock?: string;21}2223export interface ICodeMapperRequest {24readonly codeBlocks: ICodeMapperCodeBlock[];25readonly chatRequestId?: string;26readonly chatRequestModel?: string;27readonly chatSessionId?: string;28readonly location?: string;29}3031export interface ICodeMapperResult {32readonly errorMessage?: string;33}3435export interface ICodeMapperProvider {36readonly displayName: string;37mapCode(request: ICodeMapperRequest, response: ICodeMapperResponse, token: CancellationToken): Promise<ICodeMapperResult | undefined>;38}3940export const ICodeMapperService = createDecorator<ICodeMapperService>('codeMapperService');4142export interface ICodeMapperService {43readonly _serviceBrand: undefined;44readonly providers: ICodeMapperProvider[];45registerCodeMapperProvider(handle: number, provider: ICodeMapperProvider): IDisposable;46mapCode(request: ICodeMapperRequest, response: ICodeMapperResponse, token: CancellationToken): Promise<ICodeMapperResult | undefined>;47}4849export class CodeMapperService implements ICodeMapperService {50_serviceBrand: undefined;5152public readonly providers: ICodeMapperProvider[] = [];5354registerCodeMapperProvider(handle: number, provider: ICodeMapperProvider): IDisposable {55this.providers.push(provider);56return {57dispose: () => {58const index = this.providers.indexOf(provider);59if (index >= 0) {60this.providers.splice(index, 1);61}62}63};64}6566async mapCode(request: ICodeMapperRequest, response: ICodeMapperResponse, token: CancellationToken) {67for (const provider of this.providers) {68const result = await provider.mapCode(request, response, token);69if (token.isCancellationRequested) {70return undefined;71}72return result;73}74return undefined;75}76}777879