Skip to content

Commit d123e61

Browse files
committed
fix cyclic dependency chatAction <-> chatEditorInput. fyi @roblourens
1 parent 66eceaa commit d123e61

File tree

2 files changed

+50
-48
lines changed

2 files changed

+50
-48
lines changed

src/vs/workbench/contrib/chat/browser/actions/chatActions.ts

Lines changed: 1 addition & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ import { CopilotUsageExtensionFeatureId } from '../../common/languageModelStats.
5959
import { ILanguageModelToolsService } from '../../common/languageModelToolsService.js';
6060
import { ChatViewId, IChatWidget, IChatWidgetService, showChatView, showCopilotView } from '../chat.js';
6161
import { IChatEditorOptions } from '../chatEditor.js';
62-
import { ChatEditorInput } from '../chatEditorInput.js';
62+
import { ChatEditorInput, shouldShowClearEditingSessionConfirmation, showClearEditingSessionConfirmation } from '../chatEditorInput.js';
6363
import { ChatViewPane } from '../chatViewPane.js';
6464
import { convertBufferToScreenshotVariable } from '../contrib/screenshot.js';
6565
import { clearChatEditor } from './chatClear.js';
@@ -990,52 +990,6 @@ export interface IClearEditingSessionConfirmationOptions {
990990
messageOverride?: string;
991991
}
992992

993-
export async function showClearEditingSessionConfirmation(editingSession: IChatEditingSession, dialogService: IDialogService, options?: IClearEditingSessionConfirmationOptions): Promise<boolean> {
994-
const defaultPhrase = localize('chat.startEditing.confirmation.pending.message.default', "Starting a new chat will end your current edit session.");
995-
const defaultTitle = localize('chat.startEditing.confirmation.title', "Start new chat?");
996-
const phrase = options?.messageOverride ?? defaultPhrase;
997-
const title = options?.titleOverride ?? defaultTitle;
998-
999-
const currentEdits = editingSession.entries.get();
1000-
const undecidedEdits = currentEdits.filter((edit) => edit.state.get() === ModifiedFileEntryState.Modified);
1001-
1002-
const { result } = await dialogService.prompt({
1003-
title,
1004-
message: phrase + ' ' + localize('chat.startEditing.confirmation.pending.message.2', "Do you want to keep pending edits to {0} files?", undecidedEdits.length),
1005-
type: 'info',
1006-
cancelButton: true,
1007-
buttons: [
1008-
{
1009-
label: localize('chat.startEditing.confirmation.acceptEdits', "Keep & Continue"),
1010-
run: async () => {
1011-
await editingSession.accept();
1012-
return true;
1013-
}
1014-
},
1015-
{
1016-
label: localize('chat.startEditing.confirmation.discardEdits', "Undo & Continue"),
1017-
run: async () => {
1018-
await editingSession.reject();
1019-
return true;
1020-
}
1021-
}
1022-
],
1023-
});
1024-
1025-
return Boolean(result);
1026-
}
1027-
1028-
export function shouldShowClearEditingSessionConfirmation(editingSession: IChatEditingSession): boolean {
1029-
const currentEdits = editingSession.entries.get();
1030-
const currentEditCount = currentEdits.length;
1031-
1032-
if (currentEditCount) {
1033-
const undecidedEdits = currentEdits.filter((edit) => edit.state.get() === ModifiedFileEntryState.Modified);
1034-
return !!undecidedEdits.length;
1035-
}
1036-
1037-
return false;
1038-
}
1039993

1040994
// --- Chat Submenus in various Components
1041995

src/vs/workbench/contrib/chat/browser/chatEditorInput.ts

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ import { IChatModel } from '../common/chatModel.js';
2020
import { IChatService } from '../common/chatService.js';
2121
import { ChatAgentLocation } from '../common/constants.js';
2222
import { ConfirmResult, IDialogService } from '../../../../platform/dialogs/common/dialogs.js';
23-
import { shouldShowClearEditingSessionConfirmation, showClearEditingSessionConfirmation } from './actions/chatActions.js';
23+
import { IChatEditingSession, ModifiedFileEntryState } from '../common/chatEditingService.js';
24+
import { IClearEditingSessionConfirmationOptions } from './actions/chatActions.js';
2425

2526
const ChatEditorIcon = registerIcon('chat-editor-label-icon', Codicon.commentDiscussion, nls.localize('chatEditorLabelIcon', 'Icon of the chat editor label.'));
2627

@@ -231,3 +232,50 @@ export class ChatEditorInputSerializer implements IEditorSerializer {
231232
}
232233
}
233234
}
235+
236+
export async function showClearEditingSessionConfirmation(editingSession: IChatEditingSession, dialogService: IDialogService, options?: IClearEditingSessionConfirmationOptions): Promise<boolean> {
237+
const defaultPhrase = nls.localize('chat.startEditing.confirmation.pending.message.default1', "Starting a new chat will end your current edit session.");
238+
const defaultTitle = nls.localize('chat.startEditing.confirmation.title', "Start new chat?");
239+
const phrase = options?.messageOverride ?? defaultPhrase;
240+
const title = options?.titleOverride ?? defaultTitle;
241+
242+
const currentEdits = editingSession.entries.get();
243+
const undecidedEdits = currentEdits.filter((edit) => edit.state.get() === ModifiedFileEntryState.Modified);
244+
245+
const { result } = await dialogService.prompt({
246+
title,
247+
message: phrase + ' ' + nls.localize('chat.startEditing.confirmation.pending.message.2', "Do you want to keep pending edits to {0} files?", undecidedEdits.length),
248+
type: 'info',
249+
cancelButton: true,
250+
buttons: [
251+
{
252+
label: nls.localize('chat.startEditing.confirmation.acceptEdits', "Keep & Continue"),
253+
run: async () => {
254+
await editingSession.accept();
255+
return true;
256+
}
257+
},
258+
{
259+
label: nls.localize('chat.startEditing.confirmation.discardEdits', "Undo & Continue"),
260+
run: async () => {
261+
await editingSession.reject();
262+
return true;
263+
}
264+
}
265+
],
266+
});
267+
268+
return Boolean(result);
269+
}
270+
271+
export function shouldShowClearEditingSessionConfirmation(editingSession: IChatEditingSession): boolean {
272+
const currentEdits = editingSession.entries.get();
273+
const currentEditCount = currentEdits.length;
274+
275+
if (currentEditCount) {
276+
const undecidedEdits = currentEdits.filter((edit) => edit.state.get() === ModifiedFileEntryState.Modified);
277+
return !!undecidedEdits.length;
278+
}
279+
280+
return false;
281+
}

0 commit comments

Comments
 (0)