From 564cb5b82b86bd78fc8ba970cee9f3f681013937 Mon Sep 17 00:00:00 2001 From: Gustavo Cassel Date: Wed, 5 Feb 2020 19:50:02 -0300 Subject: [PATCH] Fixed bug where one could open 'peek' inside 'peek' on definition link --- .../gotoSymbol/link/goToDefinitionAtPosition.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition.ts b/src/vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition.ts index 64ae38189a0..a2ac8275f37 100644 --- a/src/vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition.ts +++ b/src/vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition.ts @@ -28,6 +28,9 @@ import { Position } from 'vs/editor/common/core/position'; import { withNullAsUndefined } from 'vs/base/common/types'; import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; +import { PeekContext } from 'vs/editor/contrib/peekView/peekView'; +import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; export class GotoDefinitionAtPositionEditorContribution implements IEditorContribution { @@ -335,9 +338,17 @@ export class GotoDefinitionAtPositionEditorContribution implements IEditorContri private gotoDefinition(position: Position, openToSide: boolean): Promise { this.editor.setPosition(position); - const openInPeek = this.editor.getOption(EditorOption.definitionLinkOpensInPeek); - const action = new DefinitionAction({ openToSide, openInPeek: openInPeek, muteMessage: true }, { alias: '', label: '', id: '', precondition: undefined }); - return this.editor.invokeWithinContext(accessor => action.run(accessor, this.editor)); + const definitionLinkOpensInPeek = this.editor.getOption(EditorOption.definitionLinkOpensInPeek); + return this.editor.invokeWithinContext((accessor) => { + const canPeek = definitionLinkOpensInPeek && !this.isInPeekEditor(accessor); + const action = new DefinitionAction({ openToSide, openInPeek: canPeek, muteMessage: true }, { alias: '', label: '', id: '', precondition: undefined }); + return action.run(accessor, this.editor); + }); + } + + private isInPeekEditor(accessor: ServicesAccessor): boolean | undefined { + const contextKeyService = accessor.get(IContextKeyService); + return PeekContext.inPeekEditor.getValue(contextKeyService); } public dispose(): void {