mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-20 02:08:47 +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 { InlineChatController } from 'vs/workbench/contrib/inlineChat/browser/inlineChatController';
|
||||
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 { InlineChatServiceImpl } from 'vs/workbench/contrib/inlineChat/common/inlineChatServiceImpl';
|
||||
import { IInlineChatSessionService, InlineChatSessionService } from 'vs/workbench/contrib/inlineChat/browser/inlineChatSession';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle';
|
||||
import { InlineChatNotebookContribution } from 'vs/workbench/contrib/inlineChat/browser/inlineChatNotebook';
|
||||
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 { 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';
|
||||
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
|
||||
import { InlineChatAccessibleViewContribution } from './inlineChatAccessibleView';
|
||||
|
||||
registerSingleton(IInlineChatService, InlineChatServiceImpl, InstantiationType.Delayed);
|
||||
registerSingleton(IInlineChatSessionService, InlineChatSessionService, InstantiationType.Delayed);
|
||||
@@ -54,44 +49,6 @@ registerAction2(InlineChatActions.ApplyPreviewEdits);
|
||||
|
||||
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);
|
||||
workbenchContributionsRegistry.registerWorkbenchContribution(InlineChatNotebookContribution, LifecyclePhase.Restored);
|
||||
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 { IUntitledTextResourceEditorInput } from 'vs/workbench/common/editor';
|
||||
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 { IInlineChatSessionService, Recording } from 'vs/workbench/contrib/inlineChat/browser/inlineChatSession';
|
||||
import { runAccessibilityHelpAction } from 'vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp';
|
||||
import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
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 { 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[]) {
|
||||
let options: InlineChatRunOptions | undefined;
|
||||
const arg = _args[0];
|
||||
if (arg && this._isInteractivEditorOptions(arg)) {
|
||||
if (arg && InlineChatRunOptions.isInteractiveEditorOptions(arg)) {
|
||||
options = arg;
|
||||
}
|
||||
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 { generateUuid } from 'vs/base/common/uuid';
|
||||
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';
|
||||
|
||||
export const enum State {
|
||||
@@ -64,7 +64,7 @@ const enum Message {
|
||||
RERUN_INPUT = 1 << 6,
|
||||
}
|
||||
|
||||
export interface InlineChatRunOptions {
|
||||
export abstract class InlineChatRunOptions {
|
||||
initialSelection?: ISelection;
|
||||
initialRange?: IRange;
|
||||
message?: string;
|
||||
@@ -72,6 +72,19 @@ export interface InlineChatRunOptions {
|
||||
existingSession?: Session;
|
||||
isUnstashed?: boolean;
|
||||
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 {
|
||||
|
||||
@@ -177,10 +177,10 @@ export class InlineChatWidget {
|
||||
private readonly _previewCreateEditor: IdleValue<ICodeEditor>;
|
||||
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);
|
||||
|
||||
private readonly _onDidChangeInput = new Emitter<this>();
|
||||
private readonly _onDidChangeInput = this._store.add(new Emitter<this>());
|
||||
readonly onDidChangeInput: Event<this> = this._onDidChangeInput.event;
|
||||
|
||||
private _lastDim: Dimension | undefined;
|
||||
|
||||
Reference in New Issue
Block a user