Skip to content

Commit 99c7626

Browse files
authored
Invalid context menu entries in PR comments box (microsoft#209961)
* Invalid context menu entries in PR comments box Fixes microsoft#208844 * 🤦‍♀️ fix test
1 parent 7b91c2d commit 99c7626

File tree

8 files changed

+39
-7
lines changed

8 files changed

+39
-7
lines changed

src/vs/editor/browser/config/editorConfiguration.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguratio
2121
import { AccessibilitySupport, IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
2222
import { getWindow, getWindowById } from 'vs/base/browser/dom';
2323
import { PixelRatio } from 'vs/base/browser/pixelRatio';
24+
import { MenuId } from 'vs/platform/actions/common/actions';
2425

2526
export interface IEditorConstructionOptions extends IEditorOptions {
2627
/**
@@ -43,6 +44,7 @@ export class EditorConfiguration extends Disposable implements IEditorConfigurat
4344
public readonly onDidChangeFast: Event<ConfigurationChangedEvent> = this._onDidChangeFast.event;
4445

4546
public readonly isSimpleWidget: boolean;
47+
public readonly contextMenuId: MenuId;
4648
private readonly _containerObserver: ElementSizeObserver;
4749

4850
private _isDominatedByLongLines: boolean = false;
@@ -68,12 +70,14 @@ export class EditorConfiguration extends Disposable implements IEditorConfigurat
6870

6971
constructor(
7072
isSimpleWidget: boolean,
73+
contextMenuId: MenuId,
7174
options: Readonly<IEditorConstructionOptions>,
7275
container: HTMLElement | null,
7376
@IAccessibilityService private readonly _accessibilityService: IAccessibilityService
7477
) {
7578
super();
7679
this.isSimpleWidget = isSimpleWidget;
80+
this.contextMenuId = contextMenuId;
7781
this._containerObserver = this._register(new ElementSizeObserver(container, options.dimension));
7882
this._targetWindowId = getWindow(container).vscodeWindowId;
7983

src/vs/editor/browser/editorBrowser.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { InjectedText } from 'vs/editor/common/modelLineProjectionData';
2222
import { IModelContentChangedEvent, IModelDecorationsChangedEvent, IModelLanguageChangedEvent, IModelLanguageConfigurationChangedEvent, IModelOptionsChangedEvent, IModelTokensChangedEvent } from 'vs/editor/common/textModelEvents';
2323
import { IEditorWhitespace, IViewModel } from 'vs/editor/common/viewModel';
2424
import { OverviewRulerZone } from 'vs/editor/common/viewModel/overviewZoneManager';
25+
import { MenuId } from 'vs/platform/actions/common/actions';
2526
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
2627
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
2728

@@ -571,6 +572,11 @@ export interface ICodeEditor extends editorCommon.IEditor {
571572
* @internal
572573
*/
573574
readonly isSimpleWidget: boolean;
575+
/**
576+
* The context menu ID that should be used to lookup context menu actions.
577+
* @internal
578+
*/
579+
readonly contextMenuId: MenuId;
574580
/**
575581
* The editor's scoped context key service.
576582
* @internal

src/vs/editor/browser/widget/codeEditor/codeEditorWidget.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import { ServiceCollection } from 'vs/platform/instantiation/common/serviceColle
5959
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
6060
import { editorErrorForeground, editorHintForeground, editorInfoForeground, editorWarningForeground } from 'vs/platform/theme/common/colorRegistry';
6161
import { IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
62+
import { MenuId } from 'vs/platform/actions/common/actions';
6263

6364
export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeEditor {
6465

@@ -190,6 +191,10 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
190191
return this._configuration.isSimpleWidget;
191192
}
192193

194+
public get contextMenuId(): MenuId {
195+
return this._configuration.contextMenuId;
196+
}
197+
193198
private readonly _telemetryData?: object;
194199

195200
private readonly _domElement: HTMLElement;
@@ -254,7 +259,9 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
254259
this._decorationTypeSubtypes = {};
255260
this._telemetryData = codeEditorWidgetOptions.telemetryData;
256261

257-
this._configuration = this._register(this._createConfiguration(codeEditorWidgetOptions.isSimpleWidget || false, options, accessibilityService));
262+
this._configuration = this._register(this._createConfiguration(codeEditorWidgetOptions.isSimpleWidget || false,
263+
codeEditorWidgetOptions.contextMenuId ?? (codeEditorWidgetOptions.isSimpleWidget ? MenuId.SimpleEditorContext : MenuId.EditorContext),
264+
options, accessibilityService));
258265
this._register(this._configuration.onDidChange((e) => {
259266
this._onDidChangeConfiguration.fire(e);
260267

@@ -362,8 +369,8 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
362369
this._modelData?.view.writeScreenReaderContent(reason);
363370
}
364371

365-
protected _createConfiguration(isSimpleWidget: boolean, options: Readonly<IEditorConstructionOptions>, accessibilityService: IAccessibilityService): EditorConfiguration {
366-
return new EditorConfiguration(isSimpleWidget, options, this._domElement, accessibilityService);
372+
protected _createConfiguration(isSimpleWidget: boolean, contextMenuId: MenuId, options: Readonly<IEditorConstructionOptions>, accessibilityService: IAccessibilityService): EditorConfiguration {
373+
return new EditorConfiguration(isSimpleWidget, contextMenuId, options, this._domElement, accessibilityService);
367374
}
368375

369376
public getId(): string {
@@ -1909,6 +1916,12 @@ export interface ICodeEditorWidgetOptions {
19091916
* Defaults to null.
19101917
*/
19111918
telemetryData?: object;
1919+
1920+
/**
1921+
* The ID of the context menu.
1922+
* Defaults to MenuId.SimpleEditorContext or MenuId.EditorContext depending on whether the widget is simple.
1923+
*/
1924+
contextMenuId?: MenuId;
19121925
}
19131926

19141927
class ModelData {

src/vs/editor/common/config/editorConfiguration.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,17 @@ import { Event } from 'vs/base/common/event';
77
import { IDisposable } from 'vs/base/common/lifecycle';
88
import { ConfigurationChangedEvent, IComputedEditorOptions, IEditorOptions } from 'vs/editor/common/config/editorOptions';
99
import { IDimension } from 'vs/editor/common/core/dimension';
10+
import { MenuId } from 'vs/platform/actions/common/actions';
1011

1112
export interface IEditorConfiguration extends IDisposable {
1213
/**
1314
* Is this a simple widget (not a real code editor)?
1415
*/
1516
readonly isSimpleWidget: boolean;
17+
/**
18+
* The context menu id for the editor.
19+
*/
20+
readonly contextMenuId: MenuId;
1621
/**
1722
* Computed editor options.
1823
*/

src/vs/editor/contrib/contextmenu/browser/contextmenu.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ export class ContextMenuController implements IEditorContribution {
148148

149149
// Find actions available for menu
150150
const menuActions = this._getMenuActions(this._editor.getModel(),
151-
this._editor.isSimpleWidget ? MenuId.SimpleEditorContext : MenuId.EditorContext);
151+
this._editor.contextMenuId);
152152

153153
// Show menu if we have actions to show
154154
if (menuActions.length > 0) {

src/vs/editor/test/browser/config/testConfiguration.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ import { BareFontInfo, FontInfo } from 'vs/editor/common/config/fontInfo';
99
import { TestCodeEditorCreationOptions } from 'vs/editor/test/browser/testCodeEditor';
1010
import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
1111
import { TestAccessibilityService } from 'vs/platform/accessibility/test/common/testAccessibilityService';
12+
import { MenuId } from 'vs/platform/actions/common/actions';
1213

1314
export class TestConfiguration extends EditorConfiguration {
1415

1516
constructor(opts: Readonly<TestCodeEditorCreationOptions>) {
16-
super(false, opts, null, new TestAccessibilityService());
17+
super(false, MenuId.EditorContext, opts, null, new TestAccessibilityService());
1718
}
1819

1920
protected override _readEnvConfiguration(): IEnvConfiguration {

src/vs/editor/test/browser/testCodeEditor.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { TestTextResourcePropertiesService } from 'vs/editor/test/common/service
3232
import { instantiateTextModel } from 'vs/editor/test/common/testTextModel';
3333
import { AccessibilitySupport, IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
3434
import { TestAccessibilityService } from 'vs/platform/accessibility/test/common/testAccessibilityService';
35+
import { MenuId } from 'vs/platform/actions/common/actions';
3536
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
3637
import { TestClipboardService } from 'vs/platform/clipboard/test/common/testClipboardService';
3738
import { ICommandService } from 'vs/platform/commands/common/commands';
@@ -68,7 +69,7 @@ export interface ITestCodeEditor extends IActiveCodeEditor {
6869
export class TestCodeEditor extends CodeEditorWidget implements ICodeEditor {
6970

7071
//#region testing overrides
71-
protected override _createConfiguration(isSimpleWidget: boolean, options: Readonly<TestCodeEditorCreationOptions>): EditorConfiguration {
72+
protected override _createConfiguration(isSimpleWidget: boolean, contextMenuId: MenuId, options: Readonly<TestCodeEditorCreationOptions>): EditorConfiguration {
7273
return new TestConfiguration(options);
7374
}
7475
protected override _createView(viewModel: ViewModel): [View, boolean] {

src/vs/workbench/contrib/comments/browser/simpleCommentEditor.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions
3636
import { LinkDetector } from 'vs/editor/contrib/links/browser/links';
3737
import { MessageController } from 'vs/editor/contrib/message/browser/messageController';
3838
import { SelectionClipboardContributionID } from 'vs/workbench/contrib/codeEditor/browser/selectionClipboard';
39+
import { MenuId } from 'vs/platform/actions/common/actions';
3940

4041
export const ctxCommentEditorFocused = new RawContextKey<boolean>('commentEditorFocused', false);
4142
export const MIN_EDITOR_HEIGHT = 5 * 18;
@@ -82,7 +83,8 @@ export class SimpleCommentEditor extends CodeEditorWidget {
8283
InlineCompletionsController.ID,
8384
CodeActionController.ID,
8485
])
85-
]
86+
],
87+
contextMenuId: MenuId.SimpleEditorContext
8688
};
8789

8890
super(domElement, options, codeEditorWidgetOptions, instantiationService, codeEditorService, commandService, scopedContextKeyService, themeService, notificationService, accessibilityService, languageConfigurationService, languageFeaturesService);

0 commit comments

Comments
 (0)