gotoSymbolQuickAccess.ts 3.0 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import { localize } from 'vs/nls';
import { IKeyMods } from 'vs/platform/quickinput/common/quickInput';
import { IEditor } from 'vs/editor/common/editorCommon';
import { IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService';
import { IRange } from 'vs/editor/common/core/range';
import { Registry } from 'vs/platform/registry/common/platform';
import { IQuickAccessRegistry, Extensions } from 'vs/platform/quickinput/common/quickAccess';
import { AbstractGotoSymbolQuickAccessProvider } from 'vs/editor/contrib/quickAccess/gotoSymbolQuickAccess';
14 15
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IWorkbenchEditorConfiguration } from 'vs/workbench/common/editor';
16 17 18

export class GotoSymbolQuickAccessProvider extends AbstractGotoSymbolQuickAccessProvider {

19
	protected readonly onDidActiveTextEditorControlChange = this.editorService.onDidActiveEditorChange;
20

21 22 23 24 25 26 27 28 29
	private readonly configuration = (() => {
		const editorConfig = this.configurationService.getValue<IWorkbenchEditorConfiguration>().workbench.editor;

		return {
			openEditorPinned: !editorConfig.enablePreviewFromQuickOpen,
			openSideBySideDirection: editorConfig.openSideBySideDirection
		};
	})();

30 31 32 33
	constructor(
		@IEditorService private readonly editorService: IEditorService,
		@IConfigurationService private readonly configurationService: IConfigurationService
	) {
34 35 36 37 38
		super({
			openSideBySideDirection: () => this.configuration.openSideBySideDirection
		});
	}

39
	protected get activeTextEditorControl() {
40 41 42
		return this.editorService.activeTextEditorControl;
	}

43
	protected gotoLocation(editor: IEditor, range: IRange, keyMods: IKeyMods, forceSideBySide?: boolean): void {
44 45

		// Check for sideBySide use
46
		if ((keyMods.ctrlCmd || forceSideBySide) && this.editorService.activeEditor) {
47 48
			this.editorService.openEditor(this.editorService.activeEditor, {
				selection: range,
49
				pinned: keyMods.alt || this.configuration.openEditorPinned
50
			}, SIDE_GROUP);
51 52 53 54
		}

		// Otherwise let parent handle it
		else {
55
			super.gotoLocation(editor, range, keyMods);
56 57 58 59 60 61 62 63 64
		}
	}
}

Registry.as<IQuickAccessRegistry>(Extensions.Quickaccess).registerQuickAccessProvider({
	ctor: GotoSymbolQuickAccessProvider,
	prefix: AbstractGotoSymbolQuickAccessProvider.PREFIX,
	placeholder: localize('gotoSymbolQuickAccessPlaceholder', "Type the name of a symbol to go to."),
	helpEntries: [
65 66
		{ description: localize('gotoSymbolQuickAccess', "Go to Symbol in Editor"), prefix: AbstractGotoSymbolQuickAccessProvider.PREFIX, needsEditor: true },
		{ description: localize('gotoSymbolByCategoryQuickAccess', "Go to Symbol in Editor by Category"), prefix: AbstractGotoSymbolQuickAccessProvider.PREFIX_BY_CATEGORY, needsEditor: true }
67 68
	]
});