mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-24 12:19:20 +00:00
Merge pull request #193787 from microsoft/joh/legal-snake
keep inlineChat.contribution purely registrations of stuff
This commit is contained in:
@@ -7,20 +7,15 @@ import { registerAction2 } from 'vs/platform/actions/common/actions';
|
|||||||
import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions';
|
import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions';
|
||||||
import { InlineChatController } from 'vs/workbench/contrib/inlineChat/browser/inlineChatController';
|
import { InlineChatController } from 'vs/workbench/contrib/inlineChat/browser/inlineChatController';
|
||||||
import * as InlineChatActions from 'vs/workbench/contrib/inlineChat/browser/inlineChatActions';
|
import * as InlineChatActions from 'vs/workbench/contrib/inlineChat/browser/inlineChatActions';
|
||||||
import { CTX_INLINE_CHAT_FOCUSED, CTX_INLINE_CHAT_RESPONSE_FOCUSED, IInlineChatService, INLINE_CHAT_ID, INTERACTIVE_EDITOR_ACCESSIBILITY_HELP_ID } from 'vs/workbench/contrib/inlineChat/common/inlineChat';
|
import { IInlineChatService, INLINE_CHAT_ID, INTERACTIVE_EDITOR_ACCESSIBILITY_HELP_ID } from 'vs/workbench/contrib/inlineChat/common/inlineChat';
|
||||||
import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
||||||
import { InlineChatServiceImpl } from 'vs/workbench/contrib/inlineChat/common/inlineChatServiceImpl';
|
import { InlineChatServiceImpl } from 'vs/workbench/contrib/inlineChat/common/inlineChatServiceImpl';
|
||||||
import { IInlineChatSessionService, InlineChatSessionService } from 'vs/workbench/contrib/inlineChat/browser/inlineChatSession';
|
import { IInlineChatSessionService, InlineChatSessionService } from 'vs/workbench/contrib/inlineChat/browser/inlineChatSession';
|
||||||
import { Registry } from 'vs/platform/registry/common/platform';
|
import { Registry } from 'vs/platform/registry/common/platform';
|
||||||
import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle';
|
import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle';
|
||||||
import { InlineChatNotebookContribution } from 'vs/workbench/contrib/inlineChat/browser/inlineChatNotebook';
|
import { InlineChatNotebookContribution } from 'vs/workbench/contrib/inlineChat/browser/inlineChatNotebook';
|
||||||
import { AccessibilityVerbositySettingId } from 'vs/workbench/contrib/accessibility/browser/accessibilityConfiguration';
|
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
|
||||||
import { AccessibleViewType, IAccessibleViewService } from 'vs/workbench/contrib/accessibility/browser/accessibleView';
|
import { InlineChatAccessibleViewContribution } from './inlineChatAccessibleView';
|
||||||
import { Disposable } from 'vs/base/common/lifecycle';
|
|
||||||
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
|
|
||||||
import { Extensions, IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
|
|
||||||
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
|
|
||||||
import { AccessibleViewAction } from 'vs/workbench/contrib/accessibility/browser/accessibleViewActions';
|
|
||||||
|
|
||||||
registerSingleton(IInlineChatService, InlineChatServiceImpl, InstantiationType.Delayed);
|
registerSingleton(IInlineChatService, InlineChatServiceImpl, InstantiationType.Delayed);
|
||||||
registerSingleton(IInlineChatSessionService, InlineChatSessionService, InstantiationType.Delayed);
|
registerSingleton(IInlineChatSessionService, InlineChatSessionService, InstantiationType.Delayed);
|
||||||
@@ -54,44 +49,6 @@ registerAction2(InlineChatActions.ApplyPreviewEdits);
|
|||||||
|
|
||||||
registerAction2(InlineChatActions.CopyRecordings);
|
registerAction2(InlineChatActions.CopyRecordings);
|
||||||
|
|
||||||
|
|
||||||
Registry.as<IWorkbenchContributionsRegistry>(Extensions.Workbench)
|
|
||||||
.registerWorkbenchContribution(InlineChatNotebookContribution, LifecyclePhase.Restored);
|
|
||||||
|
|
||||||
|
|
||||||
class InlineChatAccessibleViewContribution extends Disposable {
|
|
||||||
static ID: 'inlineChatAccessibleViewContribution';
|
|
||||||
constructor() {
|
|
||||||
super();
|
|
||||||
this._register(AccessibleViewAction.addImplementation(100, 'inlineChat', accessor => {
|
|
||||||
const accessibleViewService = accessor.get(IAccessibleViewService);
|
|
||||||
const codeEditorService = accessor.get(ICodeEditorService);
|
|
||||||
|
|
||||||
const editor = (codeEditorService.getActiveCodeEditor() || codeEditorService.getFocusedCodeEditor());
|
|
||||||
if (!editor) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const controller = InlineChatController.get(editor);
|
|
||||||
if (!controller) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const responseContent = controller?.getMessage();
|
|
||||||
if (!responseContent) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
accessibleViewService.show({
|
|
||||||
verbositySettingKey: AccessibilityVerbositySettingId.InlineChat,
|
|
||||||
provideContent(): string { return responseContent; },
|
|
||||||
onClose() {
|
|
||||||
controller.focus();
|
|
||||||
},
|
|
||||||
|
|
||||||
options: { type: AccessibleViewType.View }
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
}, ContextKeyExpr.or(CTX_INLINE_CHAT_FOCUSED, CTX_INLINE_CHAT_RESPONSE_FOCUSED)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const workbenchContributionsRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
|
const workbenchContributionsRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
|
||||||
|
workbenchContributionsRegistry.registerWorkbenchContribution(InlineChatNotebookContribution, LifecyclePhase.Restored);
|
||||||
workbenchContributionsRegistry.registerWorkbenchContribution(InlineChatAccessibleViewContribution, LifecyclePhase.Eventually);
|
workbenchContributionsRegistry.registerWorkbenchContribution(InlineChatAccessibleViewContribution, LifecyclePhase.Eventually);
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import { InlineChatController } from 'vs/workbench/contrib/inlineChat/browser/inlineChatController';
|
||||||
|
import { CTX_INLINE_CHAT_FOCUSED, CTX_INLINE_CHAT_RESPONSE_FOCUSED } from 'vs/workbench/contrib/inlineChat/common/inlineChat';
|
||||||
|
import { AccessibilityVerbositySettingId } from 'vs/workbench/contrib/accessibility/browser/accessibilityConfiguration';
|
||||||
|
import { AccessibleViewType, IAccessibleViewService } from 'vs/workbench/contrib/accessibility/browser/accessibleView';
|
||||||
|
import { Disposable } from 'vs/base/common/lifecycle';
|
||||||
|
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
|
||||||
|
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
|
||||||
|
import { AccessibleViewAction } from 'vs/workbench/contrib/accessibility/browser/accessibleViewActions';
|
||||||
|
|
||||||
|
export class InlineChatAccessibleViewContribution extends Disposable {
|
||||||
|
static ID: 'inlineChatAccessibleViewContribution';
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this._register(AccessibleViewAction.addImplementation(100, 'inlineChat', accessor => {
|
||||||
|
const accessibleViewService = accessor.get(IAccessibleViewService);
|
||||||
|
const codeEditorService = accessor.get(ICodeEditorService);
|
||||||
|
|
||||||
|
const editor = (codeEditorService.getActiveCodeEditor() || codeEditorService.getFocusedCodeEditor());
|
||||||
|
if (!editor) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const controller = InlineChatController.get(editor);
|
||||||
|
if (!controller) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const responseContent = controller?.getMessage();
|
||||||
|
if (!responseContent) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
accessibleViewService.show({
|
||||||
|
verbositySettingKey: AccessibilityVerbositySettingId.InlineChat,
|
||||||
|
provideContent(): string { return responseContent; },
|
||||||
|
onClose() {
|
||||||
|
controller.focus();
|
||||||
|
},
|
||||||
|
|
||||||
|
options: { type: AccessibleViewType.View }
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
}, ContextKeyExpr.or(CTX_INLINE_CHAT_FOCUSED, CTX_INLINE_CHAT_RESPONSE_FOCUSED)));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,15 +21,12 @@ import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/commo
|
|||||||
import { IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService';
|
import { IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService';
|
||||||
import { IUntitledTextResourceEditorInput } from 'vs/workbench/common/editor';
|
import { IUntitledTextResourceEditorInput } from 'vs/workbench/common/editor';
|
||||||
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
|
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
|
||||||
import { Range } from 'vs/editor/common/core/range';
|
|
||||||
import { Selection } from 'vs/editor/common/core/selection';
|
|
||||||
import { fromNow } from 'vs/base/common/date';
|
import { fromNow } from 'vs/base/common/date';
|
||||||
import { IInlineChatSessionService, Recording } from 'vs/workbench/contrib/inlineChat/browser/inlineChatSession';
|
import { IInlineChatSessionService, Recording } from 'vs/workbench/contrib/inlineChat/browser/inlineChatSession';
|
||||||
import { runAccessibilityHelpAction } from 'vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp';
|
import { runAccessibilityHelpAction } from 'vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp';
|
||||||
import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from 'vs/platform/accessibility/common/accessibility';
|
import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from 'vs/platform/accessibility/common/accessibility';
|
||||||
import { Disposable } from 'vs/base/common/lifecycle';
|
import { Disposable } from 'vs/base/common/lifecycle';
|
||||||
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
|
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
|
||||||
import { Position } from 'vs/editor/common/core/position';
|
|
||||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||||
import { AccessibilityHelpAction } from 'vs/workbench/contrib/accessibility/browser/accessibleViewActions';
|
import { AccessibilityHelpAction } from 'vs/workbench/contrib/accessibility/browser/accessibleViewActions';
|
||||||
|
|
||||||
@@ -52,23 +49,11 @@ export class StartSessionAction extends EditorAction2 {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private _isInteractivEditorOptions(options: any): options is InlineChatRunOptions {
|
|
||||||
const { initialSelection, initialRange, message, autoSend, position } = options;
|
|
||||||
if (
|
|
||||||
typeof message !== 'undefined' && typeof message !== 'string'
|
|
||||||
|| typeof autoSend !== 'undefined' && typeof autoSend !== 'boolean'
|
|
||||||
|| typeof initialRange !== 'undefined' && !Range.isIRange(initialRange)
|
|
||||||
|| typeof initialSelection !== 'undefined' && !Selection.isISelection(initialSelection)
|
|
||||||
|| typeof position !== 'undefined' && !Position.isIPosition(position)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
override runEditorCommand(_accessor: ServicesAccessor, editor: ICodeEditor, ..._args: any[]) {
|
override runEditorCommand(_accessor: ServicesAccessor, editor: ICodeEditor, ..._args: any[]) {
|
||||||
let options: InlineChatRunOptions | undefined;
|
let options: InlineChatRunOptions | undefined;
|
||||||
const arg = _args[0];
|
const arg = _args[0];
|
||||||
if (arg && this._isInteractivEditorOptions(arg)) {
|
if (arg && InlineChatRunOptions.isInteractiveEditorOptions(arg)) {
|
||||||
options = arg;
|
options = arg;
|
||||||
}
|
}
|
||||||
InlineChatController.get(editor)?.run(options);
|
InlineChatController.get(editor)?.run(options);
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import { Lazy } from 'vs/base/common/lazy';
|
|||||||
import { Progress } from 'vs/platform/progress/common/progress';
|
import { Progress } from 'vs/platform/progress/common/progress';
|
||||||
import { generateUuid } from 'vs/base/common/uuid';
|
import { generateUuid } from 'vs/base/common/uuid';
|
||||||
import { TextEdit } from 'vs/editor/common/languages';
|
import { TextEdit } from 'vs/editor/common/languages';
|
||||||
import { ISelection } from 'vs/editor/common/core/selection';
|
import { ISelection, Selection } from 'vs/editor/common/core/selection';
|
||||||
import { onUnexpectedError } from 'vs/base/common/errors';
|
import { onUnexpectedError } from 'vs/base/common/errors';
|
||||||
|
|
||||||
export const enum State {
|
export const enum State {
|
||||||
@@ -64,7 +64,7 @@ const enum Message {
|
|||||||
RERUN_INPUT = 1 << 6,
|
RERUN_INPUT = 1 << 6,
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface InlineChatRunOptions {
|
export abstract class InlineChatRunOptions {
|
||||||
initialSelection?: ISelection;
|
initialSelection?: ISelection;
|
||||||
initialRange?: IRange;
|
initialRange?: IRange;
|
||||||
message?: string;
|
message?: string;
|
||||||
@@ -72,6 +72,19 @@ export interface InlineChatRunOptions {
|
|||||||
existingSession?: Session;
|
existingSession?: Session;
|
||||||
isUnstashed?: boolean;
|
isUnstashed?: boolean;
|
||||||
position?: IPosition;
|
position?: IPosition;
|
||||||
|
|
||||||
|
static isInteractiveEditorOptions(options: any): options is InlineChatRunOptions {
|
||||||
|
const { initialSelection, initialRange, message, autoSend, position } = options;
|
||||||
|
if (
|
||||||
|
typeof message !== 'undefined' && typeof message !== 'string'
|
||||||
|
|| typeof autoSend !== 'undefined' && typeof autoSend !== 'boolean'
|
||||||
|
|| typeof initialRange !== 'undefined' && !Range.isIRange(initialRange)
|
||||||
|
|| typeof initialSelection !== 'undefined' && !Selection.isISelection(initialSelection)
|
||||||
|
|| typeof position !== 'undefined' && !Position.isIPosition(position)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class InlineChatController implements IEditorContribution {
|
export class InlineChatController implements IEditorContribution {
|
||||||
|
|||||||
@@ -177,10 +177,10 @@ export class InlineChatWidget {
|
|||||||
private readonly _previewCreateEditor: IdleValue<ICodeEditor>;
|
private readonly _previewCreateEditor: IdleValue<ICodeEditor>;
|
||||||
private readonly _previewCreateModel = this._store.add(new MutableDisposable());
|
private readonly _previewCreateModel = this._store.add(new MutableDisposable());
|
||||||
|
|
||||||
private readonly _onDidChangeHeight = new MicrotaskEmitter<void>();
|
private readonly _onDidChangeHeight = this._store.add(new MicrotaskEmitter<void>());
|
||||||
readonly onDidChangeHeight: Event<void> = Event.filter(this._onDidChangeHeight.event, _ => !this._isLayouting);
|
readonly onDidChangeHeight: Event<void> = Event.filter(this._onDidChangeHeight.event, _ => !this._isLayouting);
|
||||||
|
|
||||||
private readonly _onDidChangeInput = new Emitter<this>();
|
private readonly _onDidChangeInput = this._store.add(new Emitter<this>());
|
||||||
readonly onDidChangeInput: Event<this> = this._onDidChangeInput.event;
|
readonly onDidChangeInput: Event<this> = this._onDidChangeInput.event;
|
||||||
|
|
||||||
private _lastDim: Dimension | undefined;
|
private _lastDim: Dimension | undefined;
|
||||||
|
|||||||
Reference in New Issue
Block a user