Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/chat/common/chatCodeMapperService.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { CancellationToken } from '../../../../base/common/cancellation.js';
7
import { IDisposable } from '../../../../base/common/lifecycle.js';
8
import { URI } from '../../../../base/common/uri.js';
9
import { TextEdit } from '../../../../editor/common/languages.js';
10
import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';
11
import { ICellEditOperation } from '../../notebook/common/notebookCommon.js';
12
13
export interface ICodeMapperResponse {
14
textEdit: (resource: URI, textEdit: TextEdit[]) => void;
15
notebookEdit: (resource: URI, edit: ICellEditOperation[]) => void;
16
}
17
18
export interface ICodeMapperCodeBlock {
19
readonly code: string;
20
readonly resource: URI;
21
readonly markdownBeforeBlock?: string;
22
}
23
24
export interface ICodeMapperRequest {
25
readonly codeBlocks: ICodeMapperCodeBlock[];
26
readonly chatRequestId?: string;
27
readonly chatRequestModel?: string;
28
readonly chatSessionId?: string;
29
readonly location?: string;
30
}
31
32
export interface ICodeMapperResult {
33
readonly errorMessage?: string;
34
}
35
36
export interface ICodeMapperProvider {
37
readonly displayName: string;
38
mapCode(request: ICodeMapperRequest, response: ICodeMapperResponse, token: CancellationToken): Promise<ICodeMapperResult | undefined>;
39
}
40
41
export const ICodeMapperService = createDecorator<ICodeMapperService>('codeMapperService');
42
43
export interface ICodeMapperService {
44
readonly _serviceBrand: undefined;
45
readonly providers: ICodeMapperProvider[];
46
registerCodeMapperProvider(handle: number, provider: ICodeMapperProvider): IDisposable;
47
mapCode(request: ICodeMapperRequest, response: ICodeMapperResponse, token: CancellationToken): Promise<ICodeMapperResult | undefined>;
48
}
49
50
export class CodeMapperService implements ICodeMapperService {
51
_serviceBrand: undefined;
52
53
public readonly providers: ICodeMapperProvider[] = [];
54
55
registerCodeMapperProvider(handle: number, provider: ICodeMapperProvider): IDisposable {
56
this.providers.push(provider);
57
return {
58
dispose: () => {
59
const index = this.providers.indexOf(provider);
60
if (index >= 0) {
61
this.providers.splice(index, 1);
62
}
63
}
64
};
65
}
66
67
async mapCode(request: ICodeMapperRequest, response: ICodeMapperResponse, token: CancellationToken) {
68
for (const provider of this.providers) {
69
const result = await provider.mapCode(request, response, token);
70
if (token.isCancellationRequested) {
71
return undefined;
72
}
73
return result;
74
}
75
return undefined;
76
}
77
}
78
79