jiebi/CodeConvo huggingface dataset:
return; } <ins> this._set(nodes, false, browserEvent); } private _set(nodes: ITreeNode<T, any>[], silent: boolean, browserEvent?: UIEvent): void { </ins> this.nodes = [...nodes]; this.elements = undefined; this._nodeSet = undefined; <del> const that = this; this._onDidChange.fire({ get elements() { return that.get(); }, browserEvent }); </del> <ins> if (!silent) { const that = this; this._onDidChange.fire({ get elements() { return that.get(); }, browserEvent }); } </ins> } get(): T[] {
this.parent.removeAttribute('aria-label'); this.parent.title = this.getTooltip(); if (this.extension) { <del> this.parent.setAttribute('aria-label', localize('extension-arialabel', "{0}. {1} Press enter for extension details.", this.extension.displayName)); </del> <ins> this.parent.setAttribute('aria-label', localize('extension-arialabel', "{0}. Press enter for extension details.", this.extension.displayName)); </ins> } }
return; } <del> const extensionName = 'vscode-smoketest-check'; </del> await app.workbench.extensions.openExtensionsViewlet(); <del> await app.workbench.extensions.installExtension(extensionName); </del> <ins> await app.workbench.extensions.installExtension('michelkaporin.vscode-smoketest-check', 'vscode-smoketest-check'); </ins> await app.workbench.extensions.waitForExtensionsViewlet(); await app.workbench.quickopen.runCommand('Smoke Test Check');
await this.code.waitForElement(SEARCH_BOX); } <del> async searchForExtension(name: string): Promise<any> { </del> <ins> async searchForExtension(id: string): Promise<any> { </ins> await this.code.waitAndClick(SEARCH_BOX); await this.code.waitForActiveElement(SEARCH_BOX); <del> await this.code.waitForTypeInEditor(SEARCH_BOX, `name:"${name}"`); </del> <ins> await this.code.waitForTypeInEditor(SEARCH_BOX, `@id:${id}`); </ins> } <del> async installExtension(name: string): Promise<void> { await this.searchForExtension(name); </del> <ins> async installExtension(id: string, name: string): Promise<void> { await this.searchForExtension(id); </ins> const ariaLabel = `${name}. Press enter for extension details.`; await this.code.waitAndClick(`div.extensions-viewlet[id="workbench.view.extensions"] .monaco-list-row[aria-label="${ariaLabel}"] .extension li[class='action-item'] .extension-action.install`); await this.code.waitForElement(`.extension-editor .monaco-action-bar .action-item:not(.disabled) .extension-action.uninstall`);
return; } <del> const extensionName = 'German Language Pack for Visual Studio Code'; </del> await app.workbench.extensions.openExtensionsViewlet(); <del> await app.workbench.extensions.installExtension(extensionName); </del> <ins> await app.workbench.extensions.installExtension('ms-ceintl.vscode-language-pack-de', 'German Language Pack for Visual Studio Code'); </ins> await app.restart({ extraArgs: ['--locale=DE'] }); });
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IWindowService } from 'vs/platform/windows/common/windows'; <del> import Severity from 'vs/base/common/severity'; </del> import { URI } from 'vs/base/common/uri'; import { IExtension, ExtensionState, IExtensionsWorkbenchService, AutoUpdateConfigurationKey, AutoCheckUpdatesConfigurationKey } from 'vs/workbench/contrib/extensions/common/extensions'; import { IEditorService, SIDE_GROUP, ACTIVE_GROUP } from 'vs/workbench/services/editor/common/editorService';
const extension = result.firstPage[0]; return this.windowService.focusWindow().then(() => { <del> return this.open(extension).then(() => { this.notificationService.prompt( Severity.Info, nls.localize('installConfirmation', "Would you like to install the '{0}' extension?", extension.displayName, extension.publisher), [{ label: nls.localize('install', "Install"), run: () => this.install(extension).then(undefined, error => this.onError(error)) }], { sticky: true } ); }); </del> <ins> return this.open(extension); </ins> }); }); }).then(undefined, error => this.onError(error));
import { lstat, Stats } from 'fs'; import * as os from 'os'; import * as path from 'path'; <del> import { commands, Disposable, LineChange, MessageOptions, OutputChannel, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder } from 'vscode'; </del> <ins> import { Selection, commands, Disposable, LineChange, MessageOptions, OutputChannel, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder } from 'vscode'; </ins> import TelemetryReporter from 'vscode-extension-telemetry'; import * as nls from 'vscode-nls'; import { Branch, GitErrorCodes, Ref, RefType, Status } from './api/git';
} await this._revertChanges(textEditor, [...changes.slice(0, index), ...changes.slice(index + 1)]); <ins> const firstStagedLine = changes[index].modifiedStartLineNumber - 1; textEditor.selections = [new Selection(firstStagedLine, 0, firstStagedLine, 0)]; </ins> } @command('git.revertSelectedRanges', { diff: true })
<key>function</key> <dict> <key>begin</key> <del> <string>((?i:function|filter|configuration|workflow))s+((?:p{L}|d|_|-|.)+)</string> </del> <ins> <string>(?&lt;!S)(?i)(function|filter|configuration|workflow)s+(?:(global|local|script|private):)?((?:p{L}|d|_|-|.)+)</string> </ins> <key>beginCaptures</key> <dict> <key>0</key>
<key>2</key> <dict> <key>name</key> <del> <string>entity.name.function</string> </del> <ins> <string>storage.modifier.scope.powershell</string> </dict> <key>3</key> <dict> <key>name</key> <string>entity.name.function.powershell</string> </ins> </dict> </dict> <key>end</key>
.then(extensions => { for (const extension of extensions) { const requireReload = !(extension.local && this.extensionService.canAddExtension(toExtensionDescription(extension.local))); <del> const message = requireReload ? localize('InstallVSIXAction.successReload', "Please reload Visual Studio Code to complete installing the extension {0}.", extension.identifier.id) : localize('InstallVSIXAction.success', "Completed installing the extension {0}.", extension.identifier.id); </del> <ins> const message = requireReload ? localize('InstallVSIXAction.successReload', "Please reload Visual Studio Code to complete installing the extension {0}.", extension.displayName || extension.name) : localize('InstallVSIXAction.success', "Completed installing the extension {0}.", extension.displayName || extension.name); </ins> const actions = requireReload ? [{ label: localize('InstallVSIXAction.reloadNow', "Reload Now"), run: () => this.windowService.reloadWindow()
// loop through all variables occurrences in 'value' const replaced = value.replace(AbstractVariableResolverService.VARIABLE_REGEXP, (match: string, variable: string) => { <ins> // disallow attempted nesting, see #77289 if (variable.includes(AbstractVariableResolverService.VARIABLE_LHS)) { return match; } </ins> let resolvedValue = this.evaluateSingleVariable(match, variable, folderUri, commandValueMapping);
} }); <ins> test('disallows nested keys (#77289)', () => { assert.strictEqual(configurationResolverService!.resolve(workspace, '${env:key1} ${env:key1${env:key2}}'), 'Value for key1 ${env:key1${env:key2}}'); }); </ins> // test('substitute keys and values in object', () => { // 	const myObject = { // 		'${workspaceRootFolderName}': '${lineNumber}',
} } }); <ins> KeybindingsRegistry.registerCommandAndKeybindingRule({ id: 'list.focusParent', weight: KeybindingWeight.WorkbenchContrib, when: WorkbenchListFocusContextKey, primary: KeyCode.Shift | KeyCode.LeftArrow, handler: (accessor) => { const focused = accessor.get(IListService).lastFocusedList; // Tree only if (focused && !(focused instanceof List || focused instanceof PagedList)) { if (focused instanceof ObjectTree || focused instanceof DataTree || focused instanceof AsyncDataTree) { const tree = focused; const focusedElements = tree.getFocus(); if (focusedElements.length === 0) { return; } const focus = focusedElements[0]; const parent = tree.getParentElement(focus); if (parent) { const fakeKeyboardEvent = new KeyboardEvent('keydown'); tree.setFocus([parent], fakeKeyboardEvent); tree.reveal(parent); } } else { const tree = focused; tree.focusParent({ origin: 'keyboard' }); } } } }); </ins>  No newline at end of file
// If a single setting is being refreshed, it's ok to refresh now if that is not the focused setting if (key) { const focusedKey = focusedSetting.getAttribute(AbstractSettingRenderer.SETTING_KEY_ATTR); <del> /** * Update `list`s live if focused item is whole list or list item, * as they have a separate "submit edit" step built in before this */ if ( focusedKey === key && !DOM.hasClass(focusedSetting, 'setting-item-list') && !DOM.hasClass(focusedSetting, 'setting-item-contents') </del> <ins> if (focusedKey === key && // update `list`s live, as they have a separate "submit edit" step built in before this (focusedSetting.parentElement && !DOM.hasClass(focusedSetting.parentElement, 'setting-item-list')) </ins> ) { this.updateModifiedLabelForKey(key);
const onKeyDown = Event.chain(domEvent(this.view.getHTMLElement(), 'keydown')) .filter(e => !isInputElement(e.target as HTMLElement) || e.target === this.filterOnTypeDomNode) <del> .filter(e => e.key !== 'Dead') </del> <ins> .filter(e => e.key !== 'Dead' && !/^Media/.test(e.key)) </ins> .map(e => new StandardKeyboardEvent(e)) .filter(this.keyboardNavigationEventFilter || (() => true)) .filter(() => this.automaticKeyboardNavigation || this.triggered)
private async doRefresh(elements: ITreeItem[]): Promise<void> { if (this.tree) { this.refreshing = true; <del> await Promise.all(elements.map(element => this.tree.updateChildren(element, true))); elements.map(element => this.tree.rerender(element)); </del> <ins> const parents: Set<ITreeItem> = new Set<ITreeItem>(); elements.forEach(element => { if (element !== this.root) { const parent = this.tree.getParentElement(element); parents.add(parent); } else { parents.add(element); } }); await Promise.all(Array.from(parents.values()).map(element => this.tree.updateChildren(element, true))); </ins> this.refreshing = false; this.updateContentAreas(); if (this.focused) {
export function addDisposableNonBubblingMouseOutListener(node: Element, handler: (event: MouseEvent) => void): IDisposable { return addDisposableListener(node, 'mouseout', (e: MouseEvent) => { // Mouse out bubbles, so this is an attempt to ignore faux mouse outs coming from children elements <del> let toElement: Node | null = <Node>(e.relatedTarget || e.target); </del> <ins> let toElement: Node | null = <Node>(e.relatedTarget); </ins> while (toElement && toElement !== node) { toElement = toElement.parentNode; }
export function addDisposableNonBubblingPointerOutListener(node: Element, handler: (event: MouseEvent) => void): IDisposable { return addDisposableListener(node, 'pointerout', (e: MouseEvent) => { // Mouse out bubbles, so this is an attempt to ignore faux mouse outs coming from children elements <del> let toElement: Node | null = <Node>(e.relatedTarget || e.target); </del> <ins> let toElement: Node | null = <Node>(e.relatedTarget); </ins> while (toElement && toElement !== node) { toElement = toElement.parentNode; }
export function buildReplaceStringWithCasePreserved(matches: string[] | null, pattern: string): string { if (matches && (matches[0] !== '')) { <ins> const containsHyphens = validateSpecificSpecialCharacter(matches, pattern, '-'); const containsUnderscores = validateSpecificSpecialCharacter(matches, pattern, '_'); if (containsHyphens && !containsUnderscores) { return buildReplaceStringForSpecificSpecialCharacter(matches, pattern, '-'); } else if (!containsHyphens && containsUnderscores) { return buildReplaceStringForSpecificSpecialCharacter(matches, pattern, '_'); } </ins> if (matches[0].toUpperCase() === matches[0]) { return pattern.toUpperCase(); } else if (matches[0].toLowerCase() === matches[0]) { return pattern.toLowerCase(); } else if (strings.containsUppercaseCharacter(matches[0][0])) { <del> const containsHyphens = validateSpecificSpecialCharacter(matches, pattern, '-'); const containsUnderscores = validateSpecificSpecialCharacter(matches, pattern, '_'); if (containsHyphens && !containsUnderscores) { return buildReplaceStringForSpecificSpecialCharacter(matches, pattern, '-'); } else if (!containsHyphens && containsUnderscores) { return buildReplaceStringForSpecificSpecialCharacter(matches, pattern, '_'); } else { return pattern[0].toUpperCase() + pattern.substr(1); } </del> <ins> return pattern[0].toUpperCase() + pattern.substr(1); </ins> } else { // we don't understand its pattern yet. return pattern;
assert.equal(buildReplaceStringWithCasePreserved(actual, 'newfoo-newbar-newabc'), 'Newfoo-Newbar-Newabc'); actual = ['Foo-Bar-abc']; assert.equal(buildReplaceStringWithCasePreserved(actual, 'newfoo-newbar'), 'Newfoo-newbar'); <ins> actual = ['foo-Bar']; assert.equal(buildReplaceStringWithCasePreserved(actual, 'newfoo-newbar'), 'newfoo-Newbar'); actual = ['foo-BAR']; assert.equal(buildReplaceStringWithCasePreserved(actual, 'newfoo-newbar'), 'newfoo-NEWBAR'); </ins> actual = ['Foo_Bar']; assert.equal(buildReplaceStringWithCasePreserved(actual, 'newfoo_newbar'), 'Newfoo_Newbar');
assert.equal(buildReplaceStringWithCasePreserved(actual, 'newfoo_newbar'), 'Newfoo_newbar'); actual = ['Foo_Bar-abc']; assert.equal(buildReplaceStringWithCasePreserved(actual, 'newfoo_newbar-abc'), 'Newfoo_newbar-abc'); <ins> actual = ['foo_Bar']; assert.equal(buildReplaceStringWithCasePreserved(actual, 'newfoo_newbar'), 'newfoo_Newbar'); actual = ['Foo_BAR']; assert.equal(buildReplaceStringWithCasePreserved(actual, 'newfoo_newbar'), 'Newfoo_NEWBAR'); </ins> }); test('preserve case', () => {
actual = replacePattern.buildReplaceString(['Foo-Bar-abc'], true); assert.equal(actual, 'Newfoo-newbar'); <ins> replacePattern = parseReplaceString('newfoo-newbar'); actual = replacePattern.buildReplaceString(['foo-Bar'], true); assert.equal(actual, 'newfoo-Newbar'); replacePattern = parseReplaceString('newfoo-newbar'); actual = replacePattern.buildReplaceString(['foo-BAR'], true); assert.equal(actual, 'newfoo-NEWBAR'); </ins> replacePattern = parseReplaceString('newfoo_newbar'); actual = replacePattern.buildReplaceString(['Foo_Bar'], true); assert.equal(actual, 'Newfoo_Newbar');
replacePattern = parseReplaceString('newfoo_newbar-abc'); actual = replacePattern.buildReplaceString(['Foo_Bar-abc'], true); assert.equal(actual, 'Newfoo_newbar-abc'); <ins> replacePattern = parseReplaceString('newfoo_newbar'); actual = replacePattern.buildReplaceString(['foo_Bar'], true); assert.equal(actual, 'newfoo_Newbar'); replacePattern = parseReplaceString('newfoo_newbar'); actual = replacePattern.buildReplaceString(['foo_BAR'], true); assert.equal(actual, 'newfoo_NEWBAR'); </ins> }); });
const extensionPacks: ExtensionSuggestion[] = [ { name: localize('welcomePage.javaScript', "JavaScript"), id: 'dbaeumer.vscode-eslint' }, <del> { name: localize('welcomePage.typeScript', "TypeScript"), id: 'ms-vscode.vscode-typescript-tslint-plugin' }, </del> { name: localize('welcomePage.python', "Python"), id: 'ms-python.python' }, // { name: localize('welcomePage.go', "Go"), id: 'lukehoban.go' }, { name: localize('welcomePage.php', "PHP"), id: 'felixfbecker.php-pack' },
if (item.isDisposed) { return this.onSelectResource(resource, reveal, retry + 1); } <del> this.tree.reveal(item, 0.5); </del> <ins> // Don't scroll to the item if it's already visible if (this.tree.getRelativeTop(item) === null) { this.tree.reveal(item, 0.5); } </ins> } this.tree.setFocus([item]);
"config.scanRepositories": "List of paths to search for git repositories in.", "config.showProgress": "Controls whether git actions should show progress.", "config.rebaseWhenSync": "Force git to use rebase when running the sync command.", <del> "config.confirmEmptyCommits": "Always confirm the creation of empty commits.", </del> <ins> "config.confirmEmptyCommits": "Always confirm the creation of empty commits for the 'Git: Commit Empty' command.", </ins> "config.fetchOnPull": "Fetch all branches when pulling or just the current one.", "config.pullTags": "Fetch all tags when pulling.", "config.autoStash": "Stash any changes before pulling and restore them after successful pull.",
"url": "https://schemastore.azurewebsites.net/schemas/json/babelrc.json" }, { <ins> "fileMatch": "babel.config.json", "url": "https://schemastore.azurewebsites.net/schemas/json/babelrc.json" }, { </ins> "fileMatch": "jsconfig.json", "url": "https://schemastore.azurewebsites.net/schemas/json/jsconfig.json" },
return Promise.all(promises); }); <ins> this._currentResolveCodeLensSymbolsPromise = resolvePromise; </ins> this._currentResolveCodeLensSymbolsPromise.then(() => { if (this._currentCodeLensModel) { // update the cached state with new resolved items this._codeLensCache.put(model, this._currentCodeLensModel); } this._oldCodeLensModels.clear(); // dispose old models once we have updated the UI with the current model <del> this._currentResolveCodeLensSymbolsPromise = undefined; </del> <ins> if (resolvePromise === this._currentResolveCodeLensSymbolsPromise) { this._currentResolveCodeLensSymbolsPromise = undefined; } </ins> }, err => { onUnexpectedError(err); // can also be cancellation! <del> this._currentResolveCodeLensSymbolsPromise = undefined; </del> <ins> if (resolvePromise === this._currentResolveCodeLensSymbolsPromise) { this._currentResolveCodeLensSymbolsPromise = undefined; } </ins> }); } }
} <del> export function findValidPasteFileTarget(explorerService: IExplorerService, targetFolder: ExplorerItem, fileToPaste: { resource: URI; isDirectory?: boolean; allowOverwrite: boolean }, incrementalNaming: 'simple' | 'smart'): URI { </del> <ins> export function findValidPasteFileTarget(explorerService: IExplorerService, targetFolder: ExplorerItem, fileToPaste: { resource: URI; isDirectory?: boolean; allowOverwrite: boolean }, incrementalNaming: 'simple' | 'smart' | 'disabled'): URI { </ins> let name = resources.basenameOrAuthority(fileToPaste.resource); let candidate = resources.joinPath(targetFolder.resource, name);
target = element.isDirectory ? element : element.parent!; } <del> const incrementalNaming = configurationService.getValue<IFilesConfiguration>().explorer.incrementalNaming; const targetFile = findValidPasteFileTarget(explorerService, target, { resource: fileToPaste, isDirectory: fileToPasteStat.isDirectory, allowOverwrite: pasteShouldMove }, incrementalNaming); </del> <ins> const targetFile = findValidPasteFileTarget(explorerService, target, { resource: fileToPaste, isDirectory: fileToPasteStat.isDirectory, allowOverwrite: pasteShouldMove || incrementalNaming === 'disabled' }, incrementalNaming); </ins> return { source: fileToPaste, target: targetFile }; }));
}; await explorerService.applyBulkEdit(resourceFileEdits, options); } else { <del> const resourceFileEdits = sourceTargetPairs.map(pair => new ResourceFileEdit(pair.source, pair.target, { copy: true })); </del> <ins> const resourceFileEdits = sourceTargetPairs.map(pair => new ResourceFileEdit(pair.source, pair.target, { copy: true, overwrite: incrementalNaming === 'disabled' })); </ins> const undoLevel = configurationService.getValue<IFilesConfiguration>().explorer.confirmUndo; const options = { confirmBeforeUndo: undoLevel === UndoConfirmLevel.Default || undoLevel === UndoConfirmLevel.Verbose,
}, 'explorer.incrementalNaming': { 'type': 'string', <del> enum: ['simple', 'smart'], </del> <ins> enum: ['simple', 'smart', 'disabled'], </ins> enumDescriptions: [ nls.localize('simple', "Appends the word "copy" at the end of the duplicated name potentially followed by a number"), <del> nls.localize('smart', "Adds a number at the end of the duplicated name. If some number is already part of the name, tries to increase that number") </del> <ins> nls.localize('smart', "Adds a number at the end of the duplicated name. If some number is already part of the name, tries to increase that number"), nls.localize('disabled', "Disables incremental naming. If two files with the same name exist you will be prompted to overwrite the existing file") </ins> ], description: nls.localize('explorer.incrementalNaming', "Controls what naming strategy to use when a giving a new name to a duplicated explorer item on paste."), default: 'simple'
], "folding": { "markers": { <del> "start": "^=pods*$", "end": "^=cuts*$" </del> <ins> "start": "^(?:(?:=pods*$)|(?:s*#regionb))", "end": "^(?:(?:=cuts*$)|(?:s*#endregionb))" </ins> } } }  No newline at end of file
import { URI } from 'vs/base/common/uri'; import 'vs/css!./media/breadcrumbscontrol'; import { OutlineElement, OutlineModel, TreeElement } from 'vs/editor/contrib/documentSymbols/outlineModel'; <del> import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; </del> <ins> import { IConfigurationService, IConfigurationOverrides } from 'vs/platform/configuration/common/configuration'; </ins> import { FileKind, IFileService, IFileStat } from 'vs/platform/files/common/files'; import { IConstructorSignature1, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { WorkbenchDataTree, WorkbenchAsyncDataTree } from 'vs/platform/list/browser/listService';
collapseByDefault: true, expandOnlyOnTwistieClick: true, multipleSelectionSupport: false, <del> sorter: new OutlineItemComparator(this._getOutlineItemCompareType()), </del> <ins> sorter: this._outlineComparator, </ins> identityProvider: new OutlineIdentityProvider(), keyboardNavigationLabelProvider: new OutlineNavigationLabelProvider(), filter: this._instantiationService.createInstance(OutlineFilter, 'breadcrumbs')
const tree = this._tree as WorkbenchDataTree<OutlineModel, any, FuzzyScore>; tree.setInput(model); <ins> const textModel = model.textModel; const overrideConfiguration = { resource: textModel.uri, overrideIdentifier: textModel.getLanguageIdentifier().language }; this._outlineComparator.type = this._getOutlineItemCompareType(overrideConfiguration); </ins> if (element !== model) { tree.reveal(element, 0.5); tree.setFocus([element], this._fakeEvent);
} } <del> private _getOutlineItemCompareType(): OutlineSortOrder { switch (this._symbolSortOrder.getValue()) { </del> <ins> private _getOutlineItemCompareType(overrideConfiguration?: IConfigurationOverrides): OutlineSortOrder { switch (this._symbolSortOrder.getValue(overrideConfiguration)) { </ins> case 'name': return OutlineSortOrder.ByName; case 'type':
this.focus(); } <del> getContextMenuActions(): IAction[] { </del> <ins> getContextMenuActions(viewDescriptor?: IViewDescriptor): IAction[] { </ins> const result: IAction[] = []; <ins> if (viewDescriptor) { result.push(<IAction>{ id: `${viewDescriptor.id}.removeView`, label: localize('hideView', "Hide"), enabled: viewDescriptor.canToggleVisibility, run: () => this.toggleViewVisibility(viewDescriptor.id) }); } </ins> const viewToggleActions = this.viewsModel.viewDescriptors.map(viewDescriptor => (<IAction>{ id: `${viewDescriptor.id}.toggleVisibility`, label: viewDescriptor.name,
run: () => this.toggleViewVisibility(viewDescriptor.id) })); <ins> if (result.length && viewToggleActions.length) { result.push(new Separator()); } </ins> result.push(...viewToggleActions); const parentActions = this.getViewletContextMenuActions(); <del> if (viewToggleActions.length && parentActions.length) { </del> <ins> if (result.length && parentActions.length) { </ins> result.push(new Separator()); } result.push(...parentActions); return result; }
event.stopPropagation(); event.preventDefault(); <del> const actions: IAction[] = []; actions.push(<IAction>{ id: `${viewDescriptor.id}.removeView`, label: localize('hideView', "Hide"), enabled: viewDescriptor.canToggleVisibility, run: () => this.toggleViewVisibility(viewDescriptor.id) }); const otherActions = this.getContextMenuActions(); if (otherActions.length) { actions.push(...[new Separator(), ...otherActions]); } </del> <ins> const actions: IAction[] = this.getContextMenuActions(viewDescriptor); </ins> let anchor: { x: number, y: number } = { x: event.posx, y: event.posy }; this.contextMenuService.showContextMenu({