Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionContribution.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 { Disposable, DisposableMap } from '../../../../../base/common/lifecycle.js';
7
import { ICodeEditor } from '../../../../../editor/browser/editorBrowser.js';
8
import { registerEditorContribution, EditorContributionInstantiation } from '../../../../../editor/browser/editorExtensions.js';
9
import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';
10
import { PROMPT_LANGUAGE_ID } from '../../common/promptSyntax/promptTypes.js';
11
import { PromptCodingAgentActionOverlayWidget } from './promptCodingAgentActionOverlay.js';
12
13
export class PromptCodingAgentActionContribution extends Disposable {
14
static readonly ID = 'promptCodingAgentActionContribution';
15
16
private readonly _overlayWidgets = this._register(new DisposableMap<ICodeEditor, PromptCodingAgentActionOverlayWidget>());
17
18
constructor(
19
private readonly _editor: ICodeEditor,
20
@IInstantiationService private readonly _instantiationService: IInstantiationService
21
) {
22
super();
23
24
this._register(this._editor.onDidChangeModel(() => {
25
this._updateOverlayWidget();
26
}));
27
28
this._updateOverlayWidget();
29
}
30
private _updateOverlayWidget(): void {
31
const model = this._editor.getModel();
32
33
// Remove existing overlay if present
34
this._overlayWidgets.deleteAndDispose(this._editor);
35
36
// Add overlay if this is a prompt file
37
if (model && model.getLanguageId() === PROMPT_LANGUAGE_ID) {
38
const widget = this._instantiationService.createInstance(PromptCodingAgentActionOverlayWidget, this._editor);
39
this._overlayWidgets.set(this._editor, widget);
40
}
41
}
42
}
43
44
registerEditorContribution(PromptCodingAgentActionContribution.ID, PromptCodingAgentActionContribution, EditorContributionInstantiation.AfterFirstRender);
45
46