Merge pull request #193787 from microsoft/joh/legal-snake

keep inlineChat.contribution purely registrations of stuff
This commit is contained in:
Johannes Rieken
2023-09-22 14:17:49 +02:00
committed by GitHub
5 changed files with 69 additions and 67 deletions

View File

@@ -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);

View File

@@ -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)));
}
}

View File

@@ -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);

View File

@@ -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 {

View File

@@ -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;