| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /*---------------------------------------------------------------------------------------------
- * 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());
- });
- };
- import * as dom from '../../../../base/browser/dom.js';
- import { Action, Separator } from '../../../../base/common/actions.js';
- import { CancellationToken } from '../../../../base/common/cancellation.js';
- import { EditorExtensionsRegistry } from '../../../browser/editorExtensions.js';
- import { Range } from '../../../common/core/range.js';
- import { ITextModelService } from '../../../common/services/resolverService.js';
- import { DefinitionAction, SymbolNavigationAction, SymbolNavigationAnchor } from '../../gotoSymbol/browser/goToCommands.js';
- import { PeekContext } from '../../peekView/browser/peekView.js';
- import { isIMenuItem, MenuId, MenuRegistry } from '../../../../platform/actions/common/actions.js';
- import { ICommandService } from '../../../../platform/commands/common/commands.js';
- import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';
- import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js';
- import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';
- import { INotificationService, Severity } from '../../../../platform/notification/common/notification.js';
- export function showGoToContextMenu(accessor, editor, anchor, part) {
- var _a;
- return __awaiter(this, void 0, void 0, function* () {
- const resolverService = accessor.get(ITextModelService);
- const contextMenuService = accessor.get(IContextMenuService);
- const commandService = accessor.get(ICommandService);
- const instaService = accessor.get(IInstantiationService);
- const notificationService = accessor.get(INotificationService);
- yield part.item.resolve(CancellationToken.None);
- if (!part.part.location) {
- return;
- }
- const location = part.part.location;
- const menuActions = [];
- // from all registered (not active) context menu actions select those
- // that are a symbol navigation action
- const filter = new Set(MenuRegistry.getMenuItems(MenuId.EditorContext)
- .map(item => isIMenuItem(item) ? item.command.id : ''));
- for (const delegate of EditorExtensionsRegistry.getEditorActions()) {
- if (delegate instanceof SymbolNavigationAction && filter.has(delegate.id)) {
- menuActions.push(new Action(delegate.id, delegate.label, undefined, true, () => __awaiter(this, void 0, void 0, function* () {
- const ref = yield resolverService.createModelReference(location.uri);
- try {
- yield instaService.invokeFunction(delegate.run.bind(delegate), editor, new SymbolNavigationAnchor(ref.object.textEditorModel, Range.getStartPosition(location.range)));
- }
- finally {
- ref.dispose();
- }
- })));
- }
- }
- if (part.part.command) {
- const { command } = part.part;
- menuActions.push(new Separator());
- menuActions.push(new Action(command.id, command.title, undefined, true, () => __awaiter(this, void 0, void 0, function* () {
- var _b;
- try {
- yield commandService.executeCommand(command.id, ...((_b = command.arguments) !== null && _b !== void 0 ? _b : []));
- }
- catch (err) {
- notificationService.notify({
- severity: Severity.Error,
- source: part.item.provider.displayName,
- message: err
- });
- }
- })));
- }
- // show context menu
- const useShadowDOM = editor.getOption(117 /* EditorOption.useShadowDOM */);
- contextMenuService.showContextMenu({
- domForShadowRoot: useShadowDOM ? (_a = editor.getDomNode()) !== null && _a !== void 0 ? _a : undefined : undefined,
- getAnchor: () => {
- const box = dom.getDomNodePagePosition(anchor);
- return { x: box.left, y: box.top + box.height + 8 };
- },
- getActions: () => menuActions,
- onHide: () => {
- editor.focus();
- },
- autoSelectFirstItem: true,
- });
- });
- }
- export function goToDefinitionWithLocation(accessor, event, editor, location) {
- return __awaiter(this, void 0, void 0, function* () {
- const resolverService = accessor.get(ITextModelService);
- const ref = yield resolverService.createModelReference(location.uri);
- yield editor.invokeWithinContext((accessor) => __awaiter(this, void 0, void 0, function* () {
- const openToSide = event.hasSideBySideModifier;
- const contextKeyService = accessor.get(IContextKeyService);
- const isInPeek = PeekContext.inPeekEditor.getValue(contextKeyService);
- const canPeek = !openToSide && editor.getOption(80 /* EditorOption.definitionLinkOpensInPeek */) && !isInPeek;
- const action = new DefinitionAction({ openToSide, openInPeek: canPeek, muteMessage: true }, { alias: '', label: '', id: '', precondition: undefined });
- return action.run(accessor, editor, { model: ref.object.textEditorModel, position: Range.getStartPosition(location.range) });
- }));
- ref.dispose();
- });
- }
|