123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
- };
- var _a, _b, _c, _d, _e, _f, _g, _h;
- import { isStandalone } from '../../../base/browser/browser.js';
- import { alert } from '../../../base/browser/ui/aria/aria.js';
- import { createCancelablePromise, raceCancellation } from '../../../base/common/async.js';
- import { KeyChord } from '../../../base/common/keyCodes.js';
- import { isWeb } from '../../../base/common/platform.js';
- import { assertType } from '../../../base/common/types.js';
- import { URI } from '../../../base/common/uri.js';
- import { EditorStateCancellationTokenSource } from '../../browser/core/editorState.js';
- import { isCodeEditor } from '../../browser/editorBrowser.js';
- import { EditorAction, registerInstantiatedEditorAction } from '../../browser/editorExtensions.js';
- import { ICodeEditorService } from '../../browser/services/codeEditorService.js';
- import { EmbeddedCodeEditorWidget } from '../../browser/widget/embeddedCodeEditorWidget.js';
- import * as corePosition from '../../common/core/position.js';
- import { Range } from '../../common/core/range.js';
- import { EditorContextKeys } from '../../common/editorContextKeys.js';
- import { isLocationLink } from '../../common/modes.js';
- import { ReferencesController } from './peek/referencesController.js';
- import { ReferencesModel } from './referencesModel.js';
- import { ISymbolNavigationService } from './symbolNavigation.js';
- import { MessageController } from '../message/messageController.js';
- import { PeekContext } from '../peekView/peekView.js';
- import * as nls from '../../../nls.js';
- import { MenuId, MenuRegistry } from '../../../platform/actions/common/actions.js';
- import { CommandsRegistry, ICommandService } from '../../../platform/commands/common/commands.js';
- import { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';
- import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';
- import { INotificationService } from '../../../platform/notification/common/notification.js';
- import { IEditorProgressService } from '../../../platform/progress/common/progress.js';
- import { getDeclarationsAtPosition, getDefinitionsAtPosition, getImplementationsAtPosition, getReferencesAtPosition, getTypeDefinitionsAtPosition } from './goToSymbol.js';
- MenuRegistry.appendMenuItem(MenuId.EditorContext, {
- submenu: MenuId.EditorContextPeek,
- title: nls.localize('peek.submenu', "Peek"),
- group: 'navigation',
- order: 100
- });
- const _goToActionIds = new Set();
- function registerGoToAction(ctor) {
- const result = new ctor();
- registerInstantiatedEditorAction(result);
- _goToActionIds.add(result.id);
- return result;
- }
- class SymbolNavigationAction extends EditorAction {
- constructor(configuration, opts) {
- super(opts);
- this._configuration = configuration;
- }
- run(accessor, editor) {
- if (!editor.hasModel()) {
- return Promise.resolve(undefined);
- }
- const notificationService = accessor.get(INotificationService);
- const editorService = accessor.get(ICodeEditorService);
- const progressService = accessor.get(IEditorProgressService);
- const symbolNavService = accessor.get(ISymbolNavigationService);
- const model = editor.getModel();
- const pos = editor.getPosition();
- const cts = new EditorStateCancellationTokenSource(editor, 1 /* Value */ | 4 /* Position */);
- const promise = raceCancellation(this._getLocationModel(model, pos, cts.token), cts.token).then((references) => __awaiter(this, void 0, void 0, function* () {
- if (!references || cts.token.isCancellationRequested) {
- return;
- }
- alert(references.ariaMessage);
- let altAction;
- if (references.referenceAt(model.uri, pos)) {
- const altActionId = this._getAlternativeCommand(editor);
- if (altActionId !== this.id && _goToActionIds.has(altActionId)) {
- altAction = editor.getAction(altActionId);
- }
- }
- const referenceCount = references.references.length;
- if (referenceCount === 0) {
- // no result -> show message
- if (!this._configuration.muteMessage) {
- const info = model.getWordAtPosition(pos);
- MessageController.get(editor).showMessage(this._getNoResultFoundMessage(info), pos);
- }
- }
- else if (referenceCount === 1 && altAction) {
- // already at the only result, run alternative
- altAction.run();
- }
- else {
- // normal results handling
- return this._onResult(editorService, symbolNavService, editor, references);
- }
- }), (err) => {
- // report an error
- notificationService.error(err);
- }).finally(() => {
- cts.dispose();
- });
- progressService.showWhile(promise, 250);
- return promise;
- }
- _onResult(editorService, symbolNavService, editor, model) {
- return __awaiter(this, void 0, void 0, function* () {
- const gotoLocation = this._getGoToPreference(editor);
- if (!(editor instanceof EmbeddedCodeEditorWidget) && (this._configuration.openInPeek || (gotoLocation === 'peek' && model.references.length > 1))) {
- this._openInPeek(editor, model);
- }
- else {
- const next = model.firstReference();
- const peek = model.references.length > 1 && gotoLocation === 'gotoAndPeek';
- const targetEditor = yield this._openReference(editor, editorService, next, this._configuration.openToSide, !peek);
- if (peek && targetEditor) {
- this._openInPeek(targetEditor, model);
- }
- else {
- model.dispose();
- }
- // keep remaining locations around when using
- // 'goto'-mode
- if (gotoLocation === 'goto') {
- symbolNavService.put(next);
- }
- }
- });
- }
- _openReference(editor, editorService, reference, sideBySide, highlight) {
- return __awaiter(this, void 0, void 0, function* () {
- // range is the target-selection-range when we have one
- // and the fallback is the 'full' range
- let range = undefined;
- if (isLocationLink(reference)) {
- range = reference.targetSelectionRange;
- }
- if (!range) {
- range = reference.range;
- }
- if (!range) {
- return undefined;
- }
- const targetEditor = yield editorService.openCodeEditor({
- resource: reference.uri,
- options: {
- selection: Range.collapseToStart(range),
- selectionRevealType: 3 /* NearTopIfOutsideViewport */
- }
- }, editor, sideBySide);
- if (!targetEditor) {
- return undefined;
- }
- if (highlight) {
- const modelNow = targetEditor.getModel();
- const ids = targetEditor.deltaDecorations([], [{ range, options: { description: 'symbol-navigate-action-highlight', className: 'symbolHighlight' } }]);
- setTimeout(() => {
- if (targetEditor.getModel() === modelNow) {
- targetEditor.deltaDecorations(ids, []);
- }
- }, 350);
- }
- return targetEditor;
- });
- }
- _openInPeek(target, model) {
- let controller = ReferencesController.get(target);
- if (controller && target.hasModel()) {
- controller.toggleWidget(target.getSelection(), createCancelablePromise(_ => Promise.resolve(model)), this._configuration.openInPeek);
- }
- else {
- model.dispose();
- }
- }
- }
- //#region --- DEFINITION
- export class DefinitionAction extends SymbolNavigationAction {
- _getLocationModel(model, position, token) {
- return __awaiter(this, void 0, void 0, function* () {
- return new ReferencesModel(yield getDefinitionsAtPosition(model, position, token), nls.localize('def.title', 'Definitions'));
- });
- }
- _getNoResultFoundMessage(info) {
- return info && info.word
- ? nls.localize('noResultWord', "No definition found for '{0}'", info.word)
- : nls.localize('generic.noResults', "No definition found");
- }
- _getAlternativeCommand(editor) {
- return editor.getOption(50 /* gotoLocation */).alternativeDefinitionCommand;
- }
- _getGoToPreference(editor) {
- return editor.getOption(50 /* gotoLocation */).multipleDefinitions;
- }
- }
- const goToDefinitionKb = isWeb && !isStandalone
- ? 2048 /* CtrlCmd */ | 70 /* F12 */
- : 70 /* F12 */;
- registerGoToAction((_a = class GoToDefinitionAction extends DefinitionAction {
- constructor() {
- super({
- openToSide: false,
- openInPeek: false,
- muteMessage: false
- }, {
- id: GoToDefinitionAction.id,
- label: nls.localize('actions.goToDecl.label', "Go to Definition"),
- alias: 'Go to Definition',
- precondition: ContextKeyExpr.and(EditorContextKeys.hasDefinitionProvider, EditorContextKeys.isInWalkThroughSnippet.toNegated()),
- kbOpts: {
- kbExpr: EditorContextKeys.editorTextFocus,
- primary: goToDefinitionKb,
- weight: 100 /* EditorContrib */
- },
- contextMenuOpts: {
- group: 'navigation',
- order: 1.1
- }
- });
- CommandsRegistry.registerCommandAlias('editor.action.goToDeclaration', GoToDefinitionAction.id);
- }
- },
- _a.id = 'editor.action.revealDefinition',
- _a));
- registerGoToAction((_b = class OpenDefinitionToSideAction extends DefinitionAction {
- constructor() {
- super({
- openToSide: true,
- openInPeek: false,
- muteMessage: false
- }, {
- id: OpenDefinitionToSideAction.id,
- label: nls.localize('actions.goToDeclToSide.label', "Open Definition to the Side"),
- alias: 'Open Definition to the Side',
- precondition: ContextKeyExpr.and(EditorContextKeys.hasDefinitionProvider, EditorContextKeys.isInWalkThroughSnippet.toNegated()),
- kbOpts: {
- kbExpr: EditorContextKeys.editorTextFocus,
- primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KeyK */, goToDefinitionKb),
- weight: 100 /* EditorContrib */
- }
- });
- CommandsRegistry.registerCommandAlias('editor.action.openDeclarationToTheSide', OpenDefinitionToSideAction.id);
- }
- },
- _b.id = 'editor.action.revealDefinitionAside',
- _b));
- registerGoToAction((_c = class PeekDefinitionAction extends DefinitionAction {
- constructor() {
- super({
- openToSide: false,
- openInPeek: true,
- muteMessage: false
- }, {
- id: PeekDefinitionAction.id,
- label: nls.localize('actions.previewDecl.label', "Peek Definition"),
- alias: 'Peek Definition',
- precondition: ContextKeyExpr.and(EditorContextKeys.hasDefinitionProvider, PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),
- kbOpts: {
- kbExpr: EditorContextKeys.editorTextFocus,
- primary: 512 /* Alt */ | 70 /* F12 */,
- linux: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 68 /* F10 */ },
- weight: 100 /* EditorContrib */
- },
- contextMenuOpts: {
- menuId: MenuId.EditorContextPeek,
- group: 'peek',
- order: 2
- }
- });
- CommandsRegistry.registerCommandAlias('editor.action.previewDeclaration', PeekDefinitionAction.id);
- }
- },
- _c.id = 'editor.action.peekDefinition',
- _c));
- //#endregion
- //#region --- DECLARATION
- class DeclarationAction extends SymbolNavigationAction {
- _getLocationModel(model, position, token) {
- return __awaiter(this, void 0, void 0, function* () {
- return new ReferencesModel(yield getDeclarationsAtPosition(model, position, token), nls.localize('decl.title', 'Declarations'));
- });
- }
- _getNoResultFoundMessage(info) {
- return info && info.word
- ? nls.localize('decl.noResultWord', "No declaration found for '{0}'", info.word)
- : nls.localize('decl.generic.noResults', "No declaration found");
- }
- _getAlternativeCommand(editor) {
- return editor.getOption(50 /* gotoLocation */).alternativeDeclarationCommand;
- }
- _getGoToPreference(editor) {
- return editor.getOption(50 /* gotoLocation */).multipleDeclarations;
- }
- }
- registerGoToAction((_d = class GoToDeclarationAction extends DeclarationAction {
- constructor() {
- super({
- openToSide: false,
- openInPeek: false,
- muteMessage: false
- }, {
- id: GoToDeclarationAction.id,
- label: nls.localize('actions.goToDeclaration.label', "Go to Declaration"),
- alias: 'Go to Declaration',
- precondition: ContextKeyExpr.and(EditorContextKeys.hasDeclarationProvider, EditorContextKeys.isInWalkThroughSnippet.toNegated()),
- contextMenuOpts: {
- group: 'navigation',
- order: 1.3
- },
- });
- }
- _getNoResultFoundMessage(info) {
- return info && info.word
- ? nls.localize('decl.noResultWord', "No declaration found for '{0}'", info.word)
- : nls.localize('decl.generic.noResults', "No declaration found");
- }
- },
- _d.id = 'editor.action.revealDeclaration',
- _d));
- registerGoToAction(class PeekDeclarationAction extends DeclarationAction {
- constructor() {
- super({
- openToSide: false,
- openInPeek: true,
- muteMessage: false
- }, {
- id: 'editor.action.peekDeclaration',
- label: nls.localize('actions.peekDecl.label', "Peek Declaration"),
- alias: 'Peek Declaration',
- precondition: ContextKeyExpr.and(EditorContextKeys.hasDeclarationProvider, PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),
- contextMenuOpts: {
- menuId: MenuId.EditorContextPeek,
- group: 'peek',
- order: 3
- }
- });
- }
- });
- //#endregion
- //#region --- TYPE DEFINITION
- class TypeDefinitionAction extends SymbolNavigationAction {
- _getLocationModel(model, position, token) {
- return __awaiter(this, void 0, void 0, function* () {
- return new ReferencesModel(yield getTypeDefinitionsAtPosition(model, position, token), nls.localize('typedef.title', 'Type Definitions'));
- });
- }
- _getNoResultFoundMessage(info) {
- return info && info.word
- ? nls.localize('goToTypeDefinition.noResultWord', "No type definition found for '{0}'", info.word)
- : nls.localize('goToTypeDefinition.generic.noResults', "No type definition found");
- }
- _getAlternativeCommand(editor) {
- return editor.getOption(50 /* gotoLocation */).alternativeTypeDefinitionCommand;
- }
- _getGoToPreference(editor) {
- return editor.getOption(50 /* gotoLocation */).multipleTypeDefinitions;
- }
- }
- registerGoToAction((_e = class GoToTypeDefinitionAction extends TypeDefinitionAction {
- constructor() {
- super({
- openToSide: false,
- openInPeek: false,
- muteMessage: false
- }, {
- id: GoToTypeDefinitionAction.ID,
- label: nls.localize('actions.goToTypeDefinition.label', "Go to Type Definition"),
- alias: 'Go to Type Definition',
- precondition: ContextKeyExpr.and(EditorContextKeys.hasTypeDefinitionProvider, EditorContextKeys.isInWalkThroughSnippet.toNegated()),
- kbOpts: {
- kbExpr: EditorContextKeys.editorTextFocus,
- primary: 0,
- weight: 100 /* EditorContrib */
- },
- contextMenuOpts: {
- group: 'navigation',
- order: 1.4
- }
- });
- }
- },
- _e.ID = 'editor.action.goToTypeDefinition',
- _e));
- registerGoToAction((_f = class PeekTypeDefinitionAction extends TypeDefinitionAction {
- constructor() {
- super({
- openToSide: false,
- openInPeek: true,
- muteMessage: false
- }, {
- id: PeekTypeDefinitionAction.ID,
- label: nls.localize('actions.peekTypeDefinition.label', "Peek Type Definition"),
- alias: 'Peek Type Definition',
- precondition: ContextKeyExpr.and(EditorContextKeys.hasTypeDefinitionProvider, PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),
- contextMenuOpts: {
- menuId: MenuId.EditorContextPeek,
- group: 'peek',
- order: 4
- }
- });
- }
- },
- _f.ID = 'editor.action.peekTypeDefinition',
- _f));
- //#endregion
- //#region --- IMPLEMENTATION
- class ImplementationAction extends SymbolNavigationAction {
- _getLocationModel(model, position, token) {
- return __awaiter(this, void 0, void 0, function* () {
- return new ReferencesModel(yield getImplementationsAtPosition(model, position, token), nls.localize('impl.title', 'Implementations'));
- });
- }
- _getNoResultFoundMessage(info) {
- return info && info.word
- ? nls.localize('goToImplementation.noResultWord', "No implementation found for '{0}'", info.word)
- : nls.localize('goToImplementation.generic.noResults', "No implementation found");
- }
- _getAlternativeCommand(editor) {
- return editor.getOption(50 /* gotoLocation */).alternativeImplementationCommand;
- }
- _getGoToPreference(editor) {
- return editor.getOption(50 /* gotoLocation */).multipleImplementations;
- }
- }
- registerGoToAction((_g = class GoToImplementationAction extends ImplementationAction {
- constructor() {
- super({
- openToSide: false,
- openInPeek: false,
- muteMessage: false
- }, {
- id: GoToImplementationAction.ID,
- label: nls.localize('actions.goToImplementation.label', "Go to Implementations"),
- alias: 'Go to Implementations',
- precondition: ContextKeyExpr.and(EditorContextKeys.hasImplementationProvider, EditorContextKeys.isInWalkThroughSnippet.toNegated()),
- kbOpts: {
- kbExpr: EditorContextKeys.editorTextFocus,
- primary: 2048 /* CtrlCmd */ | 70 /* F12 */,
- weight: 100 /* EditorContrib */
- },
- contextMenuOpts: {
- group: 'navigation',
- order: 1.45
- }
- });
- }
- },
- _g.ID = 'editor.action.goToImplementation',
- _g));
- registerGoToAction((_h = class PeekImplementationAction extends ImplementationAction {
- constructor() {
- super({
- openToSide: false,
- openInPeek: true,
- muteMessage: false
- }, {
- id: PeekImplementationAction.ID,
- label: nls.localize('actions.peekImplementation.label', "Peek Implementations"),
- alias: 'Peek Implementations',
- precondition: ContextKeyExpr.and(EditorContextKeys.hasImplementationProvider, PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),
- kbOpts: {
- kbExpr: EditorContextKeys.editorTextFocus,
- primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 70 /* F12 */,
- weight: 100 /* EditorContrib */
- },
- contextMenuOpts: {
- menuId: MenuId.EditorContextPeek,
- group: 'peek',
- order: 5
- }
- });
- }
- },
- _h.ID = 'editor.action.peekImplementation',
- _h));
- //#endregion
- //#region --- REFERENCES
- class ReferencesAction extends SymbolNavigationAction {
- _getNoResultFoundMessage(info) {
- return info
- ? nls.localize('references.no', "No references found for '{0}'", info.word)
- : nls.localize('references.noGeneric', "No references found");
- }
- _getAlternativeCommand(editor) {
- return editor.getOption(50 /* gotoLocation */).alternativeReferenceCommand;
- }
- _getGoToPreference(editor) {
- return editor.getOption(50 /* gotoLocation */).multipleReferences;
- }
- }
- registerGoToAction(class GoToReferencesAction extends ReferencesAction {
- constructor() {
- super({
- openToSide: false,
- openInPeek: false,
- muteMessage: false
- }, {
- id: 'editor.action.goToReferences',
- label: nls.localize('goToReferences.label', "Go to References"),
- alias: 'Go to References',
- precondition: ContextKeyExpr.and(EditorContextKeys.hasReferenceProvider, PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),
- kbOpts: {
- kbExpr: EditorContextKeys.editorTextFocus,
- primary: 1024 /* Shift */ | 70 /* F12 */,
- weight: 100 /* EditorContrib */
- },
- contextMenuOpts: {
- group: 'navigation',
- order: 1.45
- }
- });
- }
- _getLocationModel(model, position, token) {
- return __awaiter(this, void 0, void 0, function* () {
- return new ReferencesModel(yield getReferencesAtPosition(model, position, true, token), nls.localize('ref.title', 'References'));
- });
- }
- });
- registerGoToAction(class PeekReferencesAction extends ReferencesAction {
- constructor() {
- super({
- openToSide: false,
- openInPeek: true,
- muteMessage: false
- }, {
- id: 'editor.action.referenceSearch.trigger',
- label: nls.localize('references.action.label', "Peek References"),
- alias: 'Peek References',
- precondition: ContextKeyExpr.and(EditorContextKeys.hasReferenceProvider, PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),
- contextMenuOpts: {
- menuId: MenuId.EditorContextPeek,
- group: 'peek',
- order: 6
- }
- });
- }
- _getLocationModel(model, position, token) {
- return __awaiter(this, void 0, void 0, function* () {
- return new ReferencesModel(yield getReferencesAtPosition(model, position, false, token), nls.localize('ref.title', 'References'));
- });
- }
- });
- //#endregion
- //#region --- GENERIC goto symbols command
- class GenericGoToLocationAction extends SymbolNavigationAction {
- constructor(config, _references, _gotoMultipleBehaviour) {
- super(config, {
- id: 'editor.action.goToLocation',
- label: nls.localize('label.generic', "Go to Any Symbol"),
- alias: 'Go to Any Symbol',
- precondition: ContextKeyExpr.and(PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),
- });
- this._references = _references;
- this._gotoMultipleBehaviour = _gotoMultipleBehaviour;
- }
- _getLocationModel(_model, _position, _token) {
- return __awaiter(this, void 0, void 0, function* () {
- return new ReferencesModel(this._references, nls.localize('generic.title', 'Locations'));
- });
- }
- _getNoResultFoundMessage(info) {
- return info && nls.localize('generic.noResult', "No results for '{0}'", info.word) || '';
- }
- _getGoToPreference(editor) {
- var _a;
- return (_a = this._gotoMultipleBehaviour) !== null && _a !== void 0 ? _a : editor.getOption(50 /* gotoLocation */).multipleReferences;
- }
- _getAlternativeCommand() { return ''; }
- }
- CommandsRegistry.registerCommand({
- id: 'editor.action.goToLocations',
- description: {
- description: 'Go to locations from a position in a file',
- args: [
- { name: 'uri', description: 'The text document in which to start', constraint: URI },
- { name: 'position', description: 'The position at which to start', constraint: corePosition.Position.isIPosition },
- { name: 'locations', description: 'An array of locations.', constraint: Array },
- { name: 'multiple', description: 'Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto' },
- { name: 'noResultsMessage', description: 'Human readable message that shows when locations is empty.' },
- ]
- },
- handler: (accessor, resource, position, references, multiple, noResultsMessage, openInPeek) => __awaiter(void 0, void 0, void 0, function* () {
- assertType(URI.isUri(resource));
- assertType(corePosition.Position.isIPosition(position));
- assertType(Array.isArray(references));
- assertType(typeof multiple === 'undefined' || typeof multiple === 'string');
- assertType(typeof openInPeek === 'undefined' || typeof openInPeek === 'boolean');
- const editorService = accessor.get(ICodeEditorService);
- const editor = yield editorService.openCodeEditor({ resource }, editorService.getFocusedCodeEditor());
- if (isCodeEditor(editor)) {
- editor.setPosition(position);
- editor.revealPositionInCenterIfOutsideViewport(position, 0 /* Smooth */);
- return editor.invokeWithinContext(accessor => {
- const command = new class extends GenericGoToLocationAction {
- _getNoResultFoundMessage(info) {
- return noResultsMessage || super._getNoResultFoundMessage(info);
- }
- }({
- muteMessage: !Boolean(noResultsMessage),
- openInPeek: Boolean(openInPeek),
- openToSide: false
- }, references, multiple);
- accessor.get(IInstantiationService).invokeFunction(command.run.bind(command), editor);
- });
- }
- })
- });
- CommandsRegistry.registerCommand({
- id: 'editor.action.peekLocations',
- description: {
- description: 'Peek locations from a position in a file',
- args: [
- { name: 'uri', description: 'The text document in which to start', constraint: URI },
- { name: 'position', description: 'The position at which to start', constraint: corePosition.Position.isIPosition },
- { name: 'locations', description: 'An array of locations.', constraint: Array },
- { name: 'multiple', description: 'Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto' },
- ]
- },
- handler: (accessor, resource, position, references, multiple) => __awaiter(void 0, void 0, void 0, function* () {
- accessor.get(ICommandService).executeCommand('editor.action.goToLocations', resource, position, references, multiple, undefined, true);
- })
- });
- //#endregion
- //#region --- REFERENCE search special commands
- CommandsRegistry.registerCommand({
- id: 'editor.action.findReferences',
- handler: (accessor, resource, position) => {
- assertType(URI.isUri(resource));
- assertType(corePosition.Position.isIPosition(position));
- const codeEditorService = accessor.get(ICodeEditorService);
- return codeEditorService.openCodeEditor({ resource }, codeEditorService.getFocusedCodeEditor()).then(control => {
- if (!isCodeEditor(control) || !control.hasModel()) {
- return undefined;
- }
- const controller = ReferencesController.get(control);
- if (!controller) {
- return undefined;
- }
- const references = createCancelablePromise(token => getReferencesAtPosition(control.getModel(), corePosition.Position.lift(position), false, token).then(references => new ReferencesModel(references, nls.localize('ref.title', 'References'))));
- const range = new Range(position.lineNumber, position.column, position.lineNumber, position.column);
- return Promise.resolve(controller.toggleWidget(range, references, false));
- });
- }
- });
- // use NEW command
- CommandsRegistry.registerCommandAlias('editor.action.showReferences', 'editor.action.peekLocations');
- //#endregion
- // -- unconditionally register goto-action
- MenuRegistry.appendMenuItems([
- {
- id: MenuId.MenubarGoMenu,
- item: {
- command: {
- id: 'editor.action.revealDefinition',
- title: nls.localize({ key: 'miGotoDefinition', comment: ['&& denotes a mnemonic'] }, "Go to &&Definition")
- },
- group: '4_symbol_nav',
- order: 2,
- },
- },
- {
- id: MenuId.MenubarGoMenu,
- item: {
- command: {
- id: 'editor.action.revealDeclaration',
- title: nls.localize({ key: 'miGotoDeclaration', comment: ['&& denotes a mnemonic'] }, "Go to &&Declaration")
- },
- group: '4_symbol_nav',
- order: 3,
- },
- },
- {
- id: MenuId.MenubarGoMenu,
- item: {
- command: {
- id: 'editor.action.goToTypeDefinition',
- title: nls.localize({ key: 'miGotoTypeDefinition', comment: ['&& denotes a mnemonic'] }, "Go to &&Type Definition")
- },
- group: '4_symbol_nav',
- order: 3,
- },
- },
- {
- id: MenuId.MenubarGoMenu,
- item: {
- command: {
- id: 'editor.action.goToImplementation',
- title: nls.localize({ key: 'miGotoImplementation', comment: ['&& denotes a mnemonic'] }, "Go to &&Implementations")
- },
- group: '4_symbol_nav',
- order: 4,
- },
- },
- {
- id: MenuId.MenubarGoMenu,
- item: {
- command: {
- id: 'editor.action.goToReferences',
- title: nls.localize({ key: 'miGotoReference', comment: ['&& denotes a mnemonic'] }, "Go to &&References")
- },
- group: '4_symbol_nav',
- order: 5,
- },
- },
- ]);
|