From dc9bdc2fc7b9d2a275566b2a51f133cb6f520da6 Mon Sep 17 00:00:00 2001 From: stoyannk Date: Sun, 28 Mar 2021 17:19:37 +0200 Subject: [PATCH 001/115] Fixed wrong variable name shadowing that caused Profiles for extensions not to appear. --- .../extensions/browser/abstractRuntimeExtensionsEditor.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.ts b/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.ts index feae800049d..2d976c8df18 100644 --- a/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.ts +++ b/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.ts @@ -137,7 +137,7 @@ export abstract class AbstractRuntimeExtensionsEditor extends EditorPane { for (let i = 0, len = extensionsDescriptions.length; i < len; i++) { const extensionDescription = extensionsDescriptions[i]; - let profileInfo: IExtensionProfileInformation | null = null; + let extProfileInfo: IExtensionProfileInformation | null = null; if (profileInfo) { let extensionSegments = segments[ExtensionIdentifier.toKey(extensionDescription.identifier)] || []; let extensionTotalTime = 0; @@ -146,7 +146,7 @@ export abstract class AbstractRuntimeExtensionsEditor extends EditorPane { const endTime = extensionSegments[2 * j + 1]; extensionTotalTime += (endTime - startTime); } - profileInfo = { + extProfileInfo = { segments: extensionSegments, totalTime: extensionTotalTime }; @@ -157,7 +157,7 @@ export abstract class AbstractRuntimeExtensionsEditor extends EditorPane { description: extensionDescription, marketplaceInfo: marketplaceMap[ExtensionIdentifier.toKey(extensionDescription.identifier)], status: statusMap[extensionDescription.identifier.value], - profileInfo: profileInfo || undefined, + profileInfo: extProfileInfo || undefined, unresponsiveProfile: this._getUnresponsiveProfile(extensionDescription.identifier) }; } From 3edb33fc0c3c0c79c54576c589cf81fb8bc9d64d Mon Sep 17 00:00:00 2001 From: meganrogge Date: Sun, 4 Apr 2021 20:32:49 -0700 Subject: [PATCH 002/115] push terminalTabsWidget --- .../terminal/browser/terminalTabsWidget.ts | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts new file mode 100644 index 00000000000..50620869579 --- /dev/null +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -0,0 +1,93 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { TerminalTab } from 'vs/workbench/contrib/terminal/browser/terminalTab'; +import { IListService, WorkbenchObjectTree } from 'vs/platform/list/browser/listService'; +import { ITreeElement, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; +import { DefaultStyleController, IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget'; +import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { IThemeService } from 'vs/platform/theme/common/themeService'; +import { IIdentityProvider, IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; +import { ITerminalService, ITerminalTab } from 'vs/workbench/contrib/terminal/browser/terminal'; +import { localize } from 'vs/nls'; +import * as DOM from 'vs/base/browser/dom'; + +class TerminalTabsDelegate implements IListVirtualDelegate { + getHeight(element: any): number { + return 24; + } + getTemplateId(element: any): string { + return 'terminal.tabs'; + } +} +class TerminalTabsIdentityProvider implements IIdentityProvider { + constructor() { + } + getId(element: TerminalTab): { toString(): string; } { + // to do - fix this won't work + return element ? element?.terminalInstances.length > 1 ? `Terminals (${element?.terminalInstances.length})` : element?.terminalInstances[0].title : ''; + } + +} +class TerminalTabsAccessibilityProvider implements IListAccessibilityProvider { + getAriaLabel(tab: TerminalTab) { + return tab ? tab?.terminalInstances.length > 1 ? `Terminals (${tab?.terminalInstances.length})` : tab?.terminalInstances[0].title : ''; + } + + getWidgetAriaLabel() { + return localize('terminalTabs', "TerminalTabs"); + } +} +export class TerminalTabsWidget extends WorkbenchObjectTree { + constructor( + container: HTMLElement, + renderers: ITreeRenderer[], + @IContextKeyService contextKeyService: IContextKeyService, + @IListService listService: IListService, + @IThemeService themeService: IThemeService, + @IConfigurationService configurationService: IConfigurationService, + @IKeybindingService keybindingService: IKeybindingService, + @IAccessibilityService accessibilityService: IAccessibilityService, + @ITerminalService terminalService: ITerminalService + ) { + super('TerminalTabsTree', container, + new TerminalTabsDelegate(), + renderers, + { + horizontalScrolling: false, + supportDynamicHeights: true, + identityProvider: new TerminalTabsIdentityProvider(), + accessibilityProvider: new TerminalTabsAccessibilityProvider(), + styleController: id => new DefaultStyleController(DOM.createStyleSheet(container), id), + filter: undefined, + smoothScrolling: configurationService.getValue('workbench.list.smoothScrolling'), + multipleSelectionSupport: false, + }, + contextKeyService, + listService, + themeService, + configurationService, + keybindingService, + accessibilityService, + ); + this.setChildren(null, createTerminalTabsIterator(terminalService.terminalTabs)); + } +} + +function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable> { + return tabs.map(tab => { + const hasChildren = tab.terminalInstances.length > 1; + return { + element: tab, + collapsed: true, + collapsible: hasChildren, + // children: hasChildren ? tab.terminalInstances : undefined // TODO + children: undefined + }; + }); +} From 027f62931073d7870b4f5bd16d730ad00102778f Mon Sep 17 00:00:00 2001 From: meganrogge Date: Sun, 4 Apr 2021 20:47:46 -0700 Subject: [PATCH 003/115] add to terminal view --- .../terminal/browser/terminalTabsWidget.ts | 35 +++++++++++++++++-- .../contrib/terminal/browser/terminalView.ts | 7 +++- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 50620869579..5ecd829181a 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -5,7 +5,7 @@ import { TerminalTab } from 'vs/workbench/contrib/terminal/browser/terminalTab'; import { IListService, WorkbenchObjectTree } from 'vs/platform/list/browser/listService'; -import { ITreeElement, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; +import { ITreeElement, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; import { DefaultStyleController, IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget'; import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; @@ -17,6 +17,9 @@ import { ITerminalService, ITerminalTab } from 'vs/workbench/contrib/terminal/br import { localize } from 'vs/nls'; import * as DOM from 'vs/base/browser/dom'; + +const $ = DOM.$; + class TerminalTabsDelegate implements IListVirtualDelegate { getHeight(element: any): number { return 24; @@ -46,7 +49,6 @@ class TerminalTabsAccessibilityProvider implements IListAccessibilityProvider { constructor( container: HTMLElement, - renderers: ITreeRenderer[], @IContextKeyService contextKeyService: IContextKeyService, @IListService listService: IListService, @IThemeService themeService: IThemeService, @@ -57,7 +59,7 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { ) { super('TerminalTabsTree', container, new TerminalTabsDelegate(), - renderers, + [new TerminalTabsRenderer()], { horizontalScrolling: false, supportDynamicHeights: true, @@ -91,3 +93,30 @@ function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable { + + templateId = 'terminal.tab'; + + renderTemplate(container: HTMLElement): ITerminalTabEntryTemplate { + return { + labelElement: DOM.append(container, $('.terminal-tabs-entry')), + }; + } + + renderElement(node: ITreeNode, index: number, template: ITerminalTabEntryTemplate): void { + const element = node.element; + const label = element ? element?.terminalInstances.length > 1 ? `Terminals (${element?.terminalInstances.length})` : element?.terminalInstances[0].title : ''; + + template.labelElement.textContent = label; + template.labelElement.title = label; + } + + disposeTemplate(templateData: ITerminalTabEntryTemplate): void { + } +} + +interface ITerminalTabEntryTemplate { + labelElement: HTMLElement; +} + diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 5015ca7a63e..6a5e6ac7a58 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -36,6 +36,7 @@ import { selectBorder } from 'vs/platform/theme/common/colorRegistry'; import { ISelectOptionItem } from 'vs/base/browser/ui/selectBox/selectBox'; import { BrowserFeatures } from 'vs/base/browser/canIUse'; import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar'; +import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/terminalTabsWidget'; const FIND_FOCUS_CLASS = 'find-focused'; @@ -47,6 +48,7 @@ export class TerminalViewPane extends ViewPane { private _parentDomElement: HTMLElement | undefined; private _terminalContainer: HTMLElement | undefined; private _findWidget: TerminalFindWidget | undefined; + private _tabsWidget: TerminalTabsWidget | undefined; private _terminalsInitialized = false; private _bodyDimensions: { width: number, height: number } = { width: 0, height: 0 }; private _isWelcomeShowing: boolean = false; @@ -102,11 +104,14 @@ export class TerminalViewPane extends ViewPane { this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); this._findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); - + this._tabsWidget = this.instantiationService.createInstance(TerminalTabsWidget, this._parentDomElement); this._parentDomElement.appendChild(this._fontStyleElement); this._parentDomElement.appendChild(this._terminalContainer); this._parentDomElement.appendChild(this._findWidget.getDomNode()); + + + this._attachEventListeners(this._parentDomElement, this._terminalContainer); this._terminalService.setContainers(container, this._terminalContainer); From 76acf1ef644c5a26b797a4e9352c934e9ce995c2 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Sun, 4 Apr 2021 21:57:48 -0700 Subject: [PATCH 004/115] working pretty well --- src/vs/base/browser/ui/list/listView.ts | 2 +- .../terminal/browser/media/terminal.css | 10 +++++ .../terminal/browser/terminalService.ts | 7 ++++ .../terminal/browser/terminalTabsWidget.ts | 10 +++-- .../contrib/terminal/browser/terminalView.ts | 40 ++++++++++++++----- 5 files changed, 53 insertions(+), 16 deletions(-) diff --git a/src/vs/base/browser/ui/list/listView.ts b/src/vs/base/browser/ui/list/listView.ts index ee8fd156e23..90c5fbfbdc1 100644 --- a/src/vs/base/browser/ui/list/listView.ts +++ b/src/vs/base/browser/ui/list/listView.ts @@ -756,7 +756,7 @@ export class ListView implements ISpliceable, IDisposable { this.rowsContainer.appendChild(item.row.domNode); } } - + console.log('renderering', item, index); this.updateItemInDOM(item, index); const renderer = this.renderers.get(item.templateId); diff --git a/src/vs/workbench/contrib/terminal/browser/media/terminal.css b/src/vs/workbench/contrib/terminal/browser/media/terminal.css index 21e23a00a39..6d7cf97e6fa 100644 --- a/src/vs/workbench/contrib/terminal/browser/media/terminal.css +++ b/src/vs/workbench/contrib/terminal/browser/media/terminal.css @@ -3,6 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ + +.tabs-widget-container { + width: 20%; + float: left; + height: 100%; +} + .monaco-workbench .pane-body.integrated-terminal { align-content: flex-start; align-items: baseline; @@ -19,10 +26,13 @@ width: 100%; box-sizing: border-box; overflow: hidden; + float:right; } .monaco-workbench .pane-body.integrated-terminal .terminal-tab { height: 100%; + width: 80%; + float: right; } .monaco-workbench .pane-body.integrated-terminal .terminal-wrapper { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index 6e6c2f4ac92..1d9e3c75bae 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -159,6 +159,13 @@ export class TerminalService implements ITerminalService { } }); + this.onInstancesChanged(() => { + const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; + if (pane) { + pane.renderBody(); + } + }); + const enableTerminalReconnection = this.configHelper.config.enablePersistentSessions; const conn = this._remoteAgentService.getConnection(); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 5ecd829181a..3c34c6efe1c 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -43,7 +43,7 @@ class TerminalTabsAccessibilityProvider implements IListAccessibilityProvider { @@ -77,12 +77,13 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { keybindingService, accessibilityService, ); + this.setChildren(null, undefined); this.setChildren(null, createTerminalTabsIterator(terminalService.terminalTabs)); } } function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable> { - return tabs.map(tab => { + const result = tabs.map(tab => { const hasChildren = tab.terminalInstances.length > 1; return { element: tab, @@ -92,11 +93,12 @@ function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable { - templateId = 'terminal.tab'; + templateId = 'terminal.tabs'; renderTemplate(container: HTMLElement): ITerminalTabEntryTemplate { return { @@ -106,7 +108,7 @@ class TerminalTabsRenderer implements ITreeRenderer, index: number, template: ITerminalTabEntryTemplate): void { const element = node.element; - const label = element ? element?.terminalInstances.length > 1 ? `Terminals (${element?.terminalInstances.length})` : element?.terminalInstances[0].title : ''; + const label = element ? element.terminalInstances.length === 0 ? 'Starting...' : element?.terminalInstances.length > 1 ? `Terminals (${element?.terminalInstances.length})` : element?.terminalInstances[0].title : ''; template.labelElement.textContent = label; template.labelElement.title = label; diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 6a5e6ac7a58..e2dbe23d74c 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -48,7 +48,7 @@ export class TerminalViewPane extends ViewPane { private _parentDomElement: HTMLElement | undefined; private _terminalContainer: HTMLElement | undefined; private _findWidget: TerminalFindWidget | undefined; - private _tabsWidget: TerminalTabsWidget | undefined; + private _tabsWidgetContainer: HTMLElement | undefined; private _terminalsInitialized = false; private _bodyDimensions: { width: number, height: number } = { width: 0, height: 0 }; private _isWelcomeShowing: boolean = false; @@ -91,27 +91,45 @@ export class TerminalViewPane extends ViewPane { }); } - protected renderBody(container: HTMLElement): void { + public renderBody(container?: HTMLElement): void { + if (!container && !this._parentDomElement) { + return; + } else if (!container) { + container = this._parentDomElement; + } + if (!container) { + return; + } super.renderBody(container); this._parentDomElement = container; this._parentDomElement.classList.add('integrated-terminal'); this._fontStyleElement = document.createElement('style'); - this._terminalContainer = document.createElement('div'); - this._terminalContainer.classList.add('terminal-outer-container'); - this._terminalContainer.style.display = this.shouldShowWelcome() ? 'none' : 'block'; + if (!this._terminalContainer) { + this._terminalContainer = document.createElement('div'); + this._terminalContainer.classList.add('terminal-outer-container'); + this._terminalContainer.style.display = this.shouldShowWelcome() ? 'none' : 'block'; + } + if (!this._findWidget) { + this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); + this._findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); + } + if (this._tabsWidgetContainer) { + this._terminalContainer.removeChild(this._tabsWidgetContainer); + } + this._tabsWidgetContainer = dom.append(this._terminalContainer, dom.$('.tabs-widget-container')); + dom.append(this._tabsWidgetContainer, dom.$('.tabs-widget-wrapper', { + 'role': 'navigation', + 'aria-label': nls.localize('terminal-tabs-widget', "Terminal Tabs"), + })); + + this.instantiationService.createInstance(TerminalTabsWidget, this._tabsWidgetContainer); - this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); - this._findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); - this._tabsWidget = this.instantiationService.createInstance(TerminalTabsWidget, this._parentDomElement); this._parentDomElement.appendChild(this._fontStyleElement); this._parentDomElement.appendChild(this._terminalContainer); this._parentDomElement.appendChild(this._findWidget.getDomNode()); - - - this._attachEventListeners(this._parentDomElement, this._terminalContainer); this._terminalService.setContainers(container, this._terminalContainer); From 218e702bbb447618c5591c525f5824b64b280757 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 5 Apr 2021 08:56:48 -0700 Subject: [PATCH 005/115] children now work --- .../terminal/browser/terminalTabsWidget.ts | 89 +++++++++++++++---- 1 file changed, 71 insertions(+), 18 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 3c34c6efe1c..40f9dddb285 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -13,7 +13,7 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { IIdentityProvider, IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; -import { ITerminalService, ITerminalTab } from 'vs/workbench/contrib/terminal/browser/terminal'; +import { ITerminalInstance, ITerminalService, ITerminalTab } from 'vs/workbench/contrib/terminal/browser/terminal'; import { localize } from 'vs/nls'; import * as DOM from 'vs/base/browser/dom'; @@ -28,25 +28,32 @@ class TerminalTabsDelegate implements IListVirtualDelegate { return 'terminal.tabs'; } } -class TerminalTabsIdentityProvider implements IIdentityProvider { +class TerminalTabsIdentityProvider implements IIdentityProvider { constructor() { } - getId(element: TerminalTab): { toString(): string; } { - // to do - fix this won't work - return element ? element?.terminalInstances.length > 1 ? `Terminals (${element?.terminalInstances.length})` : element?.terminalInstances[0].title : ''; + getId(element: TabTreeNode): { toString(): string; } { + if ('children' in element) { + return element.tab ? element.tab.terminalInstances.length > 1 ? `Terminals (${element.tab.terminalInstances.length})` : element.tab.terminalInstances[0].title : ''; + } else { + return element.instance.title; + } } } -class TerminalTabsAccessibilityProvider implements IListAccessibilityProvider { - getAriaLabel(tab: TerminalTab) { - return tab ? tab?.terminalInstances.length > 1 ? `Terminals (${tab?.terminalInstances.length})` : tab?.terminalInstances[0].title : ''; +class TerminalTabsAccessibilityProvider implements IListAccessibilityProvider { + getAriaLabel(element: TabTreeNode) { + if ('children' in element) { + return element.tab ? element.tab.terminalInstances.length > 1 ? `Terminals (${element.tab.terminalInstances.length})` : element.tab.terminalInstances[0].title : ''; + } else { + return element.instance.title; + } } getWidgetAriaLabel() { return localize('terminal.tabs', "TerminalTabs"); } } -export class TerminalTabsWidget extends WorkbenchObjectTree { +export class TerminalTabsWidget extends WorkbenchObjectTree { constructor( container: HTMLElement, @IContextKeyService contextKeyService: IContextKeyService, @@ -82,21 +89,27 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { } } -function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable> { +function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable> { const result = tabs.map(tab => { const hasChildren = tab.terminalInstances.length > 1; + const elt = new TabTreeElement(tab); return { - element: tab, + element: elt, collapsed: true, collapsible: hasChildren, - // children: hasChildren ? tab.terminalInstances : undefined // TODO - children: undefined + children: elt.children.map(child => { + return { + element: child, + collapsed: true, + collapsible: false + }; + }) }; }); return result; } -class TerminalTabsRenderer implements ITreeRenderer { +class TerminalTabsRenderer implements ITreeRenderer { templateId = 'terminal.tabs'; @@ -106,10 +119,14 @@ class TerminalTabsRenderer implements ITreeRenderer, index: number, template: ITerminalTabEntryTemplate): void { - const element = node.element; - const label = element ? element.terminalInstances.length === 0 ? 'Starting...' : element?.terminalInstances.length > 1 ? `Terminals (${element?.terminalInstances.length})` : element?.terminalInstances[0].title : ''; - + renderElement(node: ITreeNode, index: number, template: ITerminalTabEntryTemplate): void { + let label = ''; + let item = node.element; + if ('children' in item) { + label = item ? item.children.length === 0 ? 'Starting...' : item?.children.length > 1 ? `Terminals (${item.children.length})` : item.children[0].instance.title : ''; + } else if ('instance' in item) { + label = item.instance.title; + } template.labelElement.textContent = label; template.labelElement.title = label; } @@ -122,3 +139,39 @@ interface ITerminalTabEntryTemplate { labelElement: HTMLElement; } +type TabTreeNode = TabTreeElement | TabTreeChild; + +class TabTreeElement { + private _tab: ITerminalTab; + private _children: TabTreeChild[]; + constructor(tab: ITerminalTab) { + this._tab = tab; + this._children = this._tab.terminalInstances.map(i => new TabTreeChild(i, this._tab)); + } + get tab(): ITerminalTab { + return this._tab; + } + + get children(): TabTreeChild[] { + return this._children; + } + + set children(newChildren: TabTreeChild[]) { + this._children = newChildren; + } +} + +class TabTreeChild { + private _instance: ITerminalInstance; + private _tab: ITerminalTab; + constructor(instance: ITerminalInstance, tab: ITerminalTab) { + this._instance = instance; + this._tab = tab; + } + get instance(): ITerminalInstance { + return this._instance; + } + get parent(): ITerminalTab { + return this._tab; + } +} From 76736a879b3cf83bfc1bf66b0ce9e2313612a622 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 5 Apr 2021 10:25:34 -0700 Subject: [PATCH 006/115] add showTabs setting --- src/vs/base/browser/ui/list/listView.ts | 1 - .../terminal/browser/terminalService.ts | 9 +++++--- .../contrib/terminal/browser/terminalView.ts | 22 +++++++++++-------- .../contrib/terminal/common/terminal.ts | 1 + .../terminal/common/terminalConfiguration.ts | 5 +++++ 5 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/vs/base/browser/ui/list/listView.ts b/src/vs/base/browser/ui/list/listView.ts index 90c5fbfbdc1..863309fe651 100644 --- a/src/vs/base/browser/ui/list/listView.ts +++ b/src/vs/base/browser/ui/list/listView.ts @@ -756,7 +756,6 @@ export class ListView implements ISpliceable, IDisposable { this.rowsContainer.appendChild(item.row.domNode); } } - console.log('renderering', item, index); this.updateItemInDOM(item, index); const renderer = this.renderers.get(item.templateId); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index 1d9e3c75bae..cafb270fa9d 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -156,13 +156,16 @@ export class TerminalService implements ITerminalService { e.affectsConfiguration('terminal.integrated.profiles.linux') || e.affectsConfiguration('terminal.integrated.useWslProfiles')) { this._updateAvailableProfilesNow(); + } else if (e.affectsConfiguration('terminal.integrated.showTabs')) { + const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; + pane?.renderBody(); } }); this.onInstancesChanged(() => { - const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; - if (pane) { - pane.renderBody(); + if (this._configHelper.config.showTabs) { + const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; + pane?.renderBody(); } }); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index e2dbe23d74c..44382b15b76 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -115,16 +115,20 @@ export class TerminalViewPane extends ViewPane { this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); this._findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); } - if (this._tabsWidgetContainer) { - this._terminalContainer.removeChild(this._tabsWidgetContainer); - } - this._tabsWidgetContainer = dom.append(this._terminalContainer, dom.$('.tabs-widget-container')); - dom.append(this._tabsWidgetContainer, dom.$('.tabs-widget-wrapper', { - 'role': 'navigation', - 'aria-label': nls.localize('terminal-tabs-widget', "Terminal Tabs"), - })); - this.instantiationService.createInstance(TerminalTabsWidget, this._tabsWidgetContainer); + if ((!this._terminalService.configHelper.config.showTabs && this._tabsWidgetContainer) || this._tabsWidgetContainer) { + this._terminalContainer.removeChild(this._tabsWidgetContainer); + this._tabsWidgetContainer = undefined; + } + + if (this._terminalService.configHelper.config.showTabs) { + this._tabsWidgetContainer = dom.append(this._terminalContainer, dom.$('.tabs-widget-container')); + dom.append(this._tabsWidgetContainer, dom.$('.tabs-widget-wrapper', { + 'role': 'navigation', + 'aria-label': nls.localize('terminal-tabs-widget', "Terminal Tabs"), + })); + this.instantiationService.createInstance(TerminalTabsWidget, this._tabsWidgetContainer); + } this._parentDomElement.appendChild(this._fontStyleElement); this._parentDomElement.appendChild(this._terminalContainer); diff --git a/src/vs/workbench/contrib/terminal/common/terminal.ts b/src/vs/workbench/contrib/terminal/common/terminal.ts index dd85328417a..e6cbec010f7 100644 --- a/src/vs/workbench/contrib/terminal/common/terminal.ts +++ b/src/vs/workbench/contrib/terminal/common/terminal.ts @@ -103,6 +103,7 @@ export interface ITerminalConfiguration { }; profiles: ITerminalProfiles; useWslProfiles: boolean; + showTabs: boolean; altClickMovesCursor: boolean; macOptionIsMeta: boolean; macOptionClickForcesSelection: boolean; diff --git a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts index 92ca57ec539..0886d383a63 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts @@ -222,6 +222,11 @@ export const terminalConfiguration: IConfigurationNode = { type: 'boolean', default: true }, + 'terminal.integrated.showTabs': { + description: localize('terminal.integrated.showTabs', 'Controls whether or not the terminal tabs widget is shown'), + type: 'boolean', + default: false + }, 'terminal.integrated.macOptionIsMeta': { description: localize('terminal.integrated.macOptionIsMeta', "Controls whether to treat the option key as the meta key in the terminal on macOS."), type: 'boolean', From 59c22b335301274f87f70d82cc8102d48d22d9ba Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 5 Apr 2021 11:31:01 -0700 Subject: [PATCH 007/115] more improvements --- .../contrib/terminal/browser/terminalTab.ts | 6 +++- .../terminal/browser/terminalTabsWidget.ts | 32 ++++++++++++++----- .../contrib/terminal/browser/terminalView.ts | 3 ++ 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts index 95599ea105f..caba3dab11e 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts @@ -16,7 +16,7 @@ import { localize } from 'vs/nls'; const SPLIT_PANE_MIN_SIZE = 120; -class SplitPaneContainer extends Disposable { +export class SplitPaneContainer extends Disposable { private _height: number; private _width: number; private _splitView!: SplitView; @@ -38,6 +38,10 @@ class SplitPaneContainer extends Disposable { this._splitView.layout(this.orientation === Orientation.HORIZONTAL ? this._width : this._height); } + public get splitView(): SplitView { + return this._splitView; + } + private _createSplitView(): void { this._splitView = new SplitView(this._container, { orientation: this.orientation }); this._splitViewDisposables.clear(); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 40f9dddb285..8557fce4726 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -17,7 +17,6 @@ import { ITerminalInstance, ITerminalService, ITerminalTab } from 'vs/workbench/ import { localize } from 'vs/nls'; import * as DOM from 'vs/base/browser/dom'; - const $ = DOM.$; class TerminalTabsDelegate implements IListVirtualDelegate { @@ -86,6 +85,16 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { ); this.setChildren(null, undefined); this.setChildren(null, createTerminalTabsIterator(terminalService.terminalTabs)); + + this.onDidChangeSelection(e => { + if (e.elements && e.elements[0]) { + if ('_instance' in e.elements[0]) { + terminalService.setActiveInstance(e.elements[0].instance); + } else { + terminalService.setActiveTabByIndex(terminalService.terminalTabs.indexOf(e.elements[0].tab)); + } + } + }); } } @@ -97,18 +106,25 @@ function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable { - return { - element: child, - collapsed: true, - collapsible: false - }; - }) + children: getChildren(elt) }; }); return result; } +function getChildren(elt: TabTreeElement): Iterable> | undefined { + if (elt.children.length > 1) { + return elt.children.map(child => { + return { + element: child, + collapsed: true, + collapsible: false + }; + }); + } + return undefined; +} + class TerminalTabsRenderer implements ITreeRenderer { templateId = 'terminal.tabs'; diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 44382b15b76..76430202d57 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -122,6 +122,9 @@ export class TerminalViewPane extends ViewPane { } if (this._terminalService.configHelper.config.showTabs) { + // this._tabsWidgetContainer = this._instantiationService.createInstance(SplitPaneContainer, this._terminalContainer, Orientation.HORIZONTAL).splitView.el; + // this._tabsWidgetContainer.classList.add('tabs-widget-container'); + // this.instantiationService.createInstance(TerminalTabsWidget, this._tabsWidgetContainer); this._tabsWidgetContainer = dom.append(this._terminalContainer, dom.$('.tabs-widget-container')); dom.append(this._tabsWidgetContainer, dom.$('.tabs-widget-wrapper', { 'role': 'navigation', From 92ff8a92093f311bd105524b1f7f227f2cc25aea Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 5 Apr 2021 11:54:21 -0700 Subject: [PATCH 008/115] rearrange code --- .../terminal/browser/terminalTabsWidget.ts | 120 +++++++++--------- 1 file changed, 61 insertions(+), 59 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 8557fce4726..bd9adf07eec 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -19,39 +19,6 @@ import * as DOM from 'vs/base/browser/dom'; const $ = DOM.$; -class TerminalTabsDelegate implements IListVirtualDelegate { - getHeight(element: any): number { - return 24; - } - getTemplateId(element: any): string { - return 'terminal.tabs'; - } -} -class TerminalTabsIdentityProvider implements IIdentityProvider { - constructor() { - } - getId(element: TabTreeNode): { toString(): string; } { - if ('children' in element) { - return element.tab ? element.tab.terminalInstances.length > 1 ? `Terminals (${element.tab.terminalInstances.length})` : element.tab.terminalInstances[0].title : ''; - } else { - return element.instance.title; - } - } - -} -class TerminalTabsAccessibilityProvider implements IListAccessibilityProvider { - getAriaLabel(element: TabTreeNode) { - if ('children' in element) { - return element.tab ? element.tab.terminalInstances.length > 1 ? `Terminals (${element.tab.terminalInstances.length})` : element.tab.terminalInstances[0].title : ''; - } else { - return element.instance.title; - } - } - - getWidgetAriaLabel() { - return localize('terminal.tabs', "TerminalTabs"); - } -} export class TerminalTabsWidget extends WorkbenchObjectTree { constructor( container: HTMLElement, @@ -84,7 +51,8 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { accessibilityService, ); this.setChildren(null, undefined); - this.setChildren(null, createTerminalTabsIterator(terminalService.terminalTabs)); + const children = createTerminalTabsIterator(terminalService.terminalTabs); + this.setChildren(null, children); this.onDidChangeSelection(e => { if (e.elements && e.elements[0]) { @@ -98,31 +66,39 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { } } -function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable> { - const result = tabs.map(tab => { - const hasChildren = tab.terminalInstances.length > 1; - const elt = new TabTreeElement(tab); - return { - element: elt, - collapsed: true, - collapsible: hasChildren, - children: getChildren(elt) - }; - }); - return result; -} -function getChildren(elt: TabTreeElement): Iterable> | undefined { - if (elt.children.length > 1) { - return elt.children.map(child => { - return { - element: child, - collapsed: true, - collapsible: false - }; - }); +class TerminalTabsDelegate implements IListVirtualDelegate { + getHeight(element: any): number { + return 24; + } + getTemplateId(element: any): string { + return 'terminal.tabs'; + } +} +class TerminalTabsIdentityProvider implements IIdentityProvider { + constructor() { + } + getId(element: TabTreeNode): { toString(): string; } { + if ('tab' in element) { + return element.tab.title; + } else { + return element.instance.instanceId; + } + } + +} +class TerminalTabsAccessibilityProvider implements IListAccessibilityProvider { + getAriaLabel(element: TabTreeNode) { + if ('tab' in element) { + return element.tab ? element.tab.terminalInstances.length > 1 ? `Terminals (${element.tab.terminalInstances.length})` : element.tab.terminalInstances[0].title : ''; + } else { + return element.instance.title; + } + } + + getWidgetAriaLabel() { + return localize('terminal.tabs', "TerminalTabs"); } - return undefined; } class TerminalTabsRenderer implements ITreeRenderer { @@ -167,11 +143,9 @@ class TabTreeElement { get tab(): ITerminalTab { return this._tab; } - get children(): TabTreeChild[] { return this._children; } - set children(newChildren: TabTreeChild[]) { this._children = newChildren; } @@ -191,3 +165,31 @@ class TabTreeChild { return this._tab; } } + + +function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable> { + const result = tabs.map(tab => { + const hasChildren = tab.terminalInstances.length > 1; + const elt = new TabTreeElement(tab); + return { + element: elt, + collapsed: true, + collapsible: hasChildren, + children: getChildren(elt) + }; + }); + return result; +} + +function getChildren(elt: TabTreeElement): Iterable> | undefined { + if (elt.children.length > 1) { + return elt.children.map(child => { + return { + element: child, + collapsed: true, + collapsible: false + }; + }); + } + return undefined; +} From 0f696464e69a0cf6d37a4f53e3079914eec7c68c Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 5 Apr 2021 13:19:53 -0700 Subject: [PATCH 009/115] get instances to focus on click --- .../contrib/terminal/browser/terminalTabsWidget.ts | 9 +++++---- .../workbench/contrib/terminal/browser/terminalView.ts | 3 --- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index bd9adf07eec..82a805c0bfd 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -16,6 +16,7 @@ import { IIdentityProvider, IListVirtualDelegate } from 'vs/base/browser/ui/list import { ITerminalInstance, ITerminalService, ITerminalTab } from 'vs/workbench/contrib/terminal/browser/terminal'; import { localize } from 'vs/nls'; import * as DOM from 'vs/base/browser/dom'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; const $ = DOM.$; @@ -28,7 +29,8 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { @IConfigurationService configurationService: IConfigurationService, @IKeybindingService keybindingService: IKeybindingService, @IAccessibilityService accessibilityService: IAccessibilityService, - @ITerminalService terminalService: ITerminalService + @ITerminalService terminalService: ITerminalService, + @IInstantiationService _instantiationService: IInstantiationService ) { super('TerminalTabsTree', container, new TerminalTabsDelegate(), @@ -42,6 +44,7 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { filter: undefined, smoothScrolling: configurationService.getValue('workbench.list.smoothScrolling'), multipleSelectionSupport: false, + expandOnlyOnTwistieClick: true }, contextKeyService, listService, @@ -53,11 +56,10 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { this.setChildren(null, undefined); const children = createTerminalTabsIterator(terminalService.terminalTabs); this.setChildren(null, children); - this.onDidChangeSelection(e => { if (e.elements && e.elements[0]) { if ('_instance' in e.elements[0]) { - terminalService.setActiveInstance(e.elements[0].instance); + e.elements[0].instance.focus(true); } else { terminalService.setActiveTabByIndex(terminalService.terminalTabs.indexOf(e.elements[0].tab)); } @@ -66,7 +68,6 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { } } - class TerminalTabsDelegate implements IListVirtualDelegate { getHeight(element: any): number { return 24; diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 76430202d57..44382b15b76 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -122,9 +122,6 @@ export class TerminalViewPane extends ViewPane { } if (this._terminalService.configHelper.config.showTabs) { - // this._tabsWidgetContainer = this._instantiationService.createInstance(SplitPaneContainer, this._terminalContainer, Orientation.HORIZONTAL).splitView.el; - // this._tabsWidgetContainer.classList.add('tabs-widget-container'); - // this.instantiationService.createInstance(TerminalTabsWidget, this._tabsWidgetContainer); this._tabsWidgetContainer = dom.append(this._terminalContainer, dom.$('.tabs-widget-container')); dom.append(this._tabsWidgetContainer, dom.$('.tabs-widget-wrapper', { 'role': 'navigation', From 617b7c0067bf05dc7dcf9a9a2e316959301b05e5 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 5 Apr 2021 14:43:14 -0700 Subject: [PATCH 010/115] take a break --- .../contrib/terminal/browser/tabsView.ts | 34 +++++++++++++++++++ .../contrib/terminal/browser/terminalView.ts | 21 +++--------- 2 files changed, 39 insertions(+), 16 deletions(-) create mode 100644 src/vs/workbench/contrib/terminal/browser/tabsView.ts diff --git a/src/vs/workbench/contrib/terminal/browser/tabsView.ts b/src/vs/workbench/contrib/terminal/browser/tabsView.ts new file mode 100644 index 00000000000..cadd71f98b9 --- /dev/null +++ b/src/vs/workbench/contrib/terminal/browser/tabsView.ts @@ -0,0 +1,34 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Orientation, SplitView } from 'vs/base/browser/ui/splitview/splitview'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { WorkbenchObjectTree } from 'vs/platform/list/browser/listService'; +import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; +import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/terminalTabsWidget'; + + +export class TabsView { + private _splitView: SplitView | undefined; + private _widget: WorkbenchObjectTree | undefined; + + constructor( + context: string, + container: HTMLElement, + @IInstantiationService private readonly _instantiationService: IInstantiationService, + @ITerminalService private readonly _terminalService: ITerminalService, + + ) { + if (context === 'terminal') { + this._splitView = new SplitView(container, { orientation: Orientation.HORIZONTAL }); + this._widget = _instantiationService.createInstance(TerminalTabsWidget, this._splitView.el); + } + } + + public layout(width: number, height: number): void { + this._splitView?.layout(width); + this._terminalService.terminalTabs.forEach(t => t.layout(width - 20, height)); + } +} diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 44382b15b76..b0ca4d2f42f 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -36,7 +36,7 @@ import { selectBorder } from 'vs/platform/theme/common/colorRegistry'; import { ISelectOptionItem } from 'vs/base/browser/ui/selectBox/selectBox'; import { BrowserFeatures } from 'vs/base/browser/canIUse'; import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar'; -import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/terminalTabsWidget'; +import { TabsView } from 'vs/workbench/contrib/terminal/browser/tabsView'; const FIND_FOCUS_CLASS = 'find-focused'; @@ -48,7 +48,7 @@ export class TerminalViewPane extends ViewPane { private _parentDomElement: HTMLElement | undefined; private _terminalContainer: HTMLElement | undefined; private _findWidget: TerminalFindWidget | undefined; - private _tabsWidgetContainer: HTMLElement | undefined; + private _tabsView: TabsView | undefined; private _terminalsInitialized = false; private _bodyDimensions: { width: number, height: number } = { width: 0, height: 0 }; private _isWelcomeShowing: boolean = false; @@ -115,19 +115,8 @@ export class TerminalViewPane extends ViewPane { this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); this._findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); } - - if ((!this._terminalService.configHelper.config.showTabs && this._tabsWidgetContainer) || this._tabsWidgetContainer) { - this._terminalContainer.removeChild(this._tabsWidgetContainer); - this._tabsWidgetContainer = undefined; - } - - if (this._terminalService.configHelper.config.showTabs) { - this._tabsWidgetContainer = dom.append(this._terminalContainer, dom.$('.tabs-widget-container')); - dom.append(this._tabsWidgetContainer, dom.$('.tabs-widget-wrapper', { - 'role': 'navigation', - 'aria-label': nls.localize('terminal-tabs-widget', "Terminal Tabs"), - })); - this.instantiationService.createInstance(TerminalTabsWidget, this._tabsWidgetContainer); + if (!this._tabsView && this._terminalService.configHelper.config.showTabs) { + this._tabsView = this.instantiationService.createInstance(TabsView, 'terminal', this._terminalContainer); } this._parentDomElement.appendChild(this._fontStyleElement); @@ -192,7 +181,7 @@ export class TerminalViewPane extends ViewPane { this._bodyDimensions.width = width; this._bodyDimensions.height = height; - this._terminalService.terminalTabs.forEach(t => t.layout(width, height)); + this._tabsView?.layout(width, height); } public getActionViewItem(action: Action): IActionViewItem | undefined { From e757e4e25adcceaa082ef63efc6e481be46256fc Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 5 Apr 2021 15:14:43 -0700 Subject: [PATCH 011/115] still not working --- src/vs/workbench/contrib/terminal/browser/tabsView.ts | 4 ++-- src/vs/workbench/contrib/terminal/browser/terminalView.ts | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/tabsView.ts b/src/vs/workbench/contrib/terminal/browser/tabsView.ts index cadd71f98b9..d39b0f40965 100644 --- a/src/vs/workbench/contrib/terminal/browser/tabsView.ts +++ b/src/vs/workbench/contrib/terminal/browser/tabsView.ts @@ -28,7 +28,7 @@ export class TabsView { } public layout(width: number, height: number): void { - this._splitView?.layout(width); - this._terminalService.terminalTabs.forEach(t => t.layout(width - 20, height)); + this._splitView?.layout(100); + this._terminalService.terminalTabs.forEach(t => t.layout(width - 100, height)); } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index b0ca4d2f42f..d97a7f3a5c0 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -181,7 +181,11 @@ export class TerminalViewPane extends ViewPane { this._bodyDimensions.width = width; this._bodyDimensions.height = height; - this._tabsView?.layout(width, height); + if (this._tabsView) { + this._tabsView?.layout(width, height); + } else { + this._terminalService.terminalTabs.forEach(t => t.layout(width, height)); + } } public getActionViewItem(action: Action): IActionViewItem | undefined { From 224127ce54eec60e4abd159444b361ce0c969408 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 5 Apr 2021 20:48:42 -0700 Subject: [PATCH 012/115] add splitTabsPane --- .../terminal/browser/media/terminal.css | 9 +- .../contrib/terminal/browser/tabsView.ts | 107 ++++++++++++++++-- .../contrib/terminal/browser/terminalTab.ts | 2 +- .../terminal/browser/terminalTabsWidget.ts | 7 +- .../contrib/terminal/browser/terminalView.ts | 2 +- 5 files changed, 112 insertions(+), 15 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/media/terminal.css b/src/vs/workbench/contrib/terminal/browser/media/terminal.css index 6d7cf97e6fa..9148909dbf5 100644 --- a/src/vs/workbench/contrib/terminal/browser/media/terminal.css +++ b/src/vs/workbench/contrib/terminal/browser/media/terminal.css @@ -9,7 +9,6 @@ float: left; height: 100%; } - .monaco-workbench .pane-body.integrated-terminal { align-content: flex-start; align-items: baseline; @@ -112,6 +111,14 @@ cursor: default; } +.monaco-list-row { + padding-left: 4px; /* align top level twistie with `Explorer` title label */ +} + +.monaco-list .monaco-tl-twistie { + opacity: 0.3; +} + .monaco-workbench .pane-body.integrated-terminal .xterm { position: absolute; bottom: 0; diff --git a/src/vs/workbench/contrib/terminal/browser/tabsView.ts b/src/vs/workbench/contrib/terminal/browser/tabsView.ts index d39b0f40965..84749cc9713 100644 --- a/src/vs/workbench/contrib/terminal/browser/tabsView.ts +++ b/src/vs/workbench/contrib/terminal/browser/tabsView.ts @@ -5,30 +5,115 @@ import { Orientation, SplitView } from 'vs/base/browser/ui/splitview/splitview'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { WorkbenchObjectTree } from 'vs/platform/list/browser/listService'; import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/terminalTabsWidget'; +import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; +import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; +import { Event } from 'vs/base/common/event'; +import { IView } from 'vs/workbench/common/views'; +import * as dom from 'vs/base/browser/dom'; +import { IProgressIndicator } from 'vs/platform/progress/common/progress'; +import { Sizing } from 'vs/base/browser/ui/grid/grid'; +export class TabsView extends Disposable { + private _height: number; + private _width: number; + private _widget: HTMLElement; + private _splitView!: SplitView; + private readonly _splitViewDisposables = this._register(new DisposableStore()); + private _children: SplitTabsPane[] = []; -export class TabsView { - private _splitView: SplitView | undefined; - private _widget: WorkbenchObjectTree | undefined; + private _onDidChange: Event = Event.None; + public get onDidChange(): Event { return this._onDidChange; } constructor( context: string, - container: HTMLElement, + private _container: HTMLElement, + private _parentContainer: HTMLElement, @IInstantiationService private readonly _instantiationService: IInstantiationService, - @ITerminalService private readonly _terminalService: ITerminalService, - + @ITerminalService private readonly _terminalService: ITerminalService ) { + super(); if (context === 'terminal') { - this._splitView = new SplitView(container, { orientation: Orientation.HORIZONTAL }); - this._widget = _instantiationService.createInstance(TerminalTabsWidget, this._splitView.el); + const div = document.createElement('div'); + _instantiationService.createInstance(TerminalTabsWidget, div); + this._widget = div; } + this._createSplitView(); + this._width = _parentContainer.offsetWidth; + this._height = _parentContainer.offsetHeight; + this._splitView.layout(this._width); + } + + public get splitView(): SplitView { + return this._splitView; + } + + private _createSplitView(): void { + this._splitView = new SplitView(this._parentContainer, { orientation: Orientation.HORIZONTAL }); + this._splitViewDisposables.clear(); + this._splitViewDisposables.add(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); + this._splitView.addView(new SplitTabsPane(this._widget, 140), 140, 0); + this._splitView.addView(new SplitTabsPane(this._container, 300), 300, 1); } public layout(width: number, height: number): void { - this._splitView?.layout(100); - this._terminalService.terminalTabs.forEach(t => t.layout(width - 100, height)); + this._width = width; + this._height = height; + this._children.forEach(c => c.orthogonalLayout(width)); + this._splitView.layout(width); } } +class SplitTabsPane implements IView { + public minimumSize: number = 120; + public maximumSize: number = Number.MAX_VALUE; + + public orientation: Orientation | undefined; + + private _onDidChange: Event = Event.None; + public get onDidChange(): Event { return this._onDidChange; } + + readonly element: HTMLElement; + + constructor( + readonly item: HTMLElement, + public orthogonalSize: number + ) { + this.element = document.createElement('div'); + this.element.className = 'terminal-tabs-split-pane'; + console.log(item); + console.log(this.element); + this.element.appendChild(item); + console.log('after', this.element); + + } + id: string = 'split-tabs-view'; + focus(): void { + throw new Error('Method not implemented.'); + } + isVisible(): boolean { + throw new Error('Method not implemented.'); + } + isBodyVisible(): boolean { + throw new Error('Method not implemented.'); + } + setExpanded(expanded: boolean): boolean { + throw new Error('Method not implemented.'); + } + getProgressIndicator(): IProgressIndicator | undefined { + throw new Error('Method not implemented.'); + } + public layout(size: number): void { + // Only layout when both sizes are known + if (!size || !this.orthogonalSize) { + return; + } + + + } + + public orthogonalLayout(size: number): void { + this.orthogonalSize = size; + } +} + diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts index caba3dab11e..8e76b7f2ba9 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts @@ -193,7 +193,7 @@ export class SplitPaneContainer extends Disposable { } } -class SplitPane implements IView { +export class SplitPane implements IView { public minimumSize: number = SPLIT_PANE_MIN_SIZE; public maximumSize: number = Number.MAX_VALUE; diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 82a805c0bfd..6a6c7b1bacd 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -17,6 +17,7 @@ import { ITerminalInstance, ITerminalService, ITerminalTab } from 'vs/workbench/ import { localize } from 'vs/nls'; import * as DOM from 'vs/base/browser/dom'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { Codicon } from 'vs/base/common/codicons'; const $ = DOM.$; @@ -114,14 +115,17 @@ class TerminalTabsRenderer implements ITreeRenderer, index: number, template: ITerminalTabEntryTemplate): void { let label = ''; + let icon; let item = node.element; if ('children' in item) { label = item ? item.children.length === 0 ? 'Starting...' : item?.children.length > 1 ? `Terminals (${item.children.length})` : item.children[0].instance.title : ''; } else if ('instance' in item) { label = item.instance.title; + icon = item.instance.icon; } template.labelElement.textContent = label; template.labelElement.title = label; + template.icon = icon; } disposeTemplate(templateData: ITerminalTabEntryTemplate): void { @@ -130,6 +134,7 @@ class TerminalTabsRenderer implements ITreeRenderer> return { element: child, collapsed: true, - collapsible: false + collapsible: false, }; }); } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index d97a7f3a5c0..19a7be11a08 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -116,7 +116,7 @@ export class TerminalViewPane extends ViewPane { this._findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); } if (!this._tabsView && this._terminalService.configHelper.config.showTabs) { - this._tabsView = this.instantiationService.createInstance(TabsView, 'terminal', this._terminalContainer); + this._tabsView = this.instantiationService.createInstance(TabsView, 'terminal', this._terminalContainer, this._parentDomElement); } this._parentDomElement.appendChild(this._fontStyleElement); From be2e72af102a4211602fa48cb949713142a71e7d Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 08:14:24 -0700 Subject: [PATCH 013/115] clean up --- src/vs/base/browser/ui/list/listView.ts | 1 + .../terminal/browser/media/terminal.css | 18 ------------------ .../contrib/terminal/browser/terminalTab.ts | 4 ++-- 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/src/vs/base/browser/ui/list/listView.ts b/src/vs/base/browser/ui/list/listView.ts index 863309fe651..ee8fd156e23 100644 --- a/src/vs/base/browser/ui/list/listView.ts +++ b/src/vs/base/browser/ui/list/listView.ts @@ -756,6 +756,7 @@ export class ListView implements ISpliceable, IDisposable { this.rowsContainer.appendChild(item.row.domNode); } } + this.updateItemInDOM(item, index); const renderer = this.renderers.get(item.templateId); diff --git a/src/vs/workbench/contrib/terminal/browser/media/terminal.css b/src/vs/workbench/contrib/terminal/browser/media/terminal.css index 9148909dbf5..09f46ac51e2 100644 --- a/src/vs/workbench/contrib/terminal/browser/media/terminal.css +++ b/src/vs/workbench/contrib/terminal/browser/media/terminal.css @@ -3,12 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - -.tabs-widget-container { - width: 20%; - float: left; - height: 100%; -} .monaco-workbench .pane-body.integrated-terminal { align-content: flex-start; align-items: baseline; @@ -25,13 +19,10 @@ width: 100%; box-sizing: border-box; overflow: hidden; - float:right; } .monaco-workbench .pane-body.integrated-terminal .terminal-tab { height: 100%; - width: 80%; - float: right; } .monaco-workbench .pane-body.integrated-terminal .terminal-wrapper { @@ -111,14 +102,6 @@ cursor: default; } -.monaco-list-row { - padding-left: 4px; /* align top level twistie with `Explorer` title label */ -} - -.monaco-list .monaco-tl-twistie { - opacity: 0.3; -} - .monaco-workbench .pane-body.integrated-terminal .xterm { position: absolute; bottom: 0; @@ -213,4 +196,3 @@ .monaco-workbench .part.sidebar > .title > .title-actions .switch-terminal > .monaco-select-box { padding: 0 22px 0 6px; } - diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts index 8e76b7f2ba9..17a6b52ca10 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts @@ -16,7 +16,7 @@ import { localize } from 'vs/nls'; const SPLIT_PANE_MIN_SIZE = 120; -export class SplitPaneContainer extends Disposable { +class SplitPaneContainer extends Disposable { private _height: number; private _width: number; private _splitView!: SplitView; @@ -193,7 +193,7 @@ export class SplitPaneContainer extends Disposable { } } -export class SplitPane implements IView { +class SplitPane implements IView { public minimumSize: number = SPLIT_PANE_MIN_SIZE; public maximumSize: number = Number.MAX_VALUE; From d52fbadeb20c6fd2dc00670a51524a71cc7bc194 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 08:15:19 -0700 Subject: [PATCH 014/115] more cleanup --- src/vs/workbench/contrib/terminal/browser/tabsView.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/tabsView.ts b/src/vs/workbench/contrib/terminal/browser/tabsView.ts index 84749cc9713..a6ade5a8bda 100644 --- a/src/vs/workbench/contrib/terminal/browser/tabsView.ts +++ b/src/vs/workbench/contrib/terminal/browser/tabsView.ts @@ -8,12 +8,9 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/terminalTabsWidget'; import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; import { Event } from 'vs/base/common/event'; import { IView } from 'vs/workbench/common/views'; -import * as dom from 'vs/base/browser/dom'; import { IProgressIndicator } from 'vs/platform/progress/common/progress'; -import { Sizing } from 'vs/base/browser/ui/grid/grid'; export class TabsView extends Disposable { private _height: number; From 99d9bf269744ef0a15b3b7561ce66276ff3ed7c2 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 08:34:57 -0700 Subject: [PATCH 015/115] use this. --- .../contrib/terminal/browser/tabsView.ts | 50 ++++++++++++------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/tabsView.ts b/src/vs/workbench/contrib/terminal/browser/tabsView.ts index a6ade5a8bda..fc1bff3307f 100644 --- a/src/vs/workbench/contrib/terminal/browser/tabsView.ts +++ b/src/vs/workbench/contrib/terminal/browser/tabsView.ts @@ -13,9 +13,9 @@ import { IView } from 'vs/workbench/common/views'; import { IProgressIndicator } from 'vs/platform/progress/common/progress'; export class TabsView extends Disposable { - private _height: number; - private _width: number; - private _widget: HTMLElement; + private height: number; + private width: number; + private _widget!: HTMLElement; private _splitView!: SplitView; private readonly _splitViewDisposables = this._register(new DisposableStore()); private _children: SplitTabsPane[] = []; @@ -25,21 +25,22 @@ export class TabsView extends Disposable { constructor( context: string, - private _container: HTMLElement, - private _parentContainer: HTMLElement, + private container: HTMLElement, + private parentContainer: HTMLElement, @IInstantiationService private readonly _instantiationService: IInstantiationService, @ITerminalService private readonly _terminalService: ITerminalService ) { super(); if (context === 'terminal') { const div = document.createElement('div'); - _instantiationService.createInstance(TerminalTabsWidget, div); + div.classList.add('tabs-widget'); + this._instantiationService.createInstance(TerminalTabsWidget, div); this._widget = div; } this._createSplitView(); - this._width = _parentContainer.offsetWidth; - this._height = _parentContainer.offsetHeight; - this._splitView.layout(this._width); + this.width = parentContainer.offsetWidth; + this.height = parentContainer.offsetHeight; + this._splitView.layout(this.width); } public get splitView(): SplitView { @@ -47,16 +48,19 @@ export class TabsView extends Disposable { } private _createSplitView(): void { - this._splitView = new SplitView(this._parentContainer, { orientation: Orientation.HORIZONTAL }); + this._splitView = new SplitView(this.parentContainer, { orientation: Orientation.HORIZONTAL }); this._splitViewDisposables.clear(); this._splitViewDisposables.add(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); - this._splitView.addView(new SplitTabsPane(this._widget, 140), 140, 0); - this._splitView.addView(new SplitTabsPane(this._container, 300), 300, 1); + const widgetWidth = 140; + // this._splitView.addView(new SplitTabsPane(this._widget, widgetWidth, this._terminalService), widgetWidth, 0); + // this._splitView.addView(new SplitTabsPane(this._container, this._width - widgetWidth, this._terminalService), this._width - widgetWidth, 1); + this._children.push(new SplitTabsPane(this._widget, widgetWidth, this._terminalService)); + this._children.push(new SplitTabsPane(this.container, this.width - widgetWidth, this._terminalService)); } public layout(width: number, height: number): void { - this._width = width; - this._height = height; + this.width = width; + this.height = height; this._children.forEach(c => c.orthogonalLayout(width)); this._splitView.layout(width); } @@ -72,9 +76,14 @@ class SplitTabsPane implements IView { readonly element: HTMLElement; + private readonly _item: HTMLElement; + + private readonly _terminalService: ITerminalService; + constructor( readonly item: HTMLElement, - public orthogonalSize: number + public height: number, + @ITerminalService terminalService: ITerminalService ) { this.element = document.createElement('div'); this.element.className = 'terminal-tabs-split-pane'; @@ -82,6 +91,8 @@ class SplitTabsPane implements IView { console.log(this.element); this.element.appendChild(item); console.log('after', this.element); + this._item = item; + this._terminalService = terminalService; } id: string = 'split-tabs-view'; @@ -100,17 +111,22 @@ class SplitTabsPane implements IView { getProgressIndicator(): IProgressIndicator | undefined { throw new Error('Method not implemented.'); } + public layout(size: number): void { // Only layout when both sizes are known - if (!size || !this.orthogonalSize) { + if (!size || !this.height) { return; } + if (this._item.classList.contains('tabs-widget')) { + } else { + this._terminalService.terminalTabs.forEach(t => t.layout(size, this.height)); + } } public orthogonalLayout(size: number): void { - this.orthogonalSize = size; + this.height = size; } } From 76ec94285b9ceb98a7f64288615afdda3f1cd126 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 09:46:01 -0700 Subject: [PATCH 016/115] a little closer --- .../contrib/terminal/browser/tabsView.ts | 32 +++++++++++-------- .../terminal/browser/terminalService.ts | 1 - .../contrib/terminal/browser/terminalTab.ts | 2 +- .../contrib/terminal/browser/terminalView.ts | 23 +++++++++---- 4 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/tabsView.ts b/src/vs/workbench/contrib/terminal/browser/tabsView.ts index fc1bff3307f..7f25b568514 100644 --- a/src/vs/workbench/contrib/terminal/browser/tabsView.ts +++ b/src/vs/workbench/contrib/terminal/browser/tabsView.ts @@ -16,10 +16,11 @@ export class TabsView extends Disposable { private height: number; private width: number; private _widget!: HTMLElement; + private _terminalService: ITerminalService; private _splitView!: SplitView; private readonly _splitViewDisposables = this._register(new DisposableStore()); private _children: SplitTabsPane[] = []; - + private _container: HTMLElement; private _onDidChange: Event = Event.None; public get onDidChange(): Event { return this._onDidChange; } @@ -28,18 +29,20 @@ export class TabsView extends Disposable { private container: HTMLElement, private parentContainer: HTMLElement, @IInstantiationService private readonly _instantiationService: IInstantiationService, - @ITerminalService private readonly _terminalService: ITerminalService + @ITerminalService private readonly terminalService: ITerminalService ) { super(); - if (context === 'terminal') { + if (context === 'terminal' && !this._widget) { const div = document.createElement('div'); div.classList.add('tabs-widget'); this._instantiationService.createInstance(TerminalTabsWidget, div); this._widget = div; } - this._createSplitView(); this.width = parentContainer.offsetWidth; this.height = parentContainer.offsetHeight; + this._terminalService = this.terminalService; + this._container = container; + this._createSplitView(); this._splitView.layout(this.width); } @@ -48,20 +51,21 @@ export class TabsView extends Disposable { } private _createSplitView(): void { - this._splitView = new SplitView(this.parentContainer, { orientation: Orientation.HORIZONTAL }); - this._splitViewDisposables.clear(); - this._splitViewDisposables.add(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); - const widgetWidth = 140; - // this._splitView.addView(new SplitTabsPane(this._widget, widgetWidth, this._terminalService), widgetWidth, 0); - // this._splitView.addView(new SplitTabsPane(this._container, this._width - widgetWidth, this._terminalService), this._width - widgetWidth, 1); - this._children.push(new SplitTabsPane(this._widget, widgetWidth, this._terminalService)); - this._children.push(new SplitTabsPane(this.container, this.width - widgetWidth, this._terminalService)); + if (!this._splitView) { + this._splitView = new SplitView(this.parentContainer, { orientation: Orientation.HORIZONTAL }); + this._splitViewDisposables.clear(); + this._splitViewDisposables.add(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); + const widgetWidth = 200; + this._splitView.addView(new SplitTabsPane(this._widget, widgetWidth, this._terminalService), widgetWidth, 0); + this._splitView.addView(new SplitTabsPane(this._container, this.width - widgetWidth, this._terminalService), this.width - widgetWidth, 1); + } } public layout(width: number, height: number): void { this.width = width; this.height = height; - this._children.forEach(c => c.orthogonalLayout(width)); + this._children.forEach(c => c.orthogonalLayout(height)); + this._terminalService.terminalTabs.forEach(tab => tab.attachToElement(this._container)); this._splitView.layout(width); } } @@ -121,7 +125,7 @@ class SplitTabsPane implements IView { if (this._item.classList.contains('tabs-widget')) { } else { - this._terminalService.terminalTabs.forEach(t => t.layout(size, this.height)); + // this._terminalService.terminalTabs.forEach(t => t.layout(size, this.height)); } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index 48148cab963..98c3291c97e 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -1082,7 +1082,6 @@ export class TerminalService implements ITerminalService { public async setContainers(panelContainer: HTMLElement, terminalContainer: HTMLElement): Promise { this._configHelper.panelContainer = panelContainer; this._terminalContainer = terminalContainer; - this._terminalTabs.forEach(tab => tab.attachToElement(terminalContainer)); } public hidePanel(): void { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts index 17a6b52ca10..cc3ce5c5638 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts @@ -264,7 +264,7 @@ export class TerminalTab extends Disposable implements ITerminalTab { } this._activeInstanceIndex = 0; if (this._container) { - this.attachToElement(this._container); + // this.attachToElement(this._container); } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 19a7be11a08..58df9cd7c59 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -37,6 +37,7 @@ import { ISelectOptionItem } from 'vs/base/browser/ui/selectBox/selectBox'; import { BrowserFeatures } from 'vs/base/browser/canIUse'; import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar'; import { TabsView } from 'vs/workbench/contrib/terminal/browser/tabsView'; +import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/terminalTabsWidget'; const FIND_FOCUS_CLASS = 'find-focused'; @@ -48,7 +49,8 @@ export class TerminalViewPane extends ViewPane { private _parentDomElement: HTMLElement | undefined; private _terminalContainer: HTMLElement | undefined; private _findWidget: TerminalFindWidget | undefined; - private _tabsView: TabsView | undefined; + private _tabsViewWrapper: HTMLElement | undefined; + private _tabsView: TerminalTabsWidget | undefined; private _terminalsInitialized = false; private _bodyDimensions: { width: number, height: number } = { width: 0, height: 0 }; private _isWelcomeShowing: boolean = false; @@ -115,17 +117,26 @@ export class TerminalViewPane extends ViewPane { this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); this._findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); } - if (!this._tabsView && this._terminalService.configHelper.config.showTabs) { - this._tabsView = this.instantiationService.createInstance(TabsView, 'terminal', this._terminalContainer, this._parentDomElement); + + if (this._tabsViewWrapper) { + this._parentDomElement.removeChild(this._tabsViewWrapper); + this._tabsViewWrapper = undefined; + } + if (!this._tabsViewWrapper && this._terminalService.configHelper.config.showTabs) { + this._tabsViewWrapper = document.createElement('div'); + this._tabsViewWrapper.classList.add('tabs-view-wrapper'); + this.instantiationService.createInstance(TabsView, 'terminal', this._terminalContainer, this._parentDomElement); + this._parentDomElement.append(this._tabsViewWrapper); } this._parentDomElement.appendChild(this._fontStyleElement); - this._parentDomElement.appendChild(this._terminalContainer); - this._parentDomElement.appendChild(this._findWidget.getDomNode()); + this._parentDomElement.appendChild( + // this._parentDomElement.appendChild(this._terminalContainer); + this._parentDomElement.appendChild(this._findWidget.getDomNode())); this._attachEventListeners(this._parentDomElement, this._terminalContainer); - this._terminalService.setContainers(container, this._terminalContainer); + this._terminalService.setContainers(container, this._parentDomElement); this._register(this.themeService.onDidColorThemeChange(theme => this._updateTheme(theme))); this._register(this.configurationService.onDidChangeConfiguration(e => { From 383a22e924a2a67c5e94f18ea8adabb87646db47 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 09:49:49 -0700 Subject: [PATCH 017/115] try more stuff --- src/vs/workbench/contrib/terminal/browser/tabsView.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/tabsView.ts b/src/vs/workbench/contrib/terminal/browser/tabsView.ts index 7f25b568514..f46a5319f55 100644 --- a/src/vs/workbench/contrib/terminal/browser/tabsView.ts +++ b/src/vs/workbench/contrib/terminal/browser/tabsView.ts @@ -64,8 +64,8 @@ export class TabsView extends Disposable { public layout(width: number, height: number): void { this.width = width; this.height = height; - this._children.forEach(c => c.orthogonalLayout(height)); - this._terminalService.terminalTabs.forEach(tab => tab.attachToElement(this._container)); + this._children.forEach(c => c.orthogonalLayout(width)); + this._terminalService.terminalTabs.forEach(tab => tab.attachToElement(this._children[1].element)); this._splitView.layout(width); } } From 56b96bc997b5a78f8ceccf9c4f64f131edd1e9df Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 11:17:53 -0700 Subject: [PATCH 018/115] The Great Migration of code from terminalView to tabsView --- .../contrib/terminal/browser/tabsView.ts | 216 ++++++++++++++---- .../contrib/terminal/browser/terminalView.ts | 186 ++------------- 2 files changed, 195 insertions(+), 207 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/tabsView.ts b/src/vs/workbench/contrib/terminal/browser/tabsView.ts index f46a5319f55..e63a0bb06ab 100644 --- a/src/vs/workbench/contrib/terminal/browser/tabsView.ts +++ b/src/vs/workbench/contrib/terminal/browser/tabsView.ts @@ -11,39 +11,56 @@ import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import { Event } from 'vs/base/common/event'; import { IView } from 'vs/workbench/common/views'; import { IProgressIndicator } from 'vs/platform/progress/common/progress'; +import * as dom from 'vs/base/browser/dom'; +import { isLinux, isMacintosh } from 'vs/base/common/platform'; +import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; +import { createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; +import { IAction } from 'vs/base/common/actions'; +import { IMenu, IMenuService, MenuId } from 'vs/platform/actions/common/actions'; +import { BrowserFeatures } from 'vs/base/browser/canIUse'; +import { DataTransfers } from 'vs/base/browser/dnd'; +import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; +import { INotificationService } from 'vs/platform/notification/common/notification'; +import { URI } from 'vs/base/common/uri'; export class TabsView extends Disposable { - private height: number; - private width: number; - private _widget!: HTMLElement; - private _terminalService: ITerminalService; + private _menu: IMenu; + private _width: number; + private _height: number; + private _cancelContextMenu: boolean = false; + private _tabsElement: HTMLElement; private _splitView!: SplitView; private readonly _splitViewDisposables = this._register(new DisposableStore()); private _children: SplitTabsPane[] = []; - private _container: HTMLElement; + private _terminalContainer: HTMLElement; private _onDidChange: Event = Event.None; public get onDidChange(): Event { return this._onDidChange; } constructor( - context: string, - private container: HTMLElement, - private parentContainer: HTMLElement, + private _parentDomElement: HTMLElement, @IInstantiationService private readonly _instantiationService: IInstantiationService, - @ITerminalService private readonly terminalService: ITerminalService + @ITerminalService private readonly _terminalService: ITerminalService, + @IContextMenuService private readonly _contextMenuService: IContextMenuService, + @IContextKeyService _contextKeyService: IContextKeyService, + @IMenuService _menuService: IMenuService, + @INotificationService private readonly _notificationService: INotificationService ) { super(); - if (context === 'terminal' && !this._widget) { - const div = document.createElement('div'); - div.classList.add('tabs-widget'); - this._instantiationService.createInstance(TerminalTabsWidget, div); - this._widget = div; - } - this.width = parentContainer.offsetWidth; - this.height = parentContainer.offsetHeight; - this._terminalService = this.terminalService; - this._container = container; + this._menu = this._register(_menuService.createMenu(MenuId.TerminalContext, _contextKeyService)); + this._tabsElement = document.createElement('div'); + this._tabsElement.classList.add('tabs-widget'); + this._instantiationService.createInstance(TerminalTabsWidget, this._tabsElement); + + this._width = _parentDomElement.offsetWidth; + this._height = _parentDomElement.offsetHeight; + this._createSplitView(); - this._splitView.layout(this.width); + + this._terminalContainer = document.createElement('div'); + this._terminalContainer.classList.add('terminal-outer-container'); + + this._attachEventListeners(this._parentDomElement, this._terminalContainer); } public get splitView(): SplitView { @@ -51,23 +68,141 @@ export class TabsView extends Disposable { } private _createSplitView(): void { - if (!this._splitView) { - this._splitView = new SplitView(this.parentContainer, { orientation: Orientation.HORIZONTAL }); - this._splitViewDisposables.clear(); - this._splitViewDisposables.add(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); - const widgetWidth = 200; - this._splitView.addView(new SplitTabsPane(this._widget, widgetWidth, this._terminalService), widgetWidth, 0); - this._splitView.addView(new SplitTabsPane(this._container, this.width - widgetWidth, this._terminalService), this.width - widgetWidth, 1); + if (this._splitView) { + return; } + this._splitView = new SplitView(this._parentDomElement, { orientation: Orientation.HORIZONTAL }); + this._splitViewDisposables.clear(); + this._splitViewDisposables.add(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); + const tabsWidgetWidth = 200; + if (this._terminalService.configHelper.config.showTabs) { + this._splitView.addView(new SplitTabsPane(this._tabsElement, tabsWidgetWidth, this._terminalService), tabsWidgetWidth, 0); + } + const tabContainer = new SplitTabsPane(this._terminalContainer, this._width - tabsWidgetWidth, this._terminalService); + this._splitView.addView(tabContainer, this._width - tabsWidgetWidth, 1); + this._terminalService.terminalTabs.forEach(tab => tab.attachToElement(tabContainer.element)); } public layout(width: number, height: number): void { - this.width = width; - this.height = height; + this._width = width; + this._height = height; this._children.forEach(c => c.orthogonalLayout(width)); - this._terminalService.terminalTabs.forEach(tab => tab.attachToElement(this._children[1].element)); this._splitView.layout(width); } + + private _attachEventListeners(parentDomElement: HTMLElement, terminalContainer: HTMLElement): void { + this._register(dom.addDisposableListener(parentDomElement, 'mousedown', async (event: MouseEvent) => { + if (this._terminalService.terminalInstances.length === 0) { + return; + } + + if (event.which === 2 && isLinux) { + // Drop selection and focus terminal on Linux to enable middle button paste when click + // occurs on the selection itself. + const terminal = this._terminalService.getActiveInstance(); + if (terminal) { + terminal.focus(); + } + } else if (event.which === 3) { + const rightClickBehavior = this._terminalService.configHelper.config.rightClickBehavior; + if (rightClickBehavior === 'copyPaste' || rightClickBehavior === 'paste') { + const terminal = this._terminalService.getActiveInstance(); + if (!terminal) { + return; + } + + // copyPaste: Shift+right click should open context menu + if (rightClickBehavior === 'copyPaste' && event.shiftKey) { + this._openContextMenu(event); + return; + } + + if (rightClickBehavior === 'copyPaste' && terminal.hasSelection()) { + await terminal.copySelection(); + terminal.clearSelection(); + } else { + if (BrowserFeatures.clipboard.readText) { + terminal.paste(); + } else { + this._notificationService.info(`This browser doesn't support the clipboard.readText API needed to trigger a paste, try ${isMacintosh ? '⌘' : 'Ctrl'}+V instead.`); + } + } + // Clear selection after all click event bubbling is finished on Mac to prevent + // right-click selecting a word which is seemed cannot be disabled. There is a + // flicker when pasting but this appears to give the best experience if the + // setting is enabled. + if (isMacintosh) { + setTimeout(() => { + terminal.clearSelection(); + }, 0); + } + this._cancelContextMenu = true; + } + } + })); + this._register(dom.addDisposableListener(parentDomElement, 'contextmenu', (event: MouseEvent) => { + if (!this._cancelContextMenu) { + this._openContextMenu(event); + } + event.preventDefault(); + event.stopImmediatePropagation(); + this._cancelContextMenu = false; + })); + this._register(dom.addDisposableListener(document, 'keydown', (event: KeyboardEvent) => { + terminalContainer.classList.toggle('alt-active', !!event.altKey); + })); + this._register(dom.addDisposableListener(document, 'keyup', (event: KeyboardEvent) => { + terminalContainer.classList.toggle('alt-active', !!event.altKey); + })); + this._register(dom.addDisposableListener(parentDomElement, 'keyup', (event: KeyboardEvent) => { + if (event.keyCode === 27) { + // Keep terminal open on escape + event.stopPropagation(); + } + })); + this._register(dom.addDisposableListener(parentDomElement, dom.EventType.DROP, async (e: DragEvent) => { + if (e.target === this._parentDomElement || dom.isAncestor(e.target as HTMLElement, parentDomElement)) { + if (!e.dataTransfer) { + return; + } + + // Check if files were dragged from the tree explorer + let path: string | undefined; + const resources = e.dataTransfer.getData(DataTransfers.RESOURCES); + if (resources) { + path = URI.parse(JSON.parse(resources)[0]).fsPath; + } else if (e.dataTransfer.files.length > 0 && e.dataTransfer.files[0].path /* Electron only */) { + // Check if the file was dragged from the filesystem + path = URI.file(e.dataTransfer.files[0].path).fsPath; + } + + if (!path) { + return; + } + + const terminal = this._terminalService.getActiveInstance(); + if (terminal) { + const preparedPath = await this._terminalService.preparePathForTerminalAsync(path, terminal.shellLaunchConfig.executable, terminal.title, terminal.shellType); + terminal.sendText(preparedPath, false); + terminal.focus(); + } + } + })); + } + private _openContextMenu(event: MouseEvent): void { + const standardEvent = new StandardMouseEvent(event); + const anchor: { x: number, y: number } = { x: standardEvent.posx, y: standardEvent.posy }; + + const actions: IAction[] = []; + const actionsDisposable = createAndFillInContextMenuActions(this._menu, undefined, actions); + + this._contextMenuService.showContextMenu({ + getAnchor: () => anchor, + getActions: () => actions, + getActionsContext: () => this._parentDomElement, + onHide: () => actionsDisposable.dispose() + }); + } } class SplitTabsPane implements IView { public minimumSize: number = 120; @@ -80,24 +215,14 @@ class SplitTabsPane implements IView { readonly element: HTMLElement; - private readonly _item: HTMLElement; - - private readonly _terminalService: ITerminalService; - constructor( readonly item: HTMLElement, public height: number, - @ITerminalService terminalService: ITerminalService + @ITerminalService _terminalService: ITerminalService ) { this.element = document.createElement('div'); this.element.className = 'terminal-tabs-split-pane'; - console.log(item); - console.log(this.element); this.element.appendChild(item); - console.log('after', this.element); - this._item = item; - this._terminalService = terminalService; - } id: string = 'split-tabs-view'; focus(): void { @@ -122,15 +247,14 @@ class SplitTabsPane implements IView { return; } - if (this._item.classList.contains('tabs-widget')) { + // if (this._item.classList.contains('tabs-widget')) { - } else { - // this._terminalService.terminalTabs.forEach(t => t.layout(size, this.height)); - } + // } else { + // // this._terminalService.terminalTabs.forEach(t => t.layout(size, this.height)); + // } } public orthogonalLayout(size: number): void { this.height = size; } } - diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 58df9cd7c59..3987493afc2 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -3,9 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as dom from 'vs/base/browser/dom'; import * as nls from 'vs/nls'; -import * as platform from 'vs/base/common/platform'; import { Action, IAction } from 'vs/base/common/actions'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView'; @@ -14,10 +12,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IThemeService, IColorTheme, registerThemingParticipant, ICssStyleCollector } from 'vs/platform/theme/common/themeService'; import { TerminalFindWidget } from 'vs/workbench/contrib/terminal/browser/terminalFindWidget'; import { configureTerminalSettingsTitle, selectDefaultProfileTitle, switchTerminalActionViewItemSeparator } from 'vs/workbench/contrib/terminal/browser/terminalActions'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { URI } from 'vs/base/common/uri'; import { TERMINAL_BACKGROUND_COLOR, TERMINAL_BORDER_COLOR } from 'vs/workbench/contrib/terminal/common/terminalColorRegistry'; -import { DataTransfers } from 'vs/base/browser/dnd'; import { INotificationService, IPromptChoice, Severity } from 'vs/platform/notification/common/notification'; import { ITerminalService, TerminalConnectionState } from 'vs/workbench/contrib/terminal/browser/terminal'; import { ViewPane, IViewPaneOptions } from 'vs/workbench/browser/parts/views/viewPane'; @@ -26,31 +21,26 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IViewDescriptorService } from 'vs/workbench/common/views'; import { IOpenerService } from 'vs/platform/opener/common/opener'; import { PANEL_BACKGROUND, SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme'; -import { IMenu, IMenuService, MenuId } from 'vs/platform/actions/common/actions'; -import { createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; +import { IMenuService } from 'vs/platform/actions/common/actions'; import { TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal'; import { SelectActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems'; import { ITerminalContributionService } from 'vs/workbench/contrib/terminal/common/terminalExtensionPoints'; import { attachSelectBoxStyler, attachStylerCallback } from 'vs/platform/theme/common/styler'; import { selectBorder } from 'vs/platform/theme/common/colorRegistry'; import { ISelectOptionItem } from 'vs/base/browser/ui/selectBox/selectBox'; -import { BrowserFeatures } from 'vs/base/browser/canIUse'; import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar'; import { TabsView } from 'vs/workbench/contrib/terminal/browser/tabsView'; -import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/terminalTabsWidget'; const FIND_FOCUS_CLASS = 'find-focused'; export class TerminalViewPane extends ViewPane { - private _menu: IMenu; private _actions: IAction[] | undefined; - private _cancelContextMenu: boolean = false; private _fontStyleElement: HTMLElement | undefined; private _parentDomElement: HTMLElement | undefined; private _terminalContainer: HTMLElement | undefined; private _findWidget: TerminalFindWidget | undefined; private _tabsViewWrapper: HTMLElement | undefined; - private _tabsView: TerminalTabsWidget | undefined; + private _tabsView: TabsView | undefined; private _terminalsInitialized = false; private _bodyDimensions: { width: number, height: number } = { width: 0, height: 0 }; private _isWelcomeShowing: boolean = false; @@ -61,7 +51,7 @@ export class TerminalViewPane extends ViewPane { @IContextKeyService contextKeyService: IContextKeyService, @IViewDescriptorService viewDescriptorService: IViewDescriptorService, @IConfigurationService configurationService: IConfigurationService, - @IContextMenuService private readonly _contextMenuService: IContextMenuService, + @IContextMenuService _contextMenuService: IContextMenuService, @IInstantiationService private readonly _instantiationService: IInstantiationService, @ITerminalService private readonly _terminalService: ITerminalService, @IThemeService protected readonly themeService: IThemeService, @@ -71,7 +61,6 @@ export class TerminalViewPane extends ViewPane { @IMenuService menuService: IMenuService, ) { super(options, keybindingService, _contextMenuService, configurationService, contextKeyService, viewDescriptorService, _instantiationService, openerService, themeService, telemetryService); - this._menu = this._register(menuService.createMenu(MenuId.TerminalContext, contextKeyService)); this._terminalService.onDidRegisterProcessSupport(() => { if (this._actions) { for (const action of this._actions) { @@ -90,52 +79,35 @@ export class TerminalViewPane extends ViewPane { this._terminalContainer.style.display = 'block'; this.layoutBody(this._terminalContainer.offsetHeight, this._terminalContainer.offsetWidth); } + if (!this._tabsView && this._parentDomElement) { + this._createTabsView(); + this.layoutBody(this._parentDomElement.offsetHeight, this._parentDomElement.offsetWidth); + } }); } public renderBody(container?: HTMLElement): void { - if (!container && !this._parentDomElement) { - return; - } else if (!container) { - container = this._parentDomElement; - } - if (!container) { + if (!container || !this._parentDomElement) { return; } + super.renderBody(container); this._parentDomElement = container; this._parentDomElement.classList.add('integrated-terminal'); this._fontStyleElement = document.createElement('style'); - if (!this._terminalContainer) { - this._terminalContainer = document.createElement('div'); - this._terminalContainer.classList.add('terminal-outer-container'); - this._terminalContainer.style.display = this.shouldShowWelcome() ? 'none' : 'block'; - } - if (!this._findWidget) { - this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); - this._findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); - } + this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); + this._findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); - if (this._tabsViewWrapper) { - this._parentDomElement.removeChild(this._tabsViewWrapper); - this._tabsViewWrapper = undefined; - } - if (!this._tabsViewWrapper && this._terminalService.configHelper.config.showTabs) { - this._tabsViewWrapper = document.createElement('div'); - this._tabsViewWrapper.classList.add('tabs-view-wrapper'); - this.instantiationService.createInstance(TabsView, 'terminal', this._terminalContainer, this._parentDomElement); - this._parentDomElement.append(this._tabsViewWrapper); + if (!this.shouldShowWelcome()) { + this._createTabsView(); } this._parentDomElement.appendChild(this._fontStyleElement); this._parentDomElement.appendChild( - // this._parentDomElement.appendChild(this._terminalContainer); this._parentDomElement.appendChild(this._findWidget.getDomNode())); - this._attachEventListeners(this._parentDomElement, this._terminalContainer); - this._terminalService.setContainers(container, this._parentDomElement); this._register(this.themeService.onDidColorThemeChange(theme => this._updateTheme(theme))); @@ -182,9 +154,18 @@ export class TerminalViewPane extends ViewPane { }); } })); + this.layoutBody(this._parentDomElement.offsetHeight, this._parentDomElement.offsetWidth); + } - // Force another layout (first is setContainers) since config has changed - this.layoutBody(this._terminalContainer.offsetHeight, this._terminalContainer.offsetWidth); + private _createTabsView(): void { + if (!this._parentDomElement) { + return; + } + this._tabsViewWrapper = document.createElement('div'); + this._tabsViewWrapper.classList.add('tabs-view-wrapper'); + this.instantiationService.createInstance(TabsView, this._parentDomElement); + // make helper function + this._parentDomElement.append(this._tabsViewWrapper); } protected layoutBody(height: number, width: number): void { @@ -193,9 +174,7 @@ export class TerminalViewPane extends ViewPane { this._bodyDimensions.width = width; this._bodyDimensions.height = height; if (this._tabsView) { - this._tabsView?.layout(width, height); - } else { - this._terminalService.terminalTabs.forEach(t => t.layout(width, height)); + this._tabsView.layout(width, height); } } @@ -255,121 +234,6 @@ export class TerminalViewPane extends ViewPane { return this._findWidget!; } - private _attachEventListeners(parentDomElement: HTMLElement, terminalContainer: HTMLElement): void { - this._register(dom.addDisposableListener(parentDomElement, 'mousedown', async (event: MouseEvent) => { - if (this._terminalService.terminalInstances.length === 0) { - return; - } - - if (event.which === 2 && platform.isLinux) { - // Drop selection and focus terminal on Linux to enable middle button paste when click - // occurs on the selection itself. - const terminal = this._terminalService.getActiveInstance(); - if (terminal) { - terminal.focus(); - } - } else if (event.which === 3) { - const rightClickBehavior = this._terminalService.configHelper.config.rightClickBehavior; - if (rightClickBehavior === 'copyPaste' || rightClickBehavior === 'paste') { - const terminal = this._terminalService.getActiveInstance(); - if (!terminal) { - return; - } - - // copyPaste: Shift+right click should open context menu - if (rightClickBehavior === 'copyPaste' && event.shiftKey) { - this._openContextMenu(event); - return; - } - - if (rightClickBehavior === 'copyPaste' && terminal.hasSelection()) { - await terminal.copySelection(); - terminal.clearSelection(); - } else { - if (BrowserFeatures.clipboard.readText) { - terminal.paste(); - } else { - this._notificationService.info(`This browser doesn't support the clipboard.readText API needed to trigger a paste, try ${platform.isMacintosh ? '⌘' : 'Ctrl'}+V instead.`); - } - } - // Clear selection after all click event bubbling is finished on Mac to prevent - // right-click selecting a word which is seemed cannot be disabled. There is a - // flicker when pasting but this appears to give the best experience if the - // setting is enabled. - if (platform.isMacintosh) { - setTimeout(() => { - terminal.clearSelection(); - }, 0); - } - this._cancelContextMenu = true; - } - } - })); - this._register(dom.addDisposableListener(parentDomElement, 'contextmenu', (event: MouseEvent) => { - if (!this._cancelContextMenu) { - this._openContextMenu(event); - } - event.preventDefault(); - event.stopImmediatePropagation(); - this._cancelContextMenu = false; - })); - this._register(dom.addDisposableListener(document, 'keydown', (event: KeyboardEvent) => { - terminalContainer.classList.toggle('alt-active', !!event.altKey); - })); - this._register(dom.addDisposableListener(document, 'keyup', (event: KeyboardEvent) => { - terminalContainer.classList.toggle('alt-active', !!event.altKey); - })); - this._register(dom.addDisposableListener(parentDomElement, 'keyup', (event: KeyboardEvent) => { - if (event.keyCode === 27) { - // Keep terminal open on escape - event.stopPropagation(); - } - })); - this._register(dom.addDisposableListener(parentDomElement, dom.EventType.DROP, async (e: DragEvent) => { - if (e.target === this._parentDomElement || dom.isAncestor(e.target as HTMLElement, parentDomElement)) { - if (!e.dataTransfer) { - return; - } - - // Check if files were dragged from the tree explorer - let path: string | undefined; - const resources = e.dataTransfer.getData(DataTransfers.RESOURCES); - if (resources) { - path = URI.parse(JSON.parse(resources)[0]).fsPath; - } else if (e.dataTransfer.files.length > 0 && e.dataTransfer.files[0].path /* Electron only */) { - // Check if the file was dragged from the filesystem - path = URI.file(e.dataTransfer.files[0].path).fsPath; - } - - if (!path) { - return; - } - - const terminal = this._terminalService.getActiveInstance(); - if (terminal) { - const preparedPath = await this._terminalService.preparePathForTerminalAsync(path, terminal.shellLaunchConfig.executable, terminal.title, terminal.shellType); - terminal.sendText(preparedPath, false); - terminal.focus(); - } - } - })); - } - - private _openContextMenu(event: MouseEvent): void { - const standardEvent = new StandardMouseEvent(event); - const anchor: { x: number, y: number } = { x: standardEvent.posx, y: standardEvent.posy }; - - const actions: IAction[] = []; - const actionsDisposable = createAndFillInContextMenuActions(this._menu, undefined, actions); - - this._contextMenuService.showContextMenu({ - getAnchor: () => anchor, - getActions: () => actions, - getActionsContext: () => this._parentDomElement, - onHide: () => actionsDisposable.dispose() - }); - } - private _updateTheme(theme?: IColorTheme): void { if (!theme) { theme = this.themeService.getColorTheme(); From ab4f455f85087ae18430aede7f40da802c05e2f0 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 11:42:30 -0700 Subject: [PATCH 019/115] more migration --- .../contrib/terminal/browser/tabsView.ts | 17 +++++++++++------ .../contrib/terminal/browser/terminalService.ts | 3 --- .../contrib/terminal/browser/terminalView.ts | 15 ++------------- 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/tabsView.ts b/src/vs/workbench/contrib/terminal/browser/tabsView.ts index e63a0bb06ab..e879a885b3a 100644 --- a/src/vs/workbench/contrib/terminal/browser/tabsView.ts +++ b/src/vs/workbench/contrib/terminal/browser/tabsView.ts @@ -23,11 +23,14 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { INotificationService } from 'vs/platform/notification/common/notification'; import { URI } from 'vs/base/common/uri'; +import { TerminalFindWidget } from 'vs/workbench/contrib/terminal/browser/terminalFindWidget'; + +const FIND_FOCUS_CLASS = 'find-focused'; export class TabsView extends Disposable { private _menu: IMenu; - private _width: number; - private _height: number; + _width: number; + _height: number; private _cancelContextMenu: boolean = false; private _tabsElement: HTMLElement; private _splitView!: SplitView; @@ -39,12 +42,13 @@ export class TabsView extends Disposable { constructor( private _parentDomElement: HTMLElement, + _findWidget: TerminalFindWidget, @IInstantiationService private readonly _instantiationService: IInstantiationService, @ITerminalService private readonly _terminalService: ITerminalService, @IContextMenuService private readonly _contextMenuService: IContextMenuService, @IContextKeyService _contextKeyService: IContextKeyService, @IMenuService _menuService: IMenuService, - @INotificationService private readonly _notificationService: INotificationService + @INotificationService private readonly _notificationService: INotificationService, ) { super(); this._menu = this._register(_menuService.createMenu(MenuId.TerminalContext, _contextKeyService)); @@ -55,12 +59,13 @@ export class TabsView extends Disposable { this._width = _parentDomElement.offsetWidth; this._height = _parentDomElement.offsetHeight; - this._createSplitView(); - this._terminalContainer = document.createElement('div'); this._terminalContainer.classList.add('terminal-outer-container'); - + this._terminalContainer.style.display = 'block'; + this._terminalService.setContainers(this._terminalContainer, this._parentDomElement); this._attachEventListeners(this._parentDomElement, this._terminalContainer); + this._createSplitView(); + _findWidget?.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); } public get splitView(): SplitView { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index 98c3291c97e..8e1b6b822d0 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -161,9 +161,6 @@ export class TerminalService implements ITerminalService { e.affectsConfiguration('terminal.integrated.profiles.linux') || e.affectsConfiguration('terminal.integrated.useWslProfiles')) { this._updateAvailableProfilesNow(); - } else if (e.affectsConfiguration('terminal.integrated.showTabs')) { - const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; - pane?.renderBody(); } }); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 3987493afc2..19d86e1c506 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -31,14 +31,11 @@ import { ISelectOptionItem } from 'vs/base/browser/ui/selectBox/selectBox'; import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar'; import { TabsView } from 'vs/workbench/contrib/terminal/browser/tabsView'; -const FIND_FOCUS_CLASS = 'find-focused'; - export class TerminalViewPane extends ViewPane { private _actions: IAction[] | undefined; private _fontStyleElement: HTMLElement | undefined; private _parentDomElement: HTMLElement | undefined; - private _terminalContainer: HTMLElement | undefined; - private _findWidget: TerminalFindWidget | undefined; + private _findWidget: TerminalFindWidget; private _tabsViewWrapper: HTMLElement | undefined; private _tabsView: TabsView | undefined; private _terminalsInitialized = false; @@ -75,10 +72,6 @@ export class TerminalViewPane extends ViewPane { } this._isWelcomeShowing = true; this._onDidChangeViewWelcomeState.fire(); - if (this._terminalContainer) { - this._terminalContainer.style.display = 'block'; - this.layoutBody(this._terminalContainer.offsetHeight, this._terminalContainer.offsetWidth); - } if (!this._tabsView && this._parentDomElement) { this._createTabsView(); this.layoutBody(this._parentDomElement.offsetHeight, this._parentDomElement.offsetWidth); @@ -96,9 +89,7 @@ export class TerminalViewPane extends ViewPane { this._parentDomElement = container; this._parentDomElement.classList.add('integrated-terminal'); this._fontStyleElement = document.createElement('style'); - this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); - this._findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); if (!this.shouldShowWelcome()) { this._createTabsView(); @@ -108,8 +99,6 @@ export class TerminalViewPane extends ViewPane { this._parentDomElement.appendChild( this._parentDomElement.appendChild(this._findWidget.getDomNode())); - this._terminalService.setContainers(container, this._parentDomElement); - this._register(this.themeService.onDidColorThemeChange(theme => this._updateTheme(theme))); this._register(this.configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('terminal.integrated.fontFamily') || e.affectsConfiguration('editor.fontFamily')) { @@ -163,7 +152,7 @@ export class TerminalViewPane extends ViewPane { } this._tabsViewWrapper = document.createElement('div'); this._tabsViewWrapper.classList.add('tabs-view-wrapper'); - this.instantiationService.createInstance(TabsView, this._parentDomElement); + this.instantiationService.createInstance(TabsView, this._parentDomElement, this._findWidget); // make helper function this._parentDomElement.append(this._tabsViewWrapper); } From 6b1d3bfb949b0fed7d6acfc0c1411ab65827d1c6 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 12:04:37 -0700 Subject: [PATCH 020/115] delete comment --- src/vs/workbench/contrib/terminal/browser/terminalView.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 19d86e1c506..cd159e22943 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -153,7 +153,6 @@ export class TerminalViewPane extends ViewPane { this._tabsViewWrapper = document.createElement('div'); this._tabsViewWrapper.classList.add('tabs-view-wrapper'); this.instantiationService.createInstance(TabsView, this._parentDomElement, this._findWidget); - // make helper function this._parentDomElement.append(this._tabsViewWrapper); } From 070e70870944519514ff881feb7a1b811d35e484 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 12:25:38 -0700 Subject: [PATCH 021/115] revert some changes --- src/vs/workbench/contrib/terminal/browser/tabsView.ts | 11 ++++++++--- .../contrib/terminal/browser/terminalView.ts | 6 +----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/tabsView.ts b/src/vs/workbench/contrib/terminal/browser/tabsView.ts index e879a885b3a..7ea44c35364 100644 --- a/src/vs/workbench/contrib/terminal/browser/tabsView.ts +++ b/src/vs/workbench/contrib/terminal/browser/tabsView.ts @@ -65,7 +65,11 @@ export class TabsView extends Disposable { this._terminalService.setContainers(this._terminalContainer, this._parentDomElement); this._attachEventListeners(this._parentDomElement, this._terminalContainer); this._createSplitView(); - _findWidget?.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); + _findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); + // this._terminalService.onInstancesChanged(() => { + // this._splitView.dispose(); + // this._createSplitView(); + // }); } public get splitView(): SplitView { @@ -79,8 +83,9 @@ export class TabsView extends Disposable { this._splitView = new SplitView(this._parentDomElement, { orientation: Orientation.HORIZONTAL }); this._splitViewDisposables.clear(); this._splitViewDisposables.add(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); - const tabsWidgetWidth = 200; - if (this._terminalService.configHelper.config.showTabs) { + const showTabs = this._terminalService.configHelper.config.showTabs; + const tabsWidgetWidth = showTabs ? 200 : 0; + if (showTabs) { this._splitView.addView(new SplitTabsPane(this._tabsElement, tabsWidgetWidth, this._terminalService), tabsWidgetWidth, 0); } const tabContainer = new SplitTabsPane(this._terminalContainer, this._width - tabsWidgetWidth, this._terminalService); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index cd159e22943..68e168c45bd 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -79,11 +79,7 @@ export class TerminalViewPane extends ViewPane { }); } - public renderBody(container?: HTMLElement): void { - if (!container || !this._parentDomElement) { - return; - } - + public renderBody(container: HTMLElement): void { super.renderBody(container); this._parentDomElement = container; From 1b70c818a17b1207ab2806dd40044c8e51057823 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 12:30:44 -0700 Subject: [PATCH 022/115] fix error, sign off for now --- .../workbench/contrib/terminal/browser/terminalService.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index 8e1b6b822d0..eede1e6e795 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -164,13 +164,6 @@ export class TerminalService implements ITerminalService { } }); - this.onInstancesChanged(() => { - if (this._configHelper.config.showTabs) { - const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; - pane?.renderBody(); - } - }); - const enableTerminalReconnection = this.configHelper.config.enablePersistentSessions; const conn = this._remoteAgentService.getConnection(); From 3546e73c6826a2ea27b0abdd27db3c42025da49b Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 16:24:23 -0700 Subject: [PATCH 023/115] take 2, sash still disabled but otherwise working --- .vscode/settings.json | 1 - .../contrib/terminal/browser/tabsView.ts | 4 -- .../terminal/browser/terminalService.ts | 18 ++--- .../terminal/browser/terminalTabbedView.ts | 65 +++++++++++++++++++ .../contrib/terminal/browser/terminalView.ts | 52 +++------------ 5 files changed, 83 insertions(+), 57 deletions(-) create mode 100644 src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 7eede8c30a9..eabef1693e9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -86,5 +86,4 @@ }, "typescript.tsc.autoDetect": "off", "notebook.experimental.useMarkdownRenderer": true, - "testing.autoRun.mode": "onlyPreviouslyRun", } diff --git a/src/vs/workbench/contrib/terminal/browser/tabsView.ts b/src/vs/workbench/contrib/terminal/browser/tabsView.ts index 7ea44c35364..ee41e2112b5 100644 --- a/src/vs/workbench/contrib/terminal/browser/tabsView.ts +++ b/src/vs/workbench/contrib/terminal/browser/tabsView.ts @@ -66,10 +66,6 @@ export class TabsView extends Disposable { this._attachEventListeners(this._parentDomElement, this._terminalContainer); this._createSplitView(); _findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); - // this._terminalService.onInstancesChanged(() => { - // this._splitView.dispose(); - // this._createSplitView(); - // }); } public get splitView(): SplitView { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index eede1e6e795..c348b164312 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -1039,33 +1039,33 @@ export class TerminalService implements ITerminalService { public async focusFindWidget(): Promise { await this.showPanel(false); - const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; - pane.focusFindWidget(); + // const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; + // pane.focusFindWidget(); this._findWidgetVisible.set(true); } public hideFindWidget(): void { const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; if (pane) { - pane.hideFindWidget(); - this._findWidgetVisible.reset(); - pane.focus(); + // pane.hideFindWidget(); + // this._findWidgetVisible.reset(); + // pane.focus(); } } public findNext(): void { const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; if (pane) { - pane.showFindWidget(); - pane.getFindWidget().find(false); + // pane.showFindWidget(); + // pane.getFindWidget().find(false); } } public findPrevious(): void { const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; if (pane) { - pane.showFindWidget(); - pane.getFindWidget().find(true); + // pane.showFindWidget(); + // pane.getFindWidget().find(true); } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts new file mode 100644 index 00000000000..adc6d3c84d1 --- /dev/null +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -0,0 +1,65 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Orientation, Sizing, SplitView } from 'vs/base/browser/ui/splitview/splitview'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; + +export class TerminalTabbedView extends Disposable { + private _splitView!: SplitView; + private _parentElement: HTMLElement; + private _terminalContainer: HTMLElement | undefined; + private _terminalTabTree: HTMLElement | undefined; + private _displayTabs: boolean; + constructor( + parentElement: HTMLElement, + @ITerminalService _terminalService: ITerminalService, + @IConfigurationService _configurationService: IConfigurationService + ) { + super(); + this._parentElement = parentElement; + this._displayTabs = _terminalService.configHelper.config.showTabs; + this._createSplitView(); + + _configurationService.onDidChangeConfiguration(e => { + if (e.affectsConfiguration('terminal.integrated.showTabs')) { + this._displayTabs = _terminalService.configHelper.config.showTabs; + } + }); + } + + private _createSplitView(): void { + if (this._splitView) { + return; + } + this._splitView = new SplitView(this._parentElement, { orientation: Orientation.HORIZONTAL }); + + this._terminalContainer = document.createElement('div'); + this._terminalContainer.innerText = 'Hi'; + this._terminalTabTree = document.createElement('div'); + this._terminalTabTree.innerText = 'Hello'; + + if (this._displayTabs) { + this._splitView.addView({ + element: this._terminalTabTree, + layout: size => this._layout(size), + minimumSize: 220, + maximumSize: Number.POSITIVE_INFINITY, + onDidChange: () => Disposable.None + }, Sizing.Distribute); + } + this._splitView.addView({ + element: this._terminalContainer, + layout: size => this._layout(size), + minimumSize: 220, + maximumSize: Number.POSITIVE_INFINITY, + onDidChange: () => Disposable.None + }, Sizing.Distribute); + } + private _layout(size: number): void { + + } +} diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 68e168c45bd..c50f37414dd 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -10,7 +10,6 @@ import { IContextMenuService, IContextViewService } from 'vs/platform/contextvie import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IThemeService, IColorTheme, registerThemingParticipant, ICssStyleCollector } from 'vs/platform/theme/common/themeService'; -import { TerminalFindWidget } from 'vs/workbench/contrib/terminal/browser/terminalFindWidget'; import { configureTerminalSettingsTitle, selectDefaultProfileTitle, switchTerminalActionViewItemSeparator } from 'vs/workbench/contrib/terminal/browser/terminalActions'; import { TERMINAL_BACKGROUND_COLOR, TERMINAL_BORDER_COLOR } from 'vs/workbench/contrib/terminal/common/terminalColorRegistry'; import { INotificationService, IPromptChoice, Severity } from 'vs/platform/notification/common/notification'; @@ -30,12 +29,13 @@ import { selectBorder } from 'vs/platform/theme/common/colorRegistry'; import { ISelectOptionItem } from 'vs/base/browser/ui/selectBox/selectBox'; import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar'; import { TabsView } from 'vs/workbench/contrib/terminal/browser/tabsView'; +import { TerminalTabbedView } from 'vs/workbench/contrib/terminal/browser/terminalTabbedView'; export class TerminalViewPane extends ViewPane { private _actions: IAction[] | undefined; private _fontStyleElement: HTMLElement | undefined; private _parentDomElement: HTMLElement | undefined; - private _findWidget: TerminalFindWidget; + // private _findWidget: TerminalFindWidget; private _tabsViewWrapper: HTMLElement | undefined; private _tabsView: TabsView | undefined; private _terminalsInitialized = false; @@ -85,17 +85,17 @@ export class TerminalViewPane extends ViewPane { this._parentDomElement = container; this._parentDomElement.classList.add('integrated-terminal'); this._fontStyleElement = document.createElement('style'); - this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); + // this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); if (!this.shouldShowWelcome()) { this._createTabsView(); } this._parentDomElement.appendChild(this._fontStyleElement); - this._parentDomElement.appendChild( - this._parentDomElement.appendChild(this._findWidget.getDomNode())); + // this._parentDomElement.appendChild( + // this._parentDomElement.appendChild(this._findWidget.getDomNode())); - this._register(this.themeService.onDidColorThemeChange(theme => this._updateTheme(theme))); + // this._register(this.themeService.onDidColorThemeChange(theme => this._updateTheme(theme))); this._register(this.configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('terminal.integrated.fontFamily') || e.affectsConfiguration('editor.fontFamily')) { const configHelper = this._terminalService.configHelper; @@ -108,7 +108,7 @@ export class TerminalViewPane extends ViewPane { } } })); - this._updateTheme(); + // this._updateTheme(); this._register(this.onDidChangeBodyVisibility(visible => { if (visible) { @@ -124,7 +124,7 @@ export class TerminalViewPane extends ViewPane { } } - this._updateTheme(); + // this._updateTheme(); if (hadTerminals) { this._terminalService.getActiveTab()?.setVisible(visible); } else { @@ -148,7 +148,7 @@ export class TerminalViewPane extends ViewPane { } this._tabsViewWrapper = document.createElement('div'); this._tabsViewWrapper.classList.add('tabs-view-wrapper'); - this.instantiationService.createInstance(TabsView, this._parentDomElement, this._findWidget); + this.instantiationService.createInstance(TerminalTabbedView, this._parentDomElement); this._parentDomElement.append(this._tabsViewWrapper); } @@ -192,40 +192,6 @@ export class TerminalViewPane extends ViewPane { this._terminalService.getActiveInstance()?.focusWhenReady(); } - public focusFindWidget() { - const activeInstance = this._terminalService.getActiveInstance(); - if (activeInstance && activeInstance.hasSelection() && activeInstance.selection!.indexOf('\n') === -1) { - this._findWidget!.reveal(activeInstance.selection); - } else { - this._findWidget!.reveal(); - } - } - - public hideFindWidget() { - this._findWidget!.hide(); - } - - public showFindWidget() { - const activeInstance = this._terminalService.getActiveInstance(); - if (activeInstance && activeInstance.hasSelection() && activeInstance.selection!.indexOf('\n') === -1) { - this._findWidget!.show(activeInstance.selection); - } else { - this._findWidget!.show(); - } - } - - public getFindWidget(): TerminalFindWidget { - return this._findWidget!; - } - - private _updateTheme(theme?: IColorTheme): void { - if (!theme) { - theme = this.themeService.getColorTheme(); - } - - this._findWidget?.updateTheme(theme); - } - shouldShowWelcome(): boolean { this._isWelcomeShowing = !this._terminalService.isProcessSupportRegistered && this._terminalService.terminalInstances.length === 0; return this._isWelcomeShowing; From 0e15648f9fc0db167ff986e3bb2bd5ed318fa54e Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 16:33:01 -0700 Subject: [PATCH 024/115] clean up a bit --- .../terminal/browser/terminalTabbedView.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index adc6d3c84d1..2585fe5d9af 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -35,23 +35,27 @@ export class TerminalTabbedView extends Disposable { if (this._splitView) { return; } + this._splitView = new SplitView(this._parentElement, { orientation: Orientation.HORIZONTAL }); + this._register(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); this._terminalContainer = document.createElement('div'); - this._terminalContainer.innerText = 'Hi'; this._terminalTabTree = document.createElement('div'); - this._terminalTabTree.innerText = 'Hello'; + this._configureViews(); if (this._displayTabs) { + // show tab tree this._splitView.addView({ element: this._terminalTabTree, layout: size => this._layout(size), - minimumSize: 220, - maximumSize: Number.POSITIVE_INFINITY, + minimumSize: 100, + maximumSize: 220, onDidChange: () => Disposable.None }, Sizing.Distribute); } + this._splitView.addView({ + // always show terminals element: this._terminalContainer, layout: size => this._layout(size), minimumSize: 220, @@ -59,6 +63,12 @@ export class TerminalTabbedView extends Disposable { onDidChange: () => Disposable.None }, Sizing.Distribute); } + + private _configureViews(): void { + this._terminalContainer!.innerText = 'Hi'; + this._terminalTabTree!.innerText = 'Hello'; + } + private _layout(size: number): void { } From 6beb1b43af51720f17a1ead6a84ed9f266504501 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 6 Apr 2021 19:57:34 -0700 Subject: [PATCH 025/115] more splitView work --- .../contrib/terminal/browser/terminalTabbedView.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index 2585fe5d9af..2ac3cecb8e0 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -10,6 +10,7 @@ import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal export class TerminalTabbedView extends Disposable { private _splitView!: SplitView; + private _width: number = 0; private _parentElement: HTMLElement; private _terminalContainer: HTMLElement | undefined; private _terminalTabTree: HTMLElement | undefined; @@ -22,6 +23,7 @@ export class TerminalTabbedView extends Disposable { super(); this._parentElement = parentElement; this._displayTabs = _terminalService.configHelper.config.showTabs; + this._width = this._parentElement.clientWidth; this._createSplitView(); _configurationService.onDidChangeConfiguration(e => { @@ -35,7 +37,6 @@ export class TerminalTabbedView extends Disposable { if (this._splitView) { return; } - this._splitView = new SplitView(this._parentElement, { orientation: Orientation.HORIZONTAL }); this._register(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); @@ -48,8 +49,8 @@ export class TerminalTabbedView extends Disposable { this._splitView.addView({ element: this._terminalTabTree, layout: size => this._layout(size), - minimumSize: 100, - maximumSize: 220, + minimumSize: 600, + maximumSize: 800, onDidChange: () => Disposable.None }, Sizing.Distribute); } @@ -62,6 +63,8 @@ export class TerminalTabbedView extends Disposable { maximumSize: Number.POSITIVE_INFINITY, onDidChange: () => Disposable.None }, Sizing.Distribute); + + this._splitView.layout(this._width); } private _configureViews(): void { From 08508fd2d51d2698e8a24e9d4360308c8588ad2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Moreno?= Date: Wed, 7 Apr 2021 15:36:23 +0200 Subject: [PATCH 026/115] call TerminalTabbedView.layout --- .../terminal/browser/terminalTabbedView.ts | 24 ++++++++----------- .../contrib/terminal/browser/terminalView.ts | 4 +++- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index 2ac3cecb8e0..b799cac9c15 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -9,22 +9,20 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; export class TerminalTabbedView extends Disposable { + private _splitView!: SplitView; - private _width: number = 0; - private _parentElement: HTMLElement; private _terminalContainer: HTMLElement | undefined; private _terminalTabTree: HTMLElement | undefined; private _displayTabs: boolean; + constructor( parentElement: HTMLElement, @ITerminalService _terminalService: ITerminalService, @IConfigurationService _configurationService: IConfigurationService ) { super(); - this._parentElement = parentElement; this._displayTabs = _terminalService.configHelper.config.showTabs; - this._width = this._parentElement.clientWidth; - this._createSplitView(); + this._createSplitView(parentElement); _configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('terminal.integrated.showTabs')) { @@ -33,11 +31,11 @@ export class TerminalTabbedView extends Disposable { }); } - private _createSplitView(): void { + private _createSplitView(parentElement: HTMLElement): void { if (this._splitView) { return; } - this._splitView = new SplitView(this._parentElement, { orientation: Orientation.HORIZONTAL }); + this._splitView = new SplitView(parentElement, { orientation: Orientation.HORIZONTAL }); this._register(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); this._terminalContainer = document.createElement('div'); @@ -48,9 +46,9 @@ export class TerminalTabbedView extends Disposable { // show tab tree this._splitView.addView({ element: this._terminalTabTree, - layout: size => this._layout(size), + layout: size => undefined, minimumSize: 600, - maximumSize: 800, + maximumSize: Number.POSITIVE_INFINITY, onDidChange: () => Disposable.None }, Sizing.Distribute); } @@ -58,13 +56,11 @@ export class TerminalTabbedView extends Disposable { this._splitView.addView({ // always show terminals element: this._terminalContainer, - layout: size => this._layout(size), + layout: size => undefined, minimumSize: 220, maximumSize: Number.POSITIVE_INFINITY, onDidChange: () => Disposable.None }, Sizing.Distribute); - - this._splitView.layout(this._width); } private _configureViews(): void { @@ -72,7 +68,7 @@ export class TerminalTabbedView extends Disposable { this._terminalTabTree!.innerText = 'Hello'; } - private _layout(size: number): void { - + layout(width: number): void { + this._splitView.layout(width); } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index c50f37414dd..ecd448f564b 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -37,6 +37,7 @@ export class TerminalViewPane extends ViewPane { private _parentDomElement: HTMLElement | undefined; // private _findWidget: TerminalFindWidget; private _tabsViewWrapper: HTMLElement | undefined; + private _terminalTabbedView!: TerminalTabbedView; private _tabsView: TabsView | undefined; private _terminalsInitialized = false; private _bodyDimensions: { width: number, height: number } = { width: 0, height: 0 }; @@ -148,7 +149,7 @@ export class TerminalViewPane extends ViewPane { } this._tabsViewWrapper = document.createElement('div'); this._tabsViewWrapper.classList.add('tabs-view-wrapper'); - this.instantiationService.createInstance(TerminalTabbedView, this._parentDomElement); + this._terminalTabbedView = this.instantiationService.createInstance(TerminalTabbedView, this._parentDomElement); this._parentDomElement.append(this._tabsViewWrapper); } @@ -160,6 +161,7 @@ export class TerminalViewPane extends ViewPane { if (this._tabsView) { this._tabsView.layout(width, height); } + this._terminalTabbedView.layout(width); } public getActionViewItem(action: Action): IActionViewItem | undefined { From 55b1c5bca8582e7f6d8fb812e7cfa77eeb4b131c Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 07:11:45 -0700 Subject: [PATCH 027/115] sash working! --- .../terminal/browser/terminalTabbedView.ts | 40 ++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index b799cac9c15..888d5382b74 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -13,7 +13,9 @@ export class TerminalTabbedView extends Disposable { private _splitView!: SplitView; private _terminalContainer: HTMLElement | undefined; private _terminalTabTree: HTMLElement | undefined; - private _displayTabs: boolean; + private _showTabs: boolean; + private TABS_WIDGET_INDEX: number; + private TERMINALS_INDEX: number; constructor( parentElement: HTMLElement, @@ -21,12 +23,16 @@ export class TerminalTabbedView extends Disposable { @IConfigurationService _configurationService: IConfigurationService ) { super(); - this._displayTabs = _terminalService.configHelper.config.showTabs; + this._showTabs = _terminalService.configHelper.config.showTabs; this._createSplitView(parentElement); + this.TABS_WIDGET_INDEX = 0; + this.TERMINALS_INDEX = 0; + _configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('terminal.integrated.showTabs')) { - this._displayTabs = _terminalService.configHelper.config.showTabs; + this._showTabs = _terminalService.configHelper.config.showTabs; + this._updateVisibility(); } }); } @@ -42,19 +48,17 @@ export class TerminalTabbedView extends Disposable { this._terminalTabTree = document.createElement('div'); this._configureViews(); - if (this._displayTabs) { - // show tab tree - this._splitView.addView({ - element: this._terminalTabTree, - layout: size => undefined, - minimumSize: 600, - maximumSize: Number.POSITIVE_INFINITY, - onDidChange: () => Disposable.None - }, Sizing.Distribute); - } + this._splitView.addView({ + element: this._terminalTabTree, + layout: size => undefined, + minimumSize: 600, + maximumSize: Number.POSITIVE_INFINITY, + onDidChange: () => Disposable.None, + setVisible: () => this._showTabs + }, Sizing.Distribute); + this._splitView.addView({ - // always show terminals element: this._terminalContainer, layout: size => undefined, minimumSize: 220, @@ -63,6 +67,14 @@ export class TerminalTabbedView extends Disposable { }, Sizing.Distribute); } + private _updateVisibility() { + if (!this._splitView) { + return; + } + this._splitView.setViewVisible(this.TABS_WIDGET_INDEX, this._showTabs); + this._splitView.setViewVisible(this.TERMINALS_INDEX, true); + } + private _configureViews(): void { this._terminalContainer!.innerText = 'Hi'; this._terminalTabTree!.innerText = 'Hello'; From f8771f455c18c17ad8b78de35fbcc6a33da59c38 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 09:38:02 -0700 Subject: [PATCH 028/115] add Tabs Location --- .../terminal/browser/terminalTabbedView.ts | 36 ++++++++++--------- .../contrib/terminal/common/terminal.ts | 1 + .../terminal/common/terminalConfiguration.ts | 6 ++++ 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index 888d5382b74..091e29c6d76 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -14,8 +14,8 @@ export class TerminalTabbedView extends Disposable { private _terminalContainer: HTMLElement | undefined; private _terminalTabTree: HTMLElement | undefined; private _showTabs: boolean; - private TABS_WIDGET_INDEX: number; - private TERMINALS_INDEX: number; + private TAB_TREE_INDEX: number; + private TERMINAL_CONTAINER_INDEX: number; constructor( parentElement: HTMLElement, @@ -24,17 +24,20 @@ export class TerminalTabbedView extends Disposable { ) { super(); this._showTabs = _terminalService.configHelper.config.showTabs; - this._createSplitView(parentElement); - - this.TABS_WIDGET_INDEX = 0; - this.TERMINALS_INDEX = 0; + this.TAB_TREE_INDEX = _terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; + this.TERMINAL_CONTAINER_INDEX = _terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; _configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('terminal.integrated.showTabs')) { this._showTabs = _terminalService.configHelper.config.showTabs; this._updateVisibility(); + } else if (e.affectsConfiguration('terminal.integrated.tabsLocation')) { + this.TAB_TREE_INDEX = _terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; + this.TERMINAL_CONTAINER_INDEX = _terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; + this._splitView.swapViews(0, 1); } }); + this._createSplitView(parentElement); } private _createSplitView(parentElement: HTMLElement): void { @@ -51,33 +54,34 @@ export class TerminalTabbedView extends Disposable { this._splitView.addView({ element: this._terminalTabTree, layout: size => undefined, - minimumSize: 600, - maximumSize: Number.POSITIVE_INFINITY, + minimumSize: 80, + maximumSize: 300, onDidChange: () => Disposable.None, - setVisible: () => this._showTabs - }, Sizing.Distribute); + }, Sizing.Distribute, this.TAB_TREE_INDEX); this._splitView.addView({ element: this._terminalContainer, layout: size => undefined, - minimumSize: 220, + minimumSize: 800, maximumSize: Number.POSITIVE_INFINITY, onDidChange: () => Disposable.None - }, Sizing.Distribute); + }, Sizing.Distribute, this.TERMINAL_CONTAINER_INDEX); + + this._updateVisibility(); } private _updateVisibility() { if (!this._splitView) { return; } - this._splitView.setViewVisible(this.TABS_WIDGET_INDEX, this._showTabs); - this._splitView.setViewVisible(this.TERMINALS_INDEX, true); + this._splitView.setViewVisible(this.TAB_TREE_INDEX, this._showTabs); + this._splitView.setViewVisible(this.TERMINAL_CONTAINER_INDEX, true); } private _configureViews(): void { - this._terminalContainer!.innerText = 'Hi'; - this._terminalTabTree!.innerText = 'Hello'; + this._terminalTabTree!.innerText = 'Tab tree'; + this._terminalContainer!.innerText = 'Terminal container'; } layout(width: number): void { diff --git a/src/vs/workbench/contrib/terminal/common/terminal.ts b/src/vs/workbench/contrib/terminal/common/terminal.ts index 69724441222..3a0a3b68846 100644 --- a/src/vs/workbench/contrib/terminal/common/terminal.ts +++ b/src/vs/workbench/contrib/terminal/common/terminal.ts @@ -104,6 +104,7 @@ export interface ITerminalConfiguration { profiles: ITerminalProfiles; useWslProfiles: boolean; showTabs: boolean; + tabsLocation: 'left' | 'right'; altClickMovesCursor: boolean; macOptionIsMeta: boolean; macOptionClickForcesSelection: boolean; diff --git a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts index e786e63758b..2ad20bbcc00 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts @@ -235,6 +235,12 @@ export const terminalConfiguration: IConfigurationNode = { type: 'boolean', default: false }, + 'terminal.integrated.tabsLocation': { + 'type': 'string', + 'enum': ['left', 'right'], + 'default': 'left', + 'description': localize('sideBarLocation', "Controls the location of the terminal tabs, either left or right of the terminal container.") + }, 'terminal.integrated.macOptionIsMeta': { description: localize('terminal.integrated.macOptionIsMeta', "Controls whether to treat the option key as the meta key in the terminal on macOS."), type: 'boolean', From c2269e6f64cf6961bfefaa7771ccd993d4d15f33 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 10:54:45 -0700 Subject: [PATCH 029/115] get terminal container to show up --- .../terminal/browser/terminalService.ts | 1 + .../terminal/browser/terminalTabbedView.ts | 55 +++++++++++-------- .../contrib/terminal/browser/terminalView.ts | 6 +- 3 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index c348b164312..b03ddd0f7dc 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -1072,6 +1072,7 @@ export class TerminalService implements ITerminalService { public async setContainers(panelContainer: HTMLElement, terminalContainer: HTMLElement): Promise { this._configHelper.panelContainer = panelContainer; this._terminalContainer = terminalContainer; + this._terminalTabs.forEach(tab => tab.attachToElement(terminalContainer)); } public hidePanel(): void { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index 091e29c6d76..0d21bc49248 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -6,37 +6,54 @@ import { Orientation, Sizing, SplitView } from 'vs/base/browser/ui/splitview/splitview'; import { Disposable } from 'vs/base/common/lifecycle'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; +import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/terminalTabsWidget'; export class TerminalTabbedView extends Disposable { private _splitView!: SplitView; - private _terminalContainer: HTMLElement | undefined; - private _terminalTabTree: HTMLElement | undefined; + private _terminalContainer: HTMLElement; + private _terminalTabTree: HTMLElement; private _showTabs: boolean; private TAB_TREE_INDEX: number; private TERMINAL_CONTAINER_INDEX: number; + private _tabsWidget: TerminalTabsWidget | undefined; + private _instantiationService: IInstantiationService; + private _terminalService: ITerminalService; + private _height: number | undefined; constructor( parentElement: HTMLElement, - @ITerminalService _terminalService: ITerminalService, - @IConfigurationService _configurationService: IConfigurationService + @ITerminalService terminalService: ITerminalService, + @IConfigurationService _configurationService: IConfigurationService, + @IInstantiationService instantiationService: IInstantiationService ) { super(); - this._showTabs = _terminalService.configHelper.config.showTabs; - this.TAB_TREE_INDEX = _terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; - this.TERMINAL_CONTAINER_INDEX = _terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; + this._instantiationService = instantiationService; + this._showTabs = terminalService.configHelper.config.showTabs; + this.TAB_TREE_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; + this.TERMINAL_CONTAINER_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; + this._terminalTabTree = document.createElement('div'); + this._terminalTabTree.classList.add('tabs-widget'); + this._instantiationService.createInstance(TerminalTabsWidget, this._terminalTabTree); + this._terminalContainer = document.createElement('div'); + this._terminalContainer.classList.add('terminal-outer-container'); + this._terminalContainer.style.display = 'block'; + terminalService.onInstancesChanged(() => terminalService.setContainers(parentElement, this._terminalContainer)); + this._terminalService = terminalService; _configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('terminal.integrated.showTabs')) { - this._showTabs = _terminalService.configHelper.config.showTabs; + this._showTabs = terminalService.configHelper.config.showTabs; this._updateVisibility(); } else if (e.affectsConfiguration('terminal.integrated.tabsLocation')) { - this.TAB_TREE_INDEX = _terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; - this.TERMINAL_CONTAINER_INDEX = _terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; + this.TAB_TREE_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; + this.TERMINAL_CONTAINER_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; this._splitView.swapViews(0, 1); } }); + this._createSplitView(parentElement); } @@ -47,22 +64,19 @@ export class TerminalTabbedView extends Disposable { this._splitView = new SplitView(parentElement, { orientation: Orientation.HORIZONTAL }); this._register(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); - this._terminalContainer = document.createElement('div'); - this._terminalTabTree = document.createElement('div'); - this._configureViews(); + this._tabsWidget = this._instantiationService.createInstance(TerminalTabsWidget, this._terminalTabTree); this._splitView.addView({ element: this._terminalTabTree, - layout: size => undefined, - minimumSize: 80, + layout: width => this._tabsWidget!.layout(undefined, width), + minimumSize: 200, maximumSize: 300, onDidChange: () => Disposable.None, }, Sizing.Distribute, this.TAB_TREE_INDEX); - this._splitView.addView({ element: this._terminalContainer, - layout: size => undefined, + layout: width => this._terminalService.terminalTabs.forEach(tab => tab.layout(width, this._height || 0)), minimumSize: 800, maximumSize: Number.POSITIVE_INFINITY, onDidChange: () => Disposable.None @@ -79,12 +93,9 @@ export class TerminalTabbedView extends Disposable { this._splitView.setViewVisible(this.TERMINAL_CONTAINER_INDEX, true); } - private _configureViews(): void { - this._terminalTabTree!.innerText = 'Tab tree'; - this._terminalContainer!.innerText = 'Terminal container'; - } - layout(width: number): void { + layout(width: number, height: number): void { this._splitView.layout(width); + this._height = height; } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index ecd448f564b..7a171c48f83 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -158,10 +158,8 @@ export class TerminalViewPane extends ViewPane { this._bodyDimensions.width = width; this._bodyDimensions.height = height; - if (this._tabsView) { - this._tabsView.layout(width, height); - } - this._terminalTabbedView.layout(width); + + this._terminalTabbedView.layout(width, height); } public getActionViewItem(action: Action): IActionViewItem | undefined { From aecaf0a6ac6bc0b4f6fd58f91ca5d5aa0f9afc81 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 11:13:53 -0700 Subject: [PATCH 030/115] get widget to work --- .../contrib/terminal/browser/terminalTabbedView.ts | 13 +++++++++---- .../contrib/terminal/browser/terminalTabsWidget.ts | 8 ++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index 0d21bc49248..09a2365a389 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -36,11 +36,17 @@ export class TerminalTabbedView extends Disposable { this.TERMINAL_CONTAINER_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; this._terminalTabTree = document.createElement('div'); this._terminalTabTree.classList.add('tabs-widget'); - this._instantiationService.createInstance(TerminalTabsWidget, this._terminalTabTree); + this._tabsWidget = this._instantiationService.createInstance(TerminalTabsWidget, this._terminalTabTree); this._terminalContainer = document.createElement('div'); this._terminalContainer.classList.add('terminal-outer-container'); this._terminalContainer.style.display = 'block'; - terminalService.onInstancesChanged(() => terminalService.setContainers(parentElement, this._terminalContainer)); + terminalService.onInstanceCreated(() => { + this._tabsWidget?.rerender(); + }); + terminalService.onInstancesChanged(() => { + terminalService.setContainers(parentElement, this._terminalContainer); + this._tabsWidget?.rerender(); + }); this._terminalService = terminalService; _configurationService.onDidChangeConfiguration(e => { @@ -68,7 +74,7 @@ export class TerminalTabbedView extends Disposable { this._splitView.addView({ element: this._terminalTabTree, - layout: width => this._tabsWidget!.layout(undefined, width), + layout: width => this._tabsWidget!.layout(this._height, width), minimumSize: 200, maximumSize: 300, onDidChange: () => Disposable.None, @@ -93,7 +99,6 @@ export class TerminalTabbedView extends Disposable { this._splitView.setViewVisible(this.TERMINAL_CONTAINER_INDEX, true); } - layout(width: number, height: number): void { this._splitView.layout(width); this._height = height; diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 6a6c7b1bacd..2bbb655f199 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -22,6 +22,7 @@ import { Codicon } from 'vs/base/common/codicons'; const $ = DOM.$; export class TerminalTabsWidget extends WorkbenchObjectTree { + private _terminalService: ITerminalService; constructor( container: HTMLElement, @IContextKeyService contextKeyService: IContextKeyService, @@ -66,6 +67,13 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { } } }); + this._terminalService = terminalService; + } + + rerender(): void { + this.setChildren(null, undefined); + const children = createTerminalTabsIterator(this._terminalService.terminalTabs); + this.setChildren(null, children); } } From c2075cd2a987b770c2fce3c496386a3c06c0232d Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 11:44:14 -0700 Subject: [PATCH 031/115] revert some changes --- .vscode/settings.json | 1 + src/vs/workbench/contrib/terminal/browser/terminalTab.ts | 6 +----- .../contrib/terminal/browser/terminalTabbedView.ts | 9 ++++++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index eabef1693e9..59910bd6430 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -86,4 +86,5 @@ }, "typescript.tsc.autoDetect": "off", "notebook.experimental.useMarkdownRenderer": true, + "testing.autoRun.mode": "onlyPreviouslyRun" } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts index cc3ce5c5638..95599ea105f 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts @@ -38,10 +38,6 @@ class SplitPaneContainer extends Disposable { this._splitView.layout(this.orientation === Orientation.HORIZONTAL ? this._width : this._height); } - public get splitView(): SplitView { - return this._splitView; - } - private _createSplitView(): void { this._splitView = new SplitView(this._container, { orientation: this.orientation }); this._splitViewDisposables.clear(); @@ -264,7 +260,7 @@ export class TerminalTab extends Disposable implements ITerminalTab { } this._activeInstanceIndex = 0; if (this._container) { - // this.attachToElement(this._container); + this.attachToElement(this._container); } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index 09a2365a389..f891038da5f 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -40,13 +40,16 @@ export class TerminalTabbedView extends Disposable { this._terminalContainer = document.createElement('div'); this._terminalContainer.classList.add('terminal-outer-container'); this._terminalContainer.style.display = 'block'; + + terminalService.setContainers(parentElement, this._terminalContainer); + terminalService.onInstanceCreated(() => { - this._tabsWidget?.rerender(); + this._tabsWidget!.rerender(); }); terminalService.onInstancesChanged(() => { - terminalService.setContainers(parentElement, this._terminalContainer); - this._tabsWidget?.rerender(); + this._tabsWidget!.rerender(); }); + this._terminalService = terminalService; _configurationService.onDidChangeConfiguration(e => { From ca0a583a1b42611a2835b2850c7807ddd4c179d0 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 12:01:56 -0700 Subject: [PATCH 032/115] =?UTF-8?q?=F0=9F=A7=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../terminal/browser/terminalTabbedView.ts | 38 ++++++++++--------- .../terminal/browser/terminalTabsWidget.ts | 10 +++-- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index f891038da5f..93cb7263f0e 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -13,46 +13,50 @@ import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/termin export class TerminalTabbedView extends Disposable { private _splitView!: SplitView; + private _terminalContainer: HTMLElement; private _terminalTabTree: HTMLElement; - private _showTabs: boolean; + private _tabsWidget: TerminalTabsWidget | undefined; + private TAB_TREE_INDEX: number; private TERMINAL_CONTAINER_INDEX: number; - private _tabsWidget: TerminalTabsWidget | undefined; + + private _showTabs: boolean; + + private _height: number | undefined; + private _instantiationService: IInstantiationService; private _terminalService: ITerminalService; - private _height: number | undefined; constructor( parentElement: HTMLElement, @ITerminalService terminalService: ITerminalService, - @IConfigurationService _configurationService: IConfigurationService, + @IConfigurationService configurationService: IConfigurationService, @IInstantiationService instantiationService: IInstantiationService ) { super(); + this._instantiationService = instantiationService; - this._showTabs = terminalService.configHelper.config.showTabs; - this.TAB_TREE_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; - this.TERMINAL_CONTAINER_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; + this._terminalService = terminalService; + this._terminalTabTree = document.createElement('div'); this._terminalTabTree.classList.add('tabs-widget'); this._tabsWidget = this._instantiationService.createInstance(TerminalTabsWidget, this._terminalTabTree); + this._terminalContainer = document.createElement('div'); this._terminalContainer.classList.add('terminal-outer-container'); this._terminalContainer.style.display = 'block'; + this._showTabs = terminalService.configHelper.config.showTabs; + + this.TAB_TREE_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; + this.TERMINAL_CONTAINER_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; + terminalService.setContainers(parentElement, this._terminalContainer); - terminalService.onInstanceCreated(() => { - this._tabsWidget!.rerender(); - }); - terminalService.onInstancesChanged(() => { - this._tabsWidget!.rerender(); - }); + terminalService.onInstancesChanged(() => this._tabsWidget!.rerender()); - this._terminalService = terminalService; - - _configurationService.onDidChangeConfiguration(e => { + configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('terminal.integrated.showTabs')) { this._showTabs = terminalService.configHelper.config.showTabs; this._updateVisibility(); @@ -73,8 +77,6 @@ export class TerminalTabbedView extends Disposable { this._splitView = new SplitView(parentElement, { orientation: Orientation.HORIZONTAL }); this._register(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); - this._tabsWidget = this._instantiationService.createInstance(TerminalTabsWidget, this._terminalTabTree); - this._splitView.addView({ element: this._terminalTabTree, layout: width => this._tabsWidget!.layout(this._height, width), diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 2bbb655f199..1c2a6b85f32 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -55,9 +55,6 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { keybindingService, accessibilityService, ); - this.setChildren(null, undefined); - const children = createTerminalTabsIterator(terminalService.terminalTabs); - this.setChildren(null, children); this.onDidChangeSelection(e => { if (e.elements && e.elements[0]) { if ('_instance' in e.elements[0]) { @@ -68,9 +65,14 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { } }); this._terminalService = terminalService; + this._render(); } - rerender(): void { + public rerender(): void { + this._render(); + } + + private _render(): void { this.setChildren(null, undefined); const children = createTerminalTabsIterator(this._terminalService.terminalTabs); this.setChildren(null, children); From 4f55d8181b5cab95534745f555aed3564e911c99 Mon Sep 17 00:00:00 2001 From: CanadaHonk Date: Wed, 7 Apr 2021 22:08:21 +0100 Subject: [PATCH 033/115] Fix JSON formatting in High Contrast Black default theme --- extensions/theme-defaults/themes/hc_black.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/theme-defaults/themes/hc_black.json b/extensions/theme-defaults/themes/hc_black.json index fcb350ac423..bf0536d3c38 100644 --- a/extensions/theme-defaults/themes/hc_black.json +++ b/extensions/theme-defaults/themes/hc_black.json @@ -441,7 +441,7 @@ "name": "HC Search Editor context line override", "scope": "meta.resultLinePrefix.contextLinePrefix.search", "settings": { - "foreground": "#CBEDCB", + "foreground": "#CBEDCB" } } ], From b4fe86328a96dbe1526a61ee0bde1f8ec146861f Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 14:52:08 -0700 Subject: [PATCH 034/115] add some more checks --- src/vs/workbench/contrib/terminal/browser/terminalTab.ts | 3 ++- .../workbench/contrib/terminal/browser/terminalTabsWidget.ts | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts index 95599ea105f..743a5470672 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts @@ -343,10 +343,11 @@ export class TerminalTab extends Disposable implements ITerminalTab { } // Fire events and dispose tab if it was the last instance - this._onInstancesChanged.fire(); if (this._terminalInstances.length === 0) { this._onDisposed.fire(this); this.dispose(); + } else { + this._onInstancesChanged.fire(); } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 1c2a6b85f32..a17c8f1cedd 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -74,6 +74,9 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { private _render(): void { this.setChildren(null, undefined); + if (!this._terminalService || this._terminalService.terminalTabs.length === 0) { + return; + } const children = createTerminalTabsIterator(this._terminalService.terminalTabs); this.setChildren(null, children); } @@ -131,7 +134,6 @@ class TerminalTabsRenderer implements ITreeRenderer 1 ? `Terminals (${item.children.length})` : item.children[0].instance.title : ''; } else if ('instance' in item) { label = item.instance.title; - icon = item.instance.icon; } template.labelElement.textContent = label; template.labelElement.title = label; From e6bf0c58615202f034e845a4efb5f844329233ba Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 15:25:24 -0700 Subject: [PATCH 035/115] feedback --- .../contrib/terminal/browser/terminalTabbedView.ts | 12 +++++------- .../contrib/terminal/common/terminalConfiguration.ts | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index 93cb7263f0e..a3175d83dfd 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -12,7 +12,7 @@ import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/termin export class TerminalTabbedView extends Disposable { - private _splitView!: SplitView; + private _splitView: SplitView; private _terminalContainer: HTMLElement; private _terminalTabTree: HTMLElement; @@ -67,14 +67,12 @@ export class TerminalTabbedView extends Disposable { } }); - this._createSplitView(parentElement); + this._splitView = new SplitView(parentElement, { orientation: Orientation.HORIZONTAL }); + + this._setupSplitView(); } - private _createSplitView(parentElement: HTMLElement): void { - if (this._splitView) { - return; - } - this._splitView = new SplitView(parentElement, { orientation: Orientation.HORIZONTAL }); + private _setupSplitView(): void { this._register(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); this._splitView.addView({ diff --git a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts index d9710223d64..a694c6b0876 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts @@ -261,7 +261,7 @@ export const terminalConfiguration: IConfigurationNode = { 'type': 'string', 'enum': ['left', 'right'], 'default': 'left', - 'description': localize('sideBarLocation', "Controls the location of the terminal tabs, either left or right of the terminal container.") + 'description': localize('tabsLocation', "Controls the location of the terminal tabs, either left or right of the terminal container.") }, 'terminal.integrated.macOptionIsMeta': { description: localize('terminal.integrated.macOptionIsMeta', "Controls whether to treat the option key as the meta key in the terminal on macOS."), From 6846fee42fabf304559007f267ec0bb818dce971 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 7 Apr 2021 15:23:04 -0700 Subject: [PATCH 036/115] Prevent disposable store exception Co-authored-by: Megan Rogge --- .../workbench/contrib/terminal/browser/terminalTab.ts | 5 +++++ .../contrib/terminal/browser/terminalTabsWidget.ts | 10 ++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts index 743a5470672..35f01ef3bfd 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts @@ -404,6 +404,11 @@ export class TerminalTab extends Disposable implements ITerminalTab { } public get title(): string { + if (this._terminalInstances.length === 0) { + // Normally consumers should not call into title at all after the tab is disposed but + // this is required when the tab is used as part of a tree. + return ''; + } let title = this._titleWithConnectionStatus(this.terminalInstances[0]); for (let i = 1; i < this.terminalInstances.length; i++) { const instance = this.terminalInstances[i]; diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index a17c8f1cedd..ee13f9b13b9 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -69,16 +69,14 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { } public rerender(): void { + // TODO: Rerender isn't the best name, since ObjectTree.rerender already exists (which we + // may want to use to fix the below setChildren issue) this._render(); } private _render(): void { - this.setChildren(null, undefined); - if (!this._terminalService || this._terminalService.terminalTabs.length === 0) { - return; - } - const children = createTerminalTabsIterator(this._terminalService.terminalTabs); - this.setChildren(null, children); + // TODO: We don't want to be setting children to undefined - a terminal being killed should not remove focus in the tab view + this.setChildren(null, createTerminalTabsIterator(this._terminalService.terminalTabs)); } } From 5bcbaa2d825f950e42218f4559f2edfcb96891c2 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 7 Apr 2021 15:37:58 -0700 Subject: [PATCH 037/115] Rerender tabs on title change event Co-authored-by: Megan Rogge --- .../terminal/browser/terminalTabbedView.ts | 4 ++-- .../terminal/browser/terminalTabsWidget.ts | 16 ++++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index a3175d83dfd..d5b9f27e2df 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -54,8 +54,6 @@ export class TerminalTabbedView extends Disposable { terminalService.setContainers(parentElement, this._terminalContainer); - terminalService.onInstancesChanged(() => this._tabsWidget!.rerender()); - configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('terminal.integrated.showTabs')) { this._showTabs = terminalService.configHelper.config.showTabs; @@ -63,6 +61,7 @@ export class TerminalTabbedView extends Disposable { } else if (e.affectsConfiguration('terminal.integrated.tabsLocation')) { this.TAB_TREE_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; this.TERMINAL_CONTAINER_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; + // TODO: if showTabs this._splitView.swapViews(0, 1); } }); @@ -98,6 +97,7 @@ export class TerminalTabbedView extends Disposable { if (!this._splitView) { return; } + // TODO: Instead of always having tab tree there, addView/removeView depending on the setting this._splitView.setViewVisible(this.TAB_TREE_INDEX, this._showTabs); this._splitView.setViewVisible(this.TERMINAL_CONTAINER_INDEX, true); } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index ee13f9b13b9..fb1538b4dcf 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -65,12 +65,10 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { } }); this._terminalService = terminalService; - this._render(); - } - public rerender(): void { - // TODO: Rerender isn't the best name, since ObjectTree.rerender already exists (which we - // may want to use to fix the below setChildren issue) + terminalService.onInstancesChanged(() => this._render()); + terminalService.onInstanceTitleChanged(() => this._render()); + this._render(); } @@ -129,7 +127,13 @@ class TerminalTabsRenderer implements ITreeRenderer 1 ? `Terminals (${item.children.length})` : item.children[0].instance.title : ''; + label = item + ? item.children.length === 0 + ? 'Starting...' + : item?.children.length > 1 + ? `Terminals (${item.children.length})` + : item.children[0].instance.title + : ''; } else if ('instance' in item) { label = item.instance.title; } From c492147a5b23d80e4290a68b51380aec9a6454d6 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 7 Apr 2021 15:44:13 -0700 Subject: [PATCH 038/115] Simplify instance node Co-authored-by: Megan Rogge --- .../terminal/browser/terminalTabsWidget.ts | 61 ++++++------------- 1 file changed, 20 insertions(+), 41 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index fb1538b4dcf..124e27ae486 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { TerminalTab } from 'vs/workbench/contrib/terminal/browser/terminalTab'; import { IListService, WorkbenchObjectTree } from 'vs/platform/list/browser/listService'; import { ITreeElement, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; import { DefaultStyleController, IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget'; @@ -12,7 +11,7 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IIdentityProvider, IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; +import { IIdentityProvider } from 'vs/base/browser/ui/list/list'; import { ITerminalInstance, ITerminalService, ITerminalTab } from 'vs/workbench/contrib/terminal/browser/terminal'; import { localize } from 'vs/nls'; import * as DOM from 'vs/base/browser/dom'; @@ -35,7 +34,10 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { @IInstantiationService _instantiationService: IInstantiationService ) { super('TerminalTabsTree', container, - new TerminalTabsDelegate(), + { + getHeight: () => 24, + getTemplateId: () => 'terminal.tabs' + }, [new TerminalTabsRenderer()], { horizontalScrolling: false, @@ -57,10 +59,10 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { ); this.onDidChangeSelection(e => { if (e.elements && e.elements[0]) { - if ('_instance' in e.elements[0]) { - e.elements[0].instance.focus(true); - } else { + if ('tab' in e.elements[0]) { terminalService.setActiveTabByIndex(terminalService.terminalTabs.indexOf(e.elements[0].tab)); + } else { + e.elements[0].focus(true); } } }); @@ -78,14 +80,6 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { } } -class TerminalTabsDelegate implements IListVirtualDelegate { - getHeight(element: any): number { - return 24; - } - getTemplateId(element: any): string { - return 'terminal.tabs'; - } -} class TerminalTabsIdentityProvider implements IIdentityProvider { constructor() { } @@ -93,7 +87,7 @@ class TerminalTabsIdentityProvider implements IIdentityProvider { if ('tab' in element) { return element.tab.title; } else { - return element.instance.instanceId; + return element.instanceId; } } @@ -103,7 +97,7 @@ class TerminalTabsAccessibilityProvider implements IListAccessibilityProvider 1 ? `Terminals (${element.tab.terminalInstances.length})` : element.tab.terminalInstances[0].title : ''; } else { - return element.instance.title; + return element.title; } } @@ -132,10 +126,10 @@ class TerminalTabsRenderer implements ITreeRenderer 1 ? `Terminals (${item.children.length})` - : item.children[0].instance.title + : item.children[0].title : ''; - } else if ('instance' in item) { - label = item.instance.title; + } else { + label = item.title; } template.labelElement.textContent = label; template.labelElement.title = label; @@ -151,42 +145,27 @@ interface ITerminalTabEntryTemplate { icon?: Codicon; } -type TabTreeNode = TabTreeElement | TabTreeChild; +type TabTreeNode = TabTreeElement | ITerminalInstance; +// TODO: Remove in favor of ITerminalTab class TabTreeElement { private _tab: ITerminalTab; - private _children: TabTreeChild[]; + private _children: ITerminalInstance[]; constructor(tab: ITerminalTab) { this._tab = tab; - this._children = this._tab.terminalInstances.map(i => new TabTreeChild(i, this._tab)); + this._children = this._tab.terminalInstances; } get tab(): ITerminalTab { return this._tab; } - get children(): TabTreeChild[] { + get children(): ITerminalInstance[] { return this._children; } - set children(newChildren: TabTreeChild[]) { + set children(newChildren: ITerminalInstance[]) { this._children = newChildren; } } -class TabTreeChild { - private _instance: ITerminalInstance; - private _tab: ITerminalTab; - constructor(instance: ITerminalInstance, tab: ITerminalTab) { - this._instance = instance; - this._tab = tab; - } - get instance(): ITerminalInstance { - return this._instance; - } - get parent(): ITerminalTab { - return this._tab; - } -} - - function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable> { const result = tabs.map(tab => { const hasChildren = tab.terminalInstances.length > 1; @@ -201,7 +180,7 @@ function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable> | undefined { +function getChildren(elt: TabTreeElement): Iterable> | undefined { if (elt.children.length > 1) { return elt.children.map(child => { return { From 3241e1ad249b3004396ea085cc5fe015e4087420 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 7 Apr 2021 16:08:30 -0700 Subject: [PATCH 039/115] Improve tabbed view size ranges Co-authored-by: Megan Rogge --- .../contrib/terminal/browser/terminalTabbedView.ts | 6 +++--- .../contrib/terminal/browser/terminalTabsWidget.ts | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index d5b9f27e2df..c6922c13b68 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -77,15 +77,15 @@ export class TerminalTabbedView extends Disposable { this._splitView.addView({ element: this._terminalTabTree, layout: width => this._tabsWidget!.layout(this._height, width), - minimumSize: 200, - maximumSize: 300, + minimumSize: 40, + maximumSize: Number.POSITIVE_INFINITY, onDidChange: () => Disposable.None, }, Sizing.Distribute, this.TAB_TREE_INDEX); this._splitView.addView({ element: this._terminalContainer, layout: width => this._terminalService.terminalTabs.forEach(tab => tab.layout(width, this._height || 0)), - minimumSize: 800, + minimumSize: 120, maximumSize: Number.POSITIVE_INFINITY, onDidChange: () => Disposable.None }, Sizing.Distribute, this.TERMINAL_CONTAINER_INDEX); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 124e27ae486..a7b79c1a0a2 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -48,6 +48,7 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { filter: undefined, smoothScrolling: configurationService.getValue('workbench.list.smoothScrolling'), multipleSelectionSupport: false, + // TODO: Add indent guides? expandOnlyOnTwistieClick: true }, contextKeyService, @@ -172,7 +173,7 @@ function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable Date: Wed, 7 Apr 2021 19:05:25 -0700 Subject: [PATCH 040/115] use TerminalTab --- .../terminal/browser/terminalTabsWidget.ts | 86 ++++++++----------- 1 file changed, 34 insertions(+), 52 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index a7b79c1a0a2..8153bf43525 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -20,7 +20,7 @@ import { Codicon } from 'vs/base/common/codicons'; const $ = DOM.$; -export class TerminalTabsWidget extends WorkbenchObjectTree { +export class TerminalTabsWidget extends WorkbenchObjectTree { private _terminalService: ITerminalService; constructor( container: HTMLElement, @@ -60,8 +60,8 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { ); this.onDidChangeSelection(e => { if (e.elements && e.elements[0]) { - if ('tab' in e.elements[0]) { - terminalService.setActiveTabByIndex(terminalService.terminalTabs.indexOf(e.elements[0].tab)); + if ('terminalInstances' in e.elements[0]) { + terminalService.setActiveTabByIndex(terminalService.terminalTabs.indexOf(e.elements[0])); } else { e.elements[0].focus(true); } @@ -81,25 +81,31 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { } } -class TerminalTabsIdentityProvider implements IIdentityProvider { +class TerminalTabsIdentityProvider implements IIdentityProvider { constructor() { } - getId(element: TabTreeNode): { toString(): string; } { - if ('tab' in element) { - return element.tab.title; + getId(element: ITabTreeNode): { toString(): string; } { + if ('terminalInstances' in element) { + return element.title; } else { return element.instanceId; } } } -class TerminalTabsAccessibilityProvider implements IListAccessibilityProvider { - getAriaLabel(element: TabTreeNode) { - if ('tab' in element) { - return element.tab ? element.tab.terminalInstances.length > 1 ? `Terminals (${element.tab.terminalInstances.length})` : element.tab.terminalInstances[0].title : ''; +class TerminalTabsAccessibilityProvider implements IListAccessibilityProvider { + getAriaLabel(node: ITabTreeNode) { + let label = ''; + if ('terminalInstances' in node) { + if (node.terminalInstances.length === 1) { + label = node.terminalInstances[0].title; + } else if (node.terminalInstances.length > 1) { + label = `Terminals (${node.terminalInstances.length})`; + } } else { - return element.title; + label = node.title; } + return label; } getWidgetAriaLabel() { @@ -107,7 +113,7 @@ class TerminalTabsAccessibilityProvider implements IListAccessibilityProvider { +class TerminalTabsRenderer implements ITreeRenderer { templateId = 'terminal.tabs'; @@ -117,24 +123,20 @@ class TerminalTabsRenderer implements ITreeRenderer, index: number, template: ITerminalTabEntryTemplate): void { + renderElement(node: ITreeNode, index: number, template: ITerminalTabEntryTemplate): void { let label = ''; - let icon; let item = node.element; - if ('children' in item) { - label = item - ? item.children.length === 0 - ? 'Starting...' - : item?.children.length > 1 - ? `Terminals (${item.children.length})` - : item.children[0].title - : ''; + if ('terminalInstances' in item) { + if (item.terminalInstances.length === 1) { + label = item.terminalInstances[0].title; + } else if (item.terminalInstances.length > 1) { + label = `Terminals (${item.terminalInstances.length})`; + } } else { label = item.title; } template.labelElement.textContent = label; template.labelElement.title = label; - template.icon = icon; } disposeTemplate(templateData: ITerminalTabEntryTemplate): void { @@ -146,46 +148,26 @@ interface ITerminalTabEntryTemplate { icon?: Codicon; } -type TabTreeNode = TabTreeElement | ITerminalInstance; +type ITabTreeNode = ITerminalTab | ITerminalInstance; -// TODO: Remove in favor of ITerminalTab -class TabTreeElement { - private _tab: ITerminalTab; - private _children: ITerminalInstance[]; - constructor(tab: ITerminalTab) { - this._tab = tab; - this._children = this._tab.terminalInstances; - } - get tab(): ITerminalTab { - return this._tab; - } - get children(): ITerminalInstance[] { - return this._children; - } - set children(newChildren: ITerminalInstance[]) { - this._children = newChildren; - } -} - -function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable> { +function createTerminalTabsIterator(tabs: ITerminalTab[]): Iterable> { const result = tabs.map(tab => { const hasChildren = tab.terminalInstances.length > 1; - const elt = new TabTreeElement(tab); return { - element: elt, + element: tab, collapsed: false, collapsible: hasChildren, - children: getChildren(elt) + children: getChildren(tab) }; }); return result; } -function getChildren(elt: TabTreeElement): Iterable> | undefined { - if (elt.children.length > 1) { - return elt.children.map(child => { +function getChildren(tab: ITerminalTab): Iterable> | undefined { + if (tab.terminalInstances.length > 1) { + return tab.terminalInstances.map(instance => { return { - element: child, + element: instance, collapsed: true, collapsible: false, }; From e6c32c3d74322edeae3adaa3ffffd2ebc8b1b7eb Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 19:07:20 -0700 Subject: [PATCH 041/115] create issue to track indent guides todo --- src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 8153bf43525..afe69c92b63 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -48,7 +48,6 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { filter: undefined, smoothScrolling: configurationService.getValue('workbench.list.smoothScrolling'), multipleSelectionSupport: false, - // TODO: Add indent guides? expandOnlyOnTwistieClick: true }, contextKeyService, @@ -76,7 +75,6 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { } private _render(): void { - // TODO: We don't want to be setting children to undefined - a terminal being killed should not remove focus in the tab view this.setChildren(null, createTerminalTabsIterator(this._terminalService.terminalTabs)); } } From 2c77e72f8b36d1981fd00ddb5d4898101d603716 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 19:13:02 -0700 Subject: [PATCH 042/115] add or remove view depending on showTabs --- .../terminal/browser/terminalTabbedView.ts | 58 ++++++++++--------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index c6922c13b68..6145149f56e 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -18,8 +18,8 @@ export class TerminalTabbedView extends Disposable { private _terminalTabTree: HTMLElement; private _tabsWidget: TerminalTabsWidget | undefined; - private TAB_TREE_INDEX: number; - private TERMINAL_CONTAINER_INDEX: number; + private _tabTreeIndex: number; + private _terminalContainerIndex: number; private _showTabs: boolean; @@ -49,20 +49,31 @@ export class TerminalTabbedView extends Disposable { this._showTabs = terminalService.configHelper.config.showTabs; - this.TAB_TREE_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; - this.TERMINAL_CONTAINER_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; + this._tabTreeIndex = terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; + this._terminalContainerIndex = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; terminalService.setContainers(parentElement, this._terminalContainer); configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('terminal.integrated.showTabs')) { this._showTabs = terminalService.configHelper.config.showTabs; - this._updateVisibility(); + if (this._showTabs) { + this._splitView.addView({ + element: this._terminalTabTree, + layout: width => this._tabsWidget!.layout(this._height, width), + minimumSize: 40, + maximumSize: Number.POSITIVE_INFINITY, + onDidChange: () => Disposable.None, + }, Sizing.Distribute, this._tabTreeIndex); + } else { + this._splitView.removeView(this._tabTreeIndex); + } } else if (e.affectsConfiguration('terminal.integrated.tabsLocation')) { - this.TAB_TREE_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; - this.TERMINAL_CONTAINER_INDEX = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; - // TODO: if showTabs - this._splitView.swapViews(0, 1); + this._tabTreeIndex = terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; + this._terminalContainerIndex = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; + if (this._showTabs) { + this._splitView.swapViews(0, 1); + } } }); @@ -74,32 +85,23 @@ export class TerminalTabbedView extends Disposable { private _setupSplitView(): void { this._register(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); - this._splitView.addView({ - element: this._terminalTabTree, - layout: width => this._tabsWidget!.layout(this._height, width), - minimumSize: 40, - maximumSize: Number.POSITIVE_INFINITY, - onDidChange: () => Disposable.None, - }, Sizing.Distribute, this.TAB_TREE_INDEX); - + if (this._showTabs) { + this._splitView.addView({ + element: this._terminalTabTree, + layout: width => this._tabsWidget!.layout(this._height, width), + minimumSize: 40, + maximumSize: Number.POSITIVE_INFINITY, + onDidChange: () => Disposable.None, + }, Sizing.Distribute, this._tabTreeIndex); + } this._splitView.addView({ element: this._terminalContainer, layout: width => this._terminalService.terminalTabs.forEach(tab => tab.layout(width, this._height || 0)), minimumSize: 120, maximumSize: Number.POSITIVE_INFINITY, onDidChange: () => Disposable.None - }, Sizing.Distribute, this.TERMINAL_CONTAINER_INDEX); + }, Sizing.Distribute, this._terminalContainerIndex); - this._updateVisibility(); - } - - private _updateVisibility() { - if (!this._splitView) { - return; - } - // TODO: Instead of always having tab tree there, addView/removeView depending on the setting - this._splitView.setViewVisible(this.TAB_TREE_INDEX, this._showTabs); - this._splitView.setViewVisible(this.TERMINAL_CONTAINER_INDEX, true); } layout(width: number, height: number): void { From 0b89eae87f768ec20734418346deb9f6d3ec12cc Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 19:35:23 -0700 Subject: [PATCH 043/115] add a bunch of stuff from terminalView --- .../terminal/browser/terminalTabbedView.ts | 168 +++++++++++++++++- .../contrib/terminal/browser/terminalView.ts | 7 - 2 files changed, 167 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index 6145149f56e..5ca26e24de6 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -8,7 +8,22 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; +import { TerminalFindWidget } from 'vs/workbench/contrib/terminal/browser/terminalFindWidget'; import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/terminalTabsWidget'; +import { IThemeService, IColorTheme } from 'vs/platform/theme/common/themeService'; +import { isLinux, isMacintosh } from 'vs/base/common/platform'; +import * as dom from 'vs/base/browser/dom'; +import { BrowserFeatures } from 'vs/base/browser/canIUse'; +import { INotificationService } from 'vs/platform/notification/common/notification'; +import { DataTransfers } from 'vs/base/browser/dnd'; +import { URI } from 'vs/base/common/uri'; +import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; +import { createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; +import { IAction } from 'vs/base/common/actions'; +import { IMenu, IMenuService, MenuId } from 'vs/platform/actions/common/actions'; +import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; +const FIND_FOCUS_CLASS = 'find-focused'; export class TerminalTabbedView extends Disposable { @@ -16,7 +31,10 @@ export class TerminalTabbedView extends Disposable { private _terminalContainer: HTMLElement; private _terminalTabTree: HTMLElement; + private _parentElement: HTMLElement; + private _tabsWidget: TerminalTabsWidget | undefined; + private _findWidget: TerminalFindWidget; private _tabTreeIndex: number; private _terminalContainerIndex: number; @@ -27,21 +45,38 @@ export class TerminalTabbedView extends Disposable { private _instantiationService: IInstantiationService; private _terminalService: ITerminalService; + private _themeService: IThemeService; + private _contextMenuService: IContextMenuService; + + private _cancelContextMenu: boolean = false; + private _menu: IMenu; constructor( parentElement: HTMLElement, @ITerminalService terminalService: ITerminalService, + @IThemeService themeService: IThemeService, @IConfigurationService configurationService: IConfigurationService, - @IInstantiationService instantiationService: IInstantiationService + @IInstantiationService instantiationService: IInstantiationService, + @INotificationService private readonly _notificationService: INotificationService, + @IContextKeyService _contextKeyService: IContextKeyService, + @IContextKeyService contextMenuService: IContextMenuService, + @IMenuService _menuService: IMenuService ) { super(); this._instantiationService = instantiationService; this._terminalService = terminalService; + this._themeService = themeService; + this._contextMenuService = contextMenuService; + + this._parentElement = parentElement; this._terminalTabTree = document.createElement('div'); this._terminalTabTree.classList.add('tabs-widget'); + this._tabsWidget = this._instantiationService.createInstance(TerminalTabsWidget, this._terminalTabTree); + this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); + parentElement.appendChild(this._findWidget.getDomNode()); this._terminalContainer = document.createElement('div'); this._terminalContainer.classList.add('terminal-outer-container'); @@ -52,6 +87,8 @@ export class TerminalTabbedView extends Disposable { this._tabTreeIndex = terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; this._terminalContainerIndex = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; + this._menu = this._register(_menuService.createMenu(MenuId.TerminalContext, _contextKeyService)); + terminalService.setContainers(parentElement, this._terminalContainer); configurationService.onDidChangeConfiguration(e => { @@ -77,6 +114,13 @@ export class TerminalTabbedView extends Disposable { } }); + this._register(themeService.onDidColorThemeChange(theme => this._updateTheme(theme))); + this._updateTheme(); + + this._findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); + + this._attachEventListeners(parentElement, this._terminalContainer); + this._splitView = new SplitView(parentElement, { orientation: Orientation.HORIZONTAL }); this._setupSplitView(); @@ -108,4 +152,126 @@ export class TerminalTabbedView extends Disposable { this._splitView.layout(width); this._height = height; } + + private _updateTheme(theme?: IColorTheme): void { + if (!theme) { + theme = this._themeService.getColorTheme(); + } + + this._findWidget?.updateTheme(theme); + } + + private _attachEventListeners(parentDomElement: HTMLElement, terminalContainer: HTMLElement): void { + this._register(dom.addDisposableListener(parentDomElement, 'mousedown', async (event: MouseEvent) => { + if (this._terminalService.terminalInstances.length === 0) { + return; + } + + if (event.which === 2 && isLinux) { + // Drop selection and focus terminal on Linux to enable middle button paste when click + // occurs on the selection itself. + const terminal = this._terminalService.getActiveInstance(); + if (terminal) { + terminal.focus(); + } + } else if (event.which === 3) { + const rightClickBehavior = this._terminalService.configHelper.config.rightClickBehavior; + if (rightClickBehavior === 'copyPaste' || rightClickBehavior === 'paste') { + const terminal = this._terminalService.getActiveInstance(); + if (!terminal) { + return; + } + + // copyPaste: Shift+right click should open context menu + if (rightClickBehavior === 'copyPaste' && event.shiftKey) { + this._openContextMenu(event); + return; + } + + if (rightClickBehavior === 'copyPaste' && terminal.hasSelection()) { + await terminal.copySelection(); + terminal.clearSelection(); + } else { + if (BrowserFeatures.clipboard.readText) { + terminal.paste(); + } else { + this._notificationService.info(`This browser doesn't support the clipboard.readText API needed to trigger a paste, try ${isMacintosh ? '⌘' : 'Ctrl'}+V instead.`); + } + } + // Clear selection after all click event bubbling is finished on Mac to prevent + // right-click selecting a word which is seemed cannot be disabled. There is a + // flicker when pasting but this appears to give the best experience if the + // setting is enabled. + if (isMacintosh) { + setTimeout(() => { + terminal.clearSelection(); + }, 0); + } + this._cancelContextMenu = true; + } + } + })); + this._register(dom.addDisposableListener(parentDomElement, 'contextmenu', (event: MouseEvent) => { + if (!this._cancelContextMenu) { + this._openContextMenu(event); + } + event.preventDefault(); + event.stopImmediatePropagation(); + this._cancelContextMenu = false; + })); + this._register(dom.addDisposableListener(document, 'keydown', (event: KeyboardEvent) => { + terminalContainer.classList.toggle('alt-active', !!event.altKey); + })); + this._register(dom.addDisposableListener(document, 'keyup', (event: KeyboardEvent) => { + terminalContainer.classList.toggle('alt-active', !!event.altKey); + })); + this._register(dom.addDisposableListener(parentDomElement, 'keyup', (event: KeyboardEvent) => { + if (event.keyCode === 27) { + // Keep terminal open on escape + event.stopPropagation(); + } + })); + this._register(dom.addDisposableListener(parentDomElement, dom.EventType.DROP, async (e: DragEvent) => { + if (e.target === this._parentElement || dom.isAncestor(e.target as HTMLElement, parentDomElement)) { + if (!e.dataTransfer) { + return; + } + + // Check if files were dragged from the tree explorer + let path: string | undefined; + const resources = e.dataTransfer.getData(DataTransfers.RESOURCES); + if (resources) { + path = URI.parse(JSON.parse(resources)[0]).fsPath; + } else if (e.dataTransfer.files.length > 0 && e.dataTransfer.files[0].path /* Electron only */) { + // Check if the file was dragged from the filesystem + path = URI.file(e.dataTransfer.files[0].path).fsPath; + } + + if (!path) { + return; + } + + const terminal = this._terminalService.getActiveInstance(); + if (terminal) { + const preparedPath = await this._terminalService.preparePathForTerminalAsync(path, terminal.shellLaunchConfig.executable, terminal.title, terminal.shellType); + terminal.sendText(preparedPath, false); + terminal.focus(); + } + } + })); + } + private _openContextMenu(event: MouseEvent): void { + const standardEvent = new StandardMouseEvent(event); + const anchor: { x: number, y: number } = { x: standardEvent.posx, y: standardEvent.posy }; + + const actions: IAction[] = []; + const actionsDisposable = createAndFillInContextMenuActions(this._menu, undefined, actions); + + this._contextMenuService.showContextMenu({ + getAnchor: () => anchor, + getActions: () => actions, + getActionsContext: () => this._parentElement, + onHide: () => actionsDisposable.dispose() + }); + } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 7a171c48f83..cf85a97988c 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -35,7 +35,6 @@ export class TerminalViewPane extends ViewPane { private _actions: IAction[] | undefined; private _fontStyleElement: HTMLElement | undefined; private _parentDomElement: HTMLElement | undefined; - // private _findWidget: TerminalFindWidget; private _tabsViewWrapper: HTMLElement | undefined; private _terminalTabbedView!: TerminalTabbedView; private _tabsView: TabsView | undefined; @@ -86,17 +85,13 @@ export class TerminalViewPane extends ViewPane { this._parentDomElement = container; this._parentDomElement.classList.add('integrated-terminal'); this._fontStyleElement = document.createElement('style'); - // this._findWidget = this._instantiationService.createInstance(TerminalFindWidget, this._terminalService.getFindState()); if (!this.shouldShowWelcome()) { this._createTabsView(); } this._parentDomElement.appendChild(this._fontStyleElement); - // this._parentDomElement.appendChild( - // this._parentDomElement.appendChild(this._findWidget.getDomNode())); - // this._register(this.themeService.onDidColorThemeChange(theme => this._updateTheme(theme))); this._register(this.configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('terminal.integrated.fontFamily') || e.affectsConfiguration('editor.fontFamily')) { const configHelper = this._terminalService.configHelper; @@ -109,7 +104,6 @@ export class TerminalViewPane extends ViewPane { } } })); - // this._updateTheme(); this._register(this.onDidChangeBodyVisibility(visible => { if (visible) { @@ -125,7 +119,6 @@ export class TerminalViewPane extends ViewPane { } } - // this._updateTheme(); if (hadTerminals) { this._terminalService.getActiveTab()?.setVisible(visible); } else { From 494536b12e77459f99ddea69a28c3edf005ce70d Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 19:46:25 -0700 Subject: [PATCH 044/115] find widget --- .../contrib/terminal/browser/tabsView.ts | 266 ------------------ .../terminal/browser/terminalService.ts | 21 +- .../terminal/browser/terminalTabbedView.ts | 58 +++- .../contrib/terminal/browser/terminalView.ts | 5 +- 4 files changed, 66 insertions(+), 284 deletions(-) delete mode 100644 src/vs/workbench/contrib/terminal/browser/tabsView.ts diff --git a/src/vs/workbench/contrib/terminal/browser/tabsView.ts b/src/vs/workbench/contrib/terminal/browser/tabsView.ts deleted file mode 100644 index ee41e2112b5..00000000000 --- a/src/vs/workbench/contrib/terminal/browser/tabsView.ts +++ /dev/null @@ -1,266 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { Orientation, SplitView } from 'vs/base/browser/ui/splitview/splitview'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; -import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/terminalTabsWidget'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { Event } from 'vs/base/common/event'; -import { IView } from 'vs/workbench/common/views'; -import { IProgressIndicator } from 'vs/platform/progress/common/progress'; -import * as dom from 'vs/base/browser/dom'; -import { isLinux, isMacintosh } from 'vs/base/common/platform'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IAction } from 'vs/base/common/actions'; -import { IMenu, IMenuService, MenuId } from 'vs/platform/actions/common/actions'; -import { BrowserFeatures } from 'vs/base/browser/canIUse'; -import { DataTransfers } from 'vs/base/browser/dnd'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { INotificationService } from 'vs/platform/notification/common/notification'; -import { URI } from 'vs/base/common/uri'; -import { TerminalFindWidget } from 'vs/workbench/contrib/terminal/browser/terminalFindWidget'; - -const FIND_FOCUS_CLASS = 'find-focused'; - -export class TabsView extends Disposable { - private _menu: IMenu; - _width: number; - _height: number; - private _cancelContextMenu: boolean = false; - private _tabsElement: HTMLElement; - private _splitView!: SplitView; - private readonly _splitViewDisposables = this._register(new DisposableStore()); - private _children: SplitTabsPane[] = []; - private _terminalContainer: HTMLElement; - private _onDidChange: Event = Event.None; - public get onDidChange(): Event { return this._onDidChange; } - - constructor( - private _parentDomElement: HTMLElement, - _findWidget: TerminalFindWidget, - @IInstantiationService private readonly _instantiationService: IInstantiationService, - @ITerminalService private readonly _terminalService: ITerminalService, - @IContextMenuService private readonly _contextMenuService: IContextMenuService, - @IContextKeyService _contextKeyService: IContextKeyService, - @IMenuService _menuService: IMenuService, - @INotificationService private readonly _notificationService: INotificationService, - ) { - super(); - this._menu = this._register(_menuService.createMenu(MenuId.TerminalContext, _contextKeyService)); - this._tabsElement = document.createElement('div'); - this._tabsElement.classList.add('tabs-widget'); - this._instantiationService.createInstance(TerminalTabsWidget, this._tabsElement); - - this._width = _parentDomElement.offsetWidth; - this._height = _parentDomElement.offsetHeight; - - this._terminalContainer = document.createElement('div'); - this._terminalContainer.classList.add('terminal-outer-container'); - this._terminalContainer.style.display = 'block'; - this._terminalService.setContainers(this._terminalContainer, this._parentDomElement); - this._attachEventListeners(this._parentDomElement, this._terminalContainer); - this._createSplitView(); - _findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); - } - - public get splitView(): SplitView { - return this._splitView; - } - - private _createSplitView(): void { - if (this._splitView) { - return; - } - this._splitView = new SplitView(this._parentDomElement, { orientation: Orientation.HORIZONTAL }); - this._splitViewDisposables.clear(); - this._splitViewDisposables.add(this._splitView.onDidSashReset(() => this._splitView.distributeViewSizes())); - const showTabs = this._terminalService.configHelper.config.showTabs; - const tabsWidgetWidth = showTabs ? 200 : 0; - if (showTabs) { - this._splitView.addView(new SplitTabsPane(this._tabsElement, tabsWidgetWidth, this._terminalService), tabsWidgetWidth, 0); - } - const tabContainer = new SplitTabsPane(this._terminalContainer, this._width - tabsWidgetWidth, this._terminalService); - this._splitView.addView(tabContainer, this._width - tabsWidgetWidth, 1); - this._terminalService.terminalTabs.forEach(tab => tab.attachToElement(tabContainer.element)); - } - - public layout(width: number, height: number): void { - this._width = width; - this._height = height; - this._children.forEach(c => c.orthogonalLayout(width)); - this._splitView.layout(width); - } - - private _attachEventListeners(parentDomElement: HTMLElement, terminalContainer: HTMLElement): void { - this._register(dom.addDisposableListener(parentDomElement, 'mousedown', async (event: MouseEvent) => { - if (this._terminalService.terminalInstances.length === 0) { - return; - } - - if (event.which === 2 && isLinux) { - // Drop selection and focus terminal on Linux to enable middle button paste when click - // occurs on the selection itself. - const terminal = this._terminalService.getActiveInstance(); - if (terminal) { - terminal.focus(); - } - } else if (event.which === 3) { - const rightClickBehavior = this._terminalService.configHelper.config.rightClickBehavior; - if (rightClickBehavior === 'copyPaste' || rightClickBehavior === 'paste') { - const terminal = this._terminalService.getActiveInstance(); - if (!terminal) { - return; - } - - // copyPaste: Shift+right click should open context menu - if (rightClickBehavior === 'copyPaste' && event.shiftKey) { - this._openContextMenu(event); - return; - } - - if (rightClickBehavior === 'copyPaste' && terminal.hasSelection()) { - await terminal.copySelection(); - terminal.clearSelection(); - } else { - if (BrowserFeatures.clipboard.readText) { - terminal.paste(); - } else { - this._notificationService.info(`This browser doesn't support the clipboard.readText API needed to trigger a paste, try ${isMacintosh ? '⌘' : 'Ctrl'}+V instead.`); - } - } - // Clear selection after all click event bubbling is finished on Mac to prevent - // right-click selecting a word which is seemed cannot be disabled. There is a - // flicker when pasting but this appears to give the best experience if the - // setting is enabled. - if (isMacintosh) { - setTimeout(() => { - terminal.clearSelection(); - }, 0); - } - this._cancelContextMenu = true; - } - } - })); - this._register(dom.addDisposableListener(parentDomElement, 'contextmenu', (event: MouseEvent) => { - if (!this._cancelContextMenu) { - this._openContextMenu(event); - } - event.preventDefault(); - event.stopImmediatePropagation(); - this._cancelContextMenu = false; - })); - this._register(dom.addDisposableListener(document, 'keydown', (event: KeyboardEvent) => { - terminalContainer.classList.toggle('alt-active', !!event.altKey); - })); - this._register(dom.addDisposableListener(document, 'keyup', (event: KeyboardEvent) => { - terminalContainer.classList.toggle('alt-active', !!event.altKey); - })); - this._register(dom.addDisposableListener(parentDomElement, 'keyup', (event: KeyboardEvent) => { - if (event.keyCode === 27) { - // Keep terminal open on escape - event.stopPropagation(); - } - })); - this._register(dom.addDisposableListener(parentDomElement, dom.EventType.DROP, async (e: DragEvent) => { - if (e.target === this._parentDomElement || dom.isAncestor(e.target as HTMLElement, parentDomElement)) { - if (!e.dataTransfer) { - return; - } - - // Check if files were dragged from the tree explorer - let path: string | undefined; - const resources = e.dataTransfer.getData(DataTransfers.RESOURCES); - if (resources) { - path = URI.parse(JSON.parse(resources)[0]).fsPath; - } else if (e.dataTransfer.files.length > 0 && e.dataTransfer.files[0].path /* Electron only */) { - // Check if the file was dragged from the filesystem - path = URI.file(e.dataTransfer.files[0].path).fsPath; - } - - if (!path) { - return; - } - - const terminal = this._terminalService.getActiveInstance(); - if (terminal) { - const preparedPath = await this._terminalService.preparePathForTerminalAsync(path, terminal.shellLaunchConfig.executable, terminal.title, terminal.shellType); - terminal.sendText(preparedPath, false); - terminal.focus(); - } - } - })); - } - private _openContextMenu(event: MouseEvent): void { - const standardEvent = new StandardMouseEvent(event); - const anchor: { x: number, y: number } = { x: standardEvent.posx, y: standardEvent.posy }; - - const actions: IAction[] = []; - const actionsDisposable = createAndFillInContextMenuActions(this._menu, undefined, actions); - - this._contextMenuService.showContextMenu({ - getAnchor: () => anchor, - getActions: () => actions, - getActionsContext: () => this._parentDomElement, - onHide: () => actionsDisposable.dispose() - }); - } -} -class SplitTabsPane implements IView { - public minimumSize: number = 120; - public maximumSize: number = Number.MAX_VALUE; - - public orientation: Orientation | undefined; - - private _onDidChange: Event = Event.None; - public get onDidChange(): Event { return this._onDidChange; } - - readonly element: HTMLElement; - - constructor( - readonly item: HTMLElement, - public height: number, - @ITerminalService _terminalService: ITerminalService - ) { - this.element = document.createElement('div'); - this.element.className = 'terminal-tabs-split-pane'; - this.element.appendChild(item); - } - id: string = 'split-tabs-view'; - focus(): void { - throw new Error('Method not implemented.'); - } - isVisible(): boolean { - throw new Error('Method not implemented.'); - } - isBodyVisible(): boolean { - throw new Error('Method not implemented.'); - } - setExpanded(expanded: boolean): boolean { - throw new Error('Method not implemented.'); - } - getProgressIndicator(): IProgressIndicator | undefined { - throw new Error('Method not implemented.'); - } - - public layout(size: number): void { - // Only layout when both sizes are known - if (!size || !this.height) { - return; - } - - // if (this._item.classList.contains('tabs-widget')) { - - // } else { - // // this._terminalService.terminalTabs.forEach(t => t.layout(size, this.height)); - // } - } - - public orthogonalLayout(size: number): void { - this.height = size; - } -} diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index def6b896a70..2dc37d78b3a 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -25,7 +25,7 @@ import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/term import { TerminalInstance } from 'vs/workbench/contrib/terminal/browser/terminalInstance'; import { TerminalTab } from 'vs/workbench/contrib/terminal/browser/terminalTab'; import { TerminalViewPane } from 'vs/workbench/contrib/terminal/browser/terminalView'; -import { IAvailableProfilesRequest, IRemoteTerminalAttachTarget, ITerminalProfile, IStartExtensionTerminalRequest, ITerminalConfigHelper, ITerminalNativeWindowsDelegate, ITerminalProcessExtHostProxy, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE, LinuxDistro, TERMINAL_VIEW_ID, ITerminalProfileObject, ITerminalExecutable, ITerminalProfileSource, ITerminalTypeContribution } from 'vs/workbench/contrib/terminal/common/terminal'; +import { IAvailableProfilesRequest, IRemoteTerminalAttachTarget, ITerminalProfile, IStartExtensionTerminalRequest, ITerminalConfigHelper, ITerminalNativeWindowsDelegate, ITerminalProcessExtHostProxy, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE, LinuxDistro, TERMINAL_VIEW_ID, ITerminalProfileObject, ITerminalExecutable, ITerminalProfileSource, ITerminalTypeContribution } from 'vs/workbench/contrib/terminal/common/terminal'; import { escapeNonWindowsPath } from 'vs/workbench/contrib/terminal/common/terminalEnvironment'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; @@ -50,7 +50,6 @@ export class TerminalService implements ITerminalService { private _terminalFocusContextKey: IContextKey; private _terminalShellTypeContextKey: IContextKey; private _terminalAltBufferActiveContextKey: IContextKey; - private _findWidgetVisible: IContextKey; private _terminalTabs: ITerminalTab[] = []; private _backgroundedTerminalInstances: ITerminalInstance[] = []; private get _terminalInstances(): ITerminalInstance[] { @@ -143,7 +142,6 @@ export class TerminalService implements ITerminalService { this._terminalFocusContextKey = KEYBINDING_CONTEXT_TERMINAL_FOCUS.bindTo(this._contextKeyService); this._terminalShellTypeContextKey = KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE.bindTo(this._contextKeyService); this._terminalAltBufferActiveContextKey = KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE.bindTo(this._contextKeyService); - this._findWidgetVisible = KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE.bindTo(this._contextKeyService); this._configHelper = this._instantiationService.createInstance(TerminalConfigHelper); this.onTabDisposed(tab => this._removeTab(tab)); this.onActiveTabChanged(() => { @@ -1040,33 +1038,30 @@ export class TerminalService implements ITerminalService { public async focusFindWidget(): Promise { await this.showPanel(false); - // const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; - // pane.focusFindWidget(); - this._findWidgetVisible.set(true); + const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; + pane.terminalTabbedView.focusFindWidget(); } public hideFindWidget(): void { const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; if (pane) { - // pane.hideFindWidget(); - // this._findWidgetVisible.reset(); - // pane.focus(); + pane.terminalTabbedView.hideFindWidget(); } } public findNext(): void { const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; if (pane) { - // pane.showFindWidget(); - // pane.getFindWidget().find(false); + pane.terminalTabbedView.showFindWidget(); + pane.terminalTabbedView.getFindWidget().find(false); } } public findPrevious(): void { const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; if (pane) { - // pane.showFindWidget(); - // pane.getFindWidget().find(true); + pane.terminalTabbedView.showFindWidget(); + pane.terminalTabbedView.getFindWidget().find(true); } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index 5ca26e24de6..55776650710 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -7,7 +7,7 @@ import { Orientation, Sizing, SplitView } from 'vs/base/browser/ui/splitview/spl import { Disposable } from 'vs/base/common/lifecycle'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; +import { ITerminalService, TerminalConnectionState } from 'vs/workbench/contrib/terminal/browser/terminal'; import { TerminalFindWidget } from 'vs/workbench/contrib/terminal/browser/terminalFindWidget'; import { TerminalTabsWidget } from 'vs/workbench/contrib/terminal/browser/terminalTabsWidget'; import { IThemeService, IColorTheme } from 'vs/platform/theme/common/themeService'; @@ -21,8 +21,9 @@ import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; import { createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; import { IAction } from 'vs/base/common/actions'; import { IMenu, IMenuService, MenuId } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; +import { KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE } from 'vs/workbench/contrib/terminal/common/terminal'; const FIND_FOCUS_CLASS = 'find-focused'; export class TerminalTabbedView extends Disposable { @@ -40,6 +41,7 @@ export class TerminalTabbedView extends Disposable { private _terminalContainerIndex: number; private _showTabs: boolean; + private _findWidgetVisible: IContextKey; private _height: number | undefined; @@ -89,6 +91,8 @@ export class TerminalTabbedView extends Disposable { this._menu = this._register(_menuService.createMenu(MenuId.TerminalContext, _contextKeyService)); + this._findWidgetVisible = KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE.bindTo(_contextKeyService); + terminalService.setContainers(parentElement, this._terminalContainer); configurationService.onDidChangeConfiguration(e => { @@ -274,4 +278,54 @@ export class TerminalTabbedView extends Disposable { onHide: () => actionsDisposable.dispose() }); } + + public focusFindWidget() { + this._findWidgetVisible.set(true); + const activeInstance = this._terminalService.getActiveInstance(); + if (activeInstance && activeInstance.hasSelection() && activeInstance.selection!.indexOf('\n') === -1) { + this._findWidget!.reveal(activeInstance.selection); + } else { + this._findWidget!.reveal(); + } + } + + public hideFindWidget() { + this._findWidgetVisible.reset(); + this.focus(); + this._findWidget!.hide(); + } + + public showFindWidget() { + const activeInstance = this._terminalService.getActiveInstance(); + if (activeInstance && activeInstance.hasSelection() && activeInstance.selection!.indexOf('\n') === -1) { + this._findWidget!.show(activeInstance.selection); + } else { + this._findWidget!.show(); + } + } + + public getFindWidget(): TerminalFindWidget { + return this._findWidget!; + } + public focus() { + if (this._terminalService.connectionState === TerminalConnectionState.Connecting) { + // If the terminal is waiting to reconnect to remote terminals, then there is no TerminalInstance yet that can + // be focused. So wait for connection to finish, then focus. + const activeElement = document.activeElement; + this._register(this._terminalService.onDidChangeConnectionState(() => { + // Only focus the terminal if the activeElement has not changed since focus() was called + // TODO hack + if (document.activeElement === activeElement) { + this._focus(); + } + })); + + return; + } + this._focus(); + } + + private _focus() { + this._terminalService.getActiveInstance()?.focusWhenReady(); + } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index cf85a97988c..91ddb5992e8 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -28,7 +28,6 @@ import { attachSelectBoxStyler, attachStylerCallback } from 'vs/platform/theme/c import { selectBorder } from 'vs/platform/theme/common/colorRegistry'; import { ISelectOptionItem } from 'vs/base/browser/ui/selectBox/selectBox'; import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar'; -import { TabsView } from 'vs/workbench/contrib/terminal/browser/tabsView'; import { TerminalTabbedView } from 'vs/workbench/contrib/terminal/browser/terminalTabbedView'; export class TerminalViewPane extends ViewPane { @@ -37,7 +36,7 @@ export class TerminalViewPane extends ViewPane { private _parentDomElement: HTMLElement | undefined; private _tabsViewWrapper: HTMLElement | undefined; private _terminalTabbedView!: TerminalTabbedView; - private _tabsView: TabsView | undefined; + public get terminalTabbedView(): TerminalTabbedView { return this._terminalTabbedView; } private _terminalsInitialized = false; private _bodyDimensions: { width: number, height: number } = { width: 0, height: 0 }; private _isWelcomeShowing: boolean = false; @@ -72,7 +71,7 @@ export class TerminalViewPane extends ViewPane { } this._isWelcomeShowing = true; this._onDidChangeViewWelcomeState.fire(); - if (!this._tabsView && this._parentDomElement) { + if (!this._terminalTabbedView && this._parentDomElement) { this._createTabsView(); this.layoutBody(this._parentDomElement.offsetHeight, this._parentDomElement.offsetWidth); } From 77d5d2c7c2e85f2e1bee3270af0d895c4e211ec4 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 20:13:13 -0700 Subject: [PATCH 045/115] revert some changes --- .vscode/settings.json | 3 +-- src/vs/workbench/contrib/terminal/browser/media/terminal.css | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 59910bd6430..02272c796da 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -85,6 +85,5 @@ "editor.formatOnSave": true, }, "typescript.tsc.autoDetect": "off", - "notebook.experimental.useMarkdownRenderer": true, - "testing.autoRun.mode": "onlyPreviouslyRun" + "notebook.experimental.useMarkdownRenderer": true } diff --git a/src/vs/workbench/contrib/terminal/browser/media/terminal.css b/src/vs/workbench/contrib/terminal/browser/media/terminal.css index 09f46ac51e2..21e23a00a39 100644 --- a/src/vs/workbench/contrib/terminal/browser/media/terminal.css +++ b/src/vs/workbench/contrib/terminal/browser/media/terminal.css @@ -196,3 +196,4 @@ .monaco-workbench .part.sidebar > .title > .title-actions .switch-terminal > .monaco-select-box { padding: 0 22px 0 6px; } + From 2a9e136e1b5023f66e7d3ac226b585cceee167e4 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 20:14:35 -0700 Subject: [PATCH 046/115] revert more changes to settings --- .vscode/settings.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 02272c796da..807f2616653 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -84,6 +84,5 @@ "editor.defaultFormatter": "vscode.typescript-language-features", "editor.formatOnSave": true, }, - "typescript.tsc.autoDetect": "off", - "notebook.experimental.useMarkdownRenderer": true + "typescript.tsc.autoDetect": "off" } From 966eea3927747b6dcc7efdfaea8909666ed760bc Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 20:18:59 -0700 Subject: [PATCH 047/115] =?UTF-8?q?=F0=9F=A7=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 807f2616653..d9046d76c72 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -83,6 +83,5 @@ "[javascript]": { "editor.defaultFormatter": "vscode.typescript-language-features", "editor.formatOnSave": true, - }, - "typescript.tsc.autoDetect": "off" + } } From 71d57e05dcc611b82d96d39f2cb9a69acb5a9a47 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 20:20:36 -0700 Subject: [PATCH 048/115] copy directly from master --- .vscode/settings.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index d9046d76c72..7eede8c30a9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -83,5 +83,8 @@ "[javascript]": { "editor.defaultFormatter": "vscode.typescript-language-features", "editor.formatOnSave": true, - } + }, + "typescript.tsc.autoDetect": "off", + "notebook.experimental.useMarkdownRenderer": true, + "testing.autoRun.mode": "onlyPreviouslyRun", } From 1a141423308965d9db0066ed57cae611d3285bed Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 7 Apr 2021 20:22:51 -0700 Subject: [PATCH 049/115] remove empty line --- src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index 55776650710..a9111f8de55 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -149,7 +149,6 @@ export class TerminalTabbedView extends Disposable { maximumSize: Number.POSITIVE_INFINITY, onDidChange: () => Disposable.None }, Sizing.Distribute, this._terminalContainerIndex); - } layout(width: number, height: number): void { From 9a8d55525d05db7baa095e403ddf9d8b0e9add18 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Thu, 8 Apr 2021 01:31:18 -0700 Subject: [PATCH 050/115] fix: skip sha comparison for info.plist --- build/darwin/create-universal-app.js | 1 + build/darwin/create-universal-app.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/build/darwin/create-universal-app.js b/build/darwin/create-universal-app.js index 6e4acb28f35..126847c36e3 100644 --- a/build/darwin/create-universal-app.js +++ b/build/darwin/create-universal-app.js @@ -33,6 +33,7 @@ async function main() { 'Credits.rtf', 'CodeResources', 'fsevents.node', + 'info.plist', // TODO@deepak1556: regressed with 11.4.2 internal builds '.npmrc' ], outAppPath, diff --git a/build/darwin/create-universal-app.ts b/build/darwin/create-universal-app.ts index 0ec9e2a5877..13a13e01cd2 100644 --- a/build/darwin/create-universal-app.ts +++ b/build/darwin/create-universal-app.ts @@ -38,6 +38,7 @@ async function main() { 'Credits.rtf', 'CodeResources', 'fsevents.node', + 'info.plist', // TODO@deepak1556: regressed with 11.4.2 internal builds '.npmrc' ], outAppPath, From 7c3f60f86e6776c4a339c23f85fd9a11c3424bbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Moreno?= Date: Thu, 8 Apr 2021 11:57:27 +0200 Subject: [PATCH 051/115] multiple action hover feedback fixes fixes #120745 --- .../base/browser/ui/actionbar/actionbar.css | 8 ++++--- src/vs/base/browser/ui/splitview/paneview.css | 4 ++++ .../quickinput/browser/media/quickInput.css | 10 ++------ .../activitybar/media/activityaction.css | 1 + .../parts/editor/media/tabstitlecontrol.css | 3 +++ .../browser/parts/panel/media/panelpart.css | 13 ++++++++++- .../contrib/debug/browser/callStackView.ts | 5 ++-- .../debug/browser/media/debugToolBar.css | 5 +--- .../debug/browser/media/debugViewlet.css | 23 +++++-------------- .../browser/media/extensionActions.css | 7 ++---- .../browser/media/extensionEditor.css | 2 +- .../browser/media/extensionsViewlet.css | 5 ++++ .../notebook/browser/media/notebook.css | 1 + .../browser/media/settingsEditor2.css | 15 +++++++----- .../contrib/scm/browser/media/scm.css | 2 +- 15 files changed, 55 insertions(+), 49 deletions(-) diff --git a/src/vs/base/browser/ui/actionbar/actionbar.css b/src/vs/base/browser/ui/actionbar/actionbar.css index 2afccd2b6bf..180126a4177 100644 --- a/src/vs/base/browser/ui/actionbar/actionbar.css +++ b/src/vs/base/browser/ui/actionbar/actionbar.css @@ -16,6 +16,7 @@ height: 100%; width: 100%; justify-content: flex-end; + align-items: center; } .monaco-action-bar.vertical .actions-container { @@ -23,12 +24,11 @@ } .monaco-action-bar .action-item { - display: flex; + display: block; align-items: center; justify-content: center; cursor: pointer; position: relative; /* DO NOT REMOVE - this is the key to preventing the ghosting icon bug in Chrome 42 */ - min-width: 24px; } .monaco-action-bar .eaction-item.disabled { @@ -37,12 +37,14 @@ .monaco-action-bar .action-item .icon, .monaco-action-bar .action-item .codicon { - display: inline-block; + display: block; } .monaco-action-bar .action-item .codicon { display: flex; align-items: center; + width: 16px; + height: 16px; } .monaco-action-bar .action-label { diff --git a/src/vs/base/browser/ui/splitview/paneview.css b/src/vs/base/browser/ui/splitview/paneview.css index f7484d47102..7dc22bed9f2 100644 --- a/src/vs/base/browser/ui/splitview/paneview.css +++ b/src/vs/base/browser/ui/splitview/paneview.css @@ -52,6 +52,10 @@ margin-left: auto; } +.monaco-pane-view .pane > .pane-header > .actions .action-item { + margin-right: 4px; +} + .monaco-pane-view .pane > .pane-header > .actions .action-label { padding: 2px; } diff --git a/src/vs/base/parts/quickinput/browser/media/quickInput.css b/src/vs/base/parts/quickinput/browser/media/quickInput.css index db7cdb89b0a..31f0b073023 100644 --- a/src/vs/base/parts/quickinput/browser/media/quickInput.css +++ b/src/vs/base/parts/quickinput/browser/media/quickInput.css @@ -260,10 +260,8 @@ } .quick-input-list .quick-input-list-entry-action-bar .action-label.codicon { - margin: 0; - height: 100%; - padding: 0 2px; - vertical-align: middle; + margin-right: 4px; + padding: 2px; } .quick-input-list .quick-input-list-entry-action-bar { @@ -274,10 +272,6 @@ margin-right: 4px; /* separate from scrollbar */ } -.quick-input-list .quick-input-list-entry-action-bar .action-label.codicon { - margin-right: 4px; /* separate actions */ -} - .quick-input-list .quick-input-list-entry .quick-input-list-entry-action-bar .action-label.always-visible, .quick-input-list .quick-input-list-entry:hover .quick-input-list-entry-action-bar .action-label, .quick-input-list .monaco-list-row.focused .quick-input-list-entry-action-bar .action-label { diff --git a/src/vs/workbench/browser/parts/activitybar/media/activityaction.css b/src/vs/workbench/browser/parts/activitybar/media/activityaction.css index c633e22a672..f93ba52db5a 100644 --- a/src/vs/workbench/browser/parts/activitybar/media/activityaction.css +++ b/src/vs/workbench/browser/parts/activitybar/media/activityaction.css @@ -57,6 +57,7 @@ z-index: 1; display: flex; overflow: hidden; + width: 48px; height: 48px; margin-right: 0; box-sizing: border-box; diff --git a/src/vs/workbench/browser/parts/editor/media/tabstitlecontrol.css b/src/vs/workbench/browser/parts/editor/media/tabstitlecontrol.css index e05ee0fc108..49e63e5fa0e 100644 --- a/src/vs/workbench/browser/parts/editor/media/tabstitlecontrol.css +++ b/src/vs/workbench/browser/parts/editor/media/tabstitlecontrol.css @@ -324,6 +324,9 @@ .monaco-workbench .part.editor > .content .editor-group-container.active > .title .tabs-container > .tab > .tab-actions .action-label.codicon { color: inherit; font-size: 16px; + padding: 2px; + width: 16px; + height: 16px; } .monaco-workbench .part.editor > .content .editor-group-container.active > .title .tabs-container > .tab.sticky.dirty > .tab-actions .action-label:not(:hover)::before, diff --git a/src/vs/workbench/browser/parts/panel/media/panelpart.css b/src/vs/workbench/browser/parts/panel/media/panelpart.css index 2870af290a5..c7c9bbbaa07 100644 --- a/src/vs/workbench/browser/parts/panel/media/panelpart.css +++ b/src/vs/workbench/browser/parts/panel/media/panelpart.css @@ -46,6 +46,10 @@ border-right-width: 0; /* no border when editor area is hiden */ } +.monaco-workbench .part.panel > .composite.title > .title-actions .monaco-action-bar .action-item { + margin-right: 4px; +} + .monaco-workbench .part.panel > .composite.title > .title-actions .monaco-action-bar .action-item .action-label { outline-offset: -2px; } @@ -146,14 +150,21 @@ .monaco-workbench .part.panel > .composite.title> .panel-switcher-container > .monaco-action-bar .action-item .action-label { margin-right: 0; - border-radius: 0; +} + +.monaco-workbench .part.panel > .composite.title> .panel-switcher-container > .monaco-action-bar .action-item .action-label:not(.codicon) { background: none !important; + border-radius: 0; } .monaco-workbench .part.panel > .composite.title> .panel-switcher-container > .monaco-action-bar .action-item:last-child { padding-right: 10px; } +.monaco-workbench .part.panel > .composite.title> .panel-switcher-container > .monaco-action-bar .action-item:not(.checked) .action-label { + margin-bottom: 1px; +} + .monaco-workbench .part.panel > .composite.title> .panel-switcher-container > .monaco-action-bar .action-item.checked .action-label { border-bottom: 1px solid; margin-right: 0; diff --git a/src/vs/workbench/contrib/debug/browser/callStackView.ts b/src/vs/workbench/contrib/debug/browser/callStackView.ts index d81c47ae10f..52b7dd311f5 100644 --- a/src/vs/workbench/contrib/debug/browser/callStackView.ts +++ b/src/vs/workbench/contrib/debug/browser/callStackView.ts @@ -204,10 +204,9 @@ export class CallStackView extends ViewPane { } protected renderHeaderTitle(container: HTMLElement): void { - const titleContainer = dom.append(container, $('.debug-call-stack-title')); - super.renderHeaderTitle(titleContainer, this.options.title); + super.renderHeaderTitle(container, this.options.title); - this.stateMessage = dom.append(titleContainer, $('span.state-message')); + this.stateMessage = dom.append(container, $('span.call-stack-state-message')); this.stateMessage.hidden = true; this.stateMessageLabel = dom.append(this.stateMessage, $('span.label')); } diff --git a/src/vs/workbench/contrib/debug/browser/media/debugToolBar.css b/src/vs/workbench/contrib/debug/browser/media/debugToolBar.css index 1889028b46b..a6711409005 100644 --- a/src/vs/workbench/contrib/debug/browser/media/debugToolBar.css +++ b/src/vs/workbench/contrib/debug/browser/media/debugToolBar.css @@ -12,7 +12,7 @@ } .monaco-workbench .debug-toolbar .monaco-action-bar .action-item { - height: 32px; + margin-right: 4px; } .monaco-workbench .debug-toolbar .monaco-action-bar .action-item.select-container { @@ -26,7 +26,6 @@ .monaco-workbench .debug-toolbar .drag-area { cursor: grab; - height: 32px; width: 16px; opacity: 0.5; display: flex; @@ -39,8 +38,6 @@ } .monaco-workbench .debug-toolbar .monaco-action-bar .action-item .action-label { - width: 32px; - height: 32px; margin-right: 0; background-size: 16px; background-position: center center; diff --git a/src/vs/workbench/contrib/debug/browser/media/debugViewlet.css b/src/vs/workbench/contrib/debug/browser/media/debugViewlet.css index be3f1f6a23a..1e63d9c61a0 100644 --- a/src/vs/workbench/contrib/debug/browser/media/debugViewlet.css +++ b/src/vs/workbench/contrib/debug/browser/media/debugViewlet.css @@ -28,12 +28,8 @@ .monaco-workbench .part > .title > .title-actions .start-debug-action-item { display: flex; align-items: center; - font-size: 11px; - margin-right: 0.3em; - height: 20px; line-height: 20px; flex-shrink: 1; - margin-top: 7px; } .monaco-workbench.mac .part > .title > .title-actions .start-debug-action-item { @@ -43,7 +39,6 @@ .monaco-workbench .part > .title > .title-actions .start-debug-action-item .codicon { line-height: inherit; flex-shrink: 0; - transition: transform 50ms ease; } .monaco-workbench .monaco-action-bar .start-debug-action-item .configuration .monaco-select-box { @@ -66,10 +61,6 @@ cursor: initial; } -.monaco-workbench .part > .title > .title-actions .start-debug-action-item .codicon.active { - transform: scale(1.272019649, 1.272019649); -} - /* Debug viewlet trees */ .debug-pane .line-number { @@ -93,13 +84,7 @@ /* Call stack */ -.debug-pane.expanded .debug-call-stack-title, -.debug-pane.vertical .debug-call-stack-title { - display: flex; - width: 100%; -} - -.debug-pane .debug-call-stack-title > .state-message { +.debug-pane .call-stack-state-message { flex: 1; text-align: right; text-overflow: ellipsis; @@ -108,7 +93,7 @@ margin: 0px 10px; } -.debug-pane .debug-call-stack-title > .state-message > .label { +.debug-pane .call-stack-state-message > .label { border-radius: 3px; padding: 1px 2px; font-size: 9px; @@ -155,6 +140,10 @@ display: initial; } +.debug-pane .monaco-list-row .monaco-action-bar .action-label { + padding: 2px; +} + .debug-pane .session .codicon { line-height: 22px; margin-right: 2px; diff --git a/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css b/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css index 05048c2e886..03c0e7d1a9b 100644 --- a/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css +++ b/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css @@ -26,15 +26,12 @@ .monaco-action-bar .action-item .action-label.extension-action.text, .monaco-action-bar .action-item .action-label.extension-action.label, .monaco-action-bar .action-dropdown-item .action-label.extension-action.label { + width: auto; + height: auto; line-height: 14px; margin-top: 2px; } -.monaco-action-bar .action-item .action-label.extension-action.icon { - padding: 0 2px; - width: 16px; -} - .monaco-action-bar .action-item .action-label.extension-action.multiserver.install:after, .monaco-action-bar .action-item .action-label.extension-action.multiserver.update:after { content: '▼'; diff --git a/src/vs/workbench/contrib/extensions/browser/media/extensionEditor.css b/src/vs/workbench/contrib/extensions/browser/media/extensionEditor.css index a99ff0e490b..c7033c07110 100644 --- a/src/vs/workbench/contrib/extensions/browser/media/extensionEditor.css +++ b/src/vs/workbench/contrib/extensions/browser/media/extensionEditor.css @@ -162,7 +162,7 @@ min-width: 0; } -.extension-editor > .header > .details > .actions > .monaco-action-bar > .actions-container > .action-item .extension-action:not(.manage) { +.extension-editor > .header > .details > .actions > .monaco-action-bar > .actions-container > .action-item .extension-action:not(.icon) { margin-top: 0px; /* overrides from extension actions */ border-radius: 0; padding-top: 0; diff --git a/src/vs/workbench/contrib/extensions/browser/media/extensionsViewlet.css b/src/vs/workbench/contrib/extensions/browser/media/extensionsViewlet.css index 5110de46a71..f1916c9f3ee 100644 --- a/src/vs/workbench/contrib/extensions/browser/media/extensionsViewlet.css +++ b/src/vs/workbench/contrib/extensions/browser/media/extensionsViewlet.css @@ -39,10 +39,15 @@ } .extensions-viewlet > .extensions .extension-view-header .count-badge-wrapper, +.extensions-viewlet > .extensions .extension-list-item .monaco-action-bar, .extensions-viewlet > .extensions .extension-view-header .monaco-action-bar { margin-right: 4px; } +.extensions-viewlet > .extensions .extension-list-item .monaco-action-bar .action-label.icon { + padding: 1px 2px; +} + .extensions-viewlet > .extensions .extension-view-header .monaco-action-bar .action-item > .action-label.icon.codicon { vertical-align: middle; line-height: 22px; diff --git a/src/vs/workbench/contrib/notebook/browser/media/notebook.css b/src/vs/workbench/contrib/notebook/browser/media/notebook.css index 55df807cfdb..16d10e1adc5 100644 --- a/src/vs/workbench/contrib/notebook/browser/media/notebook.css +++ b/src/vs/workbench/contrib/notebook/browser/media/notebook.css @@ -695,6 +695,7 @@ display: inline-flex; padding: 0px 4px; border-radius: 0; + align-items: center; } .monaco-workbench .notebookOverlay .cell-list-top-cell-toolbar-container .monaco-toolbar .action-label .codicon, diff --git a/src/vs/workbench/contrib/preferences/browser/media/settingsEditor2.css b/src/vs/workbench/contrib/preferences/browser/media/settingsEditor2.css index c6ea78f93ac..72428cee9eb 100644 --- a/src/vs/workbench/contrib/preferences/browser/media/settingsEditor2.css +++ b/src/vs/workbench/contrib/preferences/browser/media/settingsEditor2.css @@ -51,12 +51,17 @@ } .settings-editor > .settings-header > .search-container > .settings-clear-widget { - margin: 4px 0px; - padding: 0px 8px; - border-radius: 2px; + display: flex; + align-items: center; position: absolute; - right: 0px; top: 0; + right: 0; + height: 100%; + width: 30px; +} + +.settings-editor > .settings-header > .search-container > .settings-clear-widget .action-label { + padding: 2px; } .settings-editor > .settings-header > .settings-header-controls { @@ -194,8 +199,6 @@ .settings-editor > .settings-body .settings-tree-container .setting-toolbar-container > .monaco-toolbar .codicon { opacity: 0; transition: opacity .3s; - width: 22px; - height: 22px; display: flex; align-items: center; justify-content: center; diff --git a/src/vs/workbench/contrib/scm/browser/media/scm.css b/src/vs/workbench/contrib/scm/browser/media/scm.css index e5d9817fb61..4f974a3ae5a 100644 --- a/src/vs/workbench/contrib/scm/browser/media/scm.css +++ b/src/vs/workbench/contrib/scm/browser/media/scm.css @@ -93,7 +93,7 @@ .scm-view .scm-provider > .actions > .monaco-toolbar > .monaco-action-bar > .actions-container > .action-item > .action-label > .codicon { font-size: 12px; - margin-right: 2px; + /* margin-right: 2px; */ } .scm-view .scm-provider > .actions > .monaco-toolbar > .monaco-action-bar > .actions-container > .action-item:last-of-type { From 11d3a8027d993fb05ca2c4cbc158b16eb723bf99 Mon Sep 17 00:00:00 2001 From: isidor Date: Thu, 8 Apr 2021 12:03:35 +0200 Subject: [PATCH 052/115] debug: better launch schema updating --- .../contrib/debug/browser/debugAdapterManager.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts b/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts index 2e5528d90fe..5c2ed83d10d 100644 --- a/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts +++ b/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts @@ -21,7 +21,11 @@ import { isCodeEditor } from 'vs/editor/browser/editorBrowser'; import { launchSchema, debuggersExtPoint, breakpointsExtPoint } from 'vs/workbench/contrib/debug/common/debugSchemas'; import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { launchSchemaId } from 'vs/workbench/services/configuration/common/configuration'; +import { Registry } from 'vs/platform/registry/common/platform'; +import { IJSONContributionRegistry, Extensions as JSONExtensions } from 'vs/platform/jsonschemas/common/jsonContributionRegistry'; +const jsonRegistry = Registry.as(JSONExtensions.JSONContribution); export class AdapterManager implements IAdapterManager { private debuggers: Debugger[]; @@ -81,8 +85,10 @@ export class AdapterManager implements IAdapterManager { }); // update the schema to include all attributes, snippets and types from extensions. + const items = (launchSchema.properties!['configurations'].items); + items.oneOf = []; + items.defaultSnippets = []; this.debuggers.forEach(adapter => { - const items = (launchSchema.properties!['configurations'].items); const schemaAttributes = adapter.getSchemaAttributes(); if (schemaAttributes && items.oneOf) { items.oneOf.push(...schemaAttributes); @@ -92,6 +98,7 @@ export class AdapterManager implements IAdapterManager { items.defaultSnippets.push(...configurationSnippets); } }); + jsonRegistry.registerSchema(launchSchemaId, launchSchema); this._onDidDebuggersExtPointRead.fire(); }); From 2214484ee4425c71e747aefef74441bc457d3490 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 8 Apr 2021 12:08:31 +0200 Subject: [PATCH 053/115] startup perf - load NLS module conditionally; add perf mark for main IPC server --- src/main.js | 3 ++- src/vs/code/electron-main/app.ts | 1 + src/vs/code/electron-main/main.ts | 9 ++++--- src/vs/workbench/browser/layout.ts | 4 +-- .../performance/browser/perfviewEditor.ts | 1 + .../services/timer/browser/timerService.ts | 25 +++++++++++++------ 6 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/main.js b/src/main.js index 9f7e2304720..b23c29dc50b 100644 --- a/src/main.js +++ b/src/main.js @@ -18,7 +18,6 @@ perf.mark('code/didStartMain'); const path = require('path'); const fs = require('fs'); const os = require('os'); -const { getNLSConfiguration } = require('./vs/base/node/languagePacks'); const bootstrap = require('./bootstrap'); const bootstrapNode = require('./bootstrap-node'); const { getUserDataPath } = require('./vs/platform/environment/node/userDataPath'); @@ -87,6 +86,7 @@ let nlsConfigurationPromise = undefined; const metaDataFile = path.join(__dirname, 'nls.metadata.json'); const locale = getUserDefinedLocale(argvConfig); if (locale) { + const { getNLSConfiguration } = require('./vs/base/node/languagePacks'); nlsConfigurationPromise = getNLSConfiguration(product.commit, userDataPath, metaDataFile, locale); } @@ -579,6 +579,7 @@ async function resolveNlsConfiguration() { // See above the comment about the loader and case sensitiviness appLocale = appLocale.toLowerCase(); + const { getNLSConfiguration } = require('./vs/base/node/languagePacks'); nlsConfiguration = await getNLSConfiguration(product.commit, userDataPath, metaDataFile, appLocale); if (!nlsConfiguration) { nlsConfiguration = { locale: appLocale, availableLanguages: {} }; diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts index 761d20f3786..a34f03523b7 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts @@ -93,6 +93,7 @@ import { ISignService } from 'vs/platform/sign/common/sign'; * even if the user starts many instances (e.g. from the command line). */ export class CodeApplication extends Disposable { + private windowsMainService: IWindowsMainService | undefined; private nativeHostMainService: INativeHostMainService | undefined; diff --git a/src/vs/code/electron-main/main.ts b/src/vs/code/electron-main/main.ts index 9f66c45a146..a2687622d9d 100644 --- a/src/vs/code/electron-main/main.ts +++ b/src/vs/code/electron-main/main.ts @@ -8,6 +8,7 @@ import { app, dialog } from 'electron'; import { promises, unlinkSync } from 'fs'; import { localize } from 'vs/nls'; import { isWindows, IProcessEnvironment, isMacintosh } from 'vs/base/common/platform'; +import { mark } from 'vs/base/common/performance'; import product from 'vs/platform/product/common/product'; import { parseMainProcessArgv, addArg } from 'vs/platform/environment/node/argvHelper'; import { createWaitMarkerFile } from 'vs/platform/environment/node/wait'; @@ -107,7 +108,7 @@ class CodeMain { // Create the main IPC server by trying to be the server // If this throws an error it means we are not the first // instance of VS Code running and so we would quit. - const mainProcessNodeIpcServer = await this.doStartup(logService, environmentService, lifecycleMainService, instantiationService, productService, true); + const mainProcessNodeIpcServer = await this.claimInstance(logService, environmentService, lifecycleMainService, instantiationService, productService, true); // Delay creation of spdlog for perf reasons (https://github.com/microsoft/vscode/issues/72906) bufferLogService.logger = new SpdLogLogger('main', join(environmentService.logsPath, 'main.log'), true, bufferLogService.getLevel()); @@ -221,14 +222,16 @@ class CodeMain { return Promise.all([environmentServiceInitialization, configurationServiceInitialization, stateServiceInitialization]); } - private async doStartup(logService: ILogService, environmentMainService: IEnvironmentMainService, lifecycleMainService: ILifecycleMainService, instantiationService: IInstantiationService, productService: IProductService, retry: boolean): Promise { + private async claimInstance(logService: ILogService, environmentMainService: IEnvironmentMainService, lifecycleMainService: ILifecycleMainService, instantiationService: IInstantiationService, productService: IProductService, retry: boolean): Promise { // Try to setup a server for running. If that succeeds it means // we are the first instance to startup. Otherwise it is likely // that another instance is already running. let mainProcessNodeIpcServer: NodeIPCServer; try { + mark('code/willStartMainServer'); mainProcessNodeIpcServer = await nodeIPCServe(environmentMainService.mainIPCHandle); + mark('code/didStartMainServer'); once(lifecycleMainService.onWillShutdown)(() => mainProcessNodeIpcServer.dispose()); } catch (error) { @@ -273,7 +276,7 @@ class CodeMain { throw error; } - return this.doStartup(logService, environmentMainService, lifecycleMainService, instantiationService, productService, false); + return this.claimInstance(logService, environmentMainService, lifecycleMainService, instantiationService, productService, false); } // Tests from CLI require to be the only instance currently diff --git a/src/vs/workbench/browser/layout.ts b/src/vs/workbench/browser/layout.ts index 99bdc1713de..183b5324d11 100644 --- a/src/vs/workbench/browser/layout.ts +++ b/src/vs/workbench/browser/layout.ts @@ -678,7 +678,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi mark('code/didRestoreEditors'); })()); - // Restore default views + // Restore default views (only when `IDefaultLayout` is provided) const restoreDefaultViewsPromise = (async () => { if (this.state.views.defaults?.length) { mark('code/willOpenDefaultViews'); @@ -775,7 +775,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi mark('code/willRestorePanel'); - const panel = await this.panelService.openPanel(this.state.panel.panelToRestore!); + const panel = await this.panelService.openPanel(this.state.panel.panelToRestore); if (!panel) { await this.panelService.openPanel(Registry.as(PanelExtensions.Panels).getDefaultPanelId()); // fallback to default panel as needed } diff --git a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts index b50dca22023..0e437ffaffe 100644 --- a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts +++ b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts @@ -169,6 +169,7 @@ class PerfModelContentProvider implements ITextModelContentProvider { table.push(['start => app.isReady', metrics.timers.ellapsedAppReady, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['nls:start => nls:end', metrics.timers.ellapsedNlsGeneration, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['require(main.bundle.js)', metrics.timers.ellapsedLoadMainBundle, '[main]', `initial startup: ${metrics.initialStartup}`]); + table.push(['serve main IPC handle', metrics.timers.ellapsedMainServer, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['app.isReady => window.loadUrl()', metrics.timers.ellapsedWindowLoad, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['window.loadUrl() => begin to require(workbench.desktop.main.js)', metrics.timers.ellapsedWindowLoadToRequire, '[main->renderer]', StartupKindToString(metrics.windowKind)]); table.push(['require(workbench.desktop.main.js)', metrics.timers.ellapsedRequire, '[renderer]', `cached data: ${(metrics.didUseCachedData ? 'YES' : 'NO')}${stats ? `, node_modules took ${stats.nodeRequireTotal}ms` : ''}`]); diff --git a/src/vs/workbench/services/timer/browser/timerService.ts b/src/vs/workbench/services/timer/browser/timerService.ts index 0e94af6bcb6..c62d344a545 100644 --- a/src/vs/workbench/services/timer/browser/timerService.ts +++ b/src/vs/workbench/services/timer/browser/timerService.ts @@ -41,23 +41,25 @@ export interface IMemoryInfo { "panelId": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, "editorIds": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, "timers.ellapsedAppReady" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "timers.ellapsedNlsGeneration" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "timers.ellapsedLoadMainBundle" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "timers.ellapsedMainServer" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedWindowLoad" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedWindowLoadToRequire" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, - "timers.ellapsedExtensions" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, - "timers.ellapsedExtensionsReady" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, - "timers.ellapsedRequire" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "timers.ellapsedWaitForWindowConfig" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "timers.ellapsedWaitForShellEnv" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedStorageInit" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, - "timers.ellapsedSharedProcesConnected" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedWorkspaceServiceInit" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "timers.ellapsedSharedProcesConnected" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedRequiredUserDataInit" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedOtherUserDataInit" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "timers.ellapsedRequire" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "timers.ellapsedExtensions" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "timers.ellapsedExtensionsReady" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedViewletRestore" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedPanelRestore" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedEditorRestore" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedWorkbench" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, - "timers.ellapsedNlsGeneration" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, - "timers.ellapsedWaitForWindowConfig" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, - "timers.ellapsedWaitForShellEnv" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "platform" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, "release" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, "arch" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, @@ -177,6 +179,14 @@ export interface IStartupMetrics { */ readonly ellapsedLoadMainBundle?: number; + /** + * The time it took to create the main instance server. + * + * * Happens in the main-process + * * Measured with the `willStartMainServer` and `didStartMainServer` performance marks. + */ + readonly ellapsedMainServer?: number; + /** * The time it took to tell electron to open/restore a renderer (browser window). * @@ -528,6 +538,7 @@ export abstract class AbstractTimerService implements ITimerService { ellapsedAppReady: initialStartup ? this._marks.getDuration('code/didStartMain', 'code/mainAppReady') : undefined, ellapsedNlsGeneration: initialStartup ? this._marks.getDuration('code/willGenerateNls', 'code/didGenerateNls') : undefined, ellapsedLoadMainBundle: initialStartup ? this._marks.getDuration('code/willLoadMainBundle', 'code/didLoadMainBundle') : undefined, + ellapsedMainServer: initialStartup ? this._marks.getDuration('code/willStartMainServer', 'code/didStartMainServer') : undefined, ellapsedWindowLoad: initialStartup ? this._marks.getDuration('code/mainAppReady', 'code/willOpenNewWindow') : undefined, ellapsedWindowLoadToRequire: this._marks.getDuration('code/willOpenNewWindow', 'code/willLoadWorkbenchMain'), ellapsedRequire: this._marks.getDuration('code/willLoadWorkbenchMain', 'code/didLoadWorkbenchMain'), From 969af66534955844741578449f1e5352053dcf09 Mon Sep 17 00:00:00 2001 From: Andre Weinand Date: Thu, 8 Apr 2021 12:25:34 +0200 Subject: [PATCH 054/115] node-debug@1.44.23; fixes #120762 --- product.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product.json b/product.json index 7344ed79094..71d9b32f1e6 100644 --- a/product.json +++ b/product.json @@ -33,7 +33,7 @@ "builtInExtensions": [ { "name": "ms-vscode.node-debug", - "version": "1.44.20", + "version": "1.44.23", "repo": "https://github.com/microsoft/vscode-node-debug", "metadata": { "id": "b6ded8fb-a0a0-4c1c-acbd-ab2a3bc995a6", From 936219d314f04e2b1484836bfe248d1f71512e99 Mon Sep 17 00:00:00 2001 From: CanadaHonk Date: Thu, 8 Apr 2021 11:37:22 +0100 Subject: [PATCH 055/115] Fix JSON formatting in High Contrast Black default theme (2) --- extensions/theme-defaults/themes/hc_black.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/theme-defaults/themes/hc_black.json b/extensions/theme-defaults/themes/hc_black.json index bf0536d3c38..06fb75f549b 100644 --- a/extensions/theme-defaults/themes/hc_black.json +++ b/extensions/theme-defaults/themes/hc_black.json @@ -450,6 +450,6 @@ "newOperator": "#FFFFFF", "stringLiteral": "#ce9178", "customLiteral": "#DCDCAA", - "numberLiteral": "#b5cea8", + "numberLiteral": "#b5cea8" } } From 28c734595acf91610eef88498f96d944a161f5e0 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 8 Apr 2021 13:14:06 +0200 Subject: [PATCH 056/115] perf - add marks for crash reporter and window creation --- src/main.js | 2 ++ .../electron-main/windowsMainService.ts | 4 +++- .../performance/browser/perfviewEditor.ts | 2 ++ .../services/timer/browser/timerService.ts | 20 +++++++++++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main.js b/src/main.js index b23c29dc50b..5f63ccbe2e0 100644 --- a/src/main.js +++ b/src/main.js @@ -44,7 +44,9 @@ app.setPath('userData', userDataPath); const argvConfig = configureCommandlineSwitchesSync(args); // Configure crash reporter +perf.mark('code/willStartCrashReporter'); configureCrashReporter(); +perf.mark('code/didStartCrashReporter'); // Set logs path before app 'ready' event if running portable // to ensure that no 'logs' folder is created on disk at a diff --git a/src/vs/platform/windows/electron-main/windowsMainService.ts b/src/vs/platform/windows/electron-main/windowsMainService.ts index 4e2403bb006..e512ac374ed 100644 --- a/src/vs/platform/windows/electron-main/windowsMainService.ts +++ b/src/vs/platform/windows/electron-main/windowsMainService.ts @@ -6,7 +6,7 @@ import { statSync } from 'fs'; import { release } from 'os'; import product from 'vs/platform/product/common/product'; -import { getMarks } from 'vs/base/common/performance'; +import { mark, getMarks } from 'vs/base/common/performance'; import { basename, normalize, join, posix } from 'vs/base/common/path'; import { localize } from 'vs/nls'; import { coalesce, distinct, firstOrDefault } from 'vs/base/common/arrays'; @@ -1211,11 +1211,13 @@ export class WindowsMainService extends Disposable implements IWindowsMainServic const state = this.windowsStateHandler.getNewWindowState(configuration); // Create the window + mark('code/willCreateWindow'); const createdWindow = window = this.instantiationService.createInstance(CodeWindow, { state, extensionDevelopmentPath: configuration.extensionDevelopmentPath, isExtensionTestHost: !!configuration.extensionTestsPath }); + mark('code/didCreateWindow'); // Add as window tab if configured (macOS only) if (options.forceNewTabbedWindow) { diff --git a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts index 0e437ffaffe..670f099e4be 100644 --- a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts +++ b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts @@ -169,7 +169,9 @@ class PerfModelContentProvider implements ITextModelContentProvider { table.push(['start => app.isReady', metrics.timers.ellapsedAppReady, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['nls:start => nls:end', metrics.timers.ellapsedNlsGeneration, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['require(main.bundle.js)', metrics.timers.ellapsedLoadMainBundle, '[main]', `initial startup: ${metrics.initialStartup}`]); + table.push(['start crash reporter', metrics.timers.ellapsedCrashReporter, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['serve main IPC handle', metrics.timers.ellapsedMainServer, '[main]', `initial startup: ${metrics.initialStartup}`]); + table.push(['create windw', metrics.timers.ellapsedWindowCreate, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['app.isReady => window.loadUrl()', metrics.timers.ellapsedWindowLoad, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['window.loadUrl() => begin to require(workbench.desktop.main.js)', metrics.timers.ellapsedWindowLoadToRequire, '[main->renderer]', StartupKindToString(metrics.windowKind)]); table.push(['require(workbench.desktop.main.js)', metrics.timers.ellapsedRequire, '[renderer]', `cached data: ${(metrics.didUseCachedData ? 'YES' : 'NO')}${stats ? `, node_modules took ${stats.nodeRequireTotal}ms` : ''}`]); diff --git a/src/vs/workbench/services/timer/browser/timerService.ts b/src/vs/workbench/services/timer/browser/timerService.ts index c62d344a545..1392f70a41c 100644 --- a/src/vs/workbench/services/timer/browser/timerService.ts +++ b/src/vs/workbench/services/timer/browser/timerService.ts @@ -43,7 +43,9 @@ export interface IMemoryInfo { "timers.ellapsedAppReady" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedNlsGeneration" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedLoadMainBundle" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "timers.ellapsedCrashReporter" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedMainServer" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "timers.ellapsedWindowCreate" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedWindowLoad" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedWindowLoadToRequire" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, "timers.ellapsedWaitForWindowConfig" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, @@ -179,6 +181,14 @@ export interface IStartupMetrics { */ readonly ellapsedLoadMainBundle?: number; + /** + * The time it took to start the crash reporter. + * + * * Happens in the main-process + * * Measured with the `willStartCrashReporter` and `didStartCrashReporter` performance marks. + */ + readonly ellapsedCrashReporter?: number; + /** * The time it took to create the main instance server. * @@ -187,6 +197,14 @@ export interface IStartupMetrics { */ readonly ellapsedMainServer?: number; + /** + * The time it took to create the window. + * + * * Happens in the main-process + * * Measured with the `willCreateWindow` and `didCreateWindow` performance marks. + */ + readonly ellapsedWindowCreate?: number; + /** * The time it took to tell electron to open/restore a renderer (browser window). * @@ -538,7 +556,9 @@ export abstract class AbstractTimerService implements ITimerService { ellapsedAppReady: initialStartup ? this._marks.getDuration('code/didStartMain', 'code/mainAppReady') : undefined, ellapsedNlsGeneration: initialStartup ? this._marks.getDuration('code/willGenerateNls', 'code/didGenerateNls') : undefined, ellapsedLoadMainBundle: initialStartup ? this._marks.getDuration('code/willLoadMainBundle', 'code/didLoadMainBundle') : undefined, + ellapsedCrashReporter: initialStartup ? this._marks.getDuration('code/willStartCrashReporter', 'code/didStartCrashReporter') : undefined, ellapsedMainServer: initialStartup ? this._marks.getDuration('code/willStartMainServer', 'code/didStartMainServer') : undefined, + ellapsedWindowCreate: initialStartup ? this._marks.getDuration('code/willCreateWindow', 'code/didCreateWindow') : undefined, ellapsedWindowLoad: initialStartup ? this._marks.getDuration('code/mainAppReady', 'code/willOpenNewWindow') : undefined, ellapsedWindowLoadToRequire: this._marks.getDuration('code/willOpenNewWindow', 'code/willLoadWorkbenchMain'), ellapsedRequire: this._marks.getDuration('code/willLoadWorkbenchMain', 'code/didLoadWorkbenchMain'), From 10c17f374e52f9ad78d548a16bfe6af4ff581162 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 8 Apr 2021 13:20:24 +0200 Subject: [PATCH 057/115] fix speling error --- src/vs/workbench/contrib/performance/browser/perfviewEditor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts index 670f099e4be..eb340b3ffc6 100644 --- a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts +++ b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts @@ -171,7 +171,7 @@ class PerfModelContentProvider implements ITextModelContentProvider { table.push(['require(main.bundle.js)', metrics.timers.ellapsedLoadMainBundle, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['start crash reporter', metrics.timers.ellapsedCrashReporter, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['serve main IPC handle', metrics.timers.ellapsedMainServer, '[main]', `initial startup: ${metrics.initialStartup}`]); - table.push(['create windw', metrics.timers.ellapsedWindowCreate, '[main]', `initial startup: ${metrics.initialStartup}`]); + table.push(['create window', metrics.timers.ellapsedWindowCreate, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['app.isReady => window.loadUrl()', metrics.timers.ellapsedWindowLoad, '[main]', `initial startup: ${metrics.initialStartup}`]); table.push(['window.loadUrl() => begin to require(workbench.desktop.main.js)', metrics.timers.ellapsedWindowLoadToRequire, '[main->renderer]', StartupKindToString(metrics.windowKind)]); table.push(['require(workbench.desktop.main.js)', metrics.timers.ellapsedRequire, '[renderer]', `cached data: ${(metrics.didUseCachedData ? 'YES' : 'NO')}${stats ? `, node_modules took ${stats.nodeRequireTotal}ms` : ''}`]); From c111a4caf2be78b040d3f51427bdaed448a530d0 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 8 Apr 2021 13:29:57 +0200 Subject: [PATCH 058/115] perf - delay notifications for extensions disabled to a later point The notification appearing while editors open is not a realistic scenario for the perf run. --- .../extensionManagement/browser/extensionEnablementService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.ts b/src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.ts index f046032b978..49a0a98192e 100644 --- a/src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.ts +++ b/src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.ts @@ -76,7 +76,7 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench // delay notification for extensions disabled until workbench restored if (this.allUserExtensionsDisabled) { - this.lifecycleService.when(LifecyclePhase.Restored).then(() => { + this.lifecycleService.when(LifecyclePhase.Eventually).then(() => { this.notificationService.prompt(Severity.Info, localize('extensionsDisabled', "All installed extensions are temporarily disabled."), [{ label: localize('Reload', "Reload and Enable Extensions"), run: () => hostService.reload({ disableExtensions: false }) From ffe10c858b70137b20db108e5205067588b721ae Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Thu, 8 Apr 2021 13:31:50 +0200 Subject: [PATCH 059/115] Add ctrl+click message to address cell in ports view Part of microsoft/vscode-remote-release#4826 --- .../remote/browser/media/tunnelView.css | 1 + .../contrib/remote/browser/tunnelView.ts | 102 ++++++++++++++---- 2 files changed, 84 insertions(+), 19 deletions(-) diff --git a/src/vs/workbench/contrib/remote/browser/media/tunnelView.css b/src/vs/workbench/contrib/remote/browser/media/tunnelView.css index 3f47c14b1aa..7833ef657b0 100644 --- a/src/vs/workbench/contrib/remote/browser/media/tunnelView.css +++ b/src/vs/workbench/contrib/remote/browser/media/tunnelView.css @@ -31,6 +31,7 @@ text-overflow: ellipsis; overflow: hidden; flex-wrap: nowrap; + height: 22px; } .ports-view .monaco-list .monaco-list-row .ports-view-actionbar-cell .monaco-inputbox { diff --git a/src/vs/workbench/contrib/remote/browser/tunnelView.ts b/src/vs/workbench/contrib/remote/browser/tunnelView.ts index 51bd712bc78..2af2fb831d6 100644 --- a/src/vs/workbench/contrib/remote/browser/tunnelView.ts +++ b/src/vs/workbench/contrib/remote/browser/tunnelView.ts @@ -39,15 +39,18 @@ import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems'; -import { copyAddressIcon, forwardedPortWithoutProcessIcon, forwardedPortWithProcessIcon, forwardPortIcon, labelPortIcon, openBrowserIcon, openPreviewIcon, portsViewIcon, privatePortIcon, publicPortIcon, stopForwardIcon } from 'vs/workbench/contrib/remote/browser/remoteIcons'; +import { copyAddressIcon, forwardedPortWithoutProcessIcon, forwardedPortWithProcessIcon, forwardPortIcon, labelPortIcon, openPreviewIcon, portsViewIcon, privatePortIcon, publicPortIcon, stopForwardIcon } from 'vs/workbench/contrib/remote/browser/remoteIcons'; import { IExternalUriOpenerService } from 'vs/workbench/contrib/externalUriOpener/common/externalUriOpenerService'; import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { isWeb } from 'vs/base/common/platform'; +import { isMacintosh, isWeb } from 'vs/base/common/platform'; import { ITableColumn, ITableContextMenuEvent, ITableEvent, ITableMouseEvent, ITableRenderer, ITableVirtualDelegate } from 'vs/base/browser/ui/table/table'; import { WorkbenchTable } from 'vs/platform/list/browser/listService'; import { Button } from 'vs/base/browser/ui/button/button'; import { registerColor } from 'vs/platform/theme/common/colorRegistry'; import { Color, RGBA } from 'vs/base/common/color'; +import { IMarkdownString, MarkdownString } from 'vs/base/common/htmlContent'; +import { IHoverDelegateOptions } from 'vs/base/browser/ui/iconLabel/iconHoverDelegate'; +import { IHoverService } from 'vs/workbench/services/hover/browser/hover'; export const forwardedPortsViewEnabled = new RawContextKey('forwardedPortsViewEnabled', false, nls.localize('tunnel.forwardedPortsViewEnabled', "Whether the Ports view is enabled.")); @@ -216,7 +219,39 @@ class LocalAddressColumn implements ITableColumn { if (row instanceof TunnelItem) { tooltip = row.tooltipPostfix; } - return { label, menuId: MenuId.TunnelLocalAddressInline, tunnel: row, editId: TunnelEditId.LocalPort, tooltip }; + return { + label, + menuId: MenuId.TunnelLocalAddressInline, + tunnel: row, + editId: TunnelEditId.LocalPort, + tooltip, + markdownTooltip: label ? LocalAddressColumn.getHoverText(label) : undefined + }; + } + + private static getHoverText(localAddress: string) { + return function (configurationService: IConfigurationService) { + const editorConf = configurationService.getValue<{ multiCursorModifier: 'ctrlCmd' | 'alt' }>('editor'); + + let clickLabel = ''; + if (editorConf.multiCursorModifier === 'ctrlCmd') { + if (isMacintosh) { + clickLabel = nls.localize('portsLink.followLinkAlt.mac', "option + click"); + } else { + clickLabel = nls.localize('portsLink.followLinkAlt', "alt + click"); + } + } else { + if (isMacintosh) { + clickLabel = nls.localize('portsLink.followLinkCmd', "cmd + click"); + } else { + clickLabel = nls.localize('portsLink.followLinkCtrl', "ctrl + click"); + } + } + + const markdown = new MarkdownString('', true); + const uri = localAddress.startsWith('http') ? localAddress : `http://${localAddress}`; + return markdown.appendMarkdown(`[Follow link](${uri}) (${clickLabel})`); + }; } } @@ -283,6 +318,7 @@ interface ActionBarCell { label: string; icon?: ThemeIcon; tooltip: string; + markdownTooltip?: (configurationService: IConfigurationService) => IMarkdownString; menuId?: MenuId; tunnel: ITunnelItem; editId: TunnelEditId; @@ -300,7 +336,9 @@ class ActionBarRenderer extends Disposable implements ITableRenderer { + return this.hoverService.showHover(options); + }, + delay: this.configurationService.getValue('workbench.hover.delay') + } + }); const actionsContainer = dom.append(cell, dom.$('.actions')); const actionBar = new ActionBar(actionsContainer, { actionViewItemProvider: createActionViewItem.bind(undefined, this.instantiationService) @@ -360,7 +407,12 @@ class ActionBarRenderer extends Disposable implements ITableRenderer nls.localize('tunnelView', "Tunnel View") }, - openOnSingleClick: false + openOnSingleClick: true } ) as WorkbenchTable; @@ -737,8 +791,27 @@ export class TunnelPanel extends ViewPane { })); this._register(this.table.onDidOpen(e => { - if (e.element && (e.element.tunnelType === TunnelType.Forwarded)) { + if (!e.element || (e.element.tunnelType !== TunnelType.Forwarded)) { + return; + } + if (e.browserEvent?.type === 'dblclick') { this.commandService.executeCommand(LabelTunnelAction.ID); + } else if (e.browserEvent instanceof MouseEvent) { + const editorConf = this.configurationService.getValue<{ multiCursorModifier: 'ctrlCmd' | 'alt' }>('editor'); + + let modifierKey = false; + if (editorConf.multiCursorModifier === 'ctrlCmd') { + modifierKey = e.browserEvent.altKey; + } else { + if (isMacintosh) { + modifierKey = e.browserEvent.metaKey; + } else { + modifierKey = e.browserEvent.ctrlKey; + } + } + if (modifierKey) { + this.commandService.executeCommand(OpenPortInBrowserAction.ID, e.element); + } } })); @@ -1448,15 +1521,6 @@ MenuRegistry.appendMenuItem(MenuId.TunnelLocalAddressInline, ({ })); MenuRegistry.appendMenuItem(MenuId.TunnelLocalAddressInline, ({ order: 1, - command: { - id: OpenPortInBrowserAction.ID, - title: OpenPortInBrowserAction.LABEL, - icon: openBrowserIcon - }, - when: ContextKeyExpr.or(TunnelTypeContextKey.isEqualTo(TunnelType.Forwarded), TunnelTypeContextKey.isEqualTo(TunnelType.Detected)) -})); -MenuRegistry.appendMenuItem(MenuId.TunnelLocalAddressInline, ({ - order: 2, command: { id: OpenPortInPreviewAction.ID, title: OpenPortInPreviewAction.LABEL, From e9b4e01a4b2e30e8862aef7c0621048fb9d99be6 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 8 Apr 2021 13:39:30 +0200 Subject: [PATCH 060/115] process explorer - fix window title --- src/vs/platform/issue/electron-main/issueMainService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/platform/issue/electron-main/issueMainService.ts b/src/vs/platform/issue/electron-main/issueMainService.ts index 86417c0922d..caf76f32f3b 100644 --- a/src/vs/platform/issue/electron-main/issueMainService.ts +++ b/src/vs/platform/issue/electron-main/issueMainService.ts @@ -239,7 +239,7 @@ export class IssueMainService implements ICommonIssueService { const processExplorerWindowConfigUrl = processExplorerDisposables.add(this.protocolMainService.createIPCObjectUrl()); const position = this.getWindowPosition(this.processExplorerParentWindow, 800, 500); - this.processExplorerWindow = this.createBrowserWindow(position, processExplorerWindowConfigUrl, data.styles.backgroundColor, localize('issueReporter', "Issue Reporter"), data.zoomLevel); + this.processExplorerWindow = this.createBrowserWindow(position, processExplorerWindowConfigUrl, data.styles.backgroundColor, localize('processExplorer', "Process Explorer"), data.zoomLevel); // Store into config object URL processExplorerWindowConfigUrl.update({ From 61dacc2f8139752c3ea7bd1fa4d58f83d2fa6480 Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Thu, 8 Apr 2021 13:50:39 +0200 Subject: [PATCH 061/115] Add hover underline to port address Part of microsoft/vscode-remote-release#4826 --- src/vs/workbench/contrib/remote/browser/media/tunnelView.css | 4 ++++ src/vs/workbench/contrib/remote/browser/tunnelView.ts | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/remote/browser/media/tunnelView.css b/src/vs/workbench/contrib/remote/browser/media/tunnelView.css index 7833ef657b0..92ac6cd982b 100644 --- a/src/vs/workbench/contrib/remote/browser/media/tunnelView.css +++ b/src/vs/workbench/contrib/remote/browser/media/tunnelView.css @@ -44,6 +44,10 @@ margin-top: -40px; } +.ports-view .monaco-list .monaco-list-row .ports-view-actionbar-cell .ports-view-actionbar-cell-localaddress:hover { + text-decoration: underline; +} + .ports-view .monaco-table-th { padding-left: 10px; } diff --git a/src/vs/workbench/contrib/remote/browser/tunnelView.ts b/src/vs/workbench/contrib/remote/browser/tunnelView.ts index 2af2fb831d6..e4772a1973a 100644 --- a/src/vs/workbench/contrib/remote/browser/tunnelView.ts +++ b/src/vs/workbench/contrib/remote/browser/tunnelView.ts @@ -396,6 +396,7 @@ class ActionBarRenderer extends Disposable implements ITableRenderer Date: Thu, 8 Apr 2021 14:01:48 +0200 Subject: [PATCH 062/115] perf - wait for dom ready when waiting for services --- src/vs/workbench/browser/web.main.ts | 5 ++--- src/vs/workbench/browser/workbench.ts | 5 ++++- src/vs/workbench/electron-sandbox/shared.desktop.main.ts | 6 ++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/browser/web.main.ts b/src/vs/workbench/browser/web.main.ts index 7ea417d1adf..1bd1da7b6e8 100644 --- a/src/vs/workbench/browser/web.main.ts +++ b/src/vs/workbench/browser/web.main.ts @@ -79,10 +79,9 @@ class BrowserMain extends Disposable { } async open(): Promise { - const services = await this.initServices(); - await domContentLoaded(); - mark('code/willStartWorkbench'); + // Init services and wait for DOM to be ready in parallel + const [services] = await Promise.all([this.initServices(), domContentLoaded()]); // Create Workbench const workbench = new Workbench(this.domElement, services.serviceCollection, services.logService); diff --git a/src/vs/workbench/browser/workbench.ts b/src/vs/workbench/browser/workbench.ts index 204d885b1e0..3ee51cd49f5 100644 --- a/src/vs/workbench/browser/workbench.ts +++ b/src/vs/workbench/browser/workbench.ts @@ -58,6 +58,9 @@ export class Workbench extends Layout { ) { super(parent); + // Perf: measure workbench startup time + mark('code/willStartWorkbench'); + this.registerErrorHandler(logService); } @@ -424,7 +427,7 @@ export class Workbench extends Layout { this._register(runWhenIdle(() => lifecycleService.phase = LifecyclePhase.Eventually, 2500)); }, 2500); - // Telemetry: startup metrics + // Perf: signal workbench started mark('code/didStartWorkbench'); // Perf reporting (devtools) diff --git a/src/vs/workbench/electron-sandbox/shared.desktop.main.ts b/src/vs/workbench/electron-sandbox/shared.desktop.main.ts index d9f43fd6eda..fe56af8e0f5 100644 --- a/src/vs/workbench/electron-sandbox/shared.desktop.main.ts +++ b/src/vs/workbench/electron-sandbox/shared.desktop.main.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import { zoomLevelToZoomFactor } from 'vs/platform/windows/common/windows'; -import { mark } from 'vs/base/common/performance'; import { Workbench } from 'vs/workbench/browser/workbench'; import { NativeWindow } from 'vs/workbench/electron-sandbox/window'; import { setZoomLevel, setZoomFactor, setFullscreen } from 'vs/base/browser/browser'; @@ -99,10 +98,9 @@ export abstract class SharedDesktopMain extends Disposable { } async open(): Promise { - const services = await this.initServices(); - await domContentLoaded(); - mark('code/willStartWorkbench'); + // Init services and wait for DOM to be ready in parallel + const [services] = await Promise.all([this.initServices(), domContentLoaded()]); // Create Workbench const workbench = new Workbench(document.body, services.serviceCollection, services.logService); From 37a44ac7dbbdbc76f1a72019d518663a16ec3e47 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 8 Apr 2021 05:24:07 -0700 Subject: [PATCH 063/115] Types, polish --- .../contrib/terminal/browser/terminalTabbedView.ts | 6 +++--- .../contrib/terminal/browser/terminalTabsWidget.ts | 8 ++++---- .../contrib/terminal/common/terminalConfiguration.ts | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index a9111f8de55..dd60c3353ad 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -34,7 +34,7 @@ export class TerminalTabbedView extends Disposable { private _terminalTabTree: HTMLElement; private _parentElement: HTMLElement; - private _tabsWidget: TerminalTabsWidget | undefined; + private _tabsWidget: TerminalTabsWidget; private _findWidget: TerminalFindWidget; private _tabTreeIndex: number; @@ -101,7 +101,7 @@ export class TerminalTabbedView extends Disposable { if (this._showTabs) { this._splitView.addView({ element: this._terminalTabTree, - layout: width => this._tabsWidget!.layout(this._height, width), + layout: width => this._tabsWidget.layout(this._height, width), minimumSize: 40, maximumSize: Number.POSITIVE_INFINITY, onDidChange: () => Disposable.None, @@ -136,7 +136,7 @@ export class TerminalTabbedView extends Disposable { if (this._showTabs) { this._splitView.addView({ element: this._terminalTabTree, - layout: width => this._tabsWidget!.layout(this._height, width), + layout: width => this._tabsWidget.layout(this._height, width), minimumSize: 40, maximumSize: Number.POSITIVE_INFINITY, onDidChange: () => Disposable.None, diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index afe69c92b63..be19f85cc42 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -14,11 +14,11 @@ import { IThemeService } from 'vs/platform/theme/common/themeService'; import { IIdentityProvider } from 'vs/base/browser/ui/list/list'; import { ITerminalInstance, ITerminalService, ITerminalTab } from 'vs/workbench/contrib/terminal/browser/terminal'; import { localize } from 'vs/nls'; -import * as DOM from 'vs/base/browser/dom'; +import * as dom from 'vs/base/browser/dom'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { Codicon } from 'vs/base/common/codicons'; -const $ = DOM.$; +const $ = dom.$; export class TerminalTabsWidget extends WorkbenchObjectTree { private _terminalService: ITerminalService; @@ -44,7 +44,7 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { supportDynamicHeights: true, identityProvider: new TerminalTabsIdentityProvider(), accessibilityProvider: new TerminalTabsAccessibilityProvider(), - styleController: id => new DefaultStyleController(DOM.createStyleSheet(container), id), + styleController: id => new DefaultStyleController(dom.createStyleSheet(container), id), filter: undefined, smoothScrolling: configurationService.getValue('workbench.list.smoothScrolling'), multipleSelectionSupport: false, @@ -117,7 +117,7 @@ class TerminalTabsRenderer implements ITreeRenderer Date: Thu, 8 Apr 2021 14:28:27 +0200 Subject: [PATCH 064/115] Update color for port wtih running process Part of microsoft/vscode-remote-release#4826 --- extensions/theme-abyss/themes/abyss-color-theme.json | 2 ++ extensions/theme-defaults/themes/dark_vs.json | 1 + extensions/theme-defaults/themes/hc_black.json | 3 ++- extensions/theme-defaults/themes/light_vs.json | 1 + .../themes/kimbie-dark-color-theme.json | 1 + .../themes/dimmed-monokai-color-theme.json | 1 + .../theme-monokai/themes/monokai-color-theme.json | 1 + .../themes/quietlight-color-theme.json | 1 + extensions/theme-red/themes/Red-color-theme.json | 1 + .../themes/solarized-dark-color-theme.json | 1 + .../themes/solarized-light-color-theme.json | 1 + .../themes/tomorrow-night-blue-color-theme.json | 1 + src/vs/workbench/contrib/remote/browser/tunnelView.ts | 10 +++++----- 13 files changed, 19 insertions(+), 6 deletions(-) diff --git a/extensions/theme-abyss/themes/abyss-color-theme.json b/extensions/theme-abyss/themes/abyss-color-theme.json index be6d15da953..3ee582a0149 100644 --- a/extensions/theme-abyss/themes/abyss-color-theme.json +++ b/extensions/theme-abyss/themes/abyss-color-theme.json @@ -362,6 +362,8 @@ // "peekViewTitleLabel.foreground": "", // "peekViewTitleDescription.foreground": "", + // Ports + "ports.iconRunningProcessforeground": "#80a2c2", // Editor: Diff "diffEditor.insertedTextBackground": "#31958A55", // "diffEditor.insertedTextBorder": "", diff --git a/extensions/theme-defaults/themes/dark_vs.json b/extensions/theme-defaults/themes/dark_vs.json index 061d360e3f0..010f74ed871 100644 --- a/extensions/theme-defaults/themes/dark_vs.json +++ b/extensions/theme-defaults/themes/dark_vs.json @@ -16,6 +16,7 @@ "menu.foreground": "#CCCCCC", "statusBarItem.remoteForeground": "#FFF", "statusBarItem.remoteBackground": "#16825D", + "ports.iconRunningProcessforeground": "#369432", "sideBarSectionHeader.background": "#0000", "sideBarSectionHeader.border": "#ccc3", "tab.lastPinnedBorder": "#ccc3" diff --git a/extensions/theme-defaults/themes/hc_black.json b/extensions/theme-defaults/themes/hc_black.json index 06fb75f549b..90825da88b6 100644 --- a/extensions/theme-defaults/themes/hc_black.json +++ b/extensions/theme-defaults/themes/hc_black.json @@ -9,7 +9,8 @@ "sideBarTitle.foreground": "#FFFFFF", "selection.background": "#008000", "editor.selectionBackground": "#FFFFFF", - "statusBarItem.remoteBackground": "#00000000" + "statusBarItem.remoteBackground": "#00000000", + "ports.iconRunningProcessforeground": "#FFFFFF", }, "tokenColors": [ { diff --git a/extensions/theme-defaults/themes/light_vs.json b/extensions/theme-defaults/themes/light_vs.json index 3b28fe777c0..084e2d27424 100644 --- a/extensions/theme-defaults/themes/light_vs.json +++ b/extensions/theme-defaults/themes/light_vs.json @@ -18,6 +18,7 @@ "settings.numberInputBorder": "#CECECE", "statusBarItem.remoteForeground": "#FFF", "statusBarItem.remoteBackground": "#16825D", + "ports.iconRunningProcessforeground": "#369432", "sideBarSectionHeader.background": "#0000", "sideBarSectionHeader.border": "#61616130", "tab.lastPinnedBorder": "#61616130", diff --git a/extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json b/extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json index 3a7c37367a5..0c6f9cc64c5 100644 --- a/extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json +++ b/extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json @@ -29,6 +29,7 @@ "statusBar.debuggingBackground": "#423523", "statusBar.noFolderBackground": "#423523", "statusBarItem.remoteBackground": "#6e583b", + "ports.iconRunningProcessforeground": "#369432", "activityBar.background": "#221a0f", "activityBar.foreground": "#d3af86", "sideBar.background": "#362712", diff --git a/extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json b/extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json index 11fb4a27d06..3d13ab7514a 100644 --- a/extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json +++ b/extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json @@ -33,6 +33,7 @@ "statusBar.noFolderBackground": "#505050", "titleBar.activeBackground": "#505050", "statusBarItem.remoteBackground": "#3655b5", + "ports.iconRunningProcessforeground": "#CCCCCC", "activityBar.background": "#353535", "activityBar.foreground": "#ffffff", "activityBarBadge.background": "#3655b5", diff --git a/extensions/theme-monokai/themes/monokai-color-theme.json b/extensions/theme-monokai/themes/monokai-color-theme.json index 1172e585ecd..b5facc9d682 100644 --- a/extensions/theme-monokai/themes/monokai-color-theme.json +++ b/extensions/theme-monokai/themes/monokai-color-theme.json @@ -51,6 +51,7 @@ "statusBar.noFolderBackground": "#414339", "statusBar.debuggingBackground": "#75715E", "statusBarItem.remoteBackground": "#AC6218", + "ports.iconRunningProcessforeground": "#ccccc7", "activityBar.background": "#272822", "activityBar.foreground": "#f8f8f2", "sideBar.background": "#1e1f1c", diff --git a/extensions/theme-quietlight/themes/quietlight-color-theme.json b/extensions/theme-quietlight/themes/quietlight-color-theme.json index 7a82fea3830..6e9707e5a51 100644 --- a/extensions/theme-quietlight/themes/quietlight-color-theme.json +++ b/extensions/theme-quietlight/themes/quietlight-color-theme.json @@ -506,6 +506,7 @@ "statusBar.noFolderBackground": "#705697", "statusBar.debuggingBackground": "#705697", "statusBarItem.remoteBackground": "#4e3c69", + "ports.iconRunningProcessforeground": "#749351", "activityBar.background": "#EDEDF5", "activityBar.foreground": "#705697", "activityBarBadge.background": "#705697", diff --git a/extensions/theme-red/themes/Red-color-theme.json b/extensions/theme-red/themes/Red-color-theme.json index 879093989fc..d0e2d16a410 100644 --- a/extensions/theme-red/themes/Red-color-theme.json +++ b/extensions/theme-red/themes/Red-color-theme.json @@ -10,6 +10,7 @@ "statusBar.background": "#700000", "statusBar.noFolderBackground": "#700000", "statusBarItem.remoteBackground": "#c33", + "ports.iconRunningProcessforeground": "#DB7E58", "editorGroupHeader.tabsBackground": "#330000", "titleBar.activeBackground": "#770000", "titleBar.inactiveBackground": "#772222", diff --git a/extensions/theme-solarized-dark/themes/solarized-dark-color-theme.json b/extensions/theme-solarized-dark/themes/solarized-dark-color-theme.json index b5aba98283c..24e54ca9d3b 100644 --- a/extensions/theme-solarized-dark/themes/solarized-dark-color-theme.json +++ b/extensions/theme-solarized-dark/themes/solarized-dark-color-theme.json @@ -462,6 +462,7 @@ "statusBar.debuggingBackground": "#00212B", "statusBar.noFolderBackground": "#00212B", "statusBarItem.remoteBackground": "#2AA19899", + "ports.iconRunningProcessforeground": "#369432", "statusBarItem.prominentBackground": "#003847", "statusBarItem.prominentHoverBackground": "#003847", // "statusBarItem.activeBackground": "", diff --git a/extensions/theme-solarized-light/themes/solarized-light-color-theme.json b/extensions/theme-solarized-light/themes/solarized-light-color-theme.json index 7c14e8996b4..3265ceb664e 100644 --- a/extensions/theme-solarized-light/themes/solarized-light-color-theme.json +++ b/extensions/theme-solarized-light/themes/solarized-light-color-theme.json @@ -465,6 +465,7 @@ "statusBar.noFolderBackground": "#EEE8D5", // "statusBar.foreground": "", "statusBarItem.remoteBackground": "#AC9D57", + "ports.iconRunningProcessforeground": "#2AA19899", "statusBarItem.prominentBackground": "#DDD6C1", "statusBarItem.prominentHoverBackground": "#DDD6C199", // "statusBarItem.activeBackground": "", diff --git a/extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json b/extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json index f2ea18b7b1c..8c2772bccfc 100644 --- a/extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json +++ b/extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json @@ -32,6 +32,7 @@ "titleBar.activeBackground": "#001126", "statusBar.background": "#001126", "statusBarItem.remoteBackground": "#0e639c", + "ports.iconRunningProcessforeground": "#bbdaff", "statusBar.noFolderBackground": "#001126", "statusBar.debuggingBackground": "#001126", "activityBar.background": "#001733", diff --git a/src/vs/workbench/contrib/remote/browser/tunnelView.ts b/src/vs/workbench/contrib/remote/browser/tunnelView.ts index e4772a1973a..ed354e8d677 100644 --- a/src/vs/workbench/contrib/remote/browser/tunnelView.ts +++ b/src/vs/workbench/contrib/remote/browser/tunnelView.ts @@ -47,10 +47,10 @@ import { ITableColumn, ITableContextMenuEvent, ITableEvent, ITableMouseEvent, IT import { WorkbenchTable } from 'vs/platform/list/browser/listService'; import { Button } from 'vs/base/browser/ui/button/button'; import { registerColor } from 'vs/platform/theme/common/colorRegistry'; -import { Color, RGBA } from 'vs/base/common/color'; import { IMarkdownString, MarkdownString } from 'vs/base/common/htmlContent'; import { IHoverDelegateOptions } from 'vs/base/browser/ui/iconLabel/iconHoverDelegate'; import { IHoverService } from 'vs/workbench/services/hover/browser/hover'; +import { STATUS_BAR_HOST_NAME_BACKGROUND } from 'vs/workbench/common/theme'; export const forwardedPortsViewEnabled = new RawContextKey('forwardedPortsViewEnabled', false, nls.localize('tunnel.forwardedPortsViewEnabled', "Whether the Ports view is enabled.")); @@ -1533,10 +1533,10 @@ MenuRegistry.appendMenuItem(MenuId.TunnelLocalAddressInline, ({ ContextKeyExpr.or(TunnelTypeContextKey.isEqualTo(TunnelType.Forwarded), TunnelTypeContextKey.isEqualTo(TunnelType.Detected))) })); -export const portWithRunningProcessForeground = registerColor('portWithRunningProcess.foreground', { - light: new Color(new RGBA(54, 148, 50)), - dark: new Color(new RGBA(54, 148, 50)), - hc: new Color(new RGBA(54, 148, 50)) +export const portWithRunningProcessForeground = registerColor('ports.iconRunningProcessforeground', { + light: STATUS_BAR_HOST_NAME_BACKGROUND, + dark: STATUS_BAR_HOST_NAME_BACKGROUND, + hc: STATUS_BAR_HOST_NAME_BACKGROUND }, nls.localize('portWithRunningProcess.foreground', "The color of the icon for a port that has an associated running process.")); registerThemingParticipant((theme, collector) => { From a4fed64a16e522057a36cca4b2813d3bd21a8eec Mon Sep 17 00:00:00 2001 From: isidor Date: Thu, 8 Apr 2021 14:33:15 +0200 Subject: [PATCH 065/115] fixes #120188 --- src/vs/workbench/contrib/output/browser/output.contribution.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/output/browser/output.contribution.ts b/src/vs/workbench/contrib/output/browser/output.contribution.ts index 0795ae19c99..c0cd3141b50 100644 --- a/src/vs/workbench/contrib/output/browser/output.contribution.ts +++ b/src/vs/workbench/contrib/output/browser/output.contribution.ts @@ -120,7 +120,7 @@ registerAction2(class extends Action2 { async run(accessor: ServicesAccessor, channelId: string): Promise { if (typeof channelId === 'string') { // Sometimes the action is executed with no channelId parameter, then we should just ignore it #103496 - accessor.get(IOutputService).showChannel(channelId); + accessor.get(IOutputService).showChannel(channelId, true); } } }); From 7a1e1fd2af721371543563bfc6816e8c9d4896da Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 8 Apr 2021 05:47:49 -0700 Subject: [PATCH 066/115] Fix ctx menu, clean up DI --- .../terminal/browser/terminalTabbedView.ts | 44 +++++++------------ 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts index dd60c3353ad..bc0cfe45d2c 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts @@ -45,32 +45,22 @@ export class TerminalTabbedView extends Disposable { private _height: number | undefined; - private _instantiationService: IInstantiationService; - private _terminalService: ITerminalService; - private _themeService: IThemeService; - private _contextMenuService: IContextMenuService; - private _cancelContextMenu: boolean = false; private _menu: IMenu; constructor( parentElement: HTMLElement, - @ITerminalService terminalService: ITerminalService, - @IThemeService themeService: IThemeService, - @IConfigurationService configurationService: IConfigurationService, - @IInstantiationService instantiationService: IInstantiationService, + @ITerminalService private readonly _terminalService: ITerminalService, + @IInstantiationService private readonly _instantiationService: IInstantiationService, @INotificationService private readonly _notificationService: INotificationService, - @IContextKeyService _contextKeyService: IContextKeyService, - @IContextKeyService contextMenuService: IContextMenuService, - @IMenuService _menuService: IMenuService + @IContextMenuService private readonly _contextMenuService: IContextMenuService, + @IThemeService private readonly _themeService: IThemeService, + @IConfigurationService configurationService: IConfigurationService, + @IContextKeyService contextKeyService: IContextKeyService, + @IMenuService menuService: IMenuService ) { super(); - this._instantiationService = instantiationService; - this._terminalService = terminalService; - this._themeService = themeService; - this._contextMenuService = contextMenuService; - this._parentElement = parentElement; this._terminalTabTree = document.createElement('div'); @@ -84,20 +74,20 @@ export class TerminalTabbedView extends Disposable { this._terminalContainer.classList.add('terminal-outer-container'); this._terminalContainer.style.display = 'block'; - this._showTabs = terminalService.configHelper.config.showTabs; + this._showTabs = this._terminalService.configHelper.config.showTabs; - this._tabTreeIndex = terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; - this._terminalContainerIndex = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; + this._tabTreeIndex = this._terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; + this._terminalContainerIndex = this._terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; - this._menu = this._register(_menuService.createMenu(MenuId.TerminalContext, _contextKeyService)); + this._menu = this._register(menuService.createMenu(MenuId.TerminalContext, contextKeyService)); - this._findWidgetVisible = KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE.bindTo(_contextKeyService); + this._findWidgetVisible = KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE.bindTo(contextKeyService); - terminalService.setContainers(parentElement, this._terminalContainer); + this._terminalService.setContainers(parentElement, this._terminalContainer); configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('terminal.integrated.showTabs')) { - this._showTabs = terminalService.configHelper.config.showTabs; + this._showTabs = this._terminalService.configHelper.config.showTabs; if (this._showTabs) { this._splitView.addView({ element: this._terminalTabTree, @@ -110,15 +100,15 @@ export class TerminalTabbedView extends Disposable { this._splitView.removeView(this._tabTreeIndex); } } else if (e.affectsConfiguration('terminal.integrated.tabsLocation')) { - this._tabTreeIndex = terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; - this._terminalContainerIndex = terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; + this._tabTreeIndex = this._terminalService.configHelper.config.tabsLocation === 'left' ? 0 : 1; + this._terminalContainerIndex = this._terminalService.configHelper.config.tabsLocation === 'left' ? 1 : 0; if (this._showTabs) { this._splitView.swapViews(0, 1); } } }); - this._register(themeService.onDidColorThemeChange(theme => this._updateTheme(theme))); + this._register(this._themeService.onDidColorThemeChange(theme => this._updateTheme(theme))); this._updateTheme(); this._findWidget.focusTracker.onDidFocus(() => this._terminalContainer!.classList.add(FIND_FOCUS_CLASS)); From f4449876e4a9c23b6b45876093e80b57732353b4 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 8 Apr 2021 16:30:01 +0200 Subject: [PATCH 067/115] file working copy - getAlternativeVersionId() => versionId --- .../notebook/common/notebookEditorModel.ts | 4 +- .../workingCopy/common/fileWorkingCopy.ts | 56 +++++++++---------- .../test/browser/fileWorkingCopy.test.ts | 10 +--- 3 files changed, 30 insertions(+), 40 deletions(-) diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts index c1639d1a2fd..84cb0f83a72 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts @@ -539,9 +539,7 @@ export class NotebookFileWorkingCopyModel implements IFileWorkingCopyModel { this._notebookModel.applyEdits(edits, true, undefined, () => undefined, undefined, false); } - getAlternativeVersionId(): number { - return this._notebookModel.alternativeVersionId; - } + get versionId() { return this._notebookModel.alternativeVersionId; } pushStackElement(): void { this._notebookModel.pushStackElement(nls.localize('save', 'Save Notebook'), undefined, undefined); diff --git a/src/vs/workbench/services/workingCopy/common/fileWorkingCopy.ts b/src/vs/workbench/services/workingCopy/common/fileWorkingCopy.ts index 8fc4a3d398a..0ae22ce6a30 100644 --- a/src/vs/workbench/services/workingCopy/common/fileWorkingCopy.ts +++ b/src/vs/workbench/services/workingCopy/common/fileWorkingCopy.ts @@ -67,6 +67,21 @@ export interface IFileWorkingCopyModel extends IDisposable { */ readonly onWillDispose: Event; + /** + * A version ID of the model. If a `onDidChangeContent` is fired + * from the model and the last known saved `versionId` matches + * with the `model.versionId`, the file working copy will discard + * any dirty state. + * + * A use case is the following: + * - a file working copy gets edited and thus dirty + * - the user triggers undo to revert the changes + * - at this point the `versionId` should match the one we had saved + * + * This requires the model to be aware of undo/redo operations. + */ + readonly versionId: unknown; + /** * Snapshots the model's current content for writing. This must include * any changes that were made to the model that are in memory. @@ -89,17 +104,6 @@ export interface IFileWorkingCopyModel extends IDisposable { */ update(contents: VSBufferReadableStream, token: CancellationToken): Promise; - /** - * Get the alternative version id of the model. This alternative version - * id is not always incremented, it will return the same values in the - * case of undo-redo. - * - * TODO@bpasero should find a better name here maybe together - * with the `pushStackElement` concept since this is around - * undo/redo? - */ - getAlternativeVersionId(): number; - /** * Close the current undo-redo element. This offers a way * to create an undo/redo stop point. @@ -107,10 +111,6 @@ export interface IFileWorkingCopyModel extends IDisposable { * This method may for example be called right before the * save is triggered so that the user can always undo back * to the state before saving. - * - * TODO@bpasero should find a better name here maybe together - * with the `getAlternativeVersionId` concept since this is around - * undo/redo? */ pushStackElement(): void; } @@ -442,7 +442,7 @@ export class FileWorkingCopy extends Disposable //#region Dirty private dirty = false; - private savedVersionId: number | undefined; + private savedVersionId: unknown; isDirty(): this is IResolvedFileWorkingCopy { return this.dirty; @@ -477,7 +477,15 @@ export class FileWorkingCopy extends Disposable this.dirty = false; this.inConflictMode = false; this.inErrorMode = false; - this.updateSavedVersionId(); + + // we remember the models alternate version id to remember when the version + // of the model matches with the saved version on disk. we need to keep this + // in order to find out if the model changed back to a saved version (e.g. + // when undoing long enough to reach to a version that is saved and then to + // clear the dirty flag) + if (this.isResolved()) { + this.savedVersionId = this.model.versionId; + } } else { this.dirty = true; } @@ -785,7 +793,7 @@ export class FileWorkingCopy extends Disposable // The contents changed as a matter of Undo and the version reached matches the saved one // In this case we clear the dirty flag and emit a SAVED event to indicate this state. - if (model.getAlternativeVersionId() === this.savedVersionId) { + if (model.versionId === this.savedVersionId) { this.logService.trace('[file working copy] onModelContentChanged() - model content changed back to last saved version', this.resource.toString(true)); // Clear flags @@ -1095,18 +1103,6 @@ export class FileWorkingCopy extends Disposable } } - private updateSavedVersionId(): void { - - // we remember the models alternate version id to remember when the version - // of the model matches with the saved version on disk. we need to keep this - // in order to find out if the model changed back to a saved version (e.g. - // when undoing long enough to reach to a version that is saved and then to - // clear the dirty flag) - if (this.isResolved()) { - this.savedVersionId = this.model.getAlternativeVersionId(); - } - } - private updateLastResolvedFileStat(newFileStat: IFileStatWithMetadata): void { // First resolve - just take diff --git a/src/vs/workbench/services/workingCopy/test/browser/fileWorkingCopy.test.ts b/src/vs/workbench/services/workingCopy/test/browser/fileWorkingCopy.test.ts index 263e0350d6e..51332a172f9 100644 --- a/src/vs/workbench/services/workingCopy/test/browser/fileWorkingCopy.test.ts +++ b/src/vs/workbench/services/workingCopy/test/browser/fileWorkingCopy.test.ts @@ -51,16 +51,12 @@ export class TestFileWorkingCopyModel extends Disposable implements IFileWorking private doUpdate(newContents: string): void { this.contents = newContents; - this.alternateVersionId++; + this.versionId++; this._onDidChangeContent.fire({ isRedoing: false, isUndoing: false }); } - alternateVersionId = 0; - - getAlternativeVersionId(): number { - return this.alternateVersionId; - } + versionId = 0; pushedStackElement = false; @@ -194,7 +190,7 @@ suite('FileWorkingCopy', function () { assert.strictEqual(workingCopy.isDirty(), true); // Simulate an undo that goes back to the last (saved) version ID - workingCopy.model!.alternateVersionId--; + workingCopy.model!.versionId--; workingCopy.model?.fireContentChangeEvent({ isRedoing: false, isUndoing: true }); assert.strictEqual(workingCopy.isDirty(), false); From e956e0a0eecec96532aecc7058906ba589c0a2d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmad=20Awais=20=E2=9A=A1=EF=B8=8F?= Date: Thu, 8 Apr 2021 20:56:19 +0500 Subject: [PATCH 068/115] =?UTF-8?q?=F0=9F=90=9B=20FIX:=20Typo=20(#120816)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index de7ad30b9be..b40ba5ddd48 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -20,4 +20,4 @@ Steps to Reproduce: Does this issue occur when all extensions are disabled?: Yes/No - + From 37025381399a75888b23de866612bfaf2492e547 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Thu, 8 Apr 2021 09:02:15 -0700 Subject: [PATCH 069/115] fix #120824 --- .../contrib/terminal/browser/terminalTabsWidget.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index be19f85cc42..3f6bc216d09 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -66,10 +66,19 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { } } }); - this._terminalService = terminalService; + this._terminalService = terminalService; terminalService.onInstancesChanged(() => this._render()); terminalService.onInstanceTitleChanged(() => this._render()); + terminalService.onActiveTabChanged(() => { + const selection = this.getSelection(); + const selectedTab = selection[0] as ITerminalTab; + const activeTab = terminalService.getActiveTab(); + if (activeTab && terminalService.terminalTabs.indexOf(selectedTab) !== terminalService.activeTabIndex) { + this.setFocus([activeTab]); + this.setSelection([activeTab]); + } + }); this._render(); } From 604b950f0daea45fb2f79c622537677e45a2b768 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 09:09:25 -0700 Subject: [PATCH 070/115] Reapply badclient commit Fixes #120781 Add second file this time --- .../typescript-language-features/src/tsServer/serverError.ts | 4 +++- .../typescript-language-features/src/utils/telemetry.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/extensions/typescript-language-features/src/tsServer/serverError.ts b/extensions/typescript-language-features/src/tsServer/serverError.ts index 2653360c9be..be9a44d276d 100644 --- a/extensions/typescript-language-features/src/tsServer/serverError.ts +++ b/extensions/typescript-language-features/src/tsServer/serverError.ts @@ -39,13 +39,15 @@ export class TypeScriptServerError extends Error { "TypeScriptRequestErrorProperties" : { "command" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, "serverid" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, - "sanitizedstack" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" } + "sanitizedstack" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "badclient" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" } } */ return { command: this.serverCommand, serverid: this.serverId, sanitizedstack: this.sanitizedStack || '', + badclient: /\bBADCLIENT\b/.test(this.stack || ''), } as const; } diff --git a/extensions/typescript-language-features/src/utils/telemetry.ts b/extensions/typescript-language-features/src/utils/telemetry.ts index 13527cae125..5231c0fb35a 100644 --- a/extensions/typescript-language-features/src/utils/telemetry.ts +++ b/extensions/typescript-language-features/src/utils/telemetry.ts @@ -14,7 +14,7 @@ interface PackageInfo { } export interface TelemetryProperties { - readonly [prop: string]: string | number | undefined; + readonly [prop: string]: string | number | boolean | undefined; } export interface TelemetryReporter { From e1f0f8f51390dea5df9096718fb6b647ed5a9534 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 10:05:20 -0700 Subject: [PATCH 071/115] Add override keyword in codebase (#120755) For #120675 This uses a script to add the override keyword to places that need it in the codebase Note that we can't enable the --noImplicitOverride setting yet since there are still around 200 errors that require further attention --- src/vs/base/browser/dnd.ts | 2 +- src/vs/base/browser/dom.ts | 2 +- src/vs/base/browser/touch.ts | 2 +- .../browser/ui/actionbar/actionViewItems.ts | 30 +++---- src/vs/base/browser/ui/actionbar/actionbar.ts | 2 +- src/vs/base/browser/ui/checkbox/checkbox.ts | 14 +-- .../browser/ui/contextview/contextview.ts | 2 +- src/vs/base/browser/ui/dialog/dialog.ts | 2 +- src/vs/base/browser/ui/dropdown/dropdown.ts | 10 +-- .../ui/dropdown/dropdownActionViewItem.ts | 8 +- .../base/browser/ui/findinput/replaceInput.ts | 2 +- src/vs/base/browser/ui/grid/grid.ts | 2 +- src/vs/base/browser/ui/inputbox/inputBox.ts | 2 +- src/vs/base/browser/ui/list/listWidget.ts | 2 +- src/vs/base/browser/ui/menu/menu.ts | 32 +++---- src/vs/base/browser/ui/menu/menubar.ts | 2 +- src/vs/base/browser/ui/sash/sash.ts | 2 +- .../browser/ui/scrollbar/scrollableElement.ts | 2 +- .../browser/ui/selectBox/selectBoxCustom.ts | 2 +- src/vs/base/browser/ui/splitview/paneview.ts | 2 +- src/vs/base/browser/ui/splitview/splitview.ts | 2 +- src/vs/base/browser/ui/toolbar/toolbar.ts | 4 +- src/vs/base/browser/ui/tree/abstractTree.ts | 18 ++-- src/vs/base/browser/ui/tree/asyncDataTree.ts | 16 ++-- src/vs/base/browser/ui/tree/objectTree.ts | 8 +- src/vs/base/browser/ui/tree/treeDefaults.ts | 2 +- src/vs/base/common/async.ts | 6 +- src/vs/base/common/event.ts | 2 +- src/vs/base/common/map.ts | 4 +- src/vs/base/common/scrollable.ts | 2 +- src/vs/base/common/uri.ts | 6 +- src/vs/base/node/processes.ts | 2 +- src/vs/base/parts/ipc/common/ipc.mp.ts | 2 +- src/vs/base/parts/ipc/common/ipc.net.ts | 4 +- .../ipc/electron-sandbox/ipc.electron.ts | 2 +- src/vs/base/parts/ipc/node/ipc.net.ts | 4 +- src/vs/base/parts/ipc/test/common/ipc.test.ts | 2 +- .../parts/quickinput/browser/quickInput.ts | 10 +-- src/vs/base/parts/storage/common/storage.ts | 2 +- .../parts/storage/test/node/storage.test.ts | 2 +- src/vs/editor/browser/config/configuration.ts | 6 +- .../browser/config/elementSizeObserver.ts | 2 +- .../editor/browser/controller/mouseHandler.ts | 12 +-- .../editor/browser/controller/mouseTarget.ts | 2 +- .../browser/controller/pointerHandler.ts | 2 +- .../browser/controller/textAreaHandler.ts | 20 ++--- .../browser/controller/textAreaInput.ts | 2 +- src/vs/editor/browser/core/editorState.ts | 4 +- .../browser/core/keybindingCancellation.ts | 2 +- src/vs/editor/browser/view/viewImpl.ts | 12 +-- src/vs/editor/browser/view/viewOverlays.ts | 34 +++---- src/vs/editor/browser/view/viewPart.ts | 2 +- .../contentWidgets/contentWidgets.ts | 20 ++--- .../currentLineHighlight.ts | 20 ++--- .../viewParts/decorations/decorations.ts | 18 ++-- .../editorScrollbar/editorScrollbar.ts | 8 +- .../viewParts/glyphMargin/glyphMargin.ts | 18 ++-- .../viewParts/indentGuides/indentGuides.ts | 22 ++--- .../viewParts/lineNumbers/lineNumbers.ts | 18 ++-- .../browser/viewParts/lines/viewLine.ts | 2 +- .../browser/viewParts/lines/viewLines.ts | 26 +++--- .../linesDecorations/linesDecorations.ts | 18 ++-- .../editor/browser/viewParts/margin/margin.ts | 6 +- .../marginDecorations/marginDecorations.ts | 18 ++-- .../browser/viewParts/minimap/minimap.ts | 28 +++--- .../overlayWidgets/overlayWidgets.ts | 4 +- .../overviewRuler/decorationsOverviewRuler.ts | 16 ++-- .../viewParts/overviewRuler/overviewRuler.ts | 10 +-- .../editor/browser/viewParts/rulers/rulers.ts | 6 +- .../scrollDecoration/scrollDecoration.ts | 6 +- .../viewParts/selections/selections.ts | 20 ++--- .../viewParts/viewCursors/viewCursors.ts | 28 +++--- .../browser/viewParts/viewZones/viewZones.ts | 14 +-- .../editor/browser/widget/codeEditorWidget.ts | 4 +- .../editor/browser/widget/diffEditorWidget.ts | 4 +- src/vs/editor/browser/widget/diffNavigator.ts | 2 +- .../widget/embeddedCodeEditorWidget.ts | 4 +- src/vs/editor/common/config/editorOptions.ts | 22 ++--- src/vs/editor/common/controller/cursor.ts | 2 +- .../common/controller/cursorTypeOperations.ts | 2 +- src/vs/editor/common/core/selection.ts | 6 +- src/vs/editor/common/model/textModel.ts | 2 +- src/vs/editor/common/model/textModelTokens.ts | 2 +- .../services/editorWorkerServiceImpl.ts | 8 +- .../services/markerDecorationsServiceImpl.ts | 2 +- .../common/services/modelServiceImpl.ts | 2 +- src/vs/editor/common/services/webWorker.ts | 2 +- src/vs/editor/common/viewLayout/viewLayout.ts | 2 +- .../viewModel/monospaceLineBreaksComputer.ts | 2 +- .../editor/common/viewModel/viewModelImpl.ts | 2 +- .../contrib/codeAction/codeActionModel.ts | 2 +- .../editor/contrib/codeAction/codeActionUi.ts | 2 +- .../contrib/codeAction/lightBulbWidget.ts | 2 +- .../contrib/colorPicker/colorContributions.ts | 2 +- .../contrib/colorPicker/colorDetector.ts | 2 +- src/vs/editor/contrib/dnd/dnd.ts | 2 +- src/vs/editor/contrib/find/findController.ts | 6 +- .../editor/contrib/find/findOptionsWidget.ts | 2 +- .../contrib/find/test/findController.test.ts | 2 +- src/vs/editor/contrib/folding/folding.ts | 2 +- .../contrib/gotoError/gotoErrorWidget.ts | 16 ++-- .../editor/contrib/gotoSymbol/goToCommands.ts | 4 +- .../gotoSymbol/peek/referencesWidget.ts | 10 +-- src/vs/editor/contrib/hover/hoverWidgets.ts | 2 +- .../editor/contrib/hover/modesContentHover.ts | 2 +- .../editor/contrib/hover/modesGlyphHover.ts | 4 +- .../contrib/linkedEditing/linkedEditing.ts | 4 +- .../editor/contrib/multicursor/multicursor.ts | 4 +- .../parameterHints/parameterHintsModel.ts | 2 +- src/vs/editor/contrib/peekView/peekView.ts | 8 +- src/vs/editor/contrib/rename/rename.ts | 2 +- .../editor/contrib/snippet/snippetParser.ts | 16 ++-- .../snippet/test/snippetVariables.test.ts | 6 +- .../editor/contrib/suggest/suggestMemory.ts | 4 +- .../contrib/suggest/suggestWidgetStatus.ts | 2 +- .../suggest/test/suggestController.test.ts | 12 +-- .../contrib/suggest/test/suggestModel.test.ts | 6 +- .../contrib/suggest/test/wordDistance.test.ts | 6 +- .../wordHighlighter/wordHighlighter.ts | 4 +- .../contrib/wordOperations/wordOperations.ts | 8 +- .../accessibilityHelp/accessibilityHelp.ts | 2 +- .../iPadShowKeyboard/iPadShowKeyboard.ts | 4 +- .../browser/inspectTokens/inspectTokens.ts | 4 +- .../standaloneQuickInputServiceImpl.ts | 2 +- .../browser/standaloneCodeEditor.ts | 18 ++-- .../test/browser/standaloneLanguages.test.ts | 2 +- .../services/decorationRenderOptions.test.ts | 4 +- src/vs/editor/test/browser/testCodeEditor.ts | 8 +- .../common/config/commonEditorConfig.test.ts | 2 +- .../textResourceConfigurationService.test.ts | 4 +- .../common/viewModel/viewModelImpl.test.ts | 2 +- .../browser/menuEntryActionViewItem.ts | 12 +-- src/vs/platform/actions/common/actions.ts | 4 +- .../actions/test/common/menuService.test.ts | 2 +- .../electron-main/backupMainService.test.ts | 2 +- .../contextkey/browser/contextKeyService.ts | 16 ++-- .../electron-main/extensionHostDebugIpc.ts | 2 +- .../electron-sandbox/extensionTipsService.ts | 6 +- src/vs/platform/files/common/fileService.ts | 2 +- .../diskFileSystemProvider.ts | 4 +- .../files/node/diskFileSystemProvider.ts | 2 +- .../node/watcher/nodejs/watcherService.ts | 2 +- .../files/node/watcher/nsfw/watcherService.ts | 2 +- .../files/node/watcher/unix/watcherService.ts | 2 +- .../files/test/browser/fileService.test.ts | 6 +- .../electron-browser/diskFileService.test.ts | 10 +-- .../common/instantiationService.ts | 4 +- .../common/abstractKeybindingService.ts | 2 +- .../test/common/mockKeybindingService.ts | 2 +- src/vs/platform/list/browser/listService.ts | 18 ++-- src/vs/platform/log/common/bufferLog.ts | 2 +- src/vs/platform/log/common/log.ts | 12 +-- src/vs/platform/log/common/logIpc.ts | 2 +- src/vs/platform/log/node/spdlogLog.ts | 4 +- .../platform/quickinput/browser/quickInput.ts | 2 +- src/vs/platform/remote/node/tunnelService.ts | 2 +- .../electron-main/requestMainService.ts | 2 +- .../storage/browser/storageService.ts | 2 +- .../storage/electron-main/storageMain.ts | 2 +- .../electron-main/storageMainService.test.ts | 2 +- .../telemetry/browser/errorTelemetry.ts | 2 +- .../platform/telemetry/node/errorTelemetry.ts | 2 +- .../test/browser/telemetryService.test.ts | 6 +- .../test/common/telemetryLogAppender.test.ts | 2 +- .../appInsightsAppender.test.ts | 8 +- .../platform/terminal/node/ptyHostService.ts | 2 +- .../platform/terminal/node/terminalProcess.ts | 4 +- .../terminal/node/windowsShellHelper.ts | 2 +- .../test/common/undoRedoService.test.ts | 2 +- .../electron-main/updateService.darwin.ts | 4 +- .../electron-main/updateService.linux.ts | 2 +- .../electron-main/updateService.snap.ts | 2 +- .../electron-main/updateService.win32.ts | 10 +-- .../userDataSync/common/extensionsSync.ts | 4 +- .../userDataSync/common/globalStateSync.ts | 2 +- .../userDataSync/common/keybindingsSync.ts | 2 +- .../userDataSync/common/settingsSync.ts | 4 +- .../userDataSync/common/snippetsSync.ts | 2 +- .../common/userDataSyncService.ts | 2 +- .../common/userDataSyncServiceIpc.ts | 2 +- .../test/common/synchronizer.test.ts | 12 +-- .../common/userDataAutoSyncService.test.ts | 4 +- .../workspacesManagementMainService.test.ts | 2 +- .../api/browser/mainThreadCLICommands.ts | 4 +- .../api/browser/mainThreadComments.ts | 2 +- .../api/browser/mainThreadCustomEditors.ts | 4 +- .../api/browser/mainThreadDocuments.ts | 2 +- .../api/browser/mainThreadTesting.ts | 2 +- .../api/browser/mainThreadTreeViews.ts | 2 +- .../api/browser/mainThreadUriOpeners.ts | 2 +- .../api/browser/mainThreadWebviewPanels.ts | 2 +- .../api/browser/mainThreadWebviewViews.ts | 2 +- .../api/common/extHostDiagnostics.ts | 2 +- .../api/common/extHostDocumentData.ts | 2 +- .../workbench/api/common/extHostNotebook.ts | 2 +- .../api/common/extHostNotebookDocument.ts | 2 +- src/vs/workbench/api/common/extHostOutput.ts | 6 +- src/vs/workbench/api/common/extHostTesting.ts | 10 +-- .../workbench/api/common/extHostTreeViews.ts | 2 +- src/vs/workbench/api/common/extHostTypes.ts | 2 +- .../api/common/extHostWebviewPanels.ts | 2 +- .../api/common/extHostWebviewView.ts | 2 +- .../workbench/api/node/extHostDebugService.ts | 10 +-- .../api/node/extHostOutputService.ts | 12 +-- src/vs/workbench/api/node/extHostSearch.ts | 6 +- .../browser/actions/layoutActions.ts | 20 ++--- .../browser/actions/navigationActions.ts | 6 +- .../browser/actions/windowActions.ts | 10 +-- .../browser/actions/workspaceActions.ts | 20 ++--- src/vs/workbench/browser/codeeditor.ts | 6 +- src/vs/workbench/browser/composite.ts | 2 +- src/vs/workbench/browser/labels.ts | 4 +- src/vs/workbench/browser/layout.ts | 2 +- src/vs/workbench/browser/panecomposite.ts | 20 ++--- src/vs/workbench/browser/panel.ts | 6 +- src/vs/workbench/browser/part.ts | 4 +- .../parts/activitybar/activitybarActions.ts | 8 +- .../parts/activitybar/activitybarPart.ts | 6 +- .../browser/parts/compositeBarActions.ts | 26 +++--- .../workbench/browser/parts/compositePart.ts | 10 +-- .../browser/parts/editor/binaryEditor.ts | 10 +-- .../parts/editor/breadcrumbsControl.ts | 4 +- .../browser/parts/editor/editorActions.ts | 82 ++++++++--------- .../browser/parts/editor/editorDropTarget.ts | 6 +- .../browser/parts/editor/editorGroupView.ts | 6 +- .../browser/parts/editor/editorPane.ts | 8 +- .../browser/parts/editor/editorPart.ts | 12 +-- .../browser/parts/editor/editorQuickAccess.ts | 2 +- .../browser/parts/editor/editorStatus.ts | 8 +- .../parts/editor/noTabsTitleControl.ts | 2 +- .../browser/parts/editor/sideBySideEditor.ts | 34 +++---- .../browser/parts/editor/tabsTitleControl.ts | 4 +- .../browser/parts/editor/textDiffEditor.ts | 24 ++--- .../browser/parts/editor/textEditor.ts | 14 +-- .../parts/editor/textResourceEditor.ts | 10 +-- .../browser/parts/editor/titleControl.ts | 2 +- .../notifications/notificationsActions.ts | 14 +-- .../notifications/notificationsCenter.ts | 2 +- .../parts/notifications/notificationsList.ts | 4 +- .../notifications/notificationsToasts.ts | 2 +- .../notifications/notificationsViewer.ts | 2 +- .../browser/parts/panel/panelActions.ts | 14 +-- .../browser/parts/panel/panelPart.ts | 10 +-- .../browser/parts/sidebar/sidebarPart.ts | 10 +-- .../browser/parts/titlebar/menubarControl.ts | 10 +-- .../browser/parts/titlebar/titlebarPart.ts | 6 +- .../workbench/browser/parts/views/treeView.ts | 14 +-- .../workbench/browser/parts/views/viewPane.ts | 10 +-- .../browser/parts/views/viewPaneContainer.ts | 8 +- .../browser/parts/views/viewsViewlet.ts | 2 +- src/vs/workbench/common/editor.ts | 30 +++---- .../common/editor/binaryEditorModel.ts | 2 +- .../common/editor/diffEditorInput.ts | 14 +-- .../common/editor/diffEditorModel.ts | 6 +- .../common/editor/resourceEditorInput.ts | 10 +-- .../common/editor/resourceEditorModel.ts | 2 +- .../common/editor/textDiffEditorModel.ts | 14 +-- .../common/editor/textEditorModel.ts | 4 +- .../common/editor/textResourceEditorInput.ts | 18 ++-- .../test/browser/backupRestorer.test.ts | 2 +- .../backup/test/browser/backupTracker.test.ts | 4 +- .../electron-browser/backupTracker.test.ts | 4 +- .../contrib/bulkEdit/browser/bulkTextEdits.ts | 4 +- .../bulkEdit/browser/preview/bulkEditPane.ts | 6 +- .../test/browser/bulkEditPreview.test.ts | 8 +- .../browser/callHierarchyPeek.ts | 8 +- .../browser/accessibility/accessibility.ts | 2 +- .../codeEditor/browser/diffEditorHelper.ts | 2 +- .../browser/find/simpleFindReplaceWidget.ts | 2 +- .../browser/find/simpleFindWidget.ts | 2 +- .../inspectEditorTokens.ts | 4 +- .../codeEditor/browser/inspectKeybindings.ts | 2 +- .../quickaccess/gotoLineQuickAccess.ts | 2 +- .../quickaccess/gotoSymbolQuickAccess.ts | 8 +- .../browser/toggleColumnSelection.ts | 2 +- .../codeEditor/browser/toggleMinimap.ts | 2 +- .../browser/toggleMultiCursorModifier.ts | 2 +- .../browser/toggleRenderControlCharacter.ts | 2 +- .../browser/toggleRenderWhitespace.ts | 2 +- .../electron-sandbox/selectionClipboard.ts | 2 +- .../comments/browser/commentThreadWidget.ts | 12 +-- .../contrib/comments/browser/commentsView.ts | 6 +- .../comments/browser/reactionsAction.ts | 4 +- .../customEditor/browser/customEditorInput.ts | 30 +++---- .../browser/customEditorInputFactory.ts | 6 +- .../contrib/debug/browser/breakpointWidget.ts | 6 +- .../contrib/debug/browser/breakpointsView.ts | 6 +- .../contrib/debug/browser/callStackView.ts | 2 +- .../debug/browser/debugActionViewItems.ts | 16 ++-- .../browser/debugConfigurationManager.ts | 2 +- .../contrib/debug/browser/debugToolBar.ts | 4 +- .../contrib/debug/browser/debugViewlet.ts | 10 +-- .../contrib/debug/browser/exceptionWidget.ts | 4 +- .../browser/extensionHostDebugService.ts | 2 +- .../debug/browser/loadedScriptsView.ts | 16 ++-- .../workbench/contrib/debug/browser/repl.ts | 16 ++-- .../contrib/debug/browser/replFilter.ts | 10 +-- .../contrib/debug/browser/replViewer.ts | 2 +- .../debug/browser/statusbarColorProvider.ts | 2 +- .../contrib/debug/browser/variablesView.ts | 6 +- .../debug/browser/watchExpressionsView.ts | 6 +- .../contrib/debug/browser/welcomeView.ts | 2 +- .../contrib/debug/common/debugModel.ts | 28 +++--- .../contrib/debug/common/replModel.ts | 4 +- .../debug/test/browser/callStack.test.ts | 4 +- .../debug/test/browser/debugHover.test.ts | 8 +- .../contrib/debug/test/browser/mockDebug.ts | 14 +-- .../experimentService.test.ts | 2 +- .../abstractRuntimeExtensionsEditor.ts | 2 +- .../extensions/browser/extensionsActions.ts | 88 +++++++++---------- .../extensions/browser/extensionsViewer.ts | 2 +- .../extensions/browser/extensionsViewlet.ts | 12 +-- .../extensions/browser/extensionsViews.ts | 34 +++---- .../browser/extensionsWorkbenchService.ts | 2 +- .../extensions/common/extensionsInput.ts | 6 +- .../common/runtimeExtensionsInput.ts | 6 +- .../debugExtensionHostAction.ts | 2 +- .../electron-browser/extensionsSlowActions.ts | 6 +- .../reportExtensionIssueAction.ts | 2 +- .../runtimeExtensionsEditor.ts | 6 +- .../electron-sandbox/extensionsActions.ts | 2 +- .../extensionRecommendationsService.test.ts | 2 +- .../contrib/feedback/browser/feedback.ts | 12 +-- .../files/browser/editors/binaryFileEditor.ts | 2 +- .../files/browser/editors/textFileEditor.ts | 12 +-- .../editors/textFileSaveErrorHandler.ts | 22 ++--- .../contrib/files/browser/explorerViewlet.ts | 8 +- .../contrib/files/browser/fileActions.ts | 20 ++--- .../contrib/files/browser/views/emptyView.ts | 4 +- .../files/browser/views/explorerView.ts | 16 ++-- .../files/browser/views/openEditorsView.ts | 12 +-- .../files/common/editors/fileEditorInput.ts | 24 ++--- .../contrib/files/common/workspaceWatcher.ts | 2 +- .../files/electron-sandbox/textFileEditor.ts | 2 +- .../test/browser/fileEditorInput.test.ts | 2 +- .../issue/electron-sandbox/issueActions.ts | 4 +- .../browser/localizationsActions.ts | 2 +- .../contrib/logs/common/logsActions.ts | 4 +- .../logs/electron-sandbox/logsActions.ts | 4 +- .../markers/browser/markersTreeViewer.ts | 6 +- .../contrib/markers/browser/markersView.ts | 14 +-- .../markers/browser/markersViewActions.ts | 20 ++--- .../clipboard/test/notebookClipboard.test.ts | 30 +++---- .../notebook/browser/contrib/coreActions.ts | 16 ++-- .../browser/contrib/find/findController.ts | 6 +- .../outline/test/notebookOutline.test.ts | 4 +- .../browser/contrib/troubleshoot/layout.ts | 2 +- .../notebook/browser/diff/diffComponents.ts | 10 +-- .../browser/diff/notebookTextDiffEditor.ts | 12 +-- .../browser/diff/notebookTextDiffList.ts | 2 +- .../browser/notebookDiffEditorInput.ts | 24 ++--- .../notebook/browser/notebookEditor.ts | 4 +- .../notebook/browser/view/notebookCellList.ts | 16 ++-- .../view/output/transforms/richTransform.ts | 6 +- .../view/renderers/backLayerWebView.ts | 2 +- .../browser/view/renderers/cellActionView.ts | 4 +- .../browser/view/renderers/cellOutput.ts | 4 +- .../browser/view/renderers/cellWidgets.ts | 2 +- .../browser/view/renderers/markdownCell.ts | 2 +- .../browser/viewModel/notebookViewModel.ts | 2 +- .../notebook/common/notebookEditorModel.ts | 6 +- .../notebook/test/notebookEditor.test.ts | 4 +- .../notebook/test/notebookEditorModel.test.ts | 6 +- .../notebook/test/notebookServiceImpl.test.ts | 6 +- .../notebook/test/testNotebookEditor.ts | 12 +-- .../contrib/outline/browser/outlinePane.ts | 8 +- .../contrib/output/browser/logViewer.ts | 4 +- .../contrib/output/browser/outputView.ts | 24 ++--- .../output/common/outputChannelModel.ts | 18 ++-- .../outputChannelModelService.ts | 6 +- .../performance/browser/perfviewEditor.ts | 2 +- .../preferences/browser/keybindingWidgets.ts | 4 +- .../preferences/browser/keybindingsEditor.ts | 8 +- .../browser/keybindingsEditorContribution.ts | 2 +- .../browser/keyboardLayoutPicker.ts | 2 +- .../preferences/browser/preferencesActions.ts | 2 +- .../preferences/browser/preferencesEditor.ts | 42 ++++----- .../browser/preferencesRenderers.ts | 20 ++--- .../preferences/browser/preferencesWidgets.ts | 18 ++-- .../preferences/browser/settingsEditor2.ts | 20 ++--- .../preferences/browser/settingsTree.ts | 12 +-- .../preferences/browser/settingsWidgets.ts | 12 +-- .../remote/browser/explorerViewItems.ts | 4 +- .../contrib/remote/browser/remote.ts | 6 +- .../contrib/remote/browser/urlFinder.ts | 2 +- .../contrib/scm/browser/dirtydiffDecorator.ts | 22 ++--- .../scm/browser/scmRepositoriesViewPane.ts | 6 +- .../contrib/scm/browser/scmViewPane.ts | 12 +-- .../scm/browser/scmViewPaneContainer.ts | 6 +- src/vs/workbench/contrib/scm/browser/util.ts | 4 +- .../search/browser/anythingQuickAccess.ts | 2 +- .../search/browser/patternInputWidget.ts | 14 +-- .../search/browser/search.contribution.ts | 2 +- .../contrib/search/browser/searchActions.ts | 22 ++--- .../contrib/search/browser/searchView.ts | 10 +-- .../contrib/search/browser/searchWidget.ts | 4 +- .../contrib/search/common/searchModel.ts | 10 +-- .../searchEditor/browser/searchEditor.ts | 16 ++-- .../searchEditor/browser/searchEditorInput.ts | 22 ++--- .../contrib/tasks/common/problemCollectors.ts | 2 +- .../contrib/tasks/common/problemMatcher.ts | 8 +- .../workbench/contrib/tasks/common/tasks.ts | 48 +++++----- .../tasks/test/common/configuration.test.ts | 2 +- .../terminal/browser/links/terminalLink.ts | 2 +- .../terminal/browser/terminalActions.ts | 2 +- .../terminal/browser/terminalFindWidget.ts | 2 +- .../terminal/browser/terminalInstance.ts | 2 +- .../browser/terminalProcessManager.ts | 2 +- .../contrib/terminal/browser/terminalTab.ts | 2 +- .../browser/terminalTypeAheadAddon.ts | 4 +- .../widgets/environmentVariableInfoWidget.ts | 2 +- .../browser/widgets/terminalHoverWidget.ts | 4 +- .../electron-sandbox/terminalRemote.ts | 2 +- .../explorerProjections/hierarchalByName.ts | 10 +-- .../testing/browser/testExplorerActions.ts | 8 +- .../testing/browser/testingDecorations.ts | 2 +- .../testing/browser/testingExplorerFilter.ts | 10 +-- .../testing/browser/testingExplorerView.ts | 10 +-- .../testing/browser/testingOutputPeek.ts | 8 +- .../browser/testingViewPaneContainer.ts | 6 +- .../contrib/testing/common/testServiceImpl.ts | 4 +- .../contrib/testing/common/testStubs.ts | 2 +- .../test/common/ownedTestCollection.ts | 2 +- .../test/common/testResultService.test.ts | 2 +- .../themes/browser/themes.contribution.ts | 8 +- .../contrib/timeline/browser/timelinePane.ts | 14 +-- .../contrib/update/browser/update.ts | 6 +- .../userDataSync/browser/userDataSync.ts | 2 +- .../browser/userDataSyncMergesView.ts | 6 +- .../userDataSync/browser/userDataSyncViews.ts | 4 +- .../browser/dynamicWebviewEditorOverlay.ts | 2 +- .../webview/browser/webviewFindWidget.ts | 2 +- .../electron-browser/webviewElement.ts | 8 +- .../electron-browser/webviewService.ts | 4 +- .../electron-sandbox/iframeWebviewElement.ts | 2 +- .../webviewPanel/browser/webviewEditor.ts | 14 +-- .../browser/webviewEditorInput.ts | 12 +-- .../browser/webviewWorkbenchService.ts | 6 +- .../webviewView/browser/webviewViewPane.ts | 12 +-- .../gettingStarted/browser/gettingStarted.ts | 2 +- .../browser/gettingStartedInput.ts | 4 +- .../welcome/overlay/browser/welcomeOverlay.ts | 4 +- .../welcome/page/browser/welcomePage.ts | 2 +- .../browser/editor/editorWalkThrough.ts | 2 +- .../walkThrough/browser/walkThroughInput.ts | 14 +-- .../walkThrough/browser/walkThroughPart.ts | 10 +-- .../workspace/browser/workspaceTrustEditor.ts | 4 +- .../workspace/browser/workspaceTrustTree.ts | 4 +- .../electron-sandbox/actions/windowActions.ts | 10 +-- .../parts/titlebar/titlebarPart.ts | 16 ++-- .../electron-sandbox/accessibilityService.ts | 4 +- .../activity/browser/activityService.ts | 2 +- .../services/activity/common/activity.ts | 2 +- .../backupFileService.test.ts | 6 +- .../clipboard/browser/clipboardService.ts | 2 +- .../test/common/commandService.test.ts | 12 +-- .../common/configurationModels.ts | 12 +-- .../test/browser/configurationService.test.ts | 2 +- .../browser/configurationResolverService.ts | 4 +- .../configurationResolverService.test.ts | 6 +- .../test/browser/decorationsService.test.ts | 2 +- .../services/editor/browser/editorService.ts | 2 +- .../editor/test/browser/editorService.test.ts | 2 +- .../electron-sandbox/environmentService.ts | 2 +- .../remoteExtensionManagementService.ts | 2 +- .../extensionManagementService.ts | 2 +- .../electron-sandbox/extensionTipsService.ts | 10 +-- .../remoteExtensionManagementService.ts | 4 +- .../extensions/browser/extensionService.ts | 2 +- .../browser/webWorkerExtensionHost.ts | 2 +- .../extensions/common/extensionHostManager.ts | 2 +- .../extensions/common/remoteExtensionHost.ts | 2 +- .../services/extensions/common/rpcProtocol.ts | 2 +- .../electron-browser/extensionService.ts | 4 +- .../services/hover/browser/hoverWidget.ts | 2 +- .../keybinding/browser/keybindingService.ts | 6 +- .../mode/common/workbenchModeService.ts | 2 +- .../browser/keybindingsEditorModel.ts | 2 +- .../browser/preferencesEditorInput.ts | 24 ++--- .../preferences/browser/preferencesService.ts | 2 +- .../preferences/common/preferencesModels.ts | 12 +-- .../test/browser/preferencesService.test.ts | 2 +- .../progress/browser/progressIndicator.ts | 8 +- .../progress/browser/progressService.ts | 6 +- .../quickinput/browser/quickInputService.ts | 2 +- .../remote/browser/tunnelServiceImpl.ts | 2 +- .../electron-browser/tunnelServiceImpl.ts | 2 +- .../request/browser/requestService.ts | 2 +- .../electron-sandbox/requestService.ts | 2 +- .../search/node/ripgrepTextSearchEngine.ts | 6 +- .../electron-sandbox/textMateService.ts | 8 +- .../electron-sandbox/textMateWorker.ts | 4 +- .../browser/browserTextFileService.ts | 2 +- .../textfile/common/textFileEditorModel.ts | 16 ++-- .../common/textFileEditorModelManager.ts | 2 +- .../common/textFileSaveParticipant.ts | 2 +- .../electron-sandbox/nativeTextFileService.ts | 8 +- .../common/untitledTextEditorInput.ts | 14 +-- .../common/untitledTextEditorModel.ts | 8 +- .../test/common/uriIdentityService.test.ts | 8 +- .../url/electron-sandbox/urlService.ts | 4 +- .../services/userData/browser/userDataInit.ts | 2 +- .../test/browser/fileUserDataProvider.test.ts | 2 +- .../userDataAutoSyncEnablementService.ts | 6 +- .../userDataSyncResourceEnablementService.ts | 2 +- .../common/fileWorkingCopyManager.ts | 2 +- .../workingCopyFileOperationParticipant.ts | 2 +- .../browser/workspaceTrustEditorInput.ts | 6 +- .../workspaceEditingService.ts | 2 +- .../browser/api/extHostApiCommands.test.ts | 12 +-- .../test/browser/api/extHostBulkEdits.test.ts | 2 +- .../test/browser/api/extHostCommands.test.ts | 12 +-- .../browser/api/extHostConfiguration.test.ts | 4 +- .../browser/api/extHostDecorations.test.ts | 4 +- .../browser/api/extHostDiagnostics.test.ts | 14 +-- .../browser/api/extHostDocumentData.test.ts | 2 +- .../extHostDocumentSaveParticipant.test.ts | 2 +- .../api/extHostLanguageFeatures.test.ts | 2 +- .../api/extHostMessagerService.test.ts | 6 +- .../test/browser/api/extHostNotebook.test.ts | 8 +- .../api/extHostNotebookConcatDocument.test.ts | 8 +- .../browser/api/extHostNotebookKernel.test.ts | 18 ++-- .../browser/api/extHostTextEditor.test.ts | 2 +- .../test/browser/api/extHostTreeViews.test.ts | 6 +- .../test/browser/api/extHostWorkspace.test.ts | 20 ++--- .../browser/api/mainThreadCommands.test.ts | 4 +- .../browser/api/mainThreadDiagnostics.test.ts | 2 +- ...mainThreadDocumentContentProviders.test.ts | 4 +- .../api/mainThreadDocumentsAndEditors.test.ts | 20 ++--- .../browser/api/mainThreadEditors.test.ts | 36 ++++---- .../browser/api/mainThreadTreeViews.test.ts | 6 +- src/vs/workbench/test/browser/part.test.ts | 18 ++-- .../parts/editor/breadcrumbModel.test.ts | 4 +- .../browser/parts/editor/editorGroups.test.ts | 12 +-- .../browser/parts/editor/editorInput.test.ts | 2 +- .../browser/parts/editor/editorModel.test.ts | 4 +- .../browser/parts/editor/editorPane.test.ts | 18 ++-- src/vs/workbench/test/browser/viewlet.test.ts | 2 +- .../test/browser/workbenchTestServices.ts | 58 ++++++------ .../test/common/workbenchTestServices.ts | 2 +- .../api/extHostSearch.test.ts | 2 +- 541 files changed, 1965 insertions(+), 1965 deletions(-) diff --git a/src/vs/base/browser/dnd.ts b/src/vs/base/browser/dnd.ts index 3753e458b28..c9d07cccfc3 100644 --- a/src/vs/base/browser/dnd.ts +++ b/src/vs/base/browser/dnd.ts @@ -42,7 +42,7 @@ export class DelayedDragHandler extends Disposable { } } - dispose(): void { + override dispose(): void { super.dispose(); this.clearDragTimeout(); diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index 0bdba6f8d6c..90f56d92e05 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -1589,7 +1589,7 @@ export class ModifierKeyEmitter extends Emitter { return ModifierKeyEmitter.instance; } - dispose() { + override dispose() { super.dispose(); this._subscriptions.dispose(); } diff --git a/src/vs/base/browser/touch.ts b/src/vs/base/browser/touch.ts index 7166c4ec3a9..8e9c085748a 100644 --- a/src/vs/base/browser/touch.ts +++ b/src/vs/base/browser/touch.ts @@ -136,7 +136,7 @@ export class Gesture extends Disposable { return 'ontouchstart' in window || navigator.maxTouchPoints > 0 || (window as Window).navigator.msMaxTouchPoints > 0; } - public dispose(): void { + public override dispose(): void { if (this.handle) { this.handle.dispose(); this.handle = null; diff --git a/src/vs/base/browser/ui/actionbar/actionViewItems.ts b/src/vs/base/browser/ui/actionbar/actionViewItems.ts index 7203b9850c0..98c0c667054 100644 --- a/src/vs/base/browser/ui/actionbar/actionViewItems.ts +++ b/src/vs/base/browser/ui/actionbar/actionViewItems.ts @@ -212,7 +212,7 @@ export class BaseActionViewItem extends Disposable implements IActionViewItem { // implement in subclass } - dispose(): void { + override dispose(): void { if (this.element) { this.element.remove(); this.element = undefined; @@ -231,7 +231,7 @@ export interface IActionViewItemOptions extends IBaseActionViewItemOptions { export class ActionViewItem extends BaseActionViewItem { protected label: HTMLElement | undefined; - protected options: IActionViewItemOptions; + protected override options: IActionViewItemOptions; private cssClass?: string; @@ -244,7 +244,7 @@ export class ActionViewItem extends BaseActionViewItem { this.cssClass = ''; } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); if (this.element) { @@ -276,32 +276,32 @@ export class ActionViewItem extends BaseActionViewItem { // Only set the tabIndex on the element once it is about to get focused // That way this element wont be a tab stop when it is not needed #106441 - focus(): void { + override focus(): void { if (this.label) { this.label.tabIndex = 0; this.label.focus(); } } - blur(): void { + override blur(): void { if (this.label) { this.label.tabIndex = -1; } } - setFocusable(focusable: boolean): void { + override setFocusable(focusable: boolean): void { if (this.label) { this.label.tabIndex = focusable ? 0 : -1; } } - updateLabel(): void { + override updateLabel(): void { if (this.options.label && this.label) { this.label.textContent = this.getAction().label; } } - updateTooltip(): void { + override updateTooltip(): void { let title: string | null = null; if (this.getAction().tooltip) { @@ -320,7 +320,7 @@ export class ActionViewItem extends BaseActionViewItem { } } - updateClass(): void { + override updateClass(): void { if (this.cssClass && this.label) { this.label.classList.remove(...this.cssClass.split(' ')); } @@ -343,7 +343,7 @@ export class ActionViewItem extends BaseActionViewItem { } } - updateEnabled(): void { + override updateEnabled(): void { if (this.getAction().enabled) { if (this.label) { this.label.removeAttribute('aria-disabled'); @@ -365,7 +365,7 @@ export class ActionViewItem extends BaseActionViewItem { } } - updateChecked(): void { + override updateChecked(): void { if (this.label) { if (this.getAction().checked) { this.label.classList.add('checked'); @@ -407,23 +407,23 @@ export class SelectActionViewItem extends BaseActionViewItem { return option; } - setFocusable(focusable: boolean): void { + override setFocusable(focusable: boolean): void { this.selectBox.setFocusable(focusable); } - focus(): void { + override focus(): void { if (this.selectBox) { this.selectBox.focus(); } } - blur(): void { + override blur(): void { if (this.selectBox) { this.selectBox.blur(); } } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { this.selectBox.render(container); } } diff --git a/src/vs/base/browser/ui/actionbar/actionbar.ts b/src/vs/base/browser/ui/actionbar/actionbar.ts index b6fcbb24295..d5486aefaee 100644 --- a/src/vs/base/browser/ui/actionbar/actionbar.ts +++ b/src/vs/base/browser/ui/actionbar/actionbar.ts @@ -529,7 +529,7 @@ export class ActionBar extends Disposable implements IActionRunner { await this._actionRunner.run(action, context); } - dispose(): void { + override dispose(): void { dispose(this.viewItems); this.viewItems = []; diff --git a/src/vs/base/browser/ui/checkbox/checkbox.ts b/src/vs/base/browser/ui/checkbox/checkbox.ts index d9319424fc5..5a67a234770 100644 --- a/src/vs/base/browser/ui/checkbox/checkbox.ts +++ b/src/vs/base/browser/ui/checkbox/checkbox.ts @@ -44,7 +44,7 @@ export class CheckboxActionViewItem extends BaseActionViewItem { protected checkbox: Checkbox | undefined; protected readonly disposables = new DisposableStore(); - render(container: HTMLElement): void { + override render(container: HTMLElement): void { this.element = container; this.disposables.clear(); @@ -59,7 +59,7 @@ export class CheckboxActionViewItem extends BaseActionViewItem { this.element.appendChild(this.checkbox.domNode); } - updateEnabled(): void { + override updateEnabled(): void { if (this.checkbox) { if (this.isEnabled()) { this.checkbox.enable(); @@ -69,33 +69,33 @@ export class CheckboxActionViewItem extends BaseActionViewItem { } } - updateChecked(): void { + override updateChecked(): void { if (this.checkbox) { this.checkbox.checked = this._action.checked; } } - focus(): void { + override focus(): void { if (this.checkbox) { this.checkbox.domNode.tabIndex = 0; this.checkbox.focus(); } } - blur(): void { + override blur(): void { if (this.checkbox) { this.checkbox.domNode.tabIndex = -1; this.checkbox.domNode.blur(); } } - setFocusable(focusable: boolean): void { + override setFocusable(focusable: boolean): void { if (this.checkbox) { this.checkbox.domNode.tabIndex = focusable ? 0 : -1; } } - dispose(): void { + override dispose(): void { this.disposables.dispose(); super.dispose(); } diff --git a/src/vs/base/browser/ui/contextview/contextview.ts b/src/vs/base/browser/ui/contextview/contextview.ts index 9632da876a7..30efdd96b63 100644 --- a/src/vs/base/browser/ui/contextview/contextview.ts +++ b/src/vs/base/browser/ui/contextview/contextview.ts @@ -351,7 +351,7 @@ export class ContextView extends Disposable { } } - dispose(): void { + override dispose(): void { this.hide(); super.dispose(); diff --git a/src/vs/base/browser/ui/dialog/dialog.ts b/src/vs/base/browser/ui/dialog/dialog.ts index a1646c4ccf3..35d0ddc2db7 100644 --- a/src/vs/base/browser/ui/dialog/dialog.ts +++ b/src/vs/base/browser/ui/dialog/dialog.ts @@ -417,7 +417,7 @@ export class Dialog extends Disposable { this.applyStyles(); } - dispose(): void { + override dispose(): void { super.dispose(); if (this.modalElement) { diff --git a/src/vs/base/browser/ui/dropdown/dropdown.ts b/src/vs/base/browser/ui/dropdown/dropdown.ts index ea6611aba29..059b85ecb19 100644 --- a/src/vs/base/browser/ui/dropdown/dropdown.ts +++ b/src/vs/base/browser/ui/dropdown/dropdown.ts @@ -125,7 +125,7 @@ export class BaseDropdown extends ActionRunner { this.hide(); } - dispose(): void { + override dispose(): void { super.dispose(); this.hide(); @@ -159,7 +159,7 @@ export class Dropdown extends BaseDropdown { this.contextViewProvider = options.contextViewProvider; } - show(): void { + override show(): void { super.show(); this.element.classList.add('active'); @@ -187,7 +187,7 @@ export class Dropdown extends BaseDropdown { this.element.classList.remove('active'); } - hide(): void { + override hide(): void { super.hide(); if (this.contextViewProvider) { @@ -250,7 +250,7 @@ export class DropdownMenu extends BaseDropdown { this._actions = actions; } - show(): void { + override show(): void { super.show(); this.element.classList.add('active'); @@ -269,7 +269,7 @@ export class DropdownMenu extends BaseDropdown { }); } - hide(): void { + override hide(): void { super.hide(); } diff --git a/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts b/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts index 67e2e9bb7c1..98092a5cbf3 100644 --- a/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts +++ b/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts @@ -58,7 +58,7 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem { } } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { this.actionItem = container; const labelRenderer: ILabelRenderer = (el: HTMLElement): IDisposable | null => { @@ -123,7 +123,7 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem { this.updateEnabled(); } - setActionContext(newContext: unknown): void { + override setActionContext(newContext: unknown): void { super.setActionContext(newContext); if (this.dropdownMenu) { @@ -141,7 +141,7 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem { } } - protected updateEnabled(): void { + protected override updateEnabled(): void { const disabled = !this.getAction().enabled; this.actionItem?.classList.toggle('disabled', disabled); this.element?.classList.toggle('disabled', disabled); @@ -166,7 +166,7 @@ export class ActionWithDropdownActionViewItem extends ActionViewItem { super(context, action, options); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); if (this.element) { this.element.classList.add('action-dropdown-item'); diff --git a/src/vs/base/browser/ui/findinput/replaceInput.ts b/src/vs/base/browser/ui/findinput/replaceInput.ts index 1d6200fdb85..13ed1ade990 100644 --- a/src/vs/base/browser/ui/findinput/replaceInput.ts +++ b/src/vs/base/browser/ui/findinput/replaceInput.ts @@ -382,7 +382,7 @@ export class ReplaceInput extends Widget { this.domNode.style.width = newWidth + 'px'; } - public dispose(): void { + public override dispose(): void { super.dispose(); } } diff --git a/src/vs/base/browser/ui/grid/grid.ts b/src/vs/base/browser/ui/grid/grid.ts index 75e139fc46f..38bc8c53d9e 100644 --- a/src/vs/base/browser/ui/grid/grid.ts +++ b/src/vs/base/browser/ui/grid/grid.ts @@ -551,7 +551,7 @@ export class SerializableGrid extends Grid { }; } - layout(width: number, height: number): void { + override layout(width: number, height: number): void { super.layout(width, height); if (this.initialLayoutContext) { diff --git a/src/vs/base/browser/ui/inputbox/inputBox.ts b/src/vs/base/browser/ui/inputbox/inputBox.ts index c22ee4169c4..62638456615 100644 --- a/src/vs/base/browser/ui/inputbox/inputBox.ts +++ b/src/vs/base/browser/ui/inputbox/inputBox.ts @@ -610,7 +610,7 @@ export class InputBox extends Widget { } } - public dispose(): void { + public override dispose(): void { this._hideMessage(); this.message = null; diff --git a/src/vs/base/browser/ui/list/listWidget.ts b/src/vs/base/browser/ui/list/listWidget.ts index 41cfef5cd14..dcffc73d99b 100644 --- a/src/vs/base/browser/ui/list/listWidget.ts +++ b/src/vs/base/browser/ui/list/listWidget.ts @@ -188,7 +188,7 @@ class SelectionTrait extends Trait { super('selected'); } - renderIndex(index: number, container: HTMLElement): void { + override renderIndex(index: number, container: HTMLElement): void { super.renderIndex(index, container); if (this.setAriaSelected) { diff --git a/src/vs/base/browser/ui/menu/menu.ts b/src/vs/base/browser/ui/menu/menu.ts index 36e09bb3a66..4bf8f108bed 100644 --- a/src/vs/base/browser/ui/menu/menu.ts +++ b/src/vs/base/browser/ui/menu/menu.ts @@ -264,7 +264,7 @@ export class Menu extends ActionBar { } } - getContainer(): HTMLElement { + override getContainer(): HTMLElement { return this.scrollableElement.getDomNode(); } @@ -309,7 +309,7 @@ export class Menu extends ActionBar { } } - protected updateFocus(fromRight?: boolean): void { + protected override updateFocus(fromRight?: boolean): void { super.updateFocus(fromRight, true); if (typeof this.focusedItem !== 'undefined') { @@ -385,7 +385,7 @@ class BaseMenuActionViewItem extends BaseActionViewItem { public container: HTMLElement | undefined; - protected options: IMenuItemOptions; + protected override options: IMenuItemOptions; protected item: HTMLElement | undefined; private runOnceToEnableMouseUp: RunOnceScheduler; @@ -465,7 +465,7 @@ class BaseMenuActionViewItem extends BaseActionViewItem { this._register(this.runOnceToEnableMouseUp); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); if (!this.element) { @@ -504,12 +504,12 @@ class BaseMenuActionViewItem extends BaseActionViewItem { this.updateChecked(); } - blur(): void { + override blur(): void { super.blur(); this.applyStyle(); } - focus(): void { + override focus(): void { super.focus(); if (this.item) { @@ -526,7 +526,7 @@ class BaseMenuActionViewItem extends BaseActionViewItem { } } - updateLabel(): void { + override updateLabel(): void { if (!this.label) { return; } @@ -579,7 +579,7 @@ class BaseMenuActionViewItem extends BaseActionViewItem { } } - updateTooltip(): void { + override updateTooltip(): void { let title: string | null = null; if (this.getAction().tooltip) { @@ -598,7 +598,7 @@ class BaseMenuActionViewItem extends BaseActionViewItem { } } - updateClass(): void { + override updateClass(): void { if (this.cssClass && this.item) { this.item.classList.remove(...this.cssClass.split(' ')); } @@ -614,7 +614,7 @@ class BaseMenuActionViewItem extends BaseActionViewItem { } } - updateEnabled(): void { + override updateEnabled(): void { if (this.getAction().enabled) { if (this.element) { this.element.classList.remove('disabled'); @@ -639,7 +639,7 @@ class BaseMenuActionViewItem extends BaseActionViewItem { } } - updateChecked(): void { + override updateChecked(): void { if (!this.item) { return; } @@ -724,7 +724,7 @@ class SubmenuMenuActionViewItem extends BaseMenuActionViewItem { }, 750); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); if (!this.element) { @@ -783,7 +783,7 @@ class SubmenuMenuActionViewItem extends BaseMenuActionViewItem { })); } - updateEnabled(): void { + override updateEnabled(): void { // override on submenu entry // native menus do not observe enablement on sumbenus // we mimic that behavior @@ -794,7 +794,7 @@ class SubmenuMenuActionViewItem extends BaseMenuActionViewItem { this.createSubmenu(selectFirst); } - onClick(e: EventLike): void { + override onClick(e: EventLike): void { // stop clicking from trying to run an action EventHelper.stop(e, true); @@ -925,7 +925,7 @@ class SubmenuMenuActionViewItem extends BaseMenuActionViewItem { } } - protected applyStyle(): void { + protected override applyStyle(): void { super.applyStyle(); if (!this.menuStyle) { @@ -944,7 +944,7 @@ class SubmenuMenuActionViewItem extends BaseMenuActionViewItem { } } - dispose(): void { + override dispose(): void { super.dispose(); this.hideScheduler.dispose(); diff --git a/src/vs/base/browser/ui/menu/menubar.ts b/src/vs/base/browser/ui/menu/menubar.ts index 129c5663523..1667f808289 100644 --- a/src/vs/base/browser/ui/menu/menubar.ts +++ b/src/vs/base/browser/ui/menu/menubar.ts @@ -422,7 +422,7 @@ export class MenuBar extends Disposable { } } - dispose(): void { + override dispose(): void { super.dispose(); this.menuCache.forEach(menuBarMenu => { diff --git a/src/vs/base/browser/ui/sash/sash.ts b/src/vs/base/browser/ui/sash/sash.ts index b3d76b24de9..d9bd8266e44 100644 --- a/src/vs/base/browser/ui/sash/sash.ts +++ b/src/vs/base/browser/ui/sash/sash.ts @@ -484,7 +484,7 @@ export class Sash extends Disposable { return undefined; } - dispose(): void { + override dispose(): void { super.dispose(); this.el.remove(); } diff --git a/src/vs/base/browser/ui/scrollbar/scrollableElement.ts b/src/vs/base/browser/ui/scrollbar/scrollableElement.ts index fe7b7edc9b9..733e913ae6f 100644 --- a/src/vs/base/browser/ui/scrollbar/scrollableElement.ts +++ b/src/vs/base/browser/ui/scrollbar/scrollableElement.ts @@ -239,7 +239,7 @@ export abstract class AbstractScrollableElement extends Widget { this._revealOnScroll = true; } - public dispose(): void { + public override dispose(): void { this._mouseWheelToDispose = dispose(this._mouseWheelToDispose); super.dispose(); } diff --git a/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts b/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts index 19e22c09854..9f60bfb43ef 100644 --- a/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts +++ b/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts @@ -1046,7 +1046,7 @@ export class SelectBoxList extends Disposable implements ISelectBoxDelegate, ILi } } - public dispose(): void { + public override dispose(): void { this.hideSelectDropDown(false); super.dispose(); } diff --git a/src/vs/base/browser/ui/splitview/paneview.ts b/src/vs/base/browser/ui/splitview/paneview.ts index 15bdc774f69..06e8b064d49 100644 --- a/src/vs/base/browser/ui/splitview/paneview.ts +++ b/src/vs/base/browser/ui/splitview/paneview.ts @@ -568,7 +568,7 @@ export class PaneView extends Disposable { }, 200); } - dispose(): void { + override dispose(): void { super.dispose(); this.paneItems.forEach(i => i.disposable.dispose()); diff --git a/src/vs/base/browser/ui/splitview/splitview.ts b/src/vs/base/browser/ui/splitview/splitview.ts index 40082a2270f..8434bc1c528 100644 --- a/src/vs/base/browser/ui/splitview/splitview.ts +++ b/src/vs/base/browser/ui/splitview/splitview.ts @@ -1022,7 +1022,7 @@ export class SplitView extends Disposable { return undefined; } - dispose(): void { + override dispose(): void { super.dispose(); this.viewItems.forEach(i => i.dispose()); diff --git a/src/vs/base/browser/ui/toolbar/toolbar.ts b/src/vs/base/browser/ui/toolbar/toolbar.ts index 8d1c5b6b17a..013fc13a2b7 100644 --- a/src/vs/base/browser/ui/toolbar/toolbar.ts +++ b/src/vs/base/browser/ui/toolbar/toolbar.ts @@ -181,7 +181,7 @@ export class ToolBar extends Disposable { this.actionBar.clear(); } - dispose(): void { + override dispose(): void { this.clear(); super.dispose(); } @@ -202,7 +202,7 @@ class ToggleMenuAction extends Action { this.toggleDropdownMenu = toggleDropdownMenu; } - async run(): Promise { + async override run(): Promise { this.toggleDropdownMenu(); } diff --git a/src/vs/base/browser/ui/tree/abstractTree.ts b/src/vs/base/browser/ui/tree/abstractTree.ts index 2b466e54918..efc69fa4755 100644 --- a/src/vs/base/browser/ui/tree/abstractTree.ts +++ b/src/vs/base/browser/ui/tree/abstractTree.ts @@ -29,11 +29,11 @@ import { treeItemExpandedIcon, treeFilterOnTypeOnIcon, treeFilterOnTypeOffIcon, class TreeElementsDragAndDropData extends ElementsDragAndDropData { - set context(context: TContext | undefined) { + override set context(context: TContext | undefined) { this.data.context = context; } - get context(): TContext | undefined { + override get context(): TContext | undefined { return this.data.context; } @@ -1091,7 +1091,7 @@ class TreeNodeListMouseController extends MouseController< super(list); } - protected onViewPointer(e: IListMouseEvent>): void { + protected override onViewPointer(e: IListMouseEvent>): void { if (isInputElement(e.browserEvent.target as HTMLElement) || isMonacoEditor(e.browserEvent.target as HTMLElement)) { return; } @@ -1141,7 +1141,7 @@ class TreeNodeListMouseController extends MouseController< super.onViewPointer(e); } - protected onDoubleClick(e: IListMouseEvent>): void { + protected override onDoubleClick(e: IListMouseEvent>): void { const onTwistie = (e.browserEvent.target as HTMLElement).classList.contains('monaco-tl-twistie'); if (onTwistie || !this.tree.expandOnDoubleClick) { @@ -1175,11 +1175,11 @@ class TreeNodeList extends List> super(user, container, virtualDelegate, renderers, options); } - protected createMouseController(options: ITreeNodeListOptions): MouseController> { + protected override createMouseController(options: ITreeNodeListOptions): MouseController> { return new TreeNodeListMouseController(this, options.tree); } - splice(start: number, deleteCount: number, elements: ITreeNode[] = []): void { + override splice(start: number, deleteCount: number, elements: ITreeNode[] = []): void { super.splice(start, deleteCount, elements); if (elements.length === 0) { @@ -1217,7 +1217,7 @@ class TreeNodeList extends List> } } - setFocus(indexes: number[], browserEvent?: UIEvent, fromAPI = false): void { + override setFocus(indexes: number[], browserEvent?: UIEvent, fromAPI = false): void { super.setFocus(indexes, browserEvent); if (!fromAPI) { @@ -1225,7 +1225,7 @@ class TreeNodeList extends List> } } - setSelection(indexes: number[], browserEvent?: UIEvent, fromAPI = false): void { + override setSelection(indexes: number[], browserEvent?: UIEvent, fromAPI = false): void { super.setSelection(indexes, browserEvent); if (!fromAPI) { @@ -1233,7 +1233,7 @@ class TreeNodeList extends List> } } - setAnchor(index: number | undefined, fromAPI = false): void { + override setAnchor(index: number | undefined, fromAPI = false): void { super.setAnchor(index); if (!fromAPI) { diff --git a/src/vs/base/browser/ui/tree/asyncDataTree.ts b/src/vs/base/browser/ui/tree/asyncDataTree.ts index 731137df0a6..c9be6ae0d68 100644 --- a/src/vs/base/browser/ui/tree/asyncDataTree.ts +++ b/src/vs/base/browser/ui/tree/asyncDataTree.ts @@ -157,11 +157,11 @@ function asTreeContextMenuEvent(e: ITreeContextMenuEvent extends ElementsDragAndDropData { - set context(context: TContext | undefined) { + override set context(context: TContext | undefined) { this.data.context = context; } - get context(): TContext | undefined { + override get context(): TContext | undefined { return this.data.context; } @@ -1148,7 +1148,7 @@ export class CompressibleAsyncDataTree extends As this.filter = options.filter; } - protected createTree( + protected override createTree( user: string, container: HTMLElement, delegate: IListVirtualDelegate, @@ -1162,18 +1162,18 @@ export class CompressibleAsyncDataTree extends As return new CompressibleObjectTree(user, container, objectTreeDelegate, objectTreeRenderers, objectTreeOptions); } - protected asTreeElement(node: IAsyncDataTreeNode, viewStateContext?: IAsyncDataTreeViewStateContext): ICompressedTreeElement> { + protected override asTreeElement(node: IAsyncDataTreeNode, viewStateContext?: IAsyncDataTreeViewStateContext): ICompressedTreeElement> { return { incompressible: this.compressionDelegate.isIncompressible(node.element as T), ...super.asTreeElement(node, viewStateContext) }; } - updateOptions(options: ICompressibleAsyncDataTreeOptionsUpdate = {}): void { + override updateOptions(options: ICompressibleAsyncDataTreeOptionsUpdate = {}): void { this.tree.updateOptions(options); } - getViewState(): IAsyncDataTreeViewState { + override getViewState(): IAsyncDataTreeViewState { if (!this.identityProvider) { throw new TreeError(this.user, 'Can\'t get tree view state without an identity provider'); } @@ -1201,7 +1201,7 @@ export class CompressibleAsyncDataTree extends As return { focus, selection, expanded, scrollTop: this.scrollTop }; } - protected render(node: IAsyncDataTreeNode, viewStateContext?: IAsyncDataTreeViewStateContext): void { + protected override render(node: IAsyncDataTreeNode, viewStateContext?: IAsyncDataTreeViewStateContext): void { if (!this.identityProvider) { return super.render(node, viewStateContext); } @@ -1277,7 +1277,7 @@ export class CompressibleAsyncDataTree extends As // For compressed async data trees, `TreeVisibility.Recurse` doesn't currently work // and we have to filter everything beforehand // Related to #85193 and #85835 - protected processChildren(children: Iterable): Iterable { + protected override processChildren(children: Iterable): Iterable { if (this.filter) { children = Iterable.filter(children, e => { const result = this.filter!.filter(e, TreeVisibility.Visible); diff --git a/src/vs/base/browser/ui/tree/objectTree.ts b/src/vs/base/browser/ui/tree/objectTree.ts index 21e65570132..0e417939857 100644 --- a/src/vs/base/browser/ui/tree/objectTree.ts +++ b/src/vs/base/browser/ui/tree/objectTree.ts @@ -40,7 +40,7 @@ export class ObjectTree, TFilterData = void> extends protected model!: IObjectTreeModel; - get onDidChangeCollapseState(): Event> { return this.model.onDidChangeCollapseState; } + override get onDidChangeCollapseState(): Event> { return this.model.onDidChangeCollapseState; } constructor( user: string, @@ -208,15 +208,15 @@ export class CompressibleObjectTree, TFilterData = vo super(user, container, delegate, compressibleRenderers, asObjectTreeOptions(compressedTreeNodeProvider, options)); } - setChildren(element: T | null, children: Iterable> = Iterable.empty(), options?: IObjectTreeSetChildrenOptions): void { + override setChildren(element: T | null, children: Iterable> = Iterable.empty(), options?: IObjectTreeSetChildrenOptions): void { this.model.setChildren(element, children, options); } - protected createModel(user: string, view: IList>, options: ICompressibleObjectTreeOptions): ITreeModel { + protected override createModel(user: string, view: IList>, options: ICompressibleObjectTreeOptions): ITreeModel { return new CompressibleObjectTreeModel(user, view, options); } - updateOptions(optionsUpdate: ICompressibleObjectTreeOptionsUpdate = {}): void { + override updateOptions(optionsUpdate: ICompressibleObjectTreeOptionsUpdate = {}): void { super.updateOptions(optionsUpdate); if (typeof optionsUpdate.compressionEnabled !== 'undefined') { diff --git a/src/vs/base/browser/ui/tree/treeDefaults.ts b/src/vs/base/browser/ui/tree/treeDefaults.ts index 834ab449fdd..155d88b8804 100644 --- a/src/vs/base/browser/ui/tree/treeDefaults.ts +++ b/src/vs/base/browser/ui/tree/treeDefaults.ts @@ -13,7 +13,7 @@ export class CollapseAllAction extends Action { super('vs.tree.collapse', nls.localize('collapse all', "Collapse All"), 'collapse-all', enabled); } - async run(): Promise { + async override run(): Promise { this.viewer.collapseAll(); this.viewer.setSelection([]); this.viewer.setFocus([]); diff --git a/src/vs/base/common/async.ts b/src/vs/base/common/async.ts index 03fb0d84bc4..7fdec199755 100644 --- a/src/vs/base/common/async.ts +++ b/src/vs/base/common/async.ts @@ -381,7 +381,7 @@ export class AutoOpenBarrier extends Barrier { this._timeout = setTimeout(() => this.open(), autoOpenTimeMs); } - open(): void { + override open(): void { clearTimeout(this._timeout); super.open(); } @@ -772,7 +772,7 @@ export class RunOnceWorker extends RunOnceScheduler { } } - protected doRun(): void { + protected override doRun(): void { const units = this.units; this.units = []; @@ -781,7 +781,7 @@ export class RunOnceWorker extends RunOnceScheduler { } } - dispose(): void { + override dispose(): void { this.units = []; super.dispose(); diff --git a/src/vs/base/common/event.ts b/src/vs/base/common/event.ts index add858d259c..8b4efda9d44 100644 --- a/src/vs/base/common/event.ts +++ b/src/vs/base/common/event.ts @@ -674,7 +674,7 @@ export class PauseableEmitter extends Emitter { } } - fire(event: T): void { + override fire(event: T): void { if (this._listeners) { if (this._isPaused !== 0) { this._eventQueue.push(event); diff --git a/src/vs/base/common/map.ts b/src/vs/base/common/map.ts index 0e08876e537..2ca5fe50f9a 100644 --- a/src/vs/base/common/map.ts +++ b/src/vs/base/common/map.ts @@ -1028,7 +1028,7 @@ export class LRUCache extends LinkedMap { this.checkTrim(); } - get(key: K, touch: Touch = Touch.AsNew): V | undefined { + override get(key: K, touch: Touch = Touch.AsNew): V | undefined { return super.get(key, touch); } @@ -1036,7 +1036,7 @@ export class LRUCache extends LinkedMap { return super.get(key, Touch.None); } - set(key: K, value: V): this { + override set(key: K, value: V): this { super.set(key, value, Touch.AsNew); this.checkTrim(); return this; diff --git a/src/vs/base/common/scrollable.ts b/src/vs/base/common/scrollable.ts index 73a8622890e..cb2f7860bf6 100644 --- a/src/vs/base/common/scrollable.ts +++ b/src/vs/base/common/scrollable.ts @@ -223,7 +223,7 @@ export class Scrollable extends Disposable { this._smoothScrolling = null; } - public dispose(): void { + public override dispose(): void { if (this._smoothScrolling) { this._smoothScrolling.dispose(); this._smoothScrolling = null; diff --git a/src/vs/base/common/uri.ts b/src/vs/base/common/uri.ts index 55a39c0f372..c2b0b02eb86 100644 --- a/src/vs/base/common/uri.ts +++ b/src/vs/base/common/uri.ts @@ -418,14 +418,14 @@ class Uri extends URI { _formatted: string | null = null; _fsPath: string | null = null; - get fsPath(): string { + override get fsPath(): string { if (!this._fsPath) { this._fsPath = uriToFsPath(this, false); } return this._fsPath; } - toString(skipEncoding: boolean = false): string { + override toString(skipEncoding: boolean = false): string { if (!skipEncoding) { if (!this._formatted) { this._formatted = _asFormatted(this, false); @@ -437,7 +437,7 @@ class Uri extends URI { } } - toJSON(): UriComponents { + override toJSON(): UriComponents { const res = { $mid: 1 }; diff --git a/src/vs/base/node/processes.ts b/src/vs/base/node/processes.ts index 0273af2365c..363dc229f62 100644 --- a/src/vs/base/node/processes.ts +++ b/src/vs/base/node/processes.ts @@ -379,7 +379,7 @@ export class LineProcess extends AbstractProcess { this.stderrLineDecoder = stderrLineDecoder; } - protected handleClose(data: any, cc: ValueCallback, pp: ProgressCallback, ee: ErrorCallback): void { + protected override handleClose(data: any, cc: ValueCallback, pp: ProgressCallback, ee: ErrorCallback): void { const stdoutLine = this.stdoutLineDecoder ? this.stdoutLineDecoder.end() : null; if (stdoutLine) { pp({ line: stdoutLine, source: Source.stdout }); diff --git a/src/vs/base/parts/ipc/common/ipc.mp.ts b/src/vs/base/parts/ipc/common/ipc.mp.ts index 01c36e6351d..1022eb173c4 100644 --- a/src/vs/base/parts/ipc/common/ipc.mp.ts +++ b/src/vs/base/parts/ipc/common/ipc.mp.ts @@ -72,7 +72,7 @@ export class Client extends IPCClient implements IDisposable { this.protocol = protocol; } - dispose(): void { + override dispose(): void { this.protocol.disconnect(); } } diff --git a/src/vs/base/parts/ipc/common/ipc.net.ts b/src/vs/base/parts/ipc/common/ipc.net.ts index 777d4379f43..aad4fb4e92a 100644 --- a/src/vs/base/parts/ipc/common/ipc.net.ts +++ b/src/vs/base/parts/ipc/common/ipc.net.ts @@ -252,7 +252,7 @@ class ProtocolReader extends Disposable { return this._incomingData.read(this._incomingData.byteLength); } - public dispose(): void { + public override dispose(): void { this._isDisposed = true; super.dispose(); } @@ -412,7 +412,7 @@ export class Client extends IPCClient { super(protocol, id, ipcLogger); } - dispose(): void { + override dispose(): void { super.dispose(); const socket = this.protocol.getSocket(); this.protocol.sendDisconnect(); diff --git a/src/vs/base/parts/ipc/electron-sandbox/ipc.electron.ts b/src/vs/base/parts/ipc/electron-sandbox/ipc.electron.ts index f2eaa813112..94ece5a43be 100644 --- a/src/vs/base/parts/ipc/electron-sandbox/ipc.electron.ts +++ b/src/vs/base/parts/ipc/electron-sandbox/ipc.electron.ts @@ -32,7 +32,7 @@ export class Client extends IPCClient implements IDisposable { this.protocol = protocol; } - dispose(): void { + override dispose(): void { this.protocol.disconnect(); } } diff --git a/src/vs/base/parts/ipc/node/ipc.net.ts b/src/vs/base/parts/ipc/node/ipc.net.ts index 09024a5fed1..aa2512c4272 100644 --- a/src/vs/base/parts/ipc/node/ipc.net.ts +++ b/src/vs/base/parts/ipc/node/ipc.net.ts @@ -266,7 +266,7 @@ export class WebSocketNodeSocket extends Disposable implements ISocket { this._register(this.socket.onClose(() => this._onClose.fire())); } - public dispose(): void { + public override dispose(): void { if (this._zlibDeflateFlushWaitingCount > 0) { // Wait for any outstanding writes to finish before disposing this._register(this._onDidZlibFlush.event(() => { @@ -581,7 +581,7 @@ export class Server extends IPCServer { this.server = server; } - dispose(): void { + override dispose(): void { super.dispose(); if (this.server) { this.server.close(); diff --git a/src/vs/base/parts/ipc/test/common/ipc.test.ts b/src/vs/base/parts/ipc/test/common/ipc.test.ts index f9855abda48..38ce85a7a0c 100644 --- a/src/vs/base/parts/ipc/test/common/ipc.test.ts +++ b/src/vs/base/parts/ipc/test/common/ipc.test.ts @@ -66,7 +66,7 @@ class TestIPCClient extends IPCClient { super(protocol, id); } - dispose(): void { + override dispose(): void { this._onDidDisconnect.fire(); super.dispose(); } diff --git a/src/vs/base/parts/quickinput/browser/quickInput.ts b/src/vs/base/parts/quickinput/browser/quickInput.ts index f84ec1479c3..23607482003 100644 --- a/src/vs/base/parts/quickinput/browser/quickInput.ts +++ b/src/vs/base/parts/quickinput/browser/quickInput.ts @@ -410,7 +410,7 @@ class QuickInput extends Disposable implements IQuickInput { readonly onDispose = this.onDisposeEmitter.event; - dispose(): void { + override dispose(): void { this.hide(); this.onDisposeEmitter.fire(); @@ -694,7 +694,7 @@ class QuickPick extends QuickInput implements IQuickPi } } - show() { + override show() { if (!this.visible) { this.visibleDisposables.add( this.ui.inputBox.onDidChange(value => { @@ -884,7 +884,7 @@ class QuickPick extends QuickInput implements IQuickPi }); } - protected update() { + protected override update() { if (!this.visible) { return; } @@ -1063,7 +1063,7 @@ class InputBox extends QuickInput implements IInputBox { readonly onDidAccept = this.onDidAcceptEmitter.event; - show() { + override show() { if (!this.visible) { this.visibleDisposables.add( this.ui.inputBox.onDidChange(value => { @@ -1079,7 +1079,7 @@ class InputBox extends QuickInput implements IInputBox { super.show(); } - protected update() { + protected override update() { if (!this.visible) { return; } diff --git a/src/vs/base/parts/storage/common/storage.ts b/src/vs/base/parts/storage/common/storage.ts index a2c28e17070..ff52a44983b 100644 --- a/src/vs/base/parts/storage/common/storage.ts +++ b/src/vs/base/parts/storage/common/storage.ts @@ -320,7 +320,7 @@ export class Storage extends Disposable implements IStorage { return new Promise(resolve => this.whenFlushedCallbacks.push(resolve)); } - dispose(): void { + override dispose(): void { this.flushDelayer.cancel(); // workaround https://github.com/microsoft/vscode/issues/116777 this.flushDelayer.dispose(); diff --git a/src/vs/base/parts/storage/test/node/storage.test.ts b/src/vs/base/parts/storage/test/node/storage.test.ts index 990e531905e..fd963590dc4 100644 --- a/src/vs/base/parts/storage/test/node/storage.test.ts +++ b/src/vs/base/parts/storage/test/node/storage.test.ts @@ -111,7 +111,7 @@ flakySuite('Storage Library', function () { class TestSQLiteStorageDatabase extends SQLiteStorageDatabase { private readonly _onDidChangeItemsExternal = new Emitter(); - get onDidChangeItemsExternal(): Event { return this._onDidChangeItemsExternal.event; } + override get onDidChangeItemsExternal(): Event { return this._onDidChangeItemsExternal.event; } fireDidChangeItemsExternal(event: IStorageItemsChangeEvent): void { this._onDidChangeItemsExternal.fire(event); diff --git a/src/vs/editor/browser/config/configuration.ts b/src/vs/editor/browser/config/configuration.ts index 545d1321e7b..ddb077f57db 100644 --- a/src/vs/editor/browser/config/configuration.ts +++ b/src/vs/editor/browser/config/configuration.ts @@ -112,7 +112,7 @@ class CSSBasedConfiguration extends Disposable { this._evictUntrustedReadingsTimeout = -1; } - public dispose(): void { + public override dispose(): void { if (this._evictUntrustedReadingsTimeout !== -1) { clearTimeout(this._evictUntrustedReadingsTimeout); this._evictUntrustedReadingsTimeout = -1; @@ -353,11 +353,11 @@ export class Configuration extends CommonEditorConfiguration { this._recomputeOptions(); } - public observeReferenceElement(dimension?: IDimension): void { + public override observeReferenceElement(dimension?: IDimension): void { this._elementSizeObserver.observe(dimension); } - public updatePixelRatio(): void { + public override updatePixelRatio(): void { this._recomputeOptions(); } diff --git a/src/vs/editor/browser/config/elementSizeObserver.ts b/src/vs/editor/browser/config/elementSizeObserver.ts index 06b42c6f9c6..cf42a075793 100644 --- a/src/vs/editor/browser/config/elementSizeObserver.ts +++ b/src/vs/editor/browser/config/elementSizeObserver.ts @@ -52,7 +52,7 @@ export class ElementSizeObserver extends Disposable { this.measureReferenceDomElement(false, dimension); } - public dispose(): void { + public override dispose(): void { this.stopObserving(); super.dispose(); } diff --git a/src/vs/editor/browser/controller/mouseHandler.ts b/src/vs/editor/browser/controller/mouseHandler.ts index 005fe7ad0ca..0b26756bc9f 100644 --- a/src/vs/editor/browser/controller/mouseHandler.ts +++ b/src/vs/editor/browser/controller/mouseHandler.ts @@ -133,13 +133,13 @@ export class MouseHandler extends ViewEventHandler { this._context.addEventHandler(this); } - public dispose(): void { + public override dispose(): void { this._context.removeEventHandler(this); super.dispose(); } // --- begin event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { if (e.hasChanged(EditorOption.layoutInfo)) { // layout change const height = this._context.configuration.options.get(EditorOption.layoutInfo).height; @@ -150,14 +150,14 @@ export class MouseHandler extends ViewEventHandler { } return false; } - public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { + public override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { this._mouseDownOperation.onCursorStateChanged(e); return false; } - public onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean { + public override onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean { return false; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { this._mouseDownOperation.onScrollChanged(); return false; } @@ -311,7 +311,7 @@ class MouseDownOperation extends Disposable { this._lastMouseEvent = null; } - public dispose(): void { + public override dispose(): void { super.dispose(); } diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index bc0478ca458..d2af49b222f 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -422,7 +422,7 @@ class HitTestRequest extends BareHitTestRequest { } } - public toString(): string { + public override toString(): string { return `pos(${this.pos.x},${this.pos.y}), editorPos(${this.editorPos.x},${this.editorPos.y}), mouseVerticalOffset: ${this.mouseVerticalOffset}, mouseContentHorizontalOffset: ${this.mouseContentHorizontalOffset}\n\ttarget: ${this.target ? (this.target).outerHTML : null}`; } diff --git a/src/vs/editor/browser/controller/pointerHandler.ts b/src/vs/editor/browser/controller/pointerHandler.ts index ee291a86fcb..5c4df88ff3b 100644 --- a/src/vs/editor/browser/controller/pointerHandler.ts +++ b/src/vs/editor/browser/controller/pointerHandler.ts @@ -87,7 +87,7 @@ export class PointerEventHandler extends MouseHandler { } } - public _onMouseDown(e: EditorMouseEvent): void { + public override _onMouseDown(e: EditorMouseEvent): void { if ((e.browserEvent as any).pointerType === 'touch') { return; } diff --git a/src/vs/editor/browser/controller/textAreaHandler.ts b/src/vs/editor/browser/controller/textAreaHandler.ts index be84e6511c0..fe41979c3a9 100644 --- a/src/vs/editor/browser/controller/textAreaHandler.ts +++ b/src/vs/editor/browser/controller/textAreaHandler.ts @@ -330,7 +330,7 @@ export class TextAreaHandler extends ViewPart { })); } - public dispose(): void { + public override dispose(): void { super.dispose(); } @@ -425,7 +425,7 @@ export class TextAreaHandler extends ViewPart { // --- begin event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; const layoutInfo = options.get(EditorOption.layoutInfo); @@ -454,34 +454,34 @@ export class TextAreaHandler extends ViewPart { return true; } - public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { + public override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { this._selections = e.selections.slice(0); this._modelSelections = e.modelSelections.slice(0); this._textAreaInput.writeScreenReaderContent('selection changed'); return true; } - public onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { + public override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { // true for inline decorations that can end up relayouting text return true; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + public override onFlushed(e: viewEvents.ViewFlushedEvent): boolean { return true; } - public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { + public override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { return true; } - public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { + public override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { return true; } - public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { + public override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { this._scrollLeft = e.scrollLeft; this._scrollTop = e.scrollTop; return true; } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { return true; } diff --git a/src/vs/editor/browser/controller/textAreaInput.ts b/src/vs/editor/browser/controller/textAreaInput.ts index 63722bb873a..37dbdb7f67b 100644 --- a/src/vs/editor/browser/controller/textAreaInput.ts +++ b/src/vs/editor/browser/controller/textAreaInput.ts @@ -524,7 +524,7 @@ export class TextAreaInput extends Disposable { }); } - public dispose(): void { + public override dispose(): void { super.dispose(); if (this._selectionChangeListener) { this._selectionChangeListener.dispose(); diff --git a/src/vs/editor/browser/core/editorState.ts b/src/vs/editor/browser/core/editorState.ts index 5d4c1ffb0e5..36014981103 100644 --- a/src/vs/editor/browser/core/editorState.ts +++ b/src/vs/editor/browser/core/editorState.ts @@ -119,7 +119,7 @@ export class EditorStateCancellationTokenSource extends EditorKeybindingCancella } } - dispose() { + override dispose() { this._listener.dispose(); super.dispose(); } @@ -137,7 +137,7 @@ export class TextModelCancellationTokenSource extends CancellationTokenSource im this._listener = model.onDidChangeContent(() => this.cancel()); } - dispose() { + override dispose() { this._listener.dispose(); super.dispose(); } diff --git a/src/vs/editor/browser/core/keybindingCancellation.ts b/src/vs/editor/browser/core/keybindingCancellation.ts index 206fbeac885..2fc418a32a4 100644 --- a/src/vs/editor/browser/core/keybindingCancellation.ts +++ b/src/vs/editor/browser/core/keybindingCancellation.ts @@ -81,7 +81,7 @@ export class EditorKeybindingCancellationTokenSource extends CancellationTokenSo this._unregister = editor.invokeWithinContext(accessor => accessor.get(IEditorCancellationTokens).add(editor, this)); } - dispose(): void { + override dispose(): void { this._unregister(); super.dispose(); } diff --git a/src/vs/editor/browser/view/viewImpl.ts b/src/vs/editor/browser/view/viewImpl.ts index 5589fd7f120..67823047296 100644 --- a/src/vs/editor/browser/view/viewImpl.ts +++ b/src/vs/editor/browser/view/viewImpl.ts @@ -300,32 +300,32 @@ export class View extends ViewEventHandler { } // --- begin event handlers - public handleEvents(events: viewEvents.ViewEvent[]): void { + public override handleEvents(events: viewEvents.ViewEvent[]): void { super.handleEvents(events); this._scheduleRender(); } - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { this._configPixelRatio = this._context.configuration.options.get(EditorOption.pixelRatio); this.domNode.setClassName(this._getEditorClassName()); this._applyLayout(); return false; } - public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { + public override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { this._selections = e.selections; return false; } - public onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean { + public override onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean { this.domNode.setClassName(this._getEditorClassName()); return false; } - public onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean { + public override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean { this.domNode.setClassName(this._getEditorClassName()); return false; } // --- end event handlers - public dispose(): void { + public override dispose(): void { if (this._renderAnimationFrame !== null) { this._renderAnimationFrame.dispose(); this._renderAnimationFrame = null; diff --git a/src/vs/editor/browser/view/viewOverlays.ts b/src/vs/editor/browser/view/viewOverlays.ts index 130f1f09fae..0088f3d8b46 100644 --- a/src/vs/editor/browser/view/viewOverlays.ts +++ b/src/vs/editor/browser/view/viewOverlays.ts @@ -36,7 +36,7 @@ export class ViewOverlays extends ViewPart implements IVisibleLinesHost onBrowserDesperateReveal(this.scrollbarDomNode.domNode, true, false))); } - public dispose(): void { + public override dispose(): void { super.dispose(); } @@ -133,7 +133,7 @@ export class EditorScrollbar extends ViewPart { // --- begin event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { if ( e.hasChanged(EditorOption.scrollbar) || e.hasChanged(EditorOption.mouseWheelScrollSensitivity) @@ -157,10 +157,10 @@ export class EditorScrollbar extends ViewPart { } return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return true; } - public onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean { + public override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean { this.scrollbar.updateClassName('editor-scrollable' + ' ' + getThemeTypeSelector(this._context.theme.type)); return true; } diff --git a/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts b/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts index 0cdd9c61cc2..3ccec5f60e3 100644 --- a/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts +++ b/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts @@ -98,7 +98,7 @@ export class GlyphMarginOverlay extends DedupOverlay { this._context.addEventHandler(this); } - public dispose(): void { + public override dispose(): void { this._context.removeEventHandler(this); this._renderResult = null; super.dispose(); @@ -106,7 +106,7 @@ export class GlyphMarginOverlay extends DedupOverlay { // --- begin event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; const layoutInfo = options.get(EditorOption.layoutInfo); @@ -116,25 +116,25 @@ export class GlyphMarginOverlay extends DedupOverlay { this._glyphMarginWidth = layoutInfo.glyphMarginWidth; return true; } - public onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { + public override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { return true; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + public override onFlushed(e: viewEvents.ViewFlushedEvent): boolean { return true; } - public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { + public override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { return true; } - public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { + public override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { return true; } - public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { + public override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return e.scrollTopChanged; } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { return true; } diff --git a/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts b/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts index f94c06247b4..de40ce80870 100644 --- a/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts +++ b/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts @@ -45,7 +45,7 @@ export class IndentGuidesOverlay extends DynamicViewOverlay { this._context.addEventHandler(this); } - public dispose(): void { + public override dispose(): void { this._context.removeEventHandler(this); this._renderResult = null; super.dispose(); @@ -53,7 +53,7 @@ export class IndentGuidesOverlay extends DynamicViewOverlay { // --- begin event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; const wrappingInfo = options.get(EditorOption.wrappingInfo); const fontInfo = options.get(EditorOption.fontInfo); @@ -65,7 +65,7 @@ export class IndentGuidesOverlay extends DynamicViewOverlay { this._maxIndentLeft = wrappingInfo.wrappingColumn === -1 ? -1 : (wrappingInfo.wrappingColumn * fontInfo.typicalHalfwidthCharacterWidth); return true; } - public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { + public override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { const selection = e.selections[0]; const newPrimaryLineNumber = selection.isEmpty() ? selection.positionLineNumber : 0; @@ -76,29 +76,29 @@ export class IndentGuidesOverlay extends DynamicViewOverlay { return false; } - public onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { + public override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { // true for inline decorations return true; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + public override onFlushed(e: viewEvents.ViewFlushedEvent): boolean { return true; } - public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { + public override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { return true; } - public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { + public override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { return true; } - public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { + public override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return e.scrollTopChanged;// || e.scrollWidthChanged; } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { return true; } - public onLanguageConfigurationChanged(e: viewEvents.ViewLanguageConfigurationEvent): boolean { + public override onLanguageConfigurationChanged(e: viewEvents.ViewLanguageConfigurationEvent): boolean { return true; } diff --git a/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts b/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts index 0eceebf7cf6..1c3f5d416d6 100644 --- a/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts +++ b/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts @@ -54,7 +54,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay { this._lineNumbersWidth = layoutInfo.lineNumbersWidth; } - public dispose(): void { + public override dispose(): void { this._context.removeEventHandler(this); this._renderResult = null; super.dispose(); @@ -62,11 +62,11 @@ export class LineNumbersOverlay extends DynamicViewOverlay { // --- begin event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { this._readConfig(); return true; } - public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { + public override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { const primaryViewPosition = e.selections[0].getPosition(); this._lastCursorModelPosition = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(primaryViewPosition); @@ -80,22 +80,22 @@ export class LineNumbersOverlay extends DynamicViewOverlay { } return shouldRender; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + public override onFlushed(e: viewEvents.ViewFlushedEvent): boolean { return true; } - public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { + public override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { return true; } - public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { + public override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { return true; } - public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { + public override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return e.scrollTopChanged; } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { return true; } diff --git a/src/vs/editor/browser/viewParts/lines/viewLine.ts b/src/vs/editor/browser/viewParts/lines/viewLine.ts index 0c73f13abed..edec7f7a041 100644 --- a/src/vs/editor/browser/viewParts/lines/viewLine.ts +++ b/src/vs/editor/browser/viewParts/lines/viewLine.ts @@ -662,7 +662,7 @@ class RenderedViewLine implements IRenderedViewLine { } class WebKitRenderedViewLine extends RenderedViewLine { - protected _readVisibleRangesForRange(domNode: FastDomNode, startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] | null { + protected override _readVisibleRangesForRange(domNode: FastDomNode, startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] | null { const output = super._readVisibleRangesForRange(domNode, startColumn, endColumn, context); if (!output || output.length === 0 || startColumn === endColumn || (startColumn === 1 && endColumn === this._characterMapping.length)) { diff --git a/src/vs/editor/browser/viewParts/lines/viewLines.ts b/src/vs/editor/browser/viewParts/lines/viewLines.ts index 6e92c558e11..8d9601ff720 100644 --- a/src/vs/editor/browser/viewParts/lines/viewLines.ts +++ b/src/vs/editor/browser/viewParts/lines/viewLines.ts @@ -152,7 +152,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost, this._horizontalRevealRequest = null; } - public dispose(): void { + public override dispose(): void { this._asyncUpdateLineWidths.dispose(); this._asyncCheckMonospaceFontAssumptions.dispose(); super.dispose(); @@ -172,7 +172,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost, // ---- begin view event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { this._visibleLines.onConfigurationChanged(e); if (e.hasChanged(EditorOption.wrappingInfo)) { this._maxLineWidth = 0; @@ -217,7 +217,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost, return false; } - public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { + public override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { const rendStartLineNumber = this._visibleLines.getStartLineNumber(); const rendEndLineNumber = this._visibleLines.getEndLineNumber(); let r = false; @@ -226,7 +226,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost, } return r; } - public onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { + public override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { if (true/*e.inlineDecorationsChanged*/) { const rendStartLineNumber = this._visibleLines.getStartLineNumber(); const rendEndLineNumber = this._visibleLines.getEndLineNumber(); @@ -236,21 +236,21 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost, } return true; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + public override onFlushed(e: viewEvents.ViewFlushedEvent): boolean { const shouldRender = this._visibleLines.onFlushed(e); this._maxLineWidth = 0; return shouldRender; } - public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { + public override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { return this._visibleLines.onLinesChanged(e); } - public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { + public override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { return this._visibleLines.onLinesDeleted(e); } - public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { + public override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { return this._visibleLines.onLinesInserted(e); } - public onRevealRangeRequest(e: viewEvents.ViewRevealRangeRequestEvent): boolean { + public override onRevealRangeRequest(e: viewEvents.ViewRevealRangeRequestEvent): boolean { // Using the future viewport here in order to handle multiple // incoming reveal range requests that might all desire to be animated const desiredScrollTop = this._computeScrollTopToRevealRange(this._context.viewLayout.getFutureViewport(), e.source, e.range, e.selections, e.verticalType); @@ -286,7 +286,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost, return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { if (this._horizontalRevealRequest && e.scrollLeftChanged) { // cancel any outstanding horizontal reveal request if someone else scrolls horizontally. this._horizontalRevealRequest = null; @@ -303,14 +303,14 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost, return this._visibleLines.onScrollChanged(e) || true; } - public onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean { + public override onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean { return this._visibleLines.onTokensChanged(e); } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { this._context.model.setMaxLineWidth(this._maxLineWidth); return this._visibleLines.onZonesChanged(e); } - public onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean { + public override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean { return this._onOptionsMaybeChanged(); } diff --git a/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts b/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts index 6e40faf77b4..bdc2eed9738 100644 --- a/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts +++ b/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts @@ -30,7 +30,7 @@ export class LinesDecorationsOverlay extends DedupOverlay { this._context.addEventHandler(this); } - public dispose(): void { + public override dispose(): void { this._context.removeEventHandler(this); this._renderResult = null; super.dispose(); @@ -38,32 +38,32 @@ export class LinesDecorationsOverlay extends DedupOverlay { // --- begin event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; const layoutInfo = options.get(EditorOption.layoutInfo); this._decorationsLeft = layoutInfo.decorationsLeft; this._decorationsWidth = layoutInfo.decorationsWidth; return true; } - public onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { + public override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { return true; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + public override onFlushed(e: viewEvents.ViewFlushedEvent): boolean { return true; } - public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { + public override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { return true; } - public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { + public override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { return true; } - public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { + public override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return e.scrollTopChanged; } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { return true; } diff --git a/src/vs/editor/browser/viewParts/margin/margin.ts b/src/vs/editor/browser/viewParts/margin/margin.ts index 8181e2f8aa8..11ba874cbff 100644 --- a/src/vs/editor/browser/viewParts/margin/margin.ts +++ b/src/vs/editor/browser/viewParts/margin/margin.ts @@ -45,7 +45,7 @@ export class Margin extends ViewPart { this._domNode.appendChild(this._glyphMarginBackgroundDomNode); } - public dispose(): void { + public override dispose(): void { super.dispose(); } @@ -55,7 +55,7 @@ export class Margin extends ViewPart { // --- begin event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; const layoutInfo = options.get(EditorOption.layoutInfo); @@ -66,7 +66,7 @@ export class Margin extends ViewPart { return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return super.onScrollChanged(e) || e.scrollTopChanged; } diff --git a/src/vs/editor/browser/viewParts/marginDecorations/marginDecorations.ts b/src/vs/editor/browser/viewParts/marginDecorations/marginDecorations.ts index 7f5d18d8621..89a154d5dcd 100644 --- a/src/vs/editor/browser/viewParts/marginDecorations/marginDecorations.ts +++ b/src/vs/editor/browser/viewParts/marginDecorations/marginDecorations.ts @@ -20,7 +20,7 @@ export class MarginViewLineDecorationsOverlay extends DedupOverlay { this._context.addEventHandler(this); } - public dispose(): void { + public override dispose(): void { this._context.removeEventHandler(this); this._renderResult = null; super.dispose(); @@ -28,28 +28,28 @@ export class MarginViewLineDecorationsOverlay extends DedupOverlay { // --- begin event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { return true; } - public onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { + public override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { return true; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + public override onFlushed(e: viewEvents.ViewFlushedEvent): boolean { return true; } - public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { + public override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { return true; } - public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { + public override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { return true; } - public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { + public override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return e.scrollTopChanged; } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { return true; } diff --git a/src/vs/editor/browser/viewParts/minimap/minimap.ts b/src/vs/editor/browser/viewParts/minimap/minimap.ts index 348315fa9a8..0ea038e6b89 100644 --- a/src/vs/editor/browser/viewParts/minimap/minimap.ts +++ b/src/vs/editor/browser/viewParts/minimap/minimap.ts @@ -759,7 +759,7 @@ export class Minimap extends ViewPart implements IMinimapModel { this._actual = new InnerMinimap(context.theme, this); } - public dispose(): void { + public override dispose(): void { this._actual.dispose(); super.dispose(); } @@ -781,27 +781,27 @@ export class Minimap extends ViewPart implements IMinimapModel { // ---- begin view event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { return this._onOptionsMaybeChanged(); } - public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { + public override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { this._selections = e.selections; this._minimapSelections = null; return this._actual.onSelectionChanged(); } - public onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { + public override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { if (e.affectsMinimap) { return this._actual.onDecorationsChanged(); } return false; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + public override onFlushed(e: viewEvents.ViewFlushedEvent): boolean { if (this._samplingState) { this._shouldCheckSampling = true; } return this._actual.onFlushed(); } - public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { + public override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { if (this._samplingState) { const minimapLineRange = this._samplingState.modelLineRangeToMinimapLineRange(e.fromLineNumber, e.toLineNumber); if (minimapLineRange) { @@ -813,7 +813,7 @@ export class Minimap extends ViewPart implements IMinimapModel { return this._actual.onLinesChanged(e.fromLineNumber, e.toLineNumber); } } - public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { + public override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { if (this._samplingState) { const [changeStartIndex, changeEndIndex] = this._samplingState.onLinesDeleted(e); if (changeStartIndex <= changeEndIndex) { @@ -825,7 +825,7 @@ export class Minimap extends ViewPart implements IMinimapModel { return this._actual.onLinesDeleted(e.fromLineNumber, e.toLineNumber); } } - public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { + public override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { if (this._samplingState) { this._samplingState.onLinesInserted(e); this._shouldCheckSampling = true; @@ -834,16 +834,16 @@ export class Minimap extends ViewPart implements IMinimapModel { return this._actual.onLinesInserted(e.fromLineNumber, e.toLineNumber); } } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return this._actual.onScrollChanged(); } - public onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean { + public override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean { this._context.model.invalidateMinimapColorCache(); this._actual.onThemeChanged(); this._onOptionsMaybeChanged(); return true; } - public onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean { + public override onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean { if (this._samplingState) { let ranges: { fromLineNumber: number; toLineNumber: number; }[] = []; for (const range of e.ranges) { @@ -861,11 +861,11 @@ export class Minimap extends ViewPart implements IMinimapModel { return this._actual.onTokensChanged(e.ranges); } } - public onTokensColorsChanged(e: viewEvents.ViewTokensColorsChangedEvent): boolean { + public override onTokensColorsChanged(e: viewEvents.ViewTokensColorsChangedEvent): boolean { this._onOptionsMaybeChanged(); return this._actual.onTokensColorsChanged(); } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { return this._actual.onZonesChanged(); } @@ -1211,7 +1211,7 @@ class InnerMinimap extends Disposable { this._model.setScrollTop(scrollTop); } - public dispose(): void { + public override dispose(): void { this._mouseDownListener.dispose(); this._sliderMouseMoveMonitor.dispose(); this._sliderMouseDownListener.dispose(); diff --git a/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts b/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts index b51be8aaba8..ea3881e8a8a 100644 --- a/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts +++ b/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts @@ -52,7 +52,7 @@ export class ViewOverlayWidgets extends ViewPart { this._domNode.setClassName('overlayWidgets'); } - public dispose(): void { + public override dispose(): void { super.dispose(); this._widgets = {}; } @@ -63,7 +63,7 @@ export class ViewOverlayWidgets extends ViewPart { // ---- begin view event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; const layoutInfo = options.get(EditorOption.layoutInfo); diff --git a/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts b/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts index 287011babea..02cc65c127a 100644 --- a/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts +++ b/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts @@ -237,7 +237,7 @@ export class DecorationsOverviewRuler extends ViewPart { this._cursorPositions = []; } - public dispose(): void { + public override dispose(): void { super.dispose(); this._tokensColorTrackerListener.dispose(); } @@ -267,10 +267,10 @@ export class DecorationsOverviewRuler extends ViewPart { // ---- begin view event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { return this._updateSettings(false); } - public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { + public override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { this._cursorPositions = []; for (let i = 0, len = e.selections.length; i < len; i++) { this._cursorPositions[i] = e.selections[i].getPosition(); @@ -278,22 +278,22 @@ export class DecorationsOverviewRuler extends ViewPart { this._cursorPositions.sort(Position.compare); return true; } - public onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { + public override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { if (e.affectsOverviewRuler) { return true; } return false; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + public override onFlushed(e: viewEvents.ViewFlushedEvent): boolean { return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return e.scrollHeightChanged; } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { return true; } - public onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean { + public override onThemeChanged(e: viewEvents.ViewThemeChangedEvent): boolean { // invalidate color cache this._context.model.invalidateOverviewRulerColorCache(); return this._updateSettings(false); diff --git a/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts b/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts index b75ba0ae422..d13dc67d8ac 100644 --- a/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts +++ b/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts @@ -39,14 +39,14 @@ export class OverviewRuler extends ViewEventHandler implements IOverviewRuler { this._context.addEventHandler(this); } - public dispose(): void { + public override dispose(): void { this._context.removeEventHandler(this); super.dispose(); } // ---- begin view event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; if (e.hasChanged(EditorOption.lineHeight)) { @@ -65,18 +65,18 @@ export class OverviewRuler extends ViewEventHandler implements IOverviewRuler { return true; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + public override onFlushed(e: viewEvents.ViewFlushedEvent): boolean { this._render(); return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { if (e.scrollHeightChanged) { this._zoneManager.setOuterHeight(e.scrollHeight); this._render(); } return true; } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { this._render(); return true; } diff --git a/src/vs/editor/browser/viewParts/rulers/rulers.ts b/src/vs/editor/browser/viewParts/rulers/rulers.ts index 696e088de58..fef13c81a92 100644 --- a/src/vs/editor/browser/viewParts/rulers/rulers.ts +++ b/src/vs/editor/browser/viewParts/rulers/rulers.ts @@ -32,19 +32,19 @@ export class Rulers extends ViewPart { this._typicalHalfwidthCharacterWidth = options.get(EditorOption.fontInfo).typicalHalfwidthCharacterWidth; } - public dispose(): void { + public override dispose(): void { super.dispose(); } // --- begin event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; this._rulers = options.get(EditorOption.rulers); this._typicalHalfwidthCharacterWidth = options.get(EditorOption.fontInfo).typicalHalfwidthCharacterWidth; return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return e.scrollHeightChanged; } diff --git a/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts b/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts index 12e4df8b465..5e5d5b6d566 100644 --- a/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts +++ b/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts @@ -37,7 +37,7 @@ export class ScrollDecorationViewPart extends ViewPart { this._domNode.setAttribute('aria-hidden', 'true'); } - public dispose(): void { + public override dispose(): void { super.dispose(); } @@ -67,7 +67,7 @@ export class ScrollDecorationViewPart extends ViewPart { // --- begin event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; const scrollbar = options.get(EditorOption.scrollbar); this._useShadows = scrollbar.useShadows; @@ -75,7 +75,7 @@ export class ScrollDecorationViewPart extends ViewPart { this._updateShouldShow(); return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { this._scrollTop = e.scrollTop; return this._updateShouldShow(); } diff --git a/src/vs/editor/browser/viewParts/selections/selections.ts b/src/vs/editor/browser/viewParts/selections/selections.ts index 383f55a38c0..2ecb8afc50f 100644 --- a/src/vs/editor/browser/viewParts/selections/selections.ts +++ b/src/vs/editor/browser/viewParts/selections/selections.ts @@ -86,7 +86,7 @@ export class SelectionsOverlay extends DynamicViewOverlay { this._context.addEventHandler(this); } - public dispose(): void { + public override dispose(): void { this._context.removeEventHandler(this); this._renderResult = null; super.dispose(); @@ -94,37 +94,37 @@ export class SelectionsOverlay extends DynamicViewOverlay { // --- begin event handlers - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; this._lineHeight = options.get(EditorOption.lineHeight); this._roundedSelection = options.get(EditorOption.roundedSelection); this._typicalHalfwidthCharacterWidth = options.get(EditorOption.fontInfo).typicalHalfwidthCharacterWidth; return true; } - public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { + public override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { this._selections = e.selections.slice(0); return true; } - public onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { + public override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { // true for inline decorations that can end up relayouting text return true;//e.inlineDecorationsChanged; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + public override onFlushed(e: viewEvents.ViewFlushedEvent): boolean { return true; } - public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { + public override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { return true; } - public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { + public override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { return true; } - public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { + public override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return e.scrollTopChanged; } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { return true; } diff --git a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts index ec5077ea0c7..7454608e4f4 100644 --- a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts +++ b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts @@ -74,7 +74,7 @@ export class ViewCursors extends ViewPart { this._updateBlinking(); } - public dispose(): void { + public override dispose(): void { super.dispose(); this._startCursorBlinkAnimation.dispose(); this._cursorFlatBlinkInterval.dispose(); @@ -85,17 +85,17 @@ export class ViewCursors extends ViewPart { } // --- begin event handlers - public onCompositionStart(e: viewEvents.ViewCompositionStartEvent): boolean { + public override onCompositionStart(e: viewEvents.ViewCompositionStartEvent): boolean { this._isComposingInput = true; this._updateBlinking(); return true; } - public onCompositionEnd(e: viewEvents.ViewCompositionEndEvent): boolean { + public override onCompositionEnd(e: viewEvents.ViewCompositionEndEvent): boolean { this._isComposingInput = false; this._updateBlinking(); return true; } - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; this._readOnly = options.get(EditorOption.readOnly); @@ -138,7 +138,7 @@ export class ViewCursors extends ViewPart { } } - public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { + public override onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { const positions: Position[] = []; for (let i = 0, len = e.selections.length; i < len; i++) { positions[i] = e.selections[i].getPosition(); @@ -154,31 +154,31 @@ export class ViewCursors extends ViewPart { return true; } - public onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { + public override onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { // true for inline decorations that can end up relayouting text return true; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + public override onFlushed(e: viewEvents.ViewFlushedEvent): boolean { return true; } - public onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean { + public override onFocusChanged(e: viewEvents.ViewFocusChangedEvent): boolean { this._editorHasFocus = e.isFocused; this._updateBlinking(); return false; } - public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { + public override onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { return true; } - public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { + public override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { return true; } - public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { + public override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return true; } - public onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean { + public override onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean { const shouldRender = (position: Position) => { for (let i = 0, len = e.ranges.length; i < len; i++) { if (e.ranges[i].fromLineNumber <= position.lineNumber && position.lineNumber <= e.ranges[i].toLineNumber) { @@ -197,7 +197,7 @@ export class ViewCursors extends ViewPart { } return false; } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { return true; } diff --git a/src/vs/editor/browser/viewParts/viewZones/viewZones.ts b/src/vs/editor/browser/viewParts/viewZones/viewZones.ts index a73026a3f9b..7d6ae188521 100644 --- a/src/vs/editor/browser/viewParts/viewZones/viewZones.ts +++ b/src/vs/editor/browser/viewParts/viewZones/viewZones.ts @@ -66,7 +66,7 @@ export class ViewZones extends ViewPart { this._zones = {}; } - public dispose(): void { + public override dispose(): void { super.dispose(); this._zones = {}; } @@ -97,7 +97,7 @@ export class ViewZones extends ViewPart { return hadAChange; } - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + public override onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; const layoutInfo = options.get(EditorOption.layoutInfo); @@ -112,23 +112,23 @@ export class ViewZones extends ViewPart { return true; } - public onLineMappingChanged(e: viewEvents.ViewLineMappingChangedEvent): boolean { + public override onLineMappingChanged(e: viewEvents.ViewLineMappingChangedEvent): boolean { return this._recomputeWhitespacesProps(); } - public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { + public override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { + public override onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { return e.scrollTopChanged || e.scrollWidthChanged; } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + public override onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { return true; } - public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { + public override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { return true; } diff --git a/src/vs/editor/browser/widget/codeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditorWidget.ts index 244447104d6..9d89b72db24 100644 --- a/src/vs/editor/browser/widget/codeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditorWidget.ts @@ -346,7 +346,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE return editorCommon.EditorType.ICodeEditor; } - public dispose(): void { + public override dispose(): void { this._codeEditorService.removeCodeEditor(this); this._focusTracker.dispose(); @@ -1906,7 +1906,7 @@ export class EditorModeContext extends Disposable { update(); } - dispose() { + override dispose() { super.dispose(); } diff --git a/src/vs/editor/browser/widget/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditorWidget.ts index 6256e77b6ec..19170cfe828 100644 --- a/src/vs/editor/browser/widget/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditorWidget.ts @@ -619,7 +619,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE return instantiationService.createInstance(CodeEditorWidget, container, options, editorWidgetOptions); } - public dispose(): void { + public override dispose(): void { this._codeEditorService.removeDiffEditor(this); if (this._beginUpdateDecorationsTimeout !== -1) { @@ -2239,7 +2239,7 @@ class InlineViewZonesComputer extends ViewZonesComputer { this._lineBreaksComputer = this._modifiedEditor._getViewModel()!.createLineBreaksComputer(); } - public getViewZones(): IEditorsZones { + public override getViewZones(): IEditorsZones { const result = super.getViewZones(); this._finalize(result); return result; diff --git a/src/vs/editor/browser/widget/diffNavigator.ts b/src/vs/editor/browser/widget/diffNavigator.ts index f341549a1dc..a69b401c677 100644 --- a/src/vs/editor/browser/widget/diffNavigator.ts +++ b/src/vs/editor/browser/widget/diffNavigator.ts @@ -221,7 +221,7 @@ export class DiffNavigator extends Disposable implements IDiffNavigator { this._move(false, scrollType); } - dispose(): void { + override dispose(): void { super.dispose(); this.ranges = []; this.disposed = true; diff --git a/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts b/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts index 3836a4ec057..911e593563a 100644 --- a/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts +++ b/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts @@ -57,7 +57,7 @@ export class EmbeddedCodeEditorWidget extends CodeEditorWidget { super.updateOptions(this._overwriteOptions); } - updateOptions(newOptions: IEditorOptions): void { + override updateOptions(newOptions: IEditorOptions): void { objects.mixin(this._overwriteOptions, newOptions, true); super.updateOptions(this._overwriteOptions); } @@ -102,7 +102,7 @@ export class EmbeddedDiffEditorWidget extends DiffEditorWidget { super.updateOptions(this._overwriteOptions); } - updateOptions(newOptions: IEditorOptions): void { + override updateOptions(newOptions: IEditorOptions): void { objects.mixin(this._overwriteOptions, newOptions, true); super.updateOptions(this._overwriteOptions); } diff --git a/src/vs/editor/common/config/editorOptions.ts b/src/vs/editor/common/config/editorOptions.ts index 73ff201a517..6ebd6492b19 100644 --- a/src/vs/editor/common/config/editorOptions.ts +++ b/src/vs/editor/common/config/editorOptions.ts @@ -906,7 +906,7 @@ class EditorBooleanOption extends SimpleEditorOption extends SimpleEditorOption extends SimpleEditorOption extends SimpleEditorOption extends this._allowedValues = allowedValues; } - public validate(input: any): V { + public override validate(input: any): V { return stringSet(input, this.defaultValue, this._allowedValues); } } @@ -1112,7 +1112,7 @@ class EditorAccessibilitySupport extends BaseEditorOption { ); } - public validate(input: any): number { + public override validate(input: any): number { let r = EditorFloatOption.float(input, this.defaultValue); if (r === 0) { return EDITOR_FONT_DEFAULTS.fontSize; } return EditorFloatOption.clamp(r, 6, 100); } - public compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, value: number): number { + public override compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, value: number): number { // The final fontSize respects the editor zoom level. // So take the result from env.fontInfo return env.fontInfo.fontSize; @@ -2470,7 +2470,7 @@ class EditorLineHeight extends EditorIntOption { ); } - public compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, value: number): number { + public override compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, value: number): number { // The lineHeight is computed from the fontSize if it is 0. // Moreover, the final lineHeight respects the editor zoom level. // So take the result from env.fontInfo @@ -2766,7 +2766,7 @@ export type ValidQuickSuggestionsOptions = boolean | Readonly { - public readonly defaultValue: Readonly>; + public override readonly defaultValue: Readonly>; constructor() { const defaults: ValidQuickSuggestionsOptions = { diff --git a/src/vs/editor/common/controller/cursor.ts b/src/vs/editor/common/controller/cursor.ts index 36c9691b295..41f2a9b17d4 100644 --- a/src/vs/editor/common/controller/cursor.ts +++ b/src/vs/editor/common/controller/cursor.ts @@ -156,7 +156,7 @@ export class Cursor extends Disposable { this._prevEditOperationType = EditOperationType.Other; } - public dispose(): void { + public override dispose(): void { this._cursors.dispose(); this._autoClosedActions = dispose(this._autoClosedActions); super.dispose(); diff --git a/src/vs/editor/common/controller/cursorTypeOperations.ts b/src/vs/editor/common/controller/cursorTypeOperations.ts index ff4c4c567ef..4acc0ae72be 100644 --- a/src/vs/editor/common/controller/cursorTypeOperations.ts +++ b/src/vs/editor/common/controller/cursorTypeOperations.ts @@ -957,7 +957,7 @@ export class TypeWithAutoClosingCommand extends ReplaceCommandWithOffsetCursorSt this.enclosingRange = null; } - public computeCursorState(model: ITextModel, helper: ICursorStateComputerData): Selection { + public override computeCursorState(model: ITextModel, helper: ICursorStateComputerData): Selection { let inverseEditOperations = helper.getInverseEditOperations(); let range = inverseEditOperations[0].range; this.closeCharacterRange = new Range(range.startLineNumber, range.endColumn - this._closeCharacter.length, range.endLineNumber, range.endColumn); diff --git a/src/vs/editor/common/core/selection.ts b/src/vs/editor/common/core/selection.ts index 8f192adcb93..37ec04cd12d 100644 --- a/src/vs/editor/common/core/selection.ts +++ b/src/vs/editor/common/core/selection.ts @@ -76,7 +76,7 @@ export class Selection extends Range { /** * Transform to a human-readable representation. */ - public toString(): string { + public override toString(): string { return '[' + this.selectionStartLineNumber + ',' + this.selectionStartColumn + ' -> ' + this.positionLineNumber + ',' + this.positionColumn + ']'; } @@ -114,7 +114,7 @@ export class Selection extends Range { /** * Create a new selection with a different `positionLineNumber` and `positionColumn`. */ - public setEndPosition(endLineNumber: number, endColumn: number): Selection { + public override setEndPosition(endLineNumber: number, endColumn: number): Selection { if (this.getDirection() === SelectionDirection.LTR) { return new Selection(this.startLineNumber, this.startColumn, endLineNumber, endColumn); } @@ -131,7 +131,7 @@ export class Selection extends Range { /** * Create a new selection with a different `selectionStartLineNumber` and `selectionStartColumn`. */ - public setStartPosition(startLineNumber: number, startColumn: number): Selection { + public override setStartPosition(startLineNumber: number, startColumn: number): Selection { if (this.getDirection() === SelectionDirection.LTR) { return new Selection(startLineNumber, startColumn, this.endLineNumber, this.endColumn); } diff --git a/src/vs/editor/common/model/textModel.ts b/src/vs/editor/common/model/textModel.ts index 6e01f85c7c5..5abb19f3ce0 100644 --- a/src/vs/editor/common/model/textModel.ts +++ b/src/vs/editor/common/model/textModel.ts @@ -384,7 +384,7 @@ export class TextModel extends Disposable implements model.ITextModel { this._tokenization = new TextModelTokenization(this); } - public dispose(): void { + public override dispose(): void { this._isDisposing = true; this._onWillDispose.fire(); this._languageRegistryListener.dispose(); diff --git a/src/vs/editor/common/model/textModelTokens.ts b/src/vs/editor/common/model/textModelTokens.ts index 3cf7bc9a292..5696219cc4a 100644 --- a/src/vs/editor/common/model/textModelTokens.ts +++ b/src/vs/editor/common/model/textModelTokens.ts @@ -246,7 +246,7 @@ export class TextModelTokenization extends Disposable { this._resetTokenizationState(); } - public dispose(): void { + public override dispose(): void { this._isDisposed = true; super.dispose(); } diff --git a/src/vs/editor/common/services/editorWorkerServiceImpl.ts b/src/vs/editor/common/services/editorWorkerServiceImpl.ts index dc6a0f706a6..2763dd1280d 100644 --- a/src/vs/editor/common/services/editorWorkerServiceImpl.ts +++ b/src/vs/editor/common/services/editorWorkerServiceImpl.ts @@ -77,7 +77,7 @@ export class EditorWorkerServiceImpl extends Disposable implements IEditorWorker this._register(modes.CompletionProviderRegistry.register('*', new WordBasedCompletionItemProvider(this._workerManager, configurationService, this._modelService))); } - public dispose(): void { + public override dispose(): void { super.dispose(); } @@ -225,7 +225,7 @@ class WorkerManager extends Disposable { this._register(this._modelService.onModelRemoved(_ => this._checkStopEmptyWorker())); } - public dispose(): void { + public override dispose(): void { if (this._editorWorkerClient) { this._editorWorkerClient.dispose(); this._editorWorkerClient = null; @@ -292,7 +292,7 @@ class EditorModelManager extends Disposable { } } - public dispose(): void { + public override dispose(): void { for (let modelUrl in this._syncedModels) { dispose(this._syncedModels[modelUrl]); } @@ -523,7 +523,7 @@ export class EditorWorkerClient extends Disposable { }); } - dispose(): void { + override dispose(): void { super.dispose(); this._disposed = true; } diff --git a/src/vs/editor/common/services/markerDecorationsServiceImpl.ts b/src/vs/editor/common/services/markerDecorationsServiceImpl.ts index a80302ddbcc..939470195c9 100644 --- a/src/vs/editor/common/services/markerDecorationsServiceImpl.ts +++ b/src/vs/editor/common/services/markerDecorationsServiceImpl.ts @@ -81,7 +81,7 @@ export class MarkerDecorationsService extends Disposable implements IMarkerDecor this._register(this._markerService.onMarkerChanged(this._handleMarkerChange, this)); } - dispose() { + override dispose() { super.dispose(); this._markerDecorations.forEach(value => value.dispose()); this._markerDecorations.clear(); diff --git a/src/vs/editor/common/services/modelServiceImpl.ts b/src/vs/editor/common/services/modelServiceImpl.ts index af7000ffd9c..3357e282ea1 100644 --- a/src/vs/editor/common/services/modelServiceImpl.ts +++ b/src/vs/editor/common/services/modelServiceImpl.ts @@ -774,7 +774,7 @@ export class ModelSemanticColoring extends Disposable { this._fetchDocumentSemanticTokens.schedule(0); } - public dispose(): void { + public override dispose(): void { if (this._currentDocumentResponse) { this._currentDocumentResponse.dispose(); this._currentDocumentResponse = null; diff --git a/src/vs/editor/common/services/webWorker.ts b/src/vs/editor/common/services/webWorker.ts index 55dfe84af39..2e3e7e67148 100644 --- a/src/vs/editor/common/services/webWorker.ts +++ b/src/vs/editor/common/services/webWorker.ts @@ -76,7 +76,7 @@ class MonacoWebWorkerImpl extends EditorWorkerClient implements MonacoWebWork } // foreign host request - public fhr(method: string, args: any[]): Promise { + public override fhr(method: string, args: any[]): Promise { if (!this._foreignModuleHost || typeof this._foreignModuleHost[method] !== 'function') { return Promise.reject(new Error('Missing method ' + method + ' or missing main thread foreign host.')); } diff --git a/src/vs/editor/common/viewLayout/viewLayout.ts b/src/vs/editor/common/viewLayout/viewLayout.ts index 9d5583ee0da..2f9d18b13ba 100644 --- a/src/vs/editor/common/viewLayout/viewLayout.ts +++ b/src/vs/editor/common/viewLayout/viewLayout.ts @@ -178,7 +178,7 @@ export class ViewLayout extends Disposable implements IViewLayout { this._updateHeight(); } - public dispose(): void { + public override dispose(): void { super.dispose(); } diff --git a/src/vs/editor/common/viewModel/monospaceLineBreaksComputer.ts b/src/vs/editor/common/viewModel/monospaceLineBreaksComputer.ts index 9640d007634..57370e069f7 100644 --- a/src/vs/editor/common/viewModel/monospaceLineBreaksComputer.ts +++ b/src/vs/editor/common/viewModel/monospaceLineBreaksComputer.ts @@ -32,7 +32,7 @@ class WrappingCharacterClassifier extends CharacterClassifier { } } - public get(charCode: number): CharacterClass { + public override get(charCode: number): CharacterClass { if (charCode >= 0 && charCode < 256) { return this._asciiMap[charCode]; } else { diff --git a/src/vs/editor/common/viewModel/viewModelImpl.ts b/src/vs/editor/common/viewModel/viewModelImpl.ts index 82dc9853efb..eb7353176b5 100644 --- a/src/vs/editor/common/viewModel/viewModelImpl.ts +++ b/src/vs/editor/common/viewModel/viewModelImpl.ts @@ -142,7 +142,7 @@ export class ViewModel extends Disposable implements IViewModel { this._updateConfigurationViewLineCountNow(); } - public dispose(): void { + public override dispose(): void { // First remove listeners, as disposing the lines might end up sending // model decoration changed events ... and we no longer care about them ... super.dispose(); diff --git a/src/vs/editor/contrib/codeAction/codeActionModel.ts b/src/vs/editor/contrib/codeAction/codeActionModel.ts index d6e380ddc78..9f230ac4da9 100644 --- a/src/vs/editor/contrib/codeAction/codeActionModel.ts +++ b/src/vs/editor/contrib/codeAction/codeActionModel.ts @@ -207,7 +207,7 @@ export class CodeActionModel extends Disposable { this._update(); } - dispose(): void { + override dispose(): void { if (this.#isDisposed) { return; } diff --git a/src/vs/editor/contrib/codeAction/codeActionUi.ts b/src/vs/editor/contrib/codeAction/codeActionUi.ts index 099789d9504..7a7abf66191 100644 --- a/src/vs/editor/contrib/codeAction/codeActionUi.ts +++ b/src/vs/editor/contrib/codeAction/codeActionUi.ts @@ -52,7 +52,7 @@ export class CodeActionUi extends Disposable { }); } - dispose() { + override dispose() { this.#disposed = true; super.dispose(); } diff --git a/src/vs/editor/contrib/codeAction/lightBulbWidget.ts b/src/vs/editor/contrib/codeAction/lightBulbWidget.ts index 8eac58026d9..7c0fedd446f 100644 --- a/src/vs/editor/contrib/codeAction/lightBulbWidget.ts +++ b/src/vs/editor/contrib/codeAction/lightBulbWidget.ts @@ -126,7 +126,7 @@ export class LightBulbWidget extends Disposable implements IContentWidget { this._register(this._keybindingService.onDidUpdateKeybindings(this._updateLightBulbTitleAndIcon, this)); } - dispose(): void { + override dispose(): void { super.dispose(); this._editor.removeContentWidget(this); } diff --git a/src/vs/editor/contrib/colorPicker/colorContributions.ts b/src/vs/editor/contrib/colorPicker/colorContributions.ts index 90f91a846c1..d7eefbf410f 100644 --- a/src/vs/editor/contrib/colorPicker/colorContributions.ts +++ b/src/vs/editor/contrib/colorPicker/colorContributions.ts @@ -26,7 +26,7 @@ export class ColorContribution extends Disposable implements IEditorContribution this._register(_editor.onMouseDown((e) => this.onMouseDown(e))); } - dispose(): void { + override dispose(): void { super.dispose(); } diff --git a/src/vs/editor/contrib/colorPicker/colorDetector.ts b/src/vs/editor/contrib/colorPicker/colorDetector.ts index ccd09304a0e..4579e3c2daf 100644 --- a/src/vs/editor/contrib/colorPicker/colorDetector.ts +++ b/src/vs/editor/contrib/colorPicker/colorDetector.ts @@ -92,7 +92,7 @@ export class ColorDetector extends Disposable implements IEditorContribution { return editor.getContribution(this.ID); } - dispose(): void { + override dispose(): void { this.stop(); this.removeAllDecorations(); super.dispose(); diff --git a/src/vs/editor/contrib/dnd/dnd.ts b/src/vs/editor/contrib/dnd/dnd.ts index d535bb90696..1f15af6828a 100644 --- a/src/vs/editor/contrib/dnd/dnd.ts +++ b/src/vs/editor/contrib/dnd/dnd.ts @@ -232,7 +232,7 @@ export class DragAndDropController extends Disposable implements IEditorContribu target.type === MouseTargetType.GUTTER_LINE_DECORATIONS; } - public dispose(): void { + public override dispose(): void { this._removeDecoration(); this._dragSelection = null; this._mouseDown = false; diff --git a/src/vs/editor/contrib/find/findController.ts b/src/vs/editor/contrib/find/findController.ts index 8d4e6649a23..4da47b56237 100644 --- a/src/vs/editor/contrib/find/findController.ts +++ b/src/vs/editor/contrib/find/findController.ts @@ -139,7 +139,7 @@ export class CommonFindController extends Disposable implements IEditorContribut })); } - public dispose(): void { + public override dispose(): void { this.disposeModel(); super.dispose(); } @@ -422,7 +422,7 @@ export class FindController extends CommonFindController implements IFindControl this._findOptionsWidget = null; } - protected async _start(opts: IFindStartOptions): Promise { + protected async override _start(opts: IFindStartOptions): Promise { if (!this._widget) { this._createFindWidget(); } @@ -459,7 +459,7 @@ export class FindController extends CommonFindController implements IFindControl } } - public highlightFindOptions(ignoreWhenVisible: boolean = false): void { + public override highlightFindOptions(ignoreWhenVisible: boolean = false): void { if (!this._widget) { this._createFindWidget(); } diff --git a/src/vs/editor/contrib/find/findOptionsWidget.ts b/src/vs/editor/contrib/find/findOptionsWidget.ts index 660eed85579..72b9bdf9f2d 100644 --- a/src/vs/editor/contrib/find/findOptionsWidget.ts +++ b/src/vs/editor/contrib/find/findOptionsWidget.ts @@ -128,7 +128,7 @@ export class FindOptionsWidget extends Widget implements IOverlayWidget { return ` (${kb.getLabel()})`; } - public dispose(): void { + public override dispose(): void { this._editor.removeOverlayWidget(this); super.dispose(); } diff --git a/src/vs/editor/contrib/find/test/findController.test.ts b/src/vs/editor/contrib/find/test/findController.test.ts index 9daca6b12da..6bf8752fe34 100644 --- a/src/vs/editor/contrib/find/test/findController.test.ts +++ b/src/vs/editor/contrib/find/test/findController.test.ts @@ -41,7 +41,7 @@ export class TestFindController extends CommonFindController { this.hasFocus = false; } - protected async _start(opts: IFindStartOptions): Promise { + protected async override _start(opts: IFindStartOptions): Promise { await super._start(opts); if (opts.shouldFocus !== FindStartFocusAction.NoFocusChange) { diff --git a/src/vs/editor/contrib/folding/folding.ts b/src/vs/editor/contrib/folding/folding.ts index 139348a448a..c6396a556db 100644 --- a/src/vs/editor/contrib/folding/folding.ts +++ b/src/vs/editor/contrib/folding/folding.ts @@ -475,7 +475,7 @@ abstract class FoldingAction extends EditorAction { abstract invoke(foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: T): void; - public runEditorCommand(accessor: ServicesAccessor, editor: ICodeEditor, args: T): void | Promise { + public override runEditorCommand(accessor: ServicesAccessor, editor: ICodeEditor, args: T): void | Promise { let foldingController = FoldingController.get(editor); if (!foldingController) { return; diff --git a/src/vs/editor/contrib/gotoError/gotoErrorWidget.ts b/src/vs/editor/contrib/gotoError/gotoErrorWidget.ts index 8096baa177b..5a78e184f6a 100644 --- a/src/vs/editor/contrib/gotoError/gotoErrorWidget.ts +++ b/src/vs/editor/contrib/gotoError/gotoErrorWidget.ts @@ -280,14 +280,14 @@ export class MarkerNavigationWidget extends PeekViewWidget { }); // style() will trigger _applyStyles } - protected _applyStyles(): void { + protected override _applyStyles(): void { if (this._parentContainer) { this._parentContainer.style.backgroundColor = this._backgroundColor ? this._backgroundColor.toString() : ''; } super._applyStyles(); } - dispose(): void { + override dispose(): void { this._callOnDispose.dispose(); super.dispose(); } @@ -296,7 +296,7 @@ export class MarkerNavigationWidget extends PeekViewWidget { this._parentContainer.focus(); } - protected _fillHead(container: HTMLElement): void { + protected override _fillHead(container: HTMLElement): void { super._fillHead(container); this._disposables.add(this._actionbarWidget!.actionRunner.onBeforeRun(e => this.editor.focus())); @@ -308,7 +308,7 @@ export class MarkerNavigationWidget extends PeekViewWidget { menu.dispose(); } - protected _fillTitleIcon(container: HTMLElement): void { + protected override _fillTitleIcon(container: HTMLElement): void { this._icon = dom.append(container, dom.$('')); } @@ -325,7 +325,7 @@ export class MarkerNavigationWidget extends PeekViewWidget { this._disposables.add(this._message); } - show(): void { + override show(): void { throw new Error('call showAtMarker'); } @@ -369,18 +369,18 @@ export class MarkerNavigationWidget extends PeekViewWidget { this._relayout(); } - protected _doLayoutBody(heightInPixel: number, widthInPixel: number): void { + protected override _doLayoutBody(heightInPixel: number, widthInPixel: number): void { super._doLayoutBody(heightInPixel, widthInPixel); this._heightInPixel = heightInPixel; this._message.layout(heightInPixel, widthInPixel); this._container.style.height = `${heightInPixel}px`; } - public _onWidth(widthInPixel: number): void { + public override _onWidth(widthInPixel: number): void { this._message.layout(this._heightInPixel, widthInPixel); } - protected _relayout(): void { + protected override _relayout(): void { super._relayout(this.computeRequiredHeight()); } diff --git a/src/vs/editor/contrib/gotoSymbol/goToCommands.ts b/src/vs/editor/contrib/gotoSymbol/goToCommands.ts index 83503350528..50ff4809f47 100644 --- a/src/vs/editor/contrib/gotoSymbol/goToCommands.ts +++ b/src/vs/editor/contrib/gotoSymbol/goToCommands.ts @@ -379,7 +379,7 @@ registerEditorAction(class GoToDeclarationAction extends DeclarationAction { }); } - protected _getNoResultFoundMessage(info: IWordAtPosition | null): string { + protected override _getNoResultFoundMessage(info: IWordAtPosition | null): string { return info && info.word ? nls.localize('decl.noResultWord', "No declaration found for '{0}'", info.word) : nls.localize('decl.generic.noResults', "No declaration found"); @@ -744,7 +744,7 @@ CommandsRegistry.registerCommand({ return editor.invokeWithinContext(accessor => { const command = new class extends GenericGoToLocationAction { - _getNoResultFoundMessage(info: IWordAtPosition | null) { + override _getNoResultFoundMessage(info: IWordAtPosition | null) { return noResultsMessage || super._getNoResultFoundMessage(info); } }({ diff --git a/src/vs/editor/contrib/gotoSymbol/peek/referencesWidget.ts b/src/vs/editor/contrib/gotoSymbol/peek/referencesWidget.ts index 09472b107c3..9f93856f7da 100644 --- a/src/vs/editor/contrib/gotoSymbol/peek/referencesWidget.ts +++ b/src/vs/editor/contrib/gotoSymbol/peek/referencesWidget.ts @@ -231,7 +231,7 @@ export class ReferenceWidget extends peekView.PeekViewWidget { this.create(); } - dispose(): void { + override dispose(): void { this.setModel(undefined); this._callOnDispose.dispose(); this._disposeOnNewModel.dispose(); @@ -254,7 +254,7 @@ export class ReferenceWidget extends peekView.PeekViewWidget { }); } - show(where: IRange) { + override show(where: IRange) { this.editor.revealRangeInCenterIfOutsideViewport(where, ScrollType.Smooth); super.show(where, this.layoutData.heightInLines || 18); } @@ -271,7 +271,7 @@ export class ReferenceWidget extends peekView.PeekViewWidget { return this._preview.hasTextFocus(); } - protected _onTitleClick(e: IMouseEvent): void { + protected override _onTitleClick(e: IMouseEvent): void { if (this._preview && this._preview.getModel()) { this._onDidSelectReference.fire({ element: this._getFocusedReference(), @@ -398,13 +398,13 @@ export class ReferenceWidget extends peekView.PeekViewWidget { dom.hide(this._treeContainer); } - protected _onWidth(width: number) { + protected override _onWidth(width: number) { if (this._dim) { this._doLayoutBody(this._dim.height, width); } } - protected _doLayoutBody(heightInPixel: number, widthInPixel: number): void { + protected override _doLayoutBody(heightInPixel: number, widthInPixel: number): void { super._doLayoutBody(heightInPixel, widthInPixel); this._dim = new dom.Dimension(widthInPixel, heightInPixel); this.layoutData.heightInLines = this._viewZone ? this._viewZone.heightInLines : this.layoutData.heightInLines; diff --git a/src/vs/editor/contrib/hover/hoverWidgets.ts b/src/vs/editor/contrib/hover/hoverWidgets.ts index ecc374f22b2..446be6a8b37 100644 --- a/src/vs/editor/contrib/hover/hoverWidgets.ts +++ b/src/vs/editor/contrib/hover/hoverWidgets.ts @@ -83,7 +83,7 @@ export class GlyphHoverWidget extends Widget implements IOverlayWidget { return null; } - public dispose(): void { + public override dispose(): void { this._editor.removeOverlayWidget(this); super.dispose(); } diff --git a/src/vs/editor/contrib/hover/modesContentHover.ts b/src/vs/editor/contrib/hover/modesContentHover.ts index 7b401019e06..ade944741b1 100644 --- a/src/vs/editor/contrib/hover/modesContentHover.ts +++ b/src/vs/editor/contrib/hover/modesContentHover.ts @@ -292,7 +292,7 @@ export class ModesContentHoverWidget extends Widget implements IContentWidget, I })); } - public dispose(): void { + public override dispose(): void { this._hoverOperation.cancel(); this._editor.removeContentWidget(this); super.dispose(); diff --git a/src/vs/editor/contrib/hover/modesGlyphHover.ts b/src/vs/editor/contrib/hover/modesGlyphHover.ts index 54d0c58c732..db0337c0652 100644 --- a/src/vs/editor/contrib/hover/modesGlyphHover.ts +++ b/src/vs/editor/contrib/hover/modesGlyphHover.ts @@ -117,7 +117,7 @@ export class ModesGlyphHoverWidget extends GlyphHoverWidget { } - public dispose(): void { + public override dispose(): void { this._hoverOperation.cancel(); super.dispose(); } @@ -147,7 +147,7 @@ export class ModesGlyphHoverWidget extends GlyphHoverWidget { this._hoverOperation.start(HoverStartMode.Delayed); } - public hide(): void { + public override hide(): void { this._lastLineNumber = -1; this._hoverOperation.cancel(); super.hide(); diff --git a/src/vs/editor/contrib/linkedEditing/linkedEditing.ts b/src/vs/editor/contrib/linkedEditing/linkedEditing.ts index 441460812f4..8a586c1b13a 100644 --- a/src/vs/editor/contrib/linkedEditing/linkedEditing.ts +++ b/src/vs/editor/contrib/linkedEditing/linkedEditing.ts @@ -230,7 +230,7 @@ export class LinkedEditingContribution extends Disposable implements IEditorCont } } - public dispose(): void { + public override dispose(): void { this.clearRanges(); super.dispose(); } @@ -378,7 +378,7 @@ export class LinkedEditingAction extends EditorAction { }); } - runCommand(accessor: ServicesAccessor, args: [URI, IPosition]): void | Promise { + override runCommand(accessor: ServicesAccessor, args: [URI, IPosition]): void | Promise { const editorService = accessor.get(ICodeEditorService); const [uri, pos] = Array.isArray(args) && args || [undefined, undefined]; diff --git a/src/vs/editor/contrib/multicursor/multicursor.ts b/src/vs/editor/contrib/multicursor/multicursor.ts index 250a689c71d..cfbd4b2d208 100644 --- a/src/vs/editor/contrib/multicursor/multicursor.ts +++ b/src/vs/editor/contrib/multicursor/multicursor.ts @@ -463,7 +463,7 @@ export class MultiCursorSelectionController extends Disposable implements IEdito this._session = null; } - public dispose(): void { + public override dispose(): void { this._endSession(); super.dispose(); } @@ -1060,7 +1060,7 @@ export class SelectionHighlighter extends Disposable implements IEditorContribut className: 'selectionHighlight', }); - public dispose(): void { + public override dispose(): void { this._setState(null); super.dispose(); } diff --git a/src/vs/editor/contrib/parameterHints/parameterHintsModel.ts b/src/vs/editor/contrib/parameterHints/parameterHintsModel.ts index 2c01d06321b..8c4d7d6fcb2 100644 --- a/src/vs/editor/contrib/parameterHints/parameterHintsModel.ts +++ b/src/vs/editor/contrib/parameterHints/parameterHintsModel.ts @@ -305,7 +305,7 @@ export class ParameterHintsModel extends Disposable { } } - dispose(): void { + override dispose(): void { this.cancel(true); super.dispose(); } diff --git a/src/vs/editor/contrib/peekView/peekView.ts b/src/vs/editor/contrib/peekView/peekView.ts index 91e8bc41b42..6dbcde25dac 100644 --- a/src/vs/editor/contrib/peekView/peekView.ts +++ b/src/vs/editor/contrib/peekView/peekView.ts @@ -124,7 +124,7 @@ export abstract class PeekViewWidget extends ZoneWidget { objects.mixin(this.options, defaultOptions, false); } - dispose(): void { + override dispose(): void { if (!this.disposed) { this.disposed = true; // prevent consumers who dispose on onDidClose from looping super.dispose(); @@ -132,7 +132,7 @@ export abstract class PeekViewWidget extends ZoneWidget { } } - style(styles: IPeekViewStyles): void { + override style(styles: IPeekViewStyles): void { let options = this.options; if (styles.headerBackgroundColor) { options.headerBackgroundColor = styles.headerBackgroundColor; @@ -146,7 +146,7 @@ export abstract class PeekViewWidget extends ZoneWidget { super.style(styles); } - protected _applyStyles(): void { + protected override _applyStyles(): void { super._applyStyles(); let options = this.options; if (this._headElement && options.headerBackgroundColor) { @@ -241,7 +241,7 @@ export abstract class PeekViewWidget extends ZoneWidget { protected abstract _fillBody(container: HTMLElement): void; - protected _doLayout(heightInPixel: number, widthInPixel: number): void { + protected override _doLayout(heightInPixel: number, widthInPixel: number): void { if (!this._isShowing && heightInPixel < 0) { // Looks like the view zone got folded away! diff --git a/src/vs/editor/contrib/rename/rename.ts b/src/vs/editor/contrib/rename/rename.ts index 415473087a8..3eafd33c8a0 100644 --- a/src/vs/editor/contrib/rename/rename.ts +++ b/src/vs/editor/contrib/rename/rename.ts @@ -281,7 +281,7 @@ export class RenameAction extends EditorAction { }); } - runCommand(accessor: ServicesAccessor, args: [URI, IPosition]): void | Promise { + override runCommand(accessor: ServicesAccessor, args: [URI, IPosition]): void | Promise { const editorService = accessor.get(ICodeEditorService); const [uri, pos] = Array.isArray(args) && args || [undefined, undefined]; diff --git a/src/vs/editor/contrib/snippet/snippetParser.ts b/src/vs/editor/contrib/snippet/snippetParser.ts index b6bd2eb37d3..8986345e970 100644 --- a/src/vs/editor/contrib/snippet/snippetParser.ts +++ b/src/vs/editor/contrib/snippet/snippetParser.ts @@ -200,13 +200,13 @@ export class Text extends Marker { constructor(public value: string) { super(); } - toString() { + override toString() { return this.value; } toTextmateString(): string { return Text.escape(this.value); } - len(): number { + override len(): number { return this.value.length; } clone(): Text { @@ -279,7 +279,7 @@ export class Choice extends Marker { readonly options: Text[] = []; - appendChild(marker: Marker): this { + override appendChild(marker: Marker): this { if (marker instanceof Text) { marker.parent = this; this.options.push(marker); @@ -287,7 +287,7 @@ export class Choice extends Marker { return this; } - toString() { + override toString() { return this.options[0].value; } @@ -297,7 +297,7 @@ export class Choice extends Marker { .join(','); } - len(): number { + override len(): number { return this.options[0].len(); } @@ -341,7 +341,7 @@ export class Transform extends Marker { return ret; } - toString(): string { + override toString(): string { return ''; } @@ -555,12 +555,12 @@ export class TextmateSnippet extends Marker { return this; } - appendChild(child: Marker) { + override appendChild(child: Marker) { this._placeholders = undefined; return super.appendChild(child); } - replace(child: Marker, others: Marker[]): void { + override replace(child: Marker, others: Marker[]): void { this._placeholders = undefined; return super.replace(child, others); } diff --git a/src/vs/editor/contrib/snippet/test/snippetVariables.test.ts b/src/vs/editor/contrib/snippet/test/snippetVariables.test.ts index dff2a64beff..e370cd9ed15 100644 --- a/src/vs/editor/contrib/snippet/test/snippetVariables.test.ts +++ b/src/vs/editor/contrib/snippet/test/snippetVariables.test.ts @@ -21,7 +21,7 @@ import { toWorkspaceFolders } from 'vs/platform/workspaces/common/workspaces'; suite('Snippet Variables Resolver', function () { const labelService = new class extends mock() { - getUriLabel(uri: URI) { + override getUriLabel(uri: URI) { return uri.fsPath; } }; @@ -92,7 +92,7 @@ suite('Snippet Variables Resolver', function () { test('Path delimiters in code snippet variables aren\'t specific to remote OS #76840', function () { const labelService = new class extends mock() { - getUriLabel(uri: URI) { + override getUriLabel(uri: URI) { return uri.fsPath.replace(/\/|\\/g, '|'); } }; @@ -349,7 +349,7 @@ suite('Snippet Variables Resolver', function () { // Mock a label service (only coded for file uris) const workspaceLabelService = ((rootPath: string): ILabelService => { const labelService = new class extends mock() { - getUriLabel(uri: URI, options: { relative?: boolean } = {}) { + override getUriLabel(uri: URI, options: { relative?: boolean } = {}) { const rootFsPath = URI.file(rootPath).fsPath + sep; const fsPath = uri.fsPath; if (options.relative && rootPath && fsPath.startsWith(rootFsPath)) { diff --git a/src/vs/editor/contrib/suggest/suggestMemory.ts b/src/vs/editor/contrib/suggest/suggestMemory.ts index dfb293635a2..639725c3742 100644 --- a/src/vs/editor/contrib/suggest/suggestMemory.ts +++ b/src/vs/editor/contrib/suggest/suggestMemory.ts @@ -90,7 +90,7 @@ export class LRUMemory extends Memory { }); } - select(model: ITextModel, pos: IPosition, items: CompletionItem[]): number { + override select(model: ITextModel, pos: IPosition, items: CompletionItem[]): number { if (items.length === 0) { return 0; @@ -166,7 +166,7 @@ export class PrefixMemory extends Memory { }); } - select(model: ITextModel, pos: IPosition, items: CompletionItem[]): number { + override select(model: ITextModel, pos: IPosition, items: CompletionItem[]): number { let { word } = model.getWordUntilPosition(pos); if (!word) { return super.select(model, pos, items); diff --git a/src/vs/editor/contrib/suggest/suggestWidgetStatus.ts b/src/vs/editor/contrib/suggest/suggestWidgetStatus.ts index 5739f38f198..ad7f97aee27 100644 --- a/src/vs/editor/contrib/suggest/suggestWidgetStatus.ts +++ b/src/vs/editor/contrib/suggest/suggestWidgetStatus.ts @@ -17,7 +17,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti class StatusBarViewItem extends MenuEntryActionViewItem { - updateLabel() { + override updateLabel() { const kb = this._keybindingService.lookupKeybinding(this._action.id); if (!kb) { return super.updateLabel(); diff --git a/src/vs/editor/contrib/suggest/test/suggestController.test.ts b/src/vs/editor/contrib/suggest/test/suggestController.test.ts index 11a7019886b..492e1cd391d 100644 --- a/src/vs/editor/contrib/suggest/test/suggestController.test.ts +++ b/src/vs/editor/contrib/suggest/test/suggestController.test.ts @@ -45,19 +45,19 @@ suite('SuggestController', function () { [IStorageService, new InMemoryStorageService()], [IKeybindingService, new MockKeybindingService()], [IEditorWorkerService, new class extends mock() { - computeWordRanges() { + override computeWordRanges() { return Promise.resolve({}); } }], [ISuggestMemoryService, new class extends mock() { - memorize(): void { } - select(): number { return 0; } + override memorize(): void { } + override select(): number { return 0; } }], [IMenuService, new class extends mock() { - createMenu() { + override createMenu() { return new class extends mock() { - onDidChange = Event.None; - dispose() { } + override onDidChange = Event.None; + override dispose() { } }; } }] diff --git a/src/vs/editor/contrib/suggest/test/suggestModel.test.ts b/src/vs/editor/contrib/suggest/test/suggestModel.test.ts index 6a4afa2d48b..a17fa48850b 100644 --- a/src/vs/editor/contrib/suggest/test/suggestModel.test.ts +++ b/src/vs/editor/contrib/suggest/test/suggestModel.test.ts @@ -194,12 +194,12 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { const oracle = new SuggestModel( editor, new class extends mock() { - computeWordRanges() { + override computeWordRanges() { return Promise.resolve({}); } }, new class extends mock() { - readText() { + override readText() { return Promise.resolve('CLIPPY'); } }, @@ -680,7 +680,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { return withOracle(async (sugget, editor) => { class TestCtrl extends SuggestController { - _insertSuggestion(item: ISelectedSuggestion, flags: number = 0) { + override _insertSuggestion(item: ISelectedSuggestion, flags: number = 0) { super._insertSuggestion(item, flags); } } diff --git a/src/vs/editor/contrib/suggest/test/wordDistance.test.ts b/src/vs/editor/contrib/suggest/test/wordDistance.test.ts index 05ccef17d53..c7f7cbf70c9 100644 --- a/src/vs/editor/contrib/suggest/test/wordDistance.test.ts +++ b/src/vs/editor/contrib/suggest/test/wordDistance.test.ts @@ -54,8 +54,8 @@ suite('suggest, word distance', function () { editor.setPosition({ lineNumber: 2, column: 2 }); let modelService = new class extends mock() { - onModelRemoved = Event.None; - getModel(uri: URI) { + override onModelRemoved = Event.None; + override getModel(uri: URI) { return uri.toString() === model.uri.toString() ? model : null; } }; @@ -74,7 +74,7 @@ suite('suggest, word distance', function () { }); model.onDidChangeContent(e => this._worker.acceptModelChanged(model.uri.toString(), e)); } - computeWordRanges(resource: URI, range: IRange): Promise<{ [word: string]: IRange[] } | null> { + override computeWordRanges(resource: URI, range: IRange): Promise<{ [word: string]: IRange[] } | null> { return this._worker.computeWordRanges(resource.toString(), range, DEFAULT_WORD_REGEXP.source, DEFAULT_WORD_REGEXP.flags); } }; diff --git a/src/vs/editor/contrib/wordHighlighter/wordHighlighter.ts b/src/vs/editor/contrib/wordHighlighter/wordHighlighter.ts index 35e8b64ab00..8e2d8a09078 100644 --- a/src/vs/editor/contrib/wordHighlighter/wordHighlighter.ts +++ b/src/vs/editor/contrib/wordHighlighter/wordHighlighter.ts @@ -140,7 +140,7 @@ class TextualOccurenceAtPositionRequest extends OccurenceAtPositionRequest { }); } - public isValid(model: ITextModel, selection: Selection, decorationIds: string[]): boolean { + public override isValid(model: ITextModel, selection: Selection, decorationIds: string[]): boolean { const currentSelectionIsEmpty = selection.isEmpty(); if (this._selectionIsEmpty !== currentSelectionIsEmpty) { return false; @@ -528,7 +528,7 @@ class WordHighlighterContribution extends Disposable implements IEditorContribut } } - public dispose(): void { + public override dispose(): void { if (this.wordHighlighter) { this.wordHighlighter.dispose(); this.wordHighlighter = null; diff --git a/src/vs/editor/contrib/wordOperations/wordOperations.ts b/src/vs/editor/contrib/wordOperations/wordOperations.ts index d617c47bc68..4dd26431815 100644 --- a/src/vs/editor/contrib/wordOperations/wordOperations.ts +++ b/src/vs/editor/contrib/wordOperations/wordOperations.ts @@ -187,7 +187,7 @@ export class CursorWordAccessibilityLeft extends WordLeftCommand { }); } - protected _move(_: WordCharacterClassifier, model: ITextModel, position: Position, wordNavigationType: WordNavigationType): Position { + protected override _move(_: WordCharacterClassifier, model: ITextModel, position: Position, wordNavigationType: WordNavigationType): Position { return super._move(getMapForWordSeparators(EditorOptions.wordSeparators.defaultValue), model, position, wordNavigationType); } } @@ -202,7 +202,7 @@ export class CursorWordAccessibilityLeftSelect extends WordLeftCommand { }); } - protected _move(_: WordCharacterClassifier, model: ITextModel, position: Position, wordNavigationType: WordNavigationType): Position { + protected override _move(_: WordCharacterClassifier, model: ITextModel, position: Position, wordNavigationType: WordNavigationType): Position { return super._move(getMapForWordSeparators(EditorOptions.wordSeparators.defaultValue), model, position, wordNavigationType); } } @@ -295,7 +295,7 @@ export class CursorWordAccessibilityRight extends WordRightCommand { }); } - protected _move(_: WordCharacterClassifier, model: ITextModel, position: Position, wordNavigationType: WordNavigationType): Position { + protected override _move(_: WordCharacterClassifier, model: ITextModel, position: Position, wordNavigationType: WordNavigationType): Position { return super._move(getMapForWordSeparators(EditorOptions.wordSeparators.defaultValue), model, position, wordNavigationType); } } @@ -310,7 +310,7 @@ export class CursorWordAccessibilityRightSelect extends WordRightCommand { }); } - protected _move(_: WordCharacterClassifier, model: ITextModel, position: Position, wordNavigationType: WordNavigationType): Position { + protected override _move(_: WordCharacterClassifier, model: ITextModel, position: Position, wordNavigationType: WordNavigationType): Position { return super._move(getMapForWordSeparators(EditorOptions.wordSeparators.defaultValue), model, position, wordNavigationType); } } diff --git a/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts b/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts index 9da4eb8dacb..cc247cbbd2b 100644 --- a/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts +++ b/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts @@ -177,7 +177,7 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget { this._editor.addOverlayWidget(this); } - public dispose(): void { + public override dispose(): void { this._editor.removeOverlayWidget(this); super.dispose(); } diff --git a/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts b/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts index e67d6364b57..39c480d0dd9 100644 --- a/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts +++ b/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts @@ -44,7 +44,7 @@ export class IPadShowKeyboard extends Disposable implements IEditorContribution } } - public dispose(): void { + public override dispose(): void { super.dispose(); if (this.widget) { this.widget.dispose(); @@ -77,7 +77,7 @@ class ShowKeyboardWidget extends Disposable implements IOverlayWidget { this.editor.addOverlayWidget(this); } - public dispose(): void { + public override dispose(): void { this.editor.removeOverlayWidget(this); super.dispose(); } diff --git a/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts b/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts index 88b54c86776..df5c80779c3 100644 --- a/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts +++ b/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts @@ -53,7 +53,7 @@ class InspectTokensController extends Disposable implements IEditorContribution this._register(this._editor.onKeyUp((e) => e.keyCode === KeyCode.Escape && this.stop())); } - public dispose(): void { + public override dispose(): void { this.stop(); super.dispose(); } @@ -171,7 +171,7 @@ class InspectTokensWidget extends Disposable implements IContentWidget { this._editor.addContentWidget(this); } - public dispose(): void { + public override dispose(): void { this._editor.removeContentWidget(this); super.dispose(); } diff --git a/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputServiceImpl.ts b/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputServiceImpl.ts index ae133a70df0..4c4bd06b51a 100644 --- a/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputServiceImpl.ts +++ b/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputServiceImpl.ts @@ -45,7 +45,7 @@ export class EditorScopedQuickInputServiceImpl extends QuickInputService { }; } - protected createController(): QuickInputController { + protected override createController(): QuickInputController { return super.createController(this.host); } } diff --git a/src/vs/editor/standalone/browser/standaloneCodeEditor.ts b/src/vs/editor/standalone/browser/standaloneCodeEditor.ts index f315ffb0ed1..89dff41d626 100644 --- a/src/vs/editor/standalone/browser/standaloneCodeEditor.ts +++ b/src/vs/editor/standalone/browser/standaloneCodeEditor.ts @@ -427,11 +427,11 @@ export class StandaloneEditor extends StandaloneCodeEditor implements IStandalon } } - public dispose(): void { + public override dispose(): void { super.dispose(); } - public updateOptions(newOptions: Readonly): void { + public override updateOptions(newOptions: Readonly): void { updateConfigurationService(this._configurationService, newOptions, false); if (typeof newOptions.theme === 'string') { this._standaloneThemeService.setTheme(newOptions.theme); @@ -442,14 +442,14 @@ export class StandaloneEditor extends StandaloneCodeEditor implements IStandalon super.updateOptions(newOptions); } - _attachModel(model: ITextModel | null): void { + override _attachModel(model: ITextModel | null): void { super._attachModel(model); if (this._modelData) { this._contextViewService.setContainer(this._modelData.view.domNode.domNode); } } - _postDetachModelCleanup(detachedModel: ITextModel): void { + override _postDetachModelCleanup(detachedModel: ITextModel): void { super._postDetachModelCleanup(detachedModel); if (detachedModel && this._ownsModel) { detachedModel.dispose(); @@ -503,11 +503,11 @@ export class StandaloneDiffEditor extends DiffEditorWidget implements IStandalon this._contextViewService.setContainer(this._containerDomElement); } - public dispose(): void { + public override dispose(): void { super.dispose(); } - public updateOptions(newOptions: Readonly): void { + public override updateOptions(newOptions: Readonly): void { updateConfigurationService(this._configurationService, newOptions, true); if (typeof newOptions.theme === 'string') { this._standaloneThemeService.setTheme(newOptions.theme); @@ -518,15 +518,15 @@ export class StandaloneDiffEditor extends DiffEditorWidget implements IStandalon super.updateOptions(newOptions); } - protected _createInnerEditor(instantiationService: IInstantiationService, container: HTMLElement, options: Readonly): CodeEditorWidget { + protected override _createInnerEditor(instantiationService: IInstantiationService, container: HTMLElement, options: Readonly): CodeEditorWidget { return instantiationService.createInstance(StandaloneCodeEditor, container, options); } - public getOriginalEditor(): IStandaloneCodeEditor { + public override getOriginalEditor(): IStandaloneCodeEditor { return super.getOriginalEditor(); } - public getModifiedEditor(): IStandaloneCodeEditor { + public override getModifiedEditor(): IStandaloneCodeEditor { return super.getModifiedEditor(); } diff --git a/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts b/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts index c4755792c8b..bacfb056976 100644 --- a/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts +++ b/src/vs/editor/standalone/test/browser/standaloneLanguages.test.ts @@ -25,7 +25,7 @@ suite('TokenizationSupport2Adapter', () => { constructor() { super(null!, null!); } - public match(languageId: LanguageId, token: string): number { + public override match(languageId: LanguageId, token: string): number { return ( ((this.counter++) << MetadataConsts.FOREGROUND_OFFSET) | (languageId << MetadataConsts.LANGUAGEID_OFFSET) diff --git a/src/vs/editor/test/browser/services/decorationRenderOptions.test.ts b/src/vs/editor/test/browser/services/decorationRenderOptions.test.ts index 8f0e568cc5f..55be31487ce 100644 --- a/src/vs/editor/test/browser/services/decorationRenderOptions.test.ts +++ b/src/vs/editor/test/browser/services/decorationRenderOptions.test.ts @@ -32,11 +32,11 @@ class TestGlobalStyleSheet extends GlobalStyleSheet { super(null!); } - public insertRule(rule: string, index?: number): void { + public override insertRule(rule: string, index?: number): void { this.rules.unshift(rule); } - public removeRulesContainingSelector(ruleName: string): void { + public override removeRulesContainingSelector(ruleName: string): void { for (let i = 0; i < this.rules.length; i++) { if (this.rules[i].indexOf(ruleName) >= 0) { this.rules.splice(i, 1); diff --git a/src/vs/editor/test/browser/testCodeEditor.ts b/src/vs/editor/test/browser/testCodeEditor.ts index 94741e65678..a516f3bed10 100644 --- a/src/vs/editor/test/browser/testCodeEditor.ts +++ b/src/vs/editor/test/browser/testCodeEditor.ts @@ -36,10 +36,10 @@ export interface ITestCodeEditor extends IActiveCodeEditor { export class TestCodeEditor extends CodeEditorWidget implements ICodeEditor { //#region testing overrides - protected _createConfiguration(options: Readonly): IConfiguration { + protected override _createConfiguration(options: Readonly): IConfiguration { return new TestConfiguration(options); } - protected _createView(viewModel: ViewModel): [View, boolean] { + protected override _createView(viewModel: ViewModel): [View, boolean] { // Never create a view return [null! as View, false]; } @@ -47,7 +47,7 @@ export class TestCodeEditor extends CodeEditorWidget implements ICodeEditor { public setHasTextFocus(hasTextFocus: boolean): void { this._hasTextFocus = hasTextFocus; } - public hasTextFocus(): boolean { + public override hasTextFocus(): boolean { return this._hasTextFocus; } //#endregion @@ -64,7 +64,7 @@ export class TestCodeEditor extends CodeEditorWidget implements ICodeEditor { } class TestCodeEditorWithAutoModelDisposal extends TestCodeEditor { - public dispose() { + public override dispose() { super.dispose(); if (this._modelData) { this._modelData.model.dispose(); diff --git a/src/vs/editor/test/common/config/commonEditorConfig.test.ts b/src/vs/editor/test/common/config/commonEditorConfig.test.ts index 1faca7a1767..465996a78a1 100644 --- a/src/vs/editor/test/common/config/commonEditorConfig.test.ts +++ b/src/vs/editor/test/common/config/commonEditorConfig.test.ts @@ -53,7 +53,7 @@ suite('Common Editor Config', () => { }); class TestWrappingConfiguration extends TestConfiguration { - protected _getEnvConfiguration(): IEnvConfiguration { + protected override _getEnvConfiguration(): IEnvConfiguration { return { extraEditorClassName: '', outerWidth: 1000, diff --git a/src/vs/editor/test/common/services/textResourceConfigurationService.test.ts b/src/vs/editor/test/common/services/textResourceConfigurationService.test.ts index a66a305526d..dff36f24346 100644 --- a/src/vs/editor/test/common/services/textResourceConfigurationService.test.ts +++ b/src/vs/editor/test/common/services/textResourceConfigurationService.test.ts @@ -18,10 +18,10 @@ suite('TextResourceConfigurationService - Update', () => { let configurationValue: IConfigurationValue = {}; let updateArgs: any[]; let configurationService = new class extends TestConfigurationService { - inspect() { + override inspect() { return configurationValue; } - updateValue() { + override updateValue() { updateArgs = [...arguments]; return Promise.resolve(); } diff --git a/src/vs/editor/test/common/viewModel/viewModelImpl.test.ts b/src/vs/editor/test/common/viewModel/viewModelImpl.test.ts index d556f3da7a5..0e9f99aba50 100644 --- a/src/vs/editor/test/common/viewModel/viewModelImpl.test.ts +++ b/src/vs/editor/test/common/viewModel/viewModelImpl.test.ts @@ -66,7 +66,7 @@ suite('ViewModel', () => { viewLineCount.push(viewModel.getLineCount()); viewModel.addViewEventHandler(new class extends ViewEventHandler { - handleEvents(events: ViewEvent[]): void { + override handleEvents(events: ViewEvent[]): void { // Access the view model viewLineCount.push(viewModel.getLineCount()); } diff --git a/src/vs/platform/actions/browser/menuEntryActionViewItem.ts b/src/vs/platform/actions/browser/menuEntryActionViewItem.ts index eed8299d735..19fe5f4821c 100644 --- a/src/vs/platform/actions/browser/menuEntryActionViewItem.ts +++ b/src/vs/platform/actions/browser/menuEntryActionViewItem.ts @@ -129,7 +129,7 @@ export class MenuEntryActionViewItem extends ActionViewItem { return this._wantsAltCommand && (this._action).alt || this._action; } - onClick(event: MouseEvent): void { + override onClick(event: MouseEvent): void { event.preventDefault(); event.stopPropagation(); @@ -138,7 +138,7 @@ export class MenuEntryActionViewItem extends ActionViewItem { .catch(err => this._notificationService.error(err)); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); container.classList.add('menu-entry'); @@ -176,13 +176,13 @@ export class MenuEntryActionViewItem extends ActionViewItem { })); } - updateLabel(): void { + override updateLabel(): void { if (this.options.label && this.label) { this.label.textContent = this._commandAction.label; } } - updateTooltip(): void { + override updateTooltip(): void { if (this.label) { const keybinding = this._keybindingService.lookupKeybinding(this._commandAction.id); const keybindingLabel = keybinding && keybinding.getLabel(); @@ -204,7 +204,7 @@ export class MenuEntryActionViewItem extends ActionViewItem { } } - updateClass(): void { + override updateClass(): void { if (this.options.icon) { if (this._commandAction !== this._action) { if (this._action.alt) { @@ -268,7 +268,7 @@ export class SubmenuEntryActionViewItem extends DropdownMenuActionViewItem { }); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); if (this.element) { container.classList.add('menu-entry'); diff --git a/src/vs/platform/actions/common/actions.ts b/src/vs/platform/actions/common/actions.ts index 972dbb84f9e..b6e6b834815 100644 --- a/src/vs/platform/actions/common/actions.ts +++ b/src/vs/platform/actions/common/actions.ts @@ -321,7 +321,7 @@ export class ExecuteCommandAction extends Action { super(id, label); } - run(...args: any[]): Promise { + override run(...args: any[]): Promise { return this._commandService.executeCommand(this.id, ...args); } } @@ -337,7 +337,7 @@ export class SubmenuItemAction extends SubmenuAction { super(`submenuitem.${item.submenu.id}`, typeof item.title === 'string' ? item.title : item.title.value, [], 'submenu'); } - get actions(): readonly IAction[] { + override get actions(): readonly IAction[] { const result: IAction[] = []; const menu = this._menuService.createMenu(this.item.submenu, this._contextKeyService); const groups = menu.getActions(this._options); diff --git a/src/vs/platform/actions/test/common/menuService.test.ts b/src/vs/platform/actions/test/common/menuService.test.ts index ee7369e0610..ca7d9eb31ad 100644 --- a/src/vs/platform/actions/test/common/menuService.test.ts +++ b/src/vs/platform/actions/test/common/menuService.test.ts @@ -13,7 +13,7 @@ import { MockContextKeyService } from 'vs/platform/keybinding/test/common/mockKe // --- service instances const contextKeyService = new class extends MockContextKeyService { - contextMatchesRules() { + override contextMatchesRules() { return true; } }; diff --git a/src/vs/platform/backup/test/electron-main/backupMainService.test.ts b/src/vs/platform/backup/test/electron-main/backupMainService.test.ts index 561f0069f5a..9968de89189 100644 --- a/src/vs/platform/backup/test/electron-main/backupMainService.test.ts +++ b/src/vs/platform/backup/test/electron-main/backupMainService.test.ts @@ -123,7 +123,7 @@ flakySuite('BackupMainService', () => { return path.join(this.backupHome, id); } - getFolderHash(folderUri: URI): string { + override getFolderHash(folderUri: URI): string { return super.getFolderHash(folderUri); } }; diff --git a/src/vs/platform/contextkey/browser/contextKeyService.ts b/src/vs/platform/contextkey/browser/contextKeyService.ts index e40016315b3..34cf6f57ddd 100644 --- a/src/vs/platform/contextkey/browser/contextKeyService.ts +++ b/src/vs/platform/contextkey/browser/contextKeyService.ts @@ -75,19 +75,19 @@ class NullContext extends Context { super(-1, null); } - public setValue(key: string, value: any): boolean { + public override setValue(key: string, value: any): boolean { return false; } - public removeValue(key: string): boolean { + public override removeValue(key: string): boolean { return false; } - public getValue(key: string): T | undefined { + public override getValue(key: string): T | undefined { return undefined; } - collectAllValues(): { [key: string]: any; } { + override collectAllValues(): { [key: string]: any; } { return Object.create(null); } } @@ -137,7 +137,7 @@ class ConfigAwareContextValuesContainer extends Context { this._listener.dispose(); } - getValue(key: string): any { + override getValue(key: string): any { if (key.indexOf(ConfigAwareContextValuesContainer._keyPrefix) !== 0) { return super.getValue(key); @@ -168,15 +168,15 @@ class ConfigAwareContextValuesContainer extends Context { return value; } - setValue(key: string, value: any): boolean { + override setValue(key: string, value: any): boolean { return super.setValue(key, value); } - removeValue(key: string): boolean { + override removeValue(key: string): boolean { return super.removeValue(key); } - collectAllValues(): { [key: string]: any; } { + override collectAllValues(): { [key: string]: any; } { const result: { [key: string]: any } = Object.create(null); this._values.forEach((value, index) => result[index] = value); return { ...result, ...super.collectAllValues() }; diff --git a/src/vs/platform/debug/electron-main/extensionHostDebugIpc.ts b/src/vs/platform/debug/electron-main/extensionHostDebugIpc.ts index 08ff2ccf628..c814220f558 100644 --- a/src/vs/platform/debug/electron-main/extensionHostDebugIpc.ts +++ b/src/vs/platform/debug/electron-main/extensionHostDebugIpc.ts @@ -16,7 +16,7 @@ export class ElectronExtensionHostDebugBroadcastChannel extends Extens super(); } - call(ctx: TContext, command: string, arg?: any): Promise { + override call(ctx: TContext, command: string, arg?: any): Promise { if (command === 'openExtensionDevelopmentHostWindow') { return this.openExtensionDevelopmentHostWindow(arg[0], arg[1], arg[2]); } else { diff --git a/src/vs/platform/extensionManagement/electron-sandbox/extensionTipsService.ts b/src/vs/platform/extensionManagement/electron-sandbox/extensionTipsService.ts index 51066d5bedd..0fbf6a632fe 100644 --- a/src/vs/platform/extensionManagement/electron-sandbox/extensionTipsService.ts +++ b/src/vs/platform/extensionManagement/electron-sandbox/extensionTipsService.ts @@ -40,7 +40,7 @@ const lastPromptedMediumImpExeTimeStorageKey = 'extensionTips/lastPromptedMedium export class ExtensionTipsService extends BaseExtensionTipsService { - _serviceBrand: any; + override _serviceBrand: any; private readonly highImportanceExecutableTips: Map = new Map(); private readonly mediumImportanceExecutableTips: Map = new Map(); @@ -101,13 +101,13 @@ export class ExtensionTipsService extends BaseExtensionTipsService { }); } - async getImportantExecutableBasedTips(): Promise { + async override getImportantExecutableBasedTips(): Promise { const highImportanceExeTips = await this.getValidExecutableBasedExtensionTips(this.highImportanceExecutableTips); const mediumImportanceExeTips = await this.getValidExecutableBasedExtensionTips(this.mediumImportanceExecutableTips); return [...highImportanceExeTips, ...mediumImportanceExeTips]; } - getOtherExecutableBasedTips(): Promise { + override getOtherExecutableBasedTips(): Promise { return this.getValidExecutableBasedExtensionTips(this.allOtherExecutableTips); } diff --git a/src/vs/platform/files/common/fileService.ts b/src/vs/platform/files/common/fileService.ts index 6bdbbe9cc5c..e1f24089f39 100644 --- a/src/vs/platform/files/common/fileService.ts +++ b/src/vs/platform/files/common/fileService.ts @@ -1000,7 +1000,7 @@ export class FileService extends Disposable implements IFileService { ].join(); } - dispose(): void { + override dispose(): void { super.dispose(); this.activeWatchers.forEach(watcher => dispose(watcher.disposable)); diff --git a/src/vs/platform/files/electron-browser/diskFileSystemProvider.ts b/src/vs/platform/files/electron-browser/diskFileSystemProvider.ts index a2db35c4e04..df5e06afc34 100644 --- a/src/vs/platform/files/electron-browser/diskFileSystemProvider.ts +++ b/src/vs/platform/files/electron-browser/diskFileSystemProvider.ts @@ -21,7 +21,7 @@ export class DiskFileSystemProvider extends NodeDiskFileSystemProvider { super(logService, options); } - get capabilities(): FileSystemProviderCapabilities { + override get capabilities(): FileSystemProviderCapabilities { if (!this._capabilities) { this._capabilities = super.capabilities | FileSystemProviderCapabilities.Trash; } @@ -29,7 +29,7 @@ export class DiskFileSystemProvider extends NodeDiskFileSystemProvider { return this._capabilities; } - protected async doDelete(filePath: string, opts: FileDeleteOptions): Promise { + protected async override doDelete(filePath: string, opts: FileDeleteOptions): Promise { if (!opts.useTrash) { return super.doDelete(filePath, opts); } diff --git a/src/vs/platform/files/node/diskFileSystemProvider.ts b/src/vs/platform/files/node/diskFileSystemProvider.ts index ce598c20387..ff111367d43 100644 --- a/src/vs/platform/files/node/diskFileSystemProvider.ts +++ b/src/vs/platform/files/node/diskFileSystemProvider.ts @@ -730,7 +730,7 @@ export class DiskFileSystemProvider extends Disposable implements //#endregion - dispose(): void { + override dispose(): void { super.dispose(); dispose(this.recursiveWatcher); diff --git a/src/vs/platform/files/node/watcher/nodejs/watcherService.ts b/src/vs/platform/files/node/watcher/nodejs/watcherService.ts index b645715d160..0d03d317fc0 100644 --- a/src/vs/platform/files/node/watcher/nodejs/watcherService.ts +++ b/src/vs/platform/files/node/watcher/nodejs/watcherService.ts @@ -124,7 +124,7 @@ export class FileWatcher extends Disposable { } } - dispose(): void { + override dispose(): void { this.isDisposed = true; super.dispose(); diff --git a/src/vs/platform/files/node/watcher/nsfw/watcherService.ts b/src/vs/platform/files/node/watcher/nsfw/watcherService.ts index 32dead9e7fd..eebfe67f502 100644 --- a/src/vs/platform/files/node/watcher/nsfw/watcherService.ts +++ b/src/vs/platform/files/node/watcher/nsfw/watcherService.ts @@ -91,7 +91,7 @@ export class FileWatcher extends Disposable { } } - dispose(): void { + override dispose(): void { this.isDisposed = true; super.dispose(); diff --git a/src/vs/platform/files/node/watcher/unix/watcherService.ts b/src/vs/platform/files/node/watcher/unix/watcherService.ts index 1ee26f965ee..da00c8a1658 100644 --- a/src/vs/platform/files/node/watcher/unix/watcherService.ts +++ b/src/vs/platform/files/node/watcher/unix/watcherService.ts @@ -92,7 +92,7 @@ export class FileWatcher extends Disposable { } } - dispose(): void { + override dispose(): void { this.isDisposed = true; super.dispose(); diff --git a/src/vs/platform/files/test/browser/fileService.test.ts b/src/vs/platform/files/test/browser/fileService.test.ts index ff4126f2aaa..7fa3f3fdb0f 100644 --- a/src/vs/platform/files/test/browser/fileService.test.ts +++ b/src/vs/platform/files/test/browser/fileService.test.ts @@ -141,7 +141,7 @@ suite('File Service', () => { const service = new FileService(new NullLogService()); const provider = new class extends NullFileSystemProvider { - async stat(resource: URI): Promise { + async override stat(resource: URI): Promise { return { mtime: Date.now(), ctime: Date.now(), @@ -150,7 +150,7 @@ suite('File Service', () => { }; } - readFile(resource: URI): Promise { + override readFile(resource: URI): Promise { if (async) { return timeout(5).then(() => { throw new Error('failed'); }); } @@ -158,7 +158,7 @@ suite('File Service', () => { throw new Error('failed'); } - open(resource: URI, opts: FileOpenOptions): Promise { + override open(resource: URI, opts: FileOpenOptions): Promise { if (async) { return timeout(5).then(() => { throw new Error('failed'); }); } diff --git a/src/vs/platform/files/test/electron-browser/diskFileService.test.ts b/src/vs/platform/files/test/electron-browser/diskFileService.test.ts index 58574258ee2..9b6c2cc4c0b 100644 --- a/src/vs/platform/files/test/electron-browser/diskFileService.test.ts +++ b/src/vs/platform/files/test/electron-browser/diskFileService.test.ts @@ -58,7 +58,7 @@ export class TestDiskFileSystemProvider extends DiskFileSystemProvider { private smallStatSize: boolean = false; private _testCapabilities!: FileSystemProviderCapabilities; - get capabilities(): FileSystemProviderCapabilities { + override get capabilities(): FileSystemProviderCapabilities { if (!this._testCapabilities) { this._testCapabilities = FileSystemProviderCapabilities.FileReadWrite | @@ -76,7 +76,7 @@ export class TestDiskFileSystemProvider extends DiskFileSystemProvider { return this._testCapabilities; } - set capabilities(capabilities: FileSystemProviderCapabilities) { + override set capabilities(capabilities: FileSystemProviderCapabilities) { this._testCapabilities = capabilities; } @@ -88,7 +88,7 @@ export class TestDiskFileSystemProvider extends DiskFileSystemProvider { this.smallStatSize = enabled; } - async stat(resource: URI): Promise { + async override stat(resource: URI): Promise { const res = await super.stat(resource); if (this.invalidStatSize) { @@ -100,7 +100,7 @@ export class TestDiskFileSystemProvider extends DiskFileSystemProvider { return res; } - async read(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { + async override read(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { const bytesRead = await super.read(fd, pos, data, offset, length); this.totalBytesRead += bytesRead; @@ -108,7 +108,7 @@ export class TestDiskFileSystemProvider extends DiskFileSystemProvider { return bytesRead; } - async readFile(resource: URI): Promise { + async override readFile(resource: URI): Promise { const res = await super.readFile(resource); this.totalBytesRead += res.byteLength; diff --git a/src/vs/platform/instantiation/common/instantiationService.ts b/src/vs/platform/instantiation/common/instantiationService.ts index 00f0cb9d95e..5e9af069237 100644 --- a/src/vs/platform/instantiation/common/instantiationService.ts +++ b/src/vs/platform/instantiation/common/instantiationService.ts @@ -267,8 +267,8 @@ class Trace { private static readonly _None = new class extends Trace { constructor() { super(-1, null); } - stop() { } - branch() { return this; } + override stop() { } + override branch() { return this; } }; static traceInvocation(ctor: any): Trace { diff --git a/src/vs/platform/keybinding/common/abstractKeybindingService.ts b/src/vs/platform/keybinding/common/abstractKeybindingService.ts index 23716ee9a1e..689431ec33e 100644 --- a/src/vs/platform/keybinding/common/abstractKeybindingService.ts +++ b/src/vs/platform/keybinding/common/abstractKeybindingService.ts @@ -61,7 +61,7 @@ export abstract class AbstractKeybindingService extends Disposable implements IK this._logging = false; } - public dispose(): void { + public override dispose(): void { super.dispose(); } diff --git a/src/vs/platform/keybinding/test/common/mockKeybindingService.ts b/src/vs/platform/keybinding/test/common/mockKeybindingService.ts index 2fe7bbabca9..4f022e9dddf 100644 --- a/src/vs/platform/keybinding/test/common/mockKeybindingService.ts +++ b/src/vs/platform/keybinding/test/common/mockKeybindingService.ts @@ -78,7 +78,7 @@ export class MockScopableContextKeyService extends MockContextKeyService { /** * Don't implement this for all tests since we rarely depend on this behavior and it isn't implemented fully */ - public createScoped(domNote: HTMLElement): IContextKeyService { + public override createScoped(domNote: HTMLElement): IContextKeyService { return new MockContextKeyService(); } } diff --git a/src/vs/platform/list/browser/listService.ts b/src/vs/platform/list/browser/listService.ts index d1b0fa73811..073308a7844 100644 --- a/src/vs/platform/list/browser/listService.ts +++ b/src/vs/platform/list/browser/listService.ts @@ -298,7 +298,7 @@ export class WorkbenchList extends List { this.disposables.add(this.navigator); } - updateOptions(options: IWorkbenchListOptionsUpdate): void { + override updateOptions(options: IWorkbenchListOptionsUpdate): void { super.updateOptions(options); if (options.overrideStyles) { @@ -315,7 +315,7 @@ export class WorkbenchList extends List { return this._useAltAsMultipleSelectionModifier; } - dispose(): void { + override dispose(): void { this._styler?.dispose(); super.dispose(); } @@ -410,7 +410,7 @@ export class WorkbenchPagedList extends PagedList { this.disposables.add(this.navigator); } - updateOptions(options: IWorkbenchListOptionsUpdate): void { + override updateOptions(options: IWorkbenchListOptionsUpdate): void { super.updateOptions(options); if (options.overrideStyles) { @@ -427,7 +427,7 @@ export class WorkbenchPagedList extends PagedList { return this._useAltAsMultipleSelectionModifier; } - dispose(): void { + override dispose(): void { this._styler?.dispose(); this.disposables.dispose(); super.dispose(); @@ -547,7 +547,7 @@ export class WorkbenchTable extends Table { this.disposables.add(this.navigator); } - updateOptions(options: IWorkbenchTableOptionsUpdate): void { + override updateOptions(options: IWorkbenchTableOptionsUpdate): void { super.updateOptions(options); if (options.overrideStyles) { @@ -564,7 +564,7 @@ export class WorkbenchTable extends Table { return this._useAltAsMultipleSelectionModifier; } - dispose(): void { + override dispose(): void { this._styler?.dispose(); this.disposables.dispose(); super.dispose(); @@ -829,7 +829,7 @@ export class WorkbenchCompressibleObjectTree, TFilter this.disposables.add(this.internals); } - updateOptions(options: IWorkbenchCompressibleObjectTreeOptionsUpdate = {}): void { + override updateOptions(options: IWorkbenchCompressibleObjectTreeOptionsUpdate = {}): void { super.updateOptions(options); if (options.overrideStyles) { @@ -875,7 +875,7 @@ export class WorkbenchDataTree extends DataTree extends Async this.disposables.add(this.internals); } - updateOptions(options: IWorkbenchAsyncDataTreeOptionsUpdate = {}): void { + override updateOptions(options: IWorkbenchAsyncDataTreeOptionsUpdate = {}): void { super.updateOptions(options); if (options.overrideStyles) { diff --git a/src/vs/platform/log/common/bufferLog.ts b/src/vs/platform/log/common/bufferLog.ts index ea9020d9ba7..6cedce2d542 100644 --- a/src/vs/platform/log/common/bufferLog.ts +++ b/src/vs/platform/log/common/bufferLog.ts @@ -82,7 +82,7 @@ export class BufferLogService extends AbstractLogger implements ILogService { this._log(LogLevel.Critical, message, ...args); } - dispose(): void { + override dispose(): void { if (this._logger) { this._logger.dispose(); } diff --git a/src/vs/platform/log/common/log.ts b/src/vs/platform/log/common/log.ts index fe4e01b90bf..1e3b749705a 100644 --- a/src/vs/platform/log/common/log.ts +++ b/src/vs/platform/log/common/log.ts @@ -250,7 +250,7 @@ export class ConsoleMainLogger extends AbstractLogger implements ILogger { } } - dispose(): void { + override dispose(): void { // noop } @@ -303,7 +303,7 @@ export class ConsoleLogger extends AbstractLogger implements ILogger { } } - dispose(): void { + override dispose(): void { // noop } @@ -363,7 +363,7 @@ export class AdapterLogger extends AbstractLogger implements ILogger { return toErrorMessage(msg, this.getLevel() <= LogLevel.Trace); } - dispose(): void { + override dispose(): void { // noop } @@ -382,7 +382,7 @@ export class MultiplexLogService extends AbstractLogger implements ILogService { } } - setLevel(level: LogLevel): void { + override setLevel(level: LogLevel): void { for (const logService of this.logServices) { logService.setLevel(level); } @@ -431,7 +431,7 @@ export class MultiplexLogService extends AbstractLogger implements ILogService { } } - dispose(): void { + override dispose(): void { for (const logService of this.logServices) { logService.dispose(); } @@ -517,7 +517,7 @@ export abstract class AbstractLoggerService extends Disposable implements ILogge return logger; } - dispose(): void { + override dispose(): void { this.logLevelChangeableLoggers.splice(0, this.logLevelChangeableLoggers.length); this.loggers.forEach(logger => logger.dispose()); this.loggers.clear(); diff --git a/src/vs/platform/log/common/logIpc.ts b/src/vs/platform/log/common/logIpc.ts index 49d356e9b5e..1f82b95d223 100644 --- a/src/vs/platform/log/common/logIpc.ts +++ b/src/vs/platform/log/common/logIpc.ts @@ -177,7 +177,7 @@ export class FollowerLogService extends LogService implements ILogService { this._register(parent.onDidChangeLogLevel(level => logService.setLevel(level))); } - setLevel(level: LogLevel): void { + override setLevel(level: LogLevel): void { super.setLevel(level); this.parent.setLevel(level); diff --git a/src/vs/platform/log/node/spdlogLog.ts b/src/vs/platform/log/node/spdlogLog.ts index 5b036c47ce2..b97064e29f7 100644 --- a/src/vs/platform/log/node/spdlogLog.ts +++ b/src/vs/platform/log/node/spdlogLog.ts @@ -95,7 +95,7 @@ export class SpdLogLogger extends AbstractMessageLogger implements ILogger { } } - flush(): void { + override flush(): void { if (this._logger) { this._logger.flush(); } else { @@ -103,7 +103,7 @@ export class SpdLogLogger extends AbstractMessageLogger implements ILogger { } } - dispose(): void { + override dispose(): void { if (this._logger) { this.disposeLogger(); } else { diff --git a/src/vs/platform/quickinput/browser/quickInput.ts b/src/vs/platform/quickinput/browser/quickInput.ts index d696697f9d0..097074264ef 100644 --- a/src/vs/platform/quickinput/browser/quickInput.ts +++ b/src/vs/platform/quickinput/browser/quickInput.ts @@ -166,7 +166,7 @@ export class QuickInputService extends Themable implements IQuickInputService { return this.controller.cancel(); } - protected updateStyles() { + protected override updateStyles() { this.controller.applyStyles(this.computeStyles()); } diff --git a/src/vs/platform/remote/node/tunnelService.ts b/src/vs/platform/remote/node/tunnelService.ts index 0f0bb25118a..a43e2a2487a 100644 --- a/src/vs/platform/remote/node/tunnelService.ts +++ b/src/vs/platform/remote/node/tunnelService.ts @@ -58,7 +58,7 @@ class NodeRemoteTunnel extends Disposable implements RemoteTunnel { this.tunnelRemoteHost = tunnelRemoteHost; } - public async dispose(): Promise { + public async override dispose(): Promise { super.dispose(); this._server.removeListener('listening', this._listeningListener); this._server.removeListener('connection', this._connectionListener); diff --git a/src/vs/platform/request/electron-main/requestMainService.ts b/src/vs/platform/request/electron-main/requestMainService.ts index d08f82f4510..ea709437ebb 100644 --- a/src/vs/platform/request/electron-main/requestMainService.ts +++ b/src/vs/platform/request/electron-main/requestMainService.ts @@ -14,7 +14,7 @@ function getRawRequest(options: IRequestOptions): IRawRequestFunction { export class RequestMainService extends NodeRequestService { - request(options: IRequestOptions, token: CancellationToken): Promise { + override request(options: IRequestOptions, token: CancellationToken): Promise { return super.request({ ...(options || {}), getRawRequest }, token); } } diff --git a/src/vs/platform/storage/browser/storageService.ts b/src/vs/platform/storage/browser/storageService.ts index 5cfb899602e..c1aae2e7d2e 100644 --- a/src/vs/platform/storage/browser/storageService.ts +++ b/src/vs/platform/storage/browser/storageService.ts @@ -94,7 +94,7 @@ export class BrowserStorageService extends AbstractStorageService { throw new Error('Migrating storage is currently unsupported in Web'); } - protected shouldFlushWhenIdle(): boolean { + protected override shouldFlushWhenIdle(): boolean { // this flush() will potentially cause new state to be stored // since new state will only be created while the document // has focus, one optimization is to not run this when the diff --git a/src/vs/platform/storage/electron-main/storageMain.ts b/src/vs/platform/storage/electron-main/storageMain.ts index c9a430dccef..234fb50c997 100644 --- a/src/vs/platform/storage/electron-main/storageMain.ts +++ b/src/vs/platform/storage/electron-main/storageMain.ts @@ -206,7 +206,7 @@ export class GlobalStorageMain extends BaseStorageMain implements IStorageMain { })); } - protected async doInit(storage: IStorage): Promise { + protected async override doInit(storage: IStorage): Promise { await super.doInit(storage); // Apply global telemetry values as part of the initialization diff --git a/src/vs/platform/storage/test/electron-main/storageMainService.test.ts b/src/vs/platform/storage/test/electron-main/storageMainService.test.ts index 897a2367af3..0f55ca5c3b2 100644 --- a/src/vs/platform/storage/test/electron-main/storageMainService.test.ts +++ b/src/vs/platform/storage/test/electron-main/storageMainService.test.ts @@ -26,7 +26,7 @@ suite('StorageMainService', function () { class TestStorageMainService extends StorageMainService { - protected getStorageOptions(): IStorageMainOptions { + protected override getStorageOptions(): IStorageMainOptions { return { useInMemoryStorage: true }; diff --git a/src/vs/platform/telemetry/browser/errorTelemetry.ts b/src/vs/platform/telemetry/browser/errorTelemetry.ts index 6ef338fd841..48bb12478c4 100644 --- a/src/vs/platform/telemetry/browser/errorTelemetry.ts +++ b/src/vs/platform/telemetry/browser/errorTelemetry.ts @@ -8,7 +8,7 @@ import { globals } from 'vs/base/common/platform'; import BaseErrorTelemetry, { ErrorEvent } from 'vs/platform/telemetry/common/errorTelemetry'; export default class ErrorTelemetry extends BaseErrorTelemetry { - protected installErrorListeners(): void { + protected override installErrorListeners(): void { let oldOnError: Function; let that = this; if (typeof globals.onerror === 'function') { diff --git a/src/vs/platform/telemetry/node/errorTelemetry.ts b/src/vs/platform/telemetry/node/errorTelemetry.ts index 562eb44b9c9..ba1c2a18d46 100644 --- a/src/vs/platform/telemetry/node/errorTelemetry.ts +++ b/src/vs/platform/telemetry/node/errorTelemetry.ts @@ -7,7 +7,7 @@ import { onUnexpectedError, setUnexpectedErrorHandler } from 'vs/base/common/err import BaseErrorTelemetry from 'vs/platform/telemetry/common/errorTelemetry'; export default class ErrorTelemetry extends BaseErrorTelemetry { - protected installErrorListeners(): void { + protected override installErrorListeners(): void { setUnexpectedErrorHandler(err => console.error(err)); // Print a console message when rejection isn't handled within N seconds. For details: diff --git a/src/vs/platform/telemetry/test/browser/telemetryService.test.ts b/src/vs/platform/telemetry/test/browser/telemetryService.test.ts index 936526af0b5..9b8969ffa14 100644 --- a/src/vs/platform/telemetry/test/browser/telemetryService.test.ts +++ b/src/vs/platform/telemetry/test/browser/telemetryService.test.ts @@ -217,7 +217,7 @@ suite('TelemetryService', () => { return Promise.all(this.promises); } - publicLog(eventName: string, data?: ITelemetryData, anonymizeFilePaths?: boolean): Promise { + override publicLog(eventName: string, data?: ITelemetryData, anonymizeFilePaths?: boolean): Promise { let p = super.publicLog(eventName, data, anonymizeFilePaths); this.promises.push(p); return p; @@ -773,8 +773,8 @@ suite('TelemetryService', () => { let service = new TelemetryService({ appender: testAppender }, new class extends TestConfigurationService { - onDidChangeConfiguration = emitter.event; - getValue() { + override onDidChangeConfiguration = emitter.event; + override getValue() { return { enableTelemetry: enableTelemetry } as any; diff --git a/src/vs/platform/telemetry/test/common/telemetryLogAppender.test.ts b/src/vs/platform/telemetry/test/common/telemetryLogAppender.test.ts index ff2be7d5cd5..5ed128e01f3 100644 --- a/src/vs/platform/telemetry/test/common/telemetryLogAppender.test.ts +++ b/src/vs/platform/telemetry/test/common/telemetryLogAppender.test.ts @@ -53,7 +53,7 @@ class TestTelemetryLogger extends AbstractLogger implements ILogger { } } - dispose(): void { } + override dispose(): void { } flush(): void { } } diff --git a/src/vs/platform/telemetry/test/electron-browser/appInsightsAppender.test.ts b/src/vs/platform/telemetry/test/electron-browser/appInsightsAppender.test.ts index 07789a3aefc..77c201e4bd2 100644 --- a/src/vs/platform/telemetry/test/electron-browser/appInsightsAppender.test.ts +++ b/src/vs/platform/telemetry/test/electron-browser/appInsightsAppender.test.ts @@ -7,8 +7,8 @@ import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppen import { TelemetryClient, Contracts } from 'applicationinsights'; class AppInsightsMock extends TelemetryClient { - public config: any; - public channel: any; + public override config: any; + public override channel: any; public events: Contracts.EventTelemetry[] = []; public IsTrackingPageView: boolean = false; public exceptions: any[] = []; @@ -17,11 +17,11 @@ class AppInsightsMock extends TelemetryClient { super('testKey'); } - public trackEvent(event: any) { + public override trackEvent(event: any) { this.events.push(event); } - public flush(options: any): void { + public override flush(options: any): void { // called on dispose } } diff --git a/src/vs/platform/terminal/node/ptyHostService.ts b/src/vs/platform/terminal/node/ptyHostService.ts index a37d86d3377..507586b21aa 100644 --- a/src/vs/platform/terminal/node/ptyHostService.ts +++ b/src/vs/platform/terminal/node/ptyHostService.ts @@ -137,7 +137,7 @@ export class PtyHostService extends Disposable implements IPtyService { return [client, proxy]; } - dispose() { + override dispose() { this._isDisposed = true; super.dispose(); } diff --git a/src/vs/platform/terminal/node/terminalProcess.ts b/src/vs/platform/terminal/node/terminalProcess.ts index bd875a24807..a35c7305d30 100644 --- a/src/vs/platform/terminal/node/terminalProcess.ts +++ b/src/vs/platform/terminal/node/terminalProcess.ts @@ -232,7 +232,7 @@ export class TerminalProcess extends Disposable implements ITerminalChildProcess this._sendProcessId(ptyProcess.pid); } - public dispose(): void { + public override dispose(): void { this._isDisposed = true; if (this._titleInterval) { clearInterval(this._titleInterval); @@ -494,7 +494,7 @@ class DelayedResizer extends Disposable { }); } - dispose(): void { + override dispose(): void { super.dispose(); clearTimeout(this._timeout); } diff --git a/src/vs/platform/terminal/node/windowsShellHelper.ts b/src/vs/platform/terminal/node/windowsShellHelper.ts index 829afecba27..1fed411ed95 100644 --- a/src/vs/platform/terminal/node/windowsShellHelper.ts +++ b/src/vs/platform/terminal/node/windowsShellHelper.ts @@ -112,7 +112,7 @@ export class WindowsShellHelper extends Disposable implements IWindowsShellHelpe return this.traverseTree(tree.children[favouriteChild]); } - public dispose(): void { + public override dispose(): void { this._isDisposed = true; super.dispose(); } diff --git a/src/vs/platform/undoRedo/test/common/undoRedoService.test.ts b/src/vs/platform/undoRedo/test/common/undoRedoService.test.ts index 49f4944544b..e4c8cc957df 100644 --- a/src/vs/platform/undoRedo/test/common/undoRedoService.test.ts +++ b/src/vs/platform/undoRedo/test/common/undoRedoService.test.ts @@ -133,7 +133,7 @@ suite('UndoRedoService', () => { const resource1 = URI.file('test1.txt'); const resource2 = URI.file('test2.txt'); const service = createUndoRedoService(new class extends mock() { - async show() { + async override show() { return { choice: 0 // confirm! }; diff --git a/src/vs/platform/update/electron-main/updateService.darwin.ts b/src/vs/platform/update/electron-main/updateService.darwin.ts index b876e8814dd..b21f4e8650e 100644 --- a/src/vs/platform/update/electron-main/updateService.darwin.ts +++ b/src/vs/platform/update/electron-main/updateService.darwin.ts @@ -40,7 +40,7 @@ export class DarwinUpdateService extends AbstractUpdateService { super(lifecycleMainService, configurationService, environmentMainService, requestService, logService, productService); } - initialize(): void { + override initialize(): void { super.initialize(); this.onRawError(this.onError, this, this.disposables); this.onRawUpdateAvailable(this.onUpdateAvailable, this, this.disposables); @@ -110,7 +110,7 @@ export class DarwinUpdateService extends AbstractUpdateService { this.setState(State.Idle(UpdateType.Archive)); } - protected doQuitAndInstall(): void { + protected override doQuitAndInstall(): void { this.logService.trace('update#quitAndInstall(): running raw#quitAndInstall()'); electron.autoUpdater.quitAndInstall(); } diff --git a/src/vs/platform/update/electron-main/updateService.linux.ts b/src/vs/platform/update/electron-main/updateService.linux.ts index 7387636bfe7..d6472f634b3 100644 --- a/src/vs/platform/update/electron-main/updateService.linux.ts +++ b/src/vs/platform/update/electron-main/updateService.linux.ts @@ -62,7 +62,7 @@ export class LinuxUpdateService extends AbstractUpdateService { }); } - protected async doDownloadUpdate(state: AvailableForDownload): Promise { + protected async override doDownloadUpdate(state: AvailableForDownload): Promise { // Use the download URL if available as we don't currently detect the package type that was // installed and the website download page is more useful than the tarball generally. if (this.productService.downloadUrl && this.productService.downloadUrl.length > 0) { diff --git a/src/vs/platform/update/electron-main/updateService.snap.ts b/src/vs/platform/update/electron-main/updateService.snap.ts index e0d6010d06a..ed4f008351e 100644 --- a/src/vs/platform/update/electron-main/updateService.snap.ts +++ b/src/vs/platform/update/electron-main/updateService.snap.ts @@ -175,7 +175,7 @@ export class SnapUpdateService extends AbstractUpdateService2 { }); } - protected doQuitAndInstall(): void { + protected override doQuitAndInstall(): void { this.logService.trace('update#quitAndInstall(): running raw#quitAndInstall()'); // Allow 3 seconds for VS Code to close diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts index 62d82342b36..ef9c6505407 100644 --- a/src/vs/platform/update/electron-main/updateService.win32.ts +++ b/src/vs/platform/update/electron-main/updateService.win32.ts @@ -73,7 +73,7 @@ export class Win32UpdateService extends AbstractUpdateService { super(lifecycleMainService, configurationService, environmentMainService, requestService, logService, productService); } - initialize(): void { + override initialize(): void { super.initialize(); if (getUpdateType() === UpdateType.Setup) { @@ -177,7 +177,7 @@ export class Win32UpdateService extends AbstractUpdateService { }); } - protected async doDownloadUpdate(state: AvailableForDownload): Promise { + protected async override doDownloadUpdate(state: AvailableForDownload): Promise { if (state.update.url) { this.nativeHostMainService.openExternal(undefined, state.update.url); } @@ -206,7 +206,7 @@ export class Win32UpdateService extends AbstractUpdateService { await Promise.all(promises); } - protected async doApplyUpdate(): Promise { + protected async override doApplyUpdate(): Promise { if (this.state.type !== StateType.Downloaded && this.state.type !== StateType.Downloading) { return Promise.resolve(undefined); } @@ -242,7 +242,7 @@ export class Win32UpdateService extends AbstractUpdateService { .then(() => this.setState(State.Ready(update))); } - protected doQuitAndInstall(): void { + protected override doQuitAndInstall(): void { if (this.state.type !== StateType.Ready || !this.availableUpdate) { return; } @@ -259,7 +259,7 @@ export class Win32UpdateService extends AbstractUpdateService { } } - protected getUpdateType(): UpdateType { + protected override getUpdateType(): UpdateType { return getUpdateType(); } } diff --git a/src/vs/platform/userDataSync/common/extensionsSync.ts b/src/vs/platform/userDataSync/common/extensionsSync.ts index 3f96579bf34..09e1cae5fe3 100644 --- a/src/vs/platform/userDataSync/common/extensionsSync.ts +++ b/src/vs/platform/userDataSync/common/extensionsSync.ts @@ -95,7 +95,7 @@ export class ExtensionsSynchroniser extends AbstractSynchroniser implements IUse /* Version 5: Introduce extension state */ protected readonly version: number = 5; - protected isEnabled(): boolean { return super.isEnabled() && this.extensionGalleryService.isEnabled(); } + protected override isEnabled(): boolean { return super.isEnabled() && this.extensionGalleryService.isEnabled(); } private readonly previewResource: URI = this.extUri.joinPath(this.syncPreviewFolder, 'extensions.json'); private readonly localResource: URI = this.previewResource.with({ scheme: USER_DATA_SYNC_SCHEME, authority: 'local' }); private readonly remoteResource: URI = this.previewResource.with({ scheme: USER_DATA_SYNC_SCHEME, authority: 'remote' }); @@ -292,7 +292,7 @@ export class ExtensionsSynchroniser extends AbstractSynchroniser implements IUse return [{ resource: this.extUri.joinPath(uri, 'extensions.json'), comparableResource: ExtensionsSynchroniser.EXTENSIONS_DATA_URI }]; } - async resolveContent(uri: URI): Promise { + async override resolveContent(uri: URI): Promise { if (this.extUri.isEqual(uri, ExtensionsSynchroniser.EXTENSIONS_DATA_URI)) { const installedExtensions = await this.extensionManagementService.getInstalled(); const ignoredExtensions = this.ignoredExtensionsManagementService.getIgnoredExtensions(installedExtensions); diff --git a/src/vs/platform/userDataSync/common/globalStateSync.ts b/src/vs/platform/userDataSync/common/globalStateSync.ts index 2e58f17ae95..a3a284efab6 100644 --- a/src/vs/platform/userDataSync/common/globalStateSync.ts +++ b/src/vs/platform/userDataSync/common/globalStateSync.ts @@ -230,7 +230,7 @@ export class GlobalStateSynchroniser extends AbstractSynchroniser implements IUs return [{ resource: this.extUri.joinPath(uri, 'globalState.json'), comparableResource: GlobalStateSynchroniser.GLOBAL_STATE_DATA_URI }]; } - async resolveContent(uri: URI): Promise { + async override resolveContent(uri: URI): Promise { if (this.extUri.isEqual(uri, GlobalStateSynchroniser.GLOBAL_STATE_DATA_URI)) { const localGlobalState = await this.getLocalGlobalState(); return formatAndStringify(localGlobalState); diff --git a/src/vs/platform/userDataSync/common/keybindingsSync.ts b/src/vs/platform/userDataSync/common/keybindingsSync.ts index 7f93636705b..5e7e71d979a 100644 --- a/src/vs/platform/userDataSync/common/keybindingsSync.ts +++ b/src/vs/platform/userDataSync/common/keybindingsSync.ts @@ -258,7 +258,7 @@ export class KeybindingsSynchroniser extends AbstractJsonFileSynchroniser implem return [{ resource: this.extUri.joinPath(uri, 'keybindings.json'), comparableResource }]; } - async resolveContent(uri: URI): Promise { + async override resolveContent(uri: URI): Promise { if (this.extUri.isEqual(this.remoteResource, uri) || this.extUri.isEqual(this.localResource, uri) || this.extUri.isEqual(this.acceptedResource, uri)) { return this.resolvePreviewContent(uri); } diff --git a/src/vs/platform/userDataSync/common/settingsSync.ts b/src/vs/platform/userDataSync/common/settingsSync.ts index d4e31ee05b7..245d4cff8fd 100644 --- a/src/vs/platform/userDataSync/common/settingsSync.ts +++ b/src/vs/platform/userDataSync/common/settingsSync.ts @@ -247,7 +247,7 @@ export class SettingsSynchroniser extends AbstractJsonFileSynchroniser implement return [{ resource: this.extUri.joinPath(uri, 'settings.json'), comparableResource }]; } - async resolveContent(uri: URI): Promise { + async override resolveContent(uri: URI): Promise { if (this.extUri.isEqual(this.remoteResource, uri) || this.extUri.isEqual(this.localResource, uri) || this.extUri.isEqual(this.acceptedResource, uri)) { return this.resolvePreviewContent(uri); } @@ -271,7 +271,7 @@ export class SettingsSynchroniser extends AbstractJsonFileSynchroniser implement return null; } - protected async resolvePreviewContent(resource: URI): Promise { + protected async override resolvePreviewContent(resource: URI): Promise { let content = await super.resolvePreviewContent(resource); if (content) { const formatUtils = await this.getFormattingOptions(); diff --git a/src/vs/platform/userDataSync/common/snippetsSync.ts b/src/vs/platform/userDataSync/common/snippetsSync.ts index 3068afb6c6b..0f4c7841bbe 100644 --- a/src/vs/platform/userDataSync/common/snippetsSync.ts +++ b/src/vs/platform/userDataSync/common/snippetsSync.ts @@ -355,7 +355,7 @@ export class SnippetsSynchroniser extends AbstractSynchroniser implements IUserD return []; } - async resolveContent(uri: URI): Promise { + async override resolveContent(uri: URI): Promise { if (this.extUri.isEqualOrParent(uri, this.syncPreviewFolder.with({ scheme: USER_DATA_SYNC_SCHEME, authority: 'remote' })) || this.extUri.isEqualOrParent(uri, this.syncPreviewFolder.with({ scheme: USER_DATA_SYNC_SCHEME, authority: 'local' })) || this.extUri.isEqualOrParent(uri, this.syncPreviewFolder.with({ scheme: USER_DATA_SYNC_SCHEME, authority: 'accepted' }))) { diff --git a/src/vs/platform/userDataSync/common/userDataSyncService.ts b/src/vs/platform/userDataSync/common/userDataSyncService.ts index b059b81ee40..c8f729409d4 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncService.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncService.ts @@ -727,7 +727,7 @@ class ManualSyncTask extends Disposable implements IManualSyncTask { this.synchronizingResources = []; } - dispose(): void { + override dispose(): void { this.reset(); this.isDisposed = true; } diff --git a/src/vs/platform/userDataSync/common/userDataSyncServiceIpc.ts b/src/vs/platform/userDataSync/common/userDataSyncServiceIpc.ts index ee55c0be9aa..92304d39bf2 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncServiceIpc.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncServiceIpc.ts @@ -356,7 +356,7 @@ class ManualSyncTaskChannelClient extends Disposable implements IManualSyncTask private _disposed = false; isDiposed() { return this._disposed; } - dispose(): void { + override dispose(): void { this._disposed = true; this.channel.call('dispose'); } diff --git a/src/vs/platform/userDataSync/test/common/synchronizer.test.ts b/src/vs/platform/userDataSync/test/common/synchronizer.test.ts index 06d57e78906..4a942e65db8 100644 --- a/src/vs/platform/userDataSync/test/common/synchronizer.test.ts +++ b/src/vs/platform/userDataSync/test/common/synchronizer.test.ts @@ -28,20 +28,20 @@ class TestSynchroniser extends AbstractSynchroniser { onDoSyncCall: Emitter = this._register(new Emitter()); failWhenGettingLatestRemoteUserData: boolean = false; - readonly resource: SyncResource = SyncResource.Settings; + override readonly resource: SyncResource = SyncResource.Settings; protected readonly version: number = 1; private cancelled: boolean = false; readonly localResource = joinPath(this.environmentService.userRoamingDataHome, 'testResource.json'); - protected getLatestRemoteUserData(manifest: IUserDataManifest | null, lastSyncUserData: IRemoteUserData | null): Promise { + protected override getLatestRemoteUserData(manifest: IUserDataManifest | null, lastSyncUserData: IRemoteUserData | null): Promise { if (this.failWhenGettingLatestRemoteUserData) { throw new Error(); } return super.getLatestRemoteUserData(manifest, lastSyncUserData); } - protected async doSync(remoteUserData: IRemoteUserData, lastSyncUserData: IRemoteUserData | null, apply: boolean): Promise { + protected async override doSync(remoteUserData: IRemoteUserData, lastSyncUserData: IRemoteUserData | null, apply: boolean): Promise { this.cancelled = false; this.onDoSyncCall.fire(); await this.syncBarrier.wait(); @@ -145,18 +145,18 @@ class TestSynchroniser extends AbstractSynchroniser { await this.updateLastSyncUserData(remoteUserData); } - async stop(): Promise { + async override stop(): Promise { this.cancelled = true; this.syncBarrier.open(); super.stop(); } - async triggerLocalChange(): Promise { + async override triggerLocalChange(): Promise { super.triggerLocalChange(); } onDidTriggerLocalChangeCall: Emitter = this._register(new Emitter()); - protected async doTriggerLocalChange(): Promise { + protected async override doTriggerLocalChange(): Promise { await super.doTriggerLocalChange(); this.onDidTriggerLocalChangeCall.fire(); } diff --git a/src/vs/platform/userDataSync/test/common/userDataAutoSyncService.test.ts b/src/vs/platform/userDataSync/test/common/userDataAutoSyncService.test.ts index ce033acd6f1..a015b118d75 100644 --- a/src/vs/platform/userDataSync/test/common/userDataAutoSyncService.test.ts +++ b/src/vs/platform/userDataSync/test/common/userDataAutoSyncService.test.ts @@ -16,8 +16,8 @@ import { joinPath } from 'vs/base/common/resources'; import { IUserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines'; class TestUserDataAutoSyncService extends UserDataAutoSyncService { - protected startAutoSync(): boolean { return false; } - protected getSyncTriggerDelayTime(): number { return 50; } + protected override startAutoSync(): boolean { return false; } + protected override getSyncTriggerDelayTime(): number { return 50; } sync(): Promise { return this.triggerSync(['sync'], false, false); diff --git a/src/vs/platform/workspaces/test/electron-main/workspacesManagementMainService.test.ts b/src/vs/platform/workspaces/test/electron-main/workspacesManagementMainService.test.ts index 5f1eb19f6fb..1b524310e9c 100644 --- a/src/vs/platform/workspaces/test/electron-main/workspacesManagementMainService.test.ts +++ b/src/vs/platform/workspaces/test/electron-main/workspacesManagementMainService.test.ts @@ -102,7 +102,7 @@ flakySuite('WorkspacesManagementMainService', () => { super(parseArgs(process.argv, OPTIONS), productService); } - get untitledWorkspacesHome(): URI { + override get untitledWorkspacesHome(): URI { return URI.file(untitledWorkspacesHomePath); } }; diff --git a/src/vs/workbench/api/browser/mainThreadCLICommands.ts b/src/vs/workbench/api/browser/mainThreadCLICommands.ts index 0976a8ab5d3..0277dd5bb14 100644 --- a/src/vs/workbench/api/browser/mainThreadCLICommands.ts +++ b/src/vs/workbench/api/browser/mainThreadCLICommands.ts @@ -95,11 +95,11 @@ class RemoteExtensionCLIManagementService extends ExtensionManagementCLIService this._extensionKindController = new ExtensionKindController(productService, configurationService); } - protected get location(): string | undefined { + protected override get location(): string | undefined { return this._location; } - protected validateExtensionKind(manifest: IExtensionManifest, output: CLIOutput): boolean { + protected override validateExtensionKind(manifest: IExtensionManifest, output: CLIOutput): boolean { if (!this._extensionKindController.canExecuteOnWorkspace(manifest)) { output.log(localize('cannot be installed', "Cannot install the '{0}' extension because it is declared to not run in this setup.", getExtensionId(manifest.publisher, manifest.name))); return false; diff --git a/src/vs/workbench/api/browser/mainThreadComments.ts b/src/vs/workbench/api/browser/mainThreadComments.ts index 64b607f7c58..c866d7f7fcb 100644 --- a/src/vs/workbench/api/browser/mainThreadComments.ts +++ b/src/vs/workbench/api/browser/mainThreadComments.ts @@ -535,7 +535,7 @@ export class MainThreadComments extends Disposable implements MainThreadComments this._commentService.updateComments(providerId, event); } - dispose(): void { + override dispose(): void { super.dispose(); this._workspaceProviders.forEach(value => dispose(value)); this._workspaceProviders.clear(); diff --git a/src/vs/workbench/api/browser/mainThreadCustomEditors.ts b/src/vs/workbench/api/browser/mainThreadCustomEditors.ts index fec3341bc32..24cc045670e 100644 --- a/src/vs/workbench/api/browser/mainThreadCustomEditors.ts +++ b/src/vs/workbench/api/browser/mainThreadCustomEditors.ts @@ -92,7 +92,7 @@ export class MainThreadCustomEditors extends Disposable implements extHostProtoc })); } - dispose() { + override dispose() { super.dispose(); dispose(this._editorProviders.values()); @@ -345,7 +345,7 @@ class MainThreadCustomEditorModel extends Disposable implements ICustomEditorMod return this._editorResource; } - dispose() { + override dispose() { this.#isDisposed = true; if (this._editable) { diff --git a/src/vs/workbench/api/browser/mainThreadDocuments.ts b/src/vs/workbench/api/browser/mainThreadDocuments.ts index 1ac417c8acb..eda90f2c22c 100644 --- a/src/vs/workbench/api/browser/mainThreadDocuments.ts +++ b/src/vs/workbench/api/browser/mainThreadDocuments.ts @@ -169,7 +169,7 @@ export class MainThreadDocuments extends Disposable implements MainThreadDocumen this._modelTrackers = Object.create(null); } - public dispose(): void { + public override dispose(): void { Object.keys(this._modelTrackers).forEach((modelUrl) => { this._modelTrackers[modelUrl].dispose(); }); diff --git a/src/vs/workbench/api/browser/mainThreadTesting.ts b/src/vs/workbench/api/browser/mainThreadTesting.ts index 59469907848..1681a58d8e3 100644 --- a/src/vs/workbench/api/browser/mainThreadTesting.ts +++ b/src/vs/workbench/api/browser/mainThreadTesting.ts @@ -152,7 +152,7 @@ export class MainThreadTesting extends Disposable implements MainThreadTestingSh return result.id; } - public dispose() { + public override dispose() { super.dispose(); for (const subscription of this.testSubscriptions.values()) { subscription.dispose(); diff --git a/src/vs/workbench/api/browser/mainThreadTreeViews.ts b/src/vs/workbench/api/browser/mainThreadTreeViews.ts index 40b6794bfae..b70ff475447 100644 --- a/src/vs/workbench/api/browser/mainThreadTreeViews.ts +++ b/src/vs/workbench/api/browser/mainThreadTreeViews.ts @@ -147,7 +147,7 @@ export class MainThreadTreeViews extends Disposable implements MainThreadTreeVie return viewDescriptor ? viewDescriptor.treeView : null; } - dispose(): void { + override dispose(): void { this._dataProviders.forEach((dataProvider, treeViewId) => { const treeView = this.getTreeView(treeViewId); if (treeView) { diff --git a/src/vs/workbench/api/browser/mainThreadUriOpeners.ts b/src/vs/workbench/api/browser/mainThreadUriOpeners.ts index ee05a2d6627..daaeb1e5dd2 100644 --- a/src/vs/workbench/api/browser/mainThreadUriOpeners.ts +++ b/src/vs/workbench/api/browser/mainThreadUriOpeners.ts @@ -128,7 +128,7 @@ export class MainThreadUriOpeners extends Disposable implements MainThreadUriOpe this._contributedExternalUriOpenersStore.delete(id); } - dispose(): void { + override dispose(): void { super.dispose(); this._registeredOpeners.clear(); } diff --git a/src/vs/workbench/api/browser/mainThreadWebviewPanels.ts b/src/vs/workbench/api/browser/mainThreadWebviewPanels.ts index 38dd25cadc7..22bfaff30a5 100644 --- a/src/vs/workbench/api/browser/mainThreadWebviewPanels.ts +++ b/src/vs/workbench/api/browser/mainThreadWebviewPanels.ts @@ -123,7 +123,7 @@ export class MainThreadWebviewPanels extends Disposable implements extHostProtoc })); } - dispose() { + override dispose() { super.dispose(); dispose(this._editorProviders.values()); diff --git a/src/vs/workbench/api/browser/mainThreadWebviewViews.ts b/src/vs/workbench/api/browser/mainThreadWebviewViews.ts index d2d670a6089..eb767e2744e 100644 --- a/src/vs/workbench/api/browser/mainThreadWebviewViews.ts +++ b/src/vs/workbench/api/browser/mainThreadWebviewViews.ts @@ -28,7 +28,7 @@ export class MainThreadWebviewsViews extends Disposable implements extHostProtoc this._proxy = context.getProxy(extHostProtocol.ExtHostContext.ExtHostWebviewViews); } - dispose() { + override dispose() { super.dispose(); dispose(this._webviewViewProviders.values()); diff --git a/src/vs/workbench/api/common/extHostDiagnostics.ts b/src/vs/workbench/api/common/extHostDiagnostics.ts index ef990862c81..1114e309d85 100644 --- a/src/vs/workbench/api/common/extHostDiagnostics.ts +++ b/src/vs/workbench/api/common/extHostDiagnostics.ts @@ -288,7 +288,7 @@ export class ExtHostDiagnostics implements ExtHostDiagnosticsShape { super(name!, owner, ExtHostDiagnostics._maxDiagnosticsPerFile, loggingProxy, _onDidChangeDiagnostics); _collections.set(owner, this); } - dispose() { + override dispose() { super.dispose(); _collections.delete(owner); } diff --git a/src/vs/workbench/api/common/extHostDocumentData.ts b/src/vs/workbench/api/common/extHostDocumentData.ts index 0cd5c8378fc..d244a16b8aa 100644 --- a/src/vs/workbench/api/common/extHostDocumentData.ts +++ b/src/vs/workbench/api/common/extHostDocumentData.ts @@ -42,7 +42,7 @@ export class ExtHostDocumentData extends MirrorTextModel { super(uri, lines, eol, versionId); } - dispose(): void { + override dispose(): void { // we don't really dispose documents but let // extensions still read from them. some // operations, live saving, will now error tho diff --git a/src/vs/workbench/api/common/extHostNotebook.ts b/src/vs/workbench/api/common/extHostNotebook.ts index 61546ab9f15..f156c720cf0 100644 --- a/src/vs/workbench/api/common/extHostNotebook.ts +++ b/src/vs/workbench/api/common/extHostNotebook.ts @@ -1007,7 +1007,7 @@ export class NotebookCellStatusBarItemInternal extends Disposable { this.update(); } - dispose(): void { + override dispose(): void { this.hide(); this._isDisposed = true; this._internalCommandRegistration.dispose(); diff --git a/src/vs/workbench/api/common/extHostNotebookDocument.ts b/src/vs/workbench/api/common/extHostNotebookDocument.ts index c2023c7d05b..03e5d87d56a 100644 --- a/src/vs/workbench/api/common/extHostNotebookDocument.ts +++ b/src/vs/workbench/api/common/extHostNotebookDocument.ts @@ -160,7 +160,7 @@ export class ExtHostNotebookDocument extends Disposable { super(); } - dispose() { + override dispose() { this._disposed = true; super.dispose(); dispose(this._cellDisposableMapping.values()); diff --git a/src/vs/workbench/api/common/extHostOutput.ts b/src/vs/workbench/api/common/extHostOutput.ts index a8bc2ddd474..1b7a2d4c8af 100644 --- a/src/vs/workbench/api/common/extHostOutput.ts +++ b/src/vs/workbench/api/common/extHostOutput.ts @@ -73,7 +73,7 @@ export abstract class AbstractExtHostOutputChannel extends Disposable implements } } - dispose(): void { + override dispose(): void { super.dispose(); if (!this._disposed) { @@ -90,7 +90,7 @@ export class ExtHostPushOutputChannel extends AbstractExtHostOutputChannel { super(name, false, undefined, proxy); } - append(value: string): void { + override append(value: string): void { super.append(value); this._id.then(id => this._proxy.$append(id, value)); this._onDidAppend.fire(); @@ -103,7 +103,7 @@ class ExtHostLogFileOutputChannel extends AbstractExtHostOutputChannel { super(name, true, file, proxy); } - append(value: string): void { + override append(value: string): void { throw new Error('Not supported'); } } diff --git a/src/vs/workbench/api/common/extHostTesting.ts b/src/vs/workbench/api/common/extHostTesting.ts index 6a266956786..d75657c2d4b 100644 --- a/src/vs/workbench/api/common/extHostTesting.ts +++ b/src/vs/workbench/api/common/extHostTesting.ts @@ -486,14 +486,14 @@ class MirroredChangeCollector extends IncrementalChangeCollector extends Disposable { this.nodes.clear(); } - dispose() { + override dispose() { this._refreshCancellationSource.dispose(); this.clearAll(); diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index 0a807063cc7..2eb5b2e8973 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -419,7 +419,7 @@ export class Selection extends Range { return this._anchor === this._end; } - toJSON() { + override toJSON() { return { start: this.start, end: this.end, diff --git a/src/vs/workbench/api/common/extHostWebviewPanels.ts b/src/vs/workbench/api/common/extHostWebviewPanels.ts index ace45ef742b..9622f8799cc 100644 --- a/src/vs/workbench/api/common/extHostWebviewPanels.ts +++ b/src/vs/workbench/api/common/extHostWebviewPanels.ts @@ -60,7 +60,7 @@ class ExtHostWebviewPanel extends Disposable implements vscode.WebviewPanel { this.#webview = webview; } - public dispose() { + public override dispose() { if (this.#isDisposed) { return; } diff --git a/src/vs/workbench/api/common/extHostWebviewView.ts b/src/vs/workbench/api/common/extHostWebviewView.ts index 6f28d51b938..d91a5d30d2c 100644 --- a/src/vs/workbench/api/common/extHostWebviewView.ts +++ b/src/vs/workbench/api/common/extHostWebviewView.ts @@ -43,7 +43,7 @@ class ExtHostWebviewView extends Disposable implements vscode.WebviewView { this.#isVisible = isVisible; } - public dispose() { + public override dispose() { if (this.#isDisposed) { return; } diff --git a/src/vs/workbench/api/node/extHostDebugService.ts b/src/vs/workbench/api/node/extHostDebugService.ts index c8c7f4cd50c..6f50c8cad05 100644 --- a/src/vs/workbench/api/node/extHostDebugService.ts +++ b/src/vs/workbench/api/node/extHostDebugService.ts @@ -27,7 +27,7 @@ import { createCancelablePromise, firstParallel } from 'vs/base/common/async'; export class ExtHostDebugService extends ExtHostDebugServiceBase { - readonly _serviceBrand: undefined; + override readonly _serviceBrand: undefined; private _integratedTerminalInstances = new DebugTerminalCollection(); private _terminalDisposedListener: IDisposable | undefined; @@ -43,7 +43,7 @@ export class ExtHostDebugService extends ExtHostDebugServiceBase { super(extHostRpcService, workspaceService, extensionService, editorsService, configurationService); } - protected createDebugAdapter(adapter: IAdapterDescriptor, session: ExtHostDebugSession): AbstractDebugAdapter | undefined { + protected override createDebugAdapter(adapter: IAdapterDescriptor, session: ExtHostDebugSession): AbstractDebugAdapter | undefined { switch (adapter.type) { case 'server': return new SocketDebugAdapter(adapter); @@ -55,7 +55,7 @@ export class ExtHostDebugService extends ExtHostDebugServiceBase { return super.createDebugAdapter(adapter, session); } - protected daExecutableFromPackage(session: ExtHostDebugSession, extensionRegistry: ExtensionDescriptionRegistry): DebugAdapterExecutable | undefined { + protected override daExecutableFromPackage(session: ExtHostDebugSession, extensionRegistry: ExtensionDescriptionRegistry): DebugAdapterExecutable | undefined { const dae = ExecutableDebugAdapter.platformAdapterExecutable(extensionRegistry.getAllExtensionDescriptions(), session.type); if (dae) { return new DebugAdapterExecutable(dae.command, dae.args, dae.options); @@ -63,11 +63,11 @@ export class ExtHostDebugService extends ExtHostDebugServiceBase { return undefined; } - protected createSignService(): ISignService | undefined { + protected override createSignService(): ISignService | undefined { return new SignService(); } - public async $runInTerminal(args: DebugProtocol.RunInTerminalRequestArguments, sessionId: string): Promise { + public async override $runInTerminal(args: DebugProtocol.RunInTerminalRequestArguments, sessionId: string): Promise { if (args.kind === 'integrated') { diff --git a/src/vs/workbench/api/node/extHostOutputService.ts b/src/vs/workbench/api/node/extHostOutputService.ts index 51b92b3d367..518c90b4b73 100644 --- a/src/vs/workbench/api/node/extHostOutputService.ts +++ b/src/vs/workbench/api/node/extHostOutputService.ts @@ -47,23 +47,23 @@ export class ExtHostOutputChannelBackedByFile extends AbstractExtHostOutputChann this._appender = appender; } - append(value: string): void { + override append(value: string): void { super.append(value); this._appender.append(value); this._onDidAppend.fire(); } - update(): void { + override update(): void { this._appender.flush(); super.update(); } - show(columnOrPreserveFocus?: vscode.ViewColumn | boolean, preserveFocus?: boolean): void { + override show(columnOrPreserveFocus?: vscode.ViewColumn | boolean, preserveFocus?: boolean): void { this._appender.flush(); super.show(columnOrPreserveFocus, preserveFocus); } - clear(): void { + override clear(): void { this._appender.flush(); super.clear(); } @@ -85,7 +85,7 @@ export class ExtHostOutputService2 extends ExtHostOutputService { this._logsLocation = initData.logsLocation; } - $setVisibleChannel(channelId: string): void { + override $setVisibleChannel(channelId: string): void { if (channelId) { const channel = this._channels.get(channelId); if (channel) { @@ -94,7 +94,7 @@ export class ExtHostOutputService2 extends ExtHostOutputService { } } - createOutputChannel(name: string): vscode.OutputChannel { + override createOutputChannel(name: string): vscode.OutputChannel { name = name.trim(); if (!name) { throw new Error('illegal argument `name`. must not be falsy'); diff --git a/src/vs/workbench/api/node/extHostSearch.ts b/src/vs/workbench/api/node/extHostSearch.ts index 0dba1956d58..be31f4ad1e0 100644 --- a/src/vs/workbench/api/node/extHostSearch.ts +++ b/src/vs/workbench/api/node/extHostSearch.ts @@ -59,7 +59,7 @@ export class NativeExtHostSearch extends ExtHostSearch { }); } - $provideFileSearchResults(handle: number, session: number, rawQuery: IRawFileQuery, token: vscode.CancellationToken): Promise { + override $provideFileSearchResults(handle: number, session: number, rawQuery: IRawFileQuery, token: vscode.CancellationToken): Promise { const query = reviveQuery(rawQuery); if (handle === this._internalFileSearchHandle) { return this.doInternalFileSearch(handle, session, query, token); @@ -91,7 +91,7 @@ export class NativeExtHostSearch extends ExtHostSearch { return >this._internalFileSearchProvider.doFileSearch(rawQuery, onResult, token); } - $clearCache(cacheKey: string): Promise { + override $clearCache(cacheKey: string): Promise { if (this._internalFileSearchProvider) { this._internalFileSearchProvider.clearCache(cacheKey); } @@ -99,7 +99,7 @@ export class NativeExtHostSearch extends ExtHostSearch { return super.$clearCache(cacheKey); } - protected createTextSearchManager(query: ITextQuery, provider: vscode.TextSearchProvider): TextSearchManager { + protected override createTextSearchManager(query: ITextQuery, provider: vscode.TextSearchProvider): TextSearchManager { return new NativeTextSearchManager(query, provider); } } diff --git a/src/vs/workbench/browser/actions/layoutActions.ts b/src/vs/workbench/browser/actions/layoutActions.ts index 75fb709ed6c..029690a20bb 100644 --- a/src/vs/workbench/browser/actions/layoutActions.ts +++ b/src/vs/workbench/browser/actions/layoutActions.ts @@ -139,7 +139,7 @@ export class ToggleSidebarPositionAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { const position = this.layoutService.getSideBarPosition(); const newPositionValue = (position === Position.LEFT) ? 'right' : 'left'; @@ -244,7 +244,7 @@ export class ToggleEditorVisibilityAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.layoutService.toggleMaximizedPanel(); } } @@ -339,7 +339,7 @@ export class ToggleStatusbarVisibilityAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { const visibility = this.layoutService.isVisible(Parts.STATUSBAR_PART); const newVisibilityValue = !visibility; @@ -376,7 +376,7 @@ class ToggleTabsVisibilityAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { const visibility = this.configurationService.getValue(ToggleTabsVisibilityAction.tabsVisibleKey); const newVisibilityValue = !visibility; @@ -405,7 +405,7 @@ class ToggleZenMode extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.layoutService.toggleZenMode(); } } @@ -448,7 +448,7 @@ export class ToggleMenuBarAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.layoutService.toggleMenuBar(); } } @@ -482,7 +482,7 @@ export class ResetViewLocationsAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.viewDescriptorService.reset(); } } @@ -585,7 +585,7 @@ export class MoveViewAction extends Action { }); } - async run(): Promise { + async override run(): Promise { const focusedViewId = FocusedViewContext.getValue(this.contextKeyService); let viewId: string; @@ -624,7 +624,7 @@ export class MoveFocusedViewAction extends Action { super(id, label); } - async run(viewId: string): Promise { + async override run(viewId: string): Promise { const focusedViewId = viewId || FocusedViewContext.getValue(this.contextKeyService); if (focusedViewId === undefined || focusedViewId.trim() === '') { @@ -744,7 +744,7 @@ export class ResetFocusedViewLocationAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const focusedViewId = FocusedViewContext.getValue(this.contextKeyService); let viewDescriptor: IViewDescriptor | null = null; diff --git a/src/vs/workbench/browser/actions/navigationActions.ts b/src/vs/workbench/browser/actions/navigationActions.ts index 6796c4d69c3..b0b58143561 100644 --- a/src/vs/workbench/browser/actions/navigationActions.ts +++ b/src/vs/workbench/browser/actions/navigationActions.ts @@ -32,7 +32,7 @@ abstract class BaseNavigationAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const isEditorFocus = this.layoutService.hasFocus(Parts.EDITOR_PART); const isPanelFocus = this.layoutService.hasFocus(Parts.PANEL_PART); const isSidebarFocus = this.layoutService.hasFocus(Parts.SIDEBAR_PART); @@ -234,7 +234,7 @@ export class FocusNextPart extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { focusNextOrPreviousPart(this.layoutService, this.editorService, true); } } @@ -252,7 +252,7 @@ export class FocusPreviousPart extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { focusNextOrPreviousPart(this.layoutService, this.editorService, false); } } diff --git a/src/vs/workbench/browser/actions/windowActions.ts b/src/vs/workbench/browser/actions/windowActions.ts index 389e9c794fe..85249494a70 100644 --- a/src/vs/workbench/browser/actions/windowActions.ts +++ b/src/vs/workbench/browser/actions/windowActions.ts @@ -78,7 +78,7 @@ abstract class BaseOpenRecentAction extends Action { protected abstract isQuickNavigate(): boolean; - async run(): Promise { + async override run(): Promise { const recentlyOpened = await this.workspacesService.getRecentlyOpened(); const dirtyWorkspacesAndFolders = await this.workspacesService.getDirtyWorkspaces(); @@ -286,7 +286,7 @@ class ToggleFullScreenAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { return this.hostService.toggleFullScreen(); } } @@ -304,7 +304,7 @@ export class ReloadWindowAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { await this.hostService.reload(); } } @@ -322,7 +322,7 @@ class ShowAboutDialogAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { return this.dialogService.about(); } } @@ -340,7 +340,7 @@ export class NewWindowAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { return this.hostService.openWindow({ remoteAuthority: null }); } } diff --git a/src/vs/workbench/browser/actions/workspaceActions.ts b/src/vs/workbench/browser/actions/workspaceActions.ts index ba19ed1be61..13e2f1bb1b2 100644 --- a/src/vs/workbench/browser/actions/workspaceActions.ts +++ b/src/vs/workbench/browser/actions/workspaceActions.ts @@ -39,7 +39,7 @@ export class OpenFileAction extends Action { super(id, label); } - run(event?: unknown, data?: ITelemetryData): Promise { + override run(event?: unknown, data?: ITelemetryData): Promise { return this.dialogService.pickFileAndOpen({ forceNewWindow: false, telemetryExtraData: data }); } } @@ -57,7 +57,7 @@ export class OpenFolderAction extends Action { super(id, label); } - run(event?: unknown, data?: ITelemetryData): Promise { + override run(event?: unknown, data?: ITelemetryData): Promise { return this.dialogService.pickFolderAndOpen({ forceNewWindow: false, telemetryExtraData: data }); } } @@ -75,7 +75,7 @@ export class OpenFileFolderAction extends Action { super(id, label); } - run(event?: unknown, data?: ITelemetryData): Promise { + override run(event?: unknown, data?: ITelemetryData): Promise { return this.dialogService.pickFileFolderAndOpen({ forceNewWindow: false, telemetryExtraData: data }); } } @@ -93,7 +93,7 @@ export class OpenWorkspaceAction extends Action { super(id, label); } - run(event?: unknown, data?: ITelemetryData): Promise { + override run(event?: unknown, data?: ITelemetryData): Promise { return this.dialogService.pickWorkspaceAndOpen({ telemetryExtraData: data }); } } @@ -114,7 +114,7 @@ export class CloseWorkspaceAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { if (this.contextService.getWorkbenchState() === WorkbenchState.EMPTY) { this.notificationService.info(localize('noWorkspaceOrFolderOpened', "There is currently no workspace or folder opened in this instance to close.")); return; @@ -140,7 +140,7 @@ export class OpenWorkspaceConfigFileAction extends Action { this.enabled = !!this.workspaceContextService.getWorkspace().configuration; } - async run(): Promise { + async override run(): Promise { const configuration = this.workspaceContextService.getWorkspace().configuration; if (configuration) { await this.editorService.openEditor({ resource: configuration, options: { pinned: true } }); @@ -161,7 +161,7 @@ export class AddRootFolderAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { return this.commandService.executeCommand(ADD_ROOT_FOLDER_COMMAND_ID); } } @@ -181,7 +181,7 @@ export class GlobalRemoveRootFolderAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const state = this.contextService.getWorkbenchState(); // Workspace / Folder @@ -209,7 +209,7 @@ export class SaveWorkspaceAsAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const configPathUri = await this.workspaceEditingService.pickNewWorkspacePath(); if (configPathUri && hasWorkspaceFileExtension(configPathUri)) { switch (this.contextService.getWorkbenchState()) { @@ -241,7 +241,7 @@ export class DuplicateWorkspaceInNewWindowAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const folders = this.workspaceContextService.getWorkspace().folders; const remoteAuthority = this.environmentService.remoteAuthority; diff --git a/src/vs/workbench/browser/codeeditor.ts b/src/vs/workbench/browser/codeeditor.ts index f7d116f6b92..239435c2bb6 100644 --- a/src/vs/workbench/browser/codeeditor.ts +++ b/src/vs/workbench/browser/codeeditor.ts @@ -122,7 +122,7 @@ export class RangeHighlightDecorations extends Disposable { return (isWholeLine ? RangeHighlightDecorations._WHOLE_LINE_RANGE_HIGHLIGHT : RangeHighlightDecorations._RANGE_HIGHLIGHT); } - dispose() { + override dispose() { super.dispose(); if (this.editor?.getModel()) { @@ -201,7 +201,7 @@ export class FloatingClickWidget extends Widget implements IOverlayWidget { this.editor.addOverlayWidget(this); } - dispose(): void { + override dispose(): void { this.editor.removeOverlayWidget(this); super.dispose(); @@ -292,7 +292,7 @@ export class OpenWorkspaceButtonContribution extends Disposable implements IEdit this.openWorkspaceButton = undefined; } - dispose(): void { + override dispose(): void { this.disposeOpenWorkspaceWidgetRenderer(); super.dispose(); diff --git a/src/vs/workbench/browser/composite.ts b/src/vs/workbench/browser/composite.ts index a6c58ee4afe..f8c500dd2f8 100644 --- a/src/vs/workbench/browser/composite.ts +++ b/src/vs/workbench/browser/composite.ts @@ -118,7 +118,7 @@ export abstract class Composite extends Component implements IComposite { this.parent = parent; } - updateStyles(): void { + override updateStyles(): void { super.updateStyles(); } diff --git a/src/vs/workbench/browser/labels.ts b/src/vs/workbench/browser/labels.ts index 5bafb730a97..a578568782b 100644 --- a/src/vs/workbench/browser/labels.ts +++ b/src/vs/workbench/browser/labels.ts @@ -227,7 +227,7 @@ export class ResourceLabels extends Disposable { this.labels = []; } - dispose(): void { + override dispose(): void { super.dispose(); this.clear(); @@ -580,7 +580,7 @@ class ResourceLabelWidget extends IconLabel { return true; } - dispose(): void { + override dispose(): void { super.dispose(); this.label = undefined; diff --git a/src/vs/workbench/browser/layout.ts b/src/vs/workbench/browser/layout.ts index 183b5324d11..1f4613cef46 100644 --- a/src/vs/workbench/browser/layout.ts +++ b/src/vs/workbench/browser/layout.ts @@ -1770,7 +1770,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi return result; } - dispose(): void { + override dispose(): void { super.dispose(); this.disposed = true; diff --git a/src/vs/workbench/browser/panecomposite.ts b/src/vs/workbench/browser/panecomposite.ts index 38e33e2bee8..861f46ddd05 100644 --- a/src/vs/workbench/browser/panecomposite.ts +++ b/src/vs/workbench/browser/panecomposite.ts @@ -36,13 +36,13 @@ export abstract class PaneComposite extends Composite implements IPaneComposite super(id, telemetryService, themeService, storageService); } - create(parent: HTMLElement): void { + override create(parent: HTMLElement): void { this.viewPaneContainer = this._register(this.createViewPaneContainer(parent)); this._register(this.viewPaneContainer.onTitleAreaUpdate(() => this.updateTitleArea())); this.viewPaneContainer.create(parent); } - setVisible(visible: boolean): void { + override setVisible(visible: boolean): void { super.setVisible(visible); this.viewPaneContainer?.setVisible(visible); } @@ -63,15 +63,15 @@ export abstract class PaneComposite extends Composite implements IPaneComposite return this.viewPaneContainer; } - getActionsContext(): unknown { + override getActionsContext(): unknown { return this.getViewPaneContainer()?.getActionsContext(); } - getContextMenuActions(): ReadonlyArray { + override getContextMenuActions(): ReadonlyArray { return this.viewPaneContainer?.menuActions?.getContextMenuActions() ?? []; } - getActions(): ReadonlyArray { + override getActions(): ReadonlyArray { const result = []; if (this.viewPaneContainer?.menuActions) { result.push(...this.viewPaneContainer.menuActions.getPrimaryActions()); @@ -82,7 +82,7 @@ export abstract class PaneComposite extends Composite implements IPaneComposite return result; } - getSecondaryActions(): ReadonlyArray { + override getSecondaryActions(): ReadonlyArray { if (!this.viewPaneContainer?.menuActions) { return []; } @@ -116,19 +116,19 @@ export abstract class PaneComposite extends Composite implements IPaneComposite return menuActions.length ? menuActions : viewPaneActions; } - getActionViewItem(action: IAction): IActionViewItem | undefined { + override getActionViewItem(action: IAction): IActionViewItem | undefined { return this.viewPaneContainer?.getActionViewItem(action); } - getTitle(): string { + override getTitle(): string { return this.viewPaneContainer?.getTitle() ?? ''; } - saveState(): void { + override saveState(): void { super.saveState(); } - focus(): void { + override focus(): void { this.viewPaneContainer?.focus(); } diff --git a/src/vs/workbench/browser/panel.ts b/src/vs/workbench/browser/panel.ts index ab678781a3c..06e4a72f5e3 100644 --- a/src/vs/workbench/browser/panel.ts +++ b/src/vs/workbench/browser/panel.ts @@ -37,15 +37,15 @@ export abstract class Panel extends PaneComposite implements IPanel { this._register(this.panelActions.onDidChange(() => this.updateTitleArea())); } - getActions(): ReadonlyArray { + override getActions(): ReadonlyArray { return [...super.getActions(), ...this.panelActions.getPrimaryActions()]; } - getSecondaryActions(): ReadonlyArray { + override getSecondaryActions(): ReadonlyArray { return this.mergeSecondaryActions(super.getSecondaryActions(), this.panelActions.getSecondaryActions()); } - getContextMenuActions(): ReadonlyArray { + override getContextMenuActions(): ReadonlyArray { return this.mergeSecondaryActions(super.getContextMenuActions(), this.panelActions.getContextMenuActions()); } diff --git a/src/vs/workbench/browser/part.ts b/src/vs/workbench/browser/part.ts index 79e163565df..fd89c569033 100644 --- a/src/vs/workbench/browser/part.ts +++ b/src/vs/workbench/browser/part.ts @@ -52,7 +52,7 @@ export abstract class Part extends Component implements ISerializableView { layoutService.registerPart(this); } - protected onThemeChange(theme: IColorTheme): void { + protected override onThemeChange(theme: IColorTheme): void { // only call if our create() method has been called if (this.parent) { @@ -60,7 +60,7 @@ export abstract class Part extends Component implements ISerializableView { } } - updateStyles(): void { + override updateStyles(): void { super.updateStyles(); } diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts b/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts index ceaf2150923..2100c07702b 100644 --- a/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts +++ b/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts @@ -56,7 +56,7 @@ export class ViewContainerActivityAction extends ActivityAction { this.activity = activity; } - async run(event: unknown): Promise { + async override run(event: unknown): Promise { if (event instanceof MouseEvent && event.button === 2) { return; // do not run on right click } @@ -121,7 +121,7 @@ class MenuActivityActionViewItem extends ActivityActionViewItem { super(action, { draggable: false, colors, icon: true, hasPopup: true }, themeService); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); // Context menus are triggered on mouse down so that an item can be picked @@ -203,7 +203,7 @@ export class AccountsActivityActionViewItem extends MenuActivityActionViewItem { super(MenuId.AccountsContext, action, contextMenuActionsProvider, colors, themeService, menuService, contextMenuService, contextKeyService, configurationService, environmentService); } - protected async resolveMainMenuActions(accountsMenu: IMenu, disposables: DisposableStore): Promise { + protected async override resolveMainMenuActions(accountsMenu: IMenu, disposables: DisposableStore): Promise { await super.resolveMainMenuActions(accountsMenu, disposables); const otherCommands = accountsMenu.getActions(); @@ -279,7 +279,7 @@ export class AccountsActivityActionViewItem extends MenuActivityActionViewItem { return menus; } - protected async resolveContextMenuActions(disposables: DisposableStore): Promise { + protected async override resolveContextMenuActions(disposables: DisposableStore): Promise { const actions = await super.resolveContextMenuActions(disposables); actions.unshift(...[ diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts index f9ee130df8c..911623ec1b0 100644 --- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts @@ -447,7 +447,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { this.registerKeyboardNavigationListeners(); } - createContentArea(parent: HTMLElement): HTMLElement { + override createContentArea(parent: HTMLElement): HTMLElement { this.element = parent; this.content = document.createElement('div'); @@ -765,7 +765,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { this.compositeBar.focus(); } - updateStyles(): void { + override updateStyles(): void { super.updateStyles(); const container = assertIsDefined(this.getContainer()); @@ -790,7 +790,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { }; } - layout(width: number, height: number): void { + override layout(width: number, height: number): void { if (!this.layoutService.isVisible(Parts.ACTIVITYBAR_PART)) { return; } diff --git a/src/vs/workbench/browser/parts/compositeBarActions.ts b/src/vs/workbench/browser/parts/compositeBarActions.ts index 9920e31749a..44c66a7bf78 100644 --- a/src/vs/workbench/browser/parts/compositeBarActions.ts +++ b/src/vs/workbench/browser/parts/compositeBarActions.ts @@ -101,7 +101,7 @@ export class ActivityAction extends Action { this._onDidChangeBadge.fire(this); } - dispose(): void { + override dispose(): void { this._onDidChangeActivity.dispose(); this._onDidChangeBadge.dispose(); @@ -195,7 +195,7 @@ export class ActivityActionViewItem extends BaseActionViewItem { } } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); this.container = container; @@ -326,7 +326,7 @@ export class ActivityActionViewItem extends BaseActionViewItem { this.updateTitle(title); } - protected updateLabel(): void { + protected override updateLabel(): void { this.label.className = 'action-label'; if (this.activity.cssClass) { @@ -352,7 +352,7 @@ export class ActivityActionViewItem extends BaseActionViewItem { }); } - dispose(): void { + override dispose(): void { super.dispose(); if (this.mouseUpTimeout) { @@ -375,7 +375,7 @@ export class CompositeOverflowActivityAction extends ActivityAction { }); } - async run(): Promise { + async override run(): Promise { this.showMenu(); } } @@ -434,7 +434,7 @@ export class CompositeOverflowActivityActionViewItem extends ActivityActionViewI }); } - dispose(): void { + override dispose(): void { super.dispose(); if (this.actions) { @@ -451,7 +451,7 @@ class ManageExtensionAction extends Action { super('activitybar.manage.extension', localize('manageExtension', "Manage Extension")); } - run(id: string): Promise { + override run(id: string): Promise { return this.commandService.executeCommand('_extensions.manage', id); } } @@ -497,7 +497,7 @@ export class CompositeActionViewItem extends ActivityActionViewItem { })); } - protected get activity(): IActivity { + protected override get activity(): IActivity { if (!this.compositeActivity) { this.compositeActivity = { ...this.compositeActivityAction.activity, @@ -517,7 +517,7 @@ export class CompositeActionViewItem extends ActivityActionViewItem { return keybinding ? localize('titleKeybinding', "{0} ({1})", name, keybinding.getLabel()) : name; } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); this.updateChecked(); @@ -652,7 +652,7 @@ export class CompositeActionViewItem extends ActivityActionViewItem { }); } - protected updateChecked(): void { + protected override updateChecked(): void { if (this.getAction().checked) { this.container.classList.add('checked'); this.container.setAttribute('aria-label', this.container.title); @@ -667,7 +667,7 @@ export class CompositeActionViewItem extends ActivityActionViewItem { this.updateStyles(); } - protected updateEnabled(): void { + protected override updateEnabled(): void { if (!this.element) { return; } @@ -679,7 +679,7 @@ export class CompositeActionViewItem extends ActivityActionViewItem { } } - dispose(): void { + override dispose(): void { super.dispose(); this.label.remove(); } @@ -696,7 +696,7 @@ export class ToggleCompositePinnedAction extends Action { this.checked = !!this.activity && this.compositeBar.isPinned(this.activity.id); } - async run(context: string): Promise { + async override run(context: string): Promise { const id = this.activity ? this.activity.id : context; if (this.compositeBar.isPinned(id)) { diff --git a/src/vs/workbench/browser/parts/compositePart.ts b/src/vs/workbench/browser/parts/compositePart.ts index f735e427e6c..9e27444ba5f 100644 --- a/src/vs/workbench/browser/parts/compositePart.ts +++ b/src/vs/workbench/browser/parts/compositePart.ts @@ -374,7 +374,7 @@ export abstract class CompositePart extends Part { return composite; } - createTitleArea(parent: HTMLElement): HTMLElement { + override createTitleArea(parent: HTMLElement): HTMLElement { // Title Area Container const titleArea = append(parent, $('.composite')); @@ -421,7 +421,7 @@ export abstract class CompositePart extends Part { }; } - updateStyles(): void { + override updateStyles(): void { super.updateStyles(); // Forward to title label @@ -449,7 +449,7 @@ export abstract class CompositePart extends Part { return null; } - createContentArea(parent: HTMLElement): HTMLElement { + override createContentArea(parent: HTMLElement): HTMLElement { const contentContainer = append(parent, $('.content')); this.progressBar = this._register(new ProgressBar(contentContainer)); @@ -469,7 +469,7 @@ export abstract class CompositePart extends Part { return AnchorAlignment.RIGHT; } - layout(width: number, height: number): void { + override layout(width: number, height: number): void { super.layout(width, height); // Layout contents @@ -498,7 +498,7 @@ export abstract class CompositePart extends Part { return true; } - dispose(): void { + override dispose(): void { this.mapCompositeToCompositeContainer.clear(); this.mapActionsBindingToComposite.clear(); diff --git a/src/vs/workbench/browser/parts/editor/binaryEditor.ts b/src/vs/workbench/browser/parts/editor/binaryEditor.ts index 53a93906739..8bc795a28a1 100644 --- a/src/vs/workbench/browser/parts/editor/binaryEditor.ts +++ b/src/vs/workbench/browser/parts/editor/binaryEditor.ts @@ -57,7 +57,7 @@ export abstract class BaseBinaryResourceEditor extends EditorPane { this.callbacks = callbacks; } - getTitle(): string { + override getTitle(): string { return this.input ? this.input.getName() : localize('binaryEditor', "Binary Viewer"); } @@ -74,7 +74,7 @@ export abstract class BaseBinaryResourceEditor extends EditorPane { parent.appendChild(this.scrollbar.getDomNode()); } - async setInput(input: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + async override setInput(input: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { await super.setInput(input, options, context, token); const model = await input.resolve(); @@ -118,7 +118,7 @@ export abstract class BaseBinaryResourceEditor extends EditorPane { return this.metadata; } - clearInput(): void { + override clearInput(): void { // Clear Meta this.handleMetadataChanged(undefined); @@ -144,13 +144,13 @@ export abstract class BaseBinaryResourceEditor extends EditorPane { } } - focus(): void { + override focus(): void { const binaryContainer = assertIsDefined(this.binaryContainer); binaryContainer.focus(); } - dispose(): void { + override dispose(): void { if (this.binaryContainer) { this.binaryContainer.remove(); } diff --git a/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts b/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts index 507251c3fe8..f0957c16ec5 100644 --- a/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts +++ b/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts @@ -54,7 +54,7 @@ class OutlineItem extends BreadcrumbsItem { super(); } - dispose(): void { + override dispose(): void { this._disposables.dispose(); } @@ -114,7 +114,7 @@ class FileItem extends BreadcrumbsItem { super(); } - dispose(): void { + override dispose(): void { this._disposables.dispose(); } diff --git a/src/vs/workbench/browser/parts/editor/editorActions.ts b/src/vs/workbench/browser/parts/editor/editorActions.ts index 44cc84d8fa0..3e6ee6df948 100644 --- a/src/vs/workbench/browser/parts/editor/editorActions.ts +++ b/src/vs/workbench/browser/parts/editor/editorActions.ts @@ -36,7 +36,7 @@ export class ExecuteCommandAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { return this.commandService.executeCommand(this.commandId, this.commandArgs); } } @@ -70,7 +70,7 @@ export class BaseSplitEditorAction extends Action { })); } - async run(context?: IEditorIdentifier): Promise { + async override run(context?: IEditorIdentifier): Promise { splitEditor(this.editorGroupService, this.direction, context); } } @@ -104,7 +104,7 @@ export class SplitEditorOrthogonalAction extends BaseSplitEditorAction { super(id, label, editorGroupService, configurationService); } - protected getDirection(): GroupDirection { + protected override getDirection(): GroupDirection { const direction = preferredSideBySideGroupDirection(this.configurationService); return direction === GroupDirection.RIGHT ? GroupDirection.DOWN : GroupDirection.RIGHT; @@ -180,7 +180,7 @@ export class JoinTwoGroupsAction extends Action { super(id, label); } - async run(context?: IEditorIdentifier): Promise { + async override run(context?: IEditorIdentifier): Promise { let sourceGroup: IEditorGroup | undefined; if (context && typeof context.groupId === 'number') { sourceGroup = this.editorGroupService.getGroup(context.groupId); @@ -215,7 +215,7 @@ export class JoinAllGroupsAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.editorGroupService.mergeAllGroups(); } } @@ -233,7 +233,7 @@ export class NavigateBetweenGroupsAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const nextGroup = this.editorGroupService.findGroup({ location: GroupLocation.NEXT }, this.editorGroupService.activeGroup, true); nextGroup.focus(); } @@ -252,7 +252,7 @@ export class FocusActiveGroupAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.editorGroupService.activeGroup.focus(); } } @@ -268,7 +268,7 @@ export abstract class BaseFocusGroupAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const group = this.editorGroupService.findGroup(this.scope, this.editorGroupService.activeGroup, true); if (group) { group.focus(); @@ -401,7 +401,7 @@ export class CloseEditorAction extends Action { super(id, label, Codicon.close.classNames); } - run(context?: IEditorCommandsContext): Promise { + override run(context?: IEditorCommandsContext): Promise { return this.commandService.executeCommand(CLOSE_EDITOR_COMMAND_ID, undefined, context); } } @@ -419,7 +419,7 @@ export class UnpinEditorAction extends Action { super(id, label, Codicon.pinned.classNames); } - run(context?: IEditorCommandsContext): Promise { + override run(context?: IEditorCommandsContext): Promise { return this.commandService.executeCommand(UNPIN_EDITOR_COMMAND_ID, undefined, context); } } @@ -437,7 +437,7 @@ export class CloseOneEditorAction extends Action { super(id, label, Codicon.close.classNames); } - async run(context?: IEditorCommandsContext): Promise { + async override run(context?: IEditorCommandsContext): Promise { let group: IEditorGroup | undefined; let editorIndex: number | undefined; if (context) { @@ -480,7 +480,7 @@ export class RevertAndCloseEditorAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const activeEditorPane = this.editorService.activeEditorPane; if (activeEditorPane) { const editor = activeEditorPane.input; @@ -515,7 +515,7 @@ export class CloseLeftEditorsInGroupAction extends Action { super(id, label); } - async run(context?: IEditorIdentifier): Promise { + async override run(context?: IEditorIdentifier): Promise { const { group, editor } = this.getTarget(context); if (group && editor) { return group.closeEditors({ direction: CloseDirection.LEFT, except: editor, excludeSticky: true }); @@ -561,7 +561,7 @@ abstract class BaseCloseAllAction extends Action { return groupsToClose; } - async run(): Promise { + async override run(): Promise { // Just close all if there are no dirty editors if (!this.workingCopyService.hasDirty) { @@ -714,7 +714,7 @@ export class CloseEditorsInOtherGroupsAction extends Action { super(id, label); } - async run(context?: IEditorIdentifier): Promise { + async override run(context?: IEditorIdentifier): Promise { const groupToSkip = context ? this.editorGroupService.getGroup(context.groupId) : this.editorGroupService.activeGroup; await Promise.all(this.editorGroupService.getGroups(GroupsOrder.MOST_RECENTLY_ACTIVE).map(async group => { if (groupToSkip && group.id === groupToSkip.id) { @@ -740,7 +740,7 @@ export class CloseEditorInAllGroupsAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const activeEditor = this.editorService.activeEditor; if (activeEditor) { await Promise.all(this.editorGroupService.getGroups(GroupsOrder.MOST_RECENTLY_ACTIVE).map(group => group.closeEditor(activeEditor))); @@ -760,7 +760,7 @@ class BaseMoveCopyGroupAction extends Action { super(id, label); } - async run(context?: IEditorIdentifier): Promise { + async override run(context?: IEditorIdentifier): Promise { let sourceGroup: IEditorGroup | undefined; if (context && typeof context.groupId === 'number') { sourceGroup = this.editorGroupService.getGroup(context.groupId); @@ -958,7 +958,7 @@ export class MinimizeOtherGroupsAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.editorGroupService.arrangeGroups(GroupsArrangement.MINIMIZE_OTHERS); } } @@ -972,7 +972,7 @@ export class ResetGroupSizesAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.editorGroupService.arrangeGroups(GroupsArrangement.EVEN); } } @@ -986,7 +986,7 @@ export class ToggleGroupSizesAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.editorGroupService.arrangeGroups(GroupsArrangement.TOGGLE); } } @@ -1006,7 +1006,7 @@ export class MaximizeGroupAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { if (this.editorService.activeEditor) { this.editorGroupService.arrangeGroups(GroupsArrangement.MINIMIZE_OTHERS); this.layoutService.setSideBarHidden(true); @@ -1025,7 +1025,7 @@ export abstract class BaseNavigateEditorAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const result = this.navigate(); if (!result) { return; @@ -1214,7 +1214,7 @@ export class NavigateForwardAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.historyService.forward(); } } @@ -1228,7 +1228,7 @@ export class NavigateBackwardsAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.historyService.back(); } } @@ -1242,7 +1242,7 @@ export class NavigateToLastEditLocationAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.historyService.openLastEditLocation(); } } @@ -1256,7 +1256,7 @@ export class NavigateLastAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.historyService.last(); } } @@ -1274,7 +1274,7 @@ export class ReopenClosedEditorAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.historyService.reopenLastClosedEditor(); } } @@ -1293,7 +1293,7 @@ export class ClearRecentFilesAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { // Clear global recently opened this.workspacesService.clearRecentlyOpened(); @@ -1316,7 +1316,7 @@ export class ShowEditorsInActiveGroupByMostRecentlyUsedAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.quickInputService.quickAccess.show(ActiveGroupEditorsByMostRecentlyUsedQuickAccess.PREFIX); } } @@ -1334,7 +1334,7 @@ export class ShowAllEditorsByAppearanceAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.quickInputService.quickAccess.show(AllEditorsByAppearanceQuickAccess.PREFIX); } } @@ -1352,7 +1352,7 @@ export class ShowAllEditorsByMostRecentlyUsedAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.quickInputService.quickAccess.show(AllEditorsByMostRecentlyUsedQuickAccess.PREFIX); } } @@ -1370,7 +1370,7 @@ export class BaseQuickAccessEditorAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const keybindings = this.keybindingService.lookupKeybindings(this.id); this.quickInputService.quickAccess.show(this.prefix, { @@ -1455,7 +1455,7 @@ export class QuickAccessPreviousEditorFromHistoryAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const keybindings = this.keybindingService.lookupKeybindings(this.id); // Enforce to activate the first item in quick access if @@ -1482,7 +1482,7 @@ export class OpenNextRecentlyUsedEditorAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.historyService.openNextRecentlyUsedEditor(); } } @@ -1500,7 +1500,7 @@ export class OpenPreviousRecentlyUsedEditorAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.historyService.openPreviouslyUsedEditor(); } } @@ -1519,7 +1519,7 @@ export class OpenNextRecentlyUsedEditorInGroupAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.historyService.openNextRecentlyUsedEditor(this.editorGroupsService.activeGroup.id); } } @@ -1538,7 +1538,7 @@ export class OpenPreviousRecentlyUsedEditorInGroupAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.historyService.openPreviouslyUsedEditor(this.editorGroupsService.activeGroup.id); } } @@ -1556,7 +1556,7 @@ export class ClearEditorHistoryAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { // Editor history this.historyService.clear(); @@ -1826,7 +1826,7 @@ export class BaseCreateEditorGroupAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.editorGroupService.addGroup(this.editorGroupService.activeGroup, this.direction, { activate: true }); } } @@ -1900,7 +1900,7 @@ export class ReopenResourcesAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const activeInput = this.editorService.activeEditor; if (!activeInput) { return; @@ -1930,7 +1930,7 @@ export class ToggleEditorTypeAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const activeEditorPane = this.editorService.activeEditorPane; if (!activeEditorPane) { return; diff --git a/src/vs/workbench/browser/parts/editor/editorDropTarget.ts b/src/vs/workbench/browser/parts/editor/editorDropTarget.ts index 9023c27d152..11a5df1b69c 100644 --- a/src/vs/workbench/browser/parts/editor/editorDropTarget.ts +++ b/src/vs/workbench/browser/parts/editor/editorDropTarget.ts @@ -97,7 +97,7 @@ class DropOverlay extends Themable { this.updateStyles(); } - protected updateStyles(): void { + protected override updateStyles(): void { const overlay = assertIsDefined(this.overlay); // Overlay drop background @@ -543,7 +543,7 @@ class DropOverlay extends Themable { return element === this.container || element === this.overlay; } - dispose(): void { + override dispose(): void { super.dispose(); this._disposed = true; @@ -652,7 +652,7 @@ export class EditorDropTarget extends Themable { this.container.classList.toggle('dragged-over', isDraggedOver); } - dispose(): void { + override dispose(): void { super.dispose(); this.disposeOverlay(); diff --git a/src/vs/workbench/browser/parts/editor/editorGroupView.ts b/src/vs/workbench/browser/parts/editor/editorGroupView.ts index 542896a70ba..14efe3da40b 100644 --- a/src/vs/workbench/browser/parts/editor/editorGroupView.ts +++ b/src/vs/workbench/browser/parts/editor/editorGroupView.ts @@ -298,7 +298,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView { const groupId = this._group.id; const containerToolbar = this._register(new ActionBar(toolbarContainer, { ariaLabel: localize('ariaLabelGroupActions', "Editor group actions"), actionRunner: this._register(new class extends ActionRunner { - async run(action: IAction) { + async override run(action: IAction) { await action.run(groupId); } }) @@ -1690,7 +1690,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView { //#region Themable - protected updateStyles(): void { + protected override updateStyles(): void { const isEmpty = this.isEmpty; // Container @@ -1759,7 +1759,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView { //#endregion - dispose(): void { + override dispose(): void { this._disposed = true; this._onWillDispose.fire(); diff --git a/src/vs/workbench/browser/parts/editor/editorPane.ts b/src/vs/workbench/browser/parts/editor/editorPane.ts index a9ae87d96ba..081a0a8ae31 100644 --- a/src/vs/workbench/browser/parts/editor/editorPane.ts +++ b/src/vs/workbench/browser/parts/editor/editorPane.ts @@ -76,7 +76,7 @@ export abstract class EditorPane extends Composite implements IEditorPane { super(id, telemetryService, themeService, storageService); } - create(parent: HTMLElement): void { + override create(parent: HTMLElement): void { super.create(parent); // Create Editor @@ -133,7 +133,7 @@ export abstract class EditorPane extends Composite implements IEditorPane { this._options = options; } - setVisible(visible: boolean, group?: IEditorGroup): void { + override setVisible(visible: boolean, group?: IEditorGroup): void { super.setVisible(visible); // Propagate to Editor @@ -163,7 +163,7 @@ export abstract class EditorPane extends Composite implements IEditorPane { return editorMemento; } - protected saveState(): void { + protected override saveState(): void { // Save all editor memento for this editor type for (const [, editorMemento] of EditorPane.EDITOR_MEMENTOS) { @@ -175,7 +175,7 @@ export abstract class EditorPane extends Composite implements IEditorPane { super.saveState(); } - dispose(): void { + override dispose(): void { this._input = undefined; this._options = undefined; diff --git a/src/vs/workbench/browser/parts/editor/editorPart.ts b/src/vs/workbench/browser/parts/editor/editorPart.ts index 398f9a19213..e174d6f8420 100644 --- a/src/vs/workbench/browser/parts/editor/editorPart.ts +++ b/src/vs/workbench/browser/parts/editor/editorPart.ts @@ -801,14 +801,14 @@ export class EditorPart extends Part implements IEditorGroupsService, IEditorGro readonly snap = true; - get onDidChange(): Event { return Event.any(this.centeredLayoutWidget.onDidChange, this.onDidSetGridWidget.event); } + override get onDidChange(): Event { return Event.any(this.centeredLayoutWidget.onDidChange, this.onDidSetGridWidget.event); } readonly priority: LayoutPriority = LayoutPriority.High; private get gridSeparatorBorder(): Color { return this.theme.getColor(EDITOR_GROUP_BORDER) || this.theme.getColor(contrastBorder) || Color.transparent; } - updateStyles(): void { + override updateStyles(): void { const container = assertIsDefined(this.container); container.style.backgroundColor = this.getColor(editorBackground) || ''; @@ -817,7 +817,7 @@ export class EditorPart extends Part implements IEditorGroupsService, IEditorGro this.centeredLayoutWidget.styles(separatorBorderStyle); } - createContentArea(parent: HTMLElement, options?: IEditorPartCreationOptions): HTMLElement { + override createContentArea(parent: HTMLElement, options?: IEditorPartCreationOptions): HTMLElement { // Container this.element = parent; @@ -1068,7 +1068,7 @@ export class EditorPart extends Part implements IEditorGroupsService, IEditorGro this.centeredLayoutWidget.boundarySashes = sashes; } - layout(width: number, height: number): void { + override layout(width: number, height: number): void { // Layout contents const contentAreaSize = super.layoutContents(width, height).contentSize; @@ -1087,7 +1087,7 @@ export class EditorPart extends Part implements IEditorGroupsService, IEditorGro this._onDidLayout.fire(dimension); } - protected saveState(): void { + protected override saveState(): void { // Persist grid UI state if (this.gridWidget) { @@ -1123,7 +1123,7 @@ export class EditorPart extends Part implements IEditorGroupsService, IEditorGro }; } - dispose(): void { + override dispose(): void { // Forward to all groups this.groupViews.forEach(group => group.dispose()); diff --git a/src/vs/workbench/browser/parts/editor/editorQuickAccess.ts b/src/vs/workbench/browser/parts/editor/editorQuickAccess.ts index ca4c7f6f0ee..c2ffbde257e 100644 --- a/src/vs/workbench/browser/parts/editor/editorQuickAccess.ts +++ b/src/vs/workbench/browser/parts/editor/editorQuickAccess.ts @@ -59,7 +59,7 @@ export abstract class BaseEditorQuickAccessProvider extends PickerQuickAccessPro ); } - provide(picker: IQuickPick, token: CancellationToken): IDisposable { + override provide(picker: IQuickPick, token: CancellationToken): IDisposable { // Reset the pick state for this run this.pickState.reset(!!picker.quickNavigate); diff --git a/src/vs/workbench/browser/parts/editor/editorStatus.ts b/src/vs/workbench/browser/parts/editor/editorStatus.ts index 18928433921..29be8642716 100644 --- a/src/vs/workbench/browser/parts/editor/editorStatus.ts +++ b/src/vs/workbench/browser/parts/editor/editorStatus.ts @@ -1044,7 +1044,7 @@ export class ShowLanguageExtensionsAction extends Action { this.enabled = galleryService.isEnabled(); } - async run(): Promise { + async override run(): Promise { await this.commandService.executeCommand('workbench.extensions.action.showExtensionsForLanguage', this.fileExtension); } } @@ -1069,7 +1069,7 @@ export class ChangeModeAction extends Action { super(actionId, actionLabel); } - async run(event: unknown, data?: ITelemetryData): Promise { + async override run(event: unknown, data?: ITelemetryData): Promise { const activeTextEditorControl = getCodeEditor(this.editorService.activeTextEditorControl); if (!activeTextEditorControl) { await this.quickInputService.pick([{ label: localize('noEditor', "No text editor active at this time") }]); @@ -1263,7 +1263,7 @@ export class ChangeEOLAction extends Action { super(actionId, actionLabel); } - async run(): Promise { + async override run(): Promise { const activeTextEditorControl = getCodeEditor(this.editorService.activeTextEditorControl); if (!activeTextEditorControl) { await this.quickInputService.pick([{ label: localize('noEditor', "No text editor active at this time") }]); @@ -1316,7 +1316,7 @@ export class ChangeEncodingAction extends Action { super(actionId, actionLabel); } - async run(): Promise { + async override run(): Promise { const activeTextEditorControl = getCodeEditor(this.editorService.activeTextEditorControl); if (!activeTextEditorControl) { await this.quickInputService.pick([{ label: localize('noEditor', "No text editor active at this time") }]); diff --git a/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts b/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts index 0a4b11ef706..1ee028532b3 100644 --- a/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts +++ b/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts @@ -321,7 +321,7 @@ export class NoTabsTitleControl extends TitleControl { } } - protected prepareEditorActions(editorActions: IToolbarActions): { primaryEditorActions: IAction[], secondaryEditorActions: IAction[] } { + protected override prepareEditorActions(editorActions: IToolbarActions): { primaryEditorActions: IAction[], secondaryEditorActions: IAction[] } { const isGroupActive = this.accessor.activeGroup === this.group; // Group active: show all actions diff --git a/src/vs/workbench/browser/parts/editor/sideBySideEditor.ts b/src/vs/workbench/browser/parts/editor/sideBySideEditor.ts index dcfda946663..b7225fae9f5 100644 --- a/src/vs/workbench/browser/parts/editor/sideBySideEditor.ts +++ b/src/vs/workbench/browser/parts/editor/sideBySideEditor.ts @@ -34,15 +34,15 @@ export class SideBySideEditor extends EditorPane { private get maximumSecondaryHeight() { return this.secondaryEditorPane ? this.secondaryEditorPane.maximumHeight : Number.POSITIVE_INFINITY; } // these setters need to exist because this extends from EditorPane - set minimumWidth(value: number) { /* noop */ } - set maximumWidth(value: number) { /* noop */ } - set minimumHeight(value: number) { /* noop */ } - set maximumHeight(value: number) { /* noop */ } + override set minimumWidth(value: number) { /* noop */ } + override set maximumWidth(value: number) { /* noop */ } + override set minimumHeight(value: number) { /* noop */ } + override set maximumHeight(value: number) { /* noop */ } - get minimumWidth() { return this.minimumPrimaryWidth + this.minimumSecondaryWidth; } - get maximumWidth() { return this.maximumPrimaryWidth + this.maximumSecondaryWidth; } - get minimumHeight() { return this.minimumPrimaryHeight + this.minimumSecondaryHeight; } - get maximumHeight() { return this.maximumPrimaryHeight + this.maximumSecondaryHeight; } + override get minimumWidth() { return this.minimumPrimaryWidth + this.minimumSecondaryWidth; } + override get maximumWidth() { return this.maximumPrimaryWidth + this.maximumSecondaryWidth; } + override get minimumHeight() { return this.minimumPrimaryHeight + this.minimumSecondaryHeight; } + override get maximumHeight() { return this.maximumPrimaryHeight + this.maximumSecondaryHeight; } protected primaryEditorPane?: EditorPane; protected secondaryEditorPane?: EditorPane; @@ -56,7 +56,7 @@ export class SideBySideEditor extends EditorPane { private onDidCreateEditors = this._register(new Emitter<{ width: number; height: number; } | undefined>()); private _onDidChangeSizeConstraints = this._register(new Relay<{ width: number; height: number; } | undefined>()); - readonly onDidChangeSizeConstraints = Event.any(this.onDidCreateEditors.event, this._onDidChangeSizeConstraints.event); + override readonly onDidChangeSizeConstraints = Event.any(this.onDidCreateEditors.event, this._onDidChangeSizeConstraints.event); constructor( @ITelemetryService telemetryService: ITelemetryService, @@ -94,20 +94,20 @@ export class SideBySideEditor extends EditorPane { this.updateStyles(); } - async setInput(newInput: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + async override setInput(newInput: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { const oldInput = this.input as SideBySideEditorInput; await super.setInput(newInput, options, context, token); return this.updateInput(oldInput, (newInput as SideBySideEditorInput), options, context, token); } - setOptions(options: EditorOptions | undefined): void { + override setOptions(options: EditorOptions | undefined): void { if (this.primaryEditorPane) { this.primaryEditorPane.setOptions(options); } } - protected setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { + protected override setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { if (this.primaryEditorPane) { this.primaryEditorPane.setVisible(visible, group); } @@ -119,7 +119,7 @@ export class SideBySideEditor extends EditorPane { super.setEditorVisible(visible, group); } - clearInput(): void { + override clearInput(): void { if (this.primaryEditorPane) { this.primaryEditorPane.clearInput(); } @@ -133,7 +133,7 @@ export class SideBySideEditor extends EditorPane { super.clearInput(); } - focus(): void { + override focus(): void { if (this.primaryEditorPane) { this.primaryEditorPane.focus(); } @@ -146,7 +146,7 @@ export class SideBySideEditor extends EditorPane { splitview.layout(dimension.width); } - getControl(): IEditorControl | undefined { + override getControl(): IEditorControl | undefined { if (this.primaryEditorPane) { return this.primaryEditorPane.getControl(); } @@ -218,7 +218,7 @@ export class SideBySideEditor extends EditorPane { ); } - updateStyles(): void { + override updateStyles(): void { super.updateStyles(); if (this.primaryEditorContainer) { @@ -246,7 +246,7 @@ export class SideBySideEditor extends EditorPane { } } - dispose(): void { + override dispose(): void { this.disposeEditors(); super.dispose(); diff --git a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts index cafe5117d3a..72cc9654835 100644 --- a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts +++ b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts @@ -378,7 +378,7 @@ export class TabsTitleControl extends TitleControl { this.layout(this.dimensions); } - protected updateEditorActionsToolbar(): void { + protected override updateEditorActionsToolbar(): void { super.updateEditorActionsToolbar(); // Changing the actions in the toolbar can have an impact on the size of the @@ -1771,7 +1771,7 @@ export class TabsTitleControl extends TitleControl { return !isCopy || source === this.group.id; } - dispose(): void { + override dispose(): void { super.dispose(); this.tabDisposables = dispose(this.tabDisposables); diff --git a/src/vs/workbench/browser/parts/editor/textDiffEditor.ts b/src/vs/workbench/browser/parts/editor/textDiffEditor.ts index 54eca9b3349..bcff2181c38 100644 --- a/src/vs/workbench/browser/parts/editor/textDiffEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textDiffEditor.ts @@ -43,7 +43,7 @@ export class TextDiffEditor extends BaseTextEditor implements ITextDiffEditorPan private diffNavigator: DiffNavigator | undefined; private readonly diffNavigatorDisposables = this._register(new DisposableStore()); - get scopedContextKeyService(): IContextKeyService | undefined { + override get scopedContextKeyService(): IContextKeyService | undefined { const control = this.getControl(); if (!control) { return undefined; @@ -86,7 +86,7 @@ export class TextDiffEditor extends BaseTextEditor implements ITextDiffEditorPan } } - protected onWillCloseEditorInGroup(editor: IEditorInput): void { + protected override onWillCloseEditorInGroup(editor: IEditorInput): void { // React to editors closing to preserve or clear view state. This needs to happen // in the onWillCloseEditor because at that time the editor has not yet @@ -94,7 +94,7 @@ export class TextDiffEditor extends BaseTextEditor implements ITextDiffEditorPan this.doSaveOrClearTextDiffEditorViewState(editor); } - getTitle(): string { + override getTitle(): string { if (this.input) { return this.input.getName(); } @@ -102,11 +102,11 @@ export class TextDiffEditor extends BaseTextEditor implements ITextDiffEditorPan return localize('textDiffEditor', "Text Diff Editor"); } - createEditorControl(parent: HTMLElement, configuration: ICodeEditorOptions): IDiffEditor { + override createEditorControl(parent: HTMLElement, configuration: ICodeEditorOptions): IDiffEditor { return this.instantiationService.createInstance(DiffEditorWidget, parent, configuration, {}); } - async setInput(input: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + async override setInput(input: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { // Dispose previous diff navigator this.diffNavigatorDisposables.clear(); @@ -231,7 +231,7 @@ export class TextDiffEditor extends BaseTextEditor implements ITextDiffEditorPan return false; } - protected computeConfiguration(configuration: IEditorConfiguration): ICodeEditorOptions { + protected override computeConfiguration(configuration: IEditorConfiguration): ICodeEditorOptions { const editorConfiguration = super.computeConfiguration(configuration); // Handle diff editor specially by merging in diffEditor configuration @@ -252,7 +252,7 @@ export class TextDiffEditor extends BaseTextEditor implements ITextDiffEditorPan return editorConfiguration; } - protected getConfigurationOverrides(): ICodeEditorOptions { + protected override getConfigurationOverrides(): ICodeEditorOptions { const options: IDiffEditorOptions = super.getConfigurationOverrides(); options.readOnly = this.input instanceof DiffEditorInput && this.input.modifiedInput.isReadonly(); @@ -274,7 +274,7 @@ export class TextDiffEditor extends BaseTextEditor implements ITextDiffEditorPan return (error).textFileOperationResult === TextFileOperationResult.FILE_IS_BINARY; } - clearInput(): void { + override clearInput(): void { // Dispose previous diff navigator this.diffNavigatorDisposables.clear(); @@ -296,15 +296,15 @@ export class TextDiffEditor extends BaseTextEditor implements ITextDiffEditorPan return this.diffNavigator; } - getControl(): IDiffEditor | undefined { + override getControl(): IDiffEditor | undefined { return super.getControl() as IDiffEditor | undefined; } - protected loadTextEditorViewState(resource: URI): IDiffEditorViewState { + protected override loadTextEditorViewState(resource: URI): IDiffEditorViewState { return super.loadTextEditorViewState(resource) as IDiffEditorViewState; // overridden for text diff editor support } - protected saveState(): void { + protected override saveState(): void { // Update/clear editor view State this.doSaveOrClearTextDiffEditorViewState(this.input); @@ -333,7 +333,7 @@ export class TextDiffEditor extends BaseTextEditor implements ITextDiffEditorPan } } - protected retrieveTextEditorViewState(resource: URI): IDiffEditorViewState | null { + protected override retrieveTextEditorViewState(resource: URI): IDiffEditorViewState | null { return this.retrieveTextDiffEditorViewState(resource); // overridden for text diff editor support } diff --git a/src/vs/workbench/browser/parts/editor/textEditor.ts b/src/vs/workbench/browser/parts/editor/textEditor.ts index 7ec16141d68..44553e4cde9 100644 --- a/src/vs/workbench/browser/parts/editor/textEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textEditor.ts @@ -52,7 +52,7 @@ export abstract class BaseTextEditor extends EditorPane implements ITextEditorPa protected get instantiationService(): IInstantiationService { return this._instantiationService; } protected set instantiationService(value: IInstantiationService) { this._instantiationService = value; } - get scopedContextKeyService(): IContextKeyService | undefined { + override get scopedContextKeyService(): IContextKeyService | undefined { return isCodeEditor(this.editorControl) ? this.editorControl.invokeWithinContext(accessor => accessor.get(IContextKeyService)) : undefined; } @@ -158,7 +158,7 @@ export abstract class BaseTextEditor extends EditorPane implements ITextEditorPa return this.instantiationService.createInstance(CodeEditorWidget, parent, configuration, {}); } - async setInput(input: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + async override setInput(input: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { await super.setInput(input, options, context, token); // Update editor options after having set the input. We do this because there can be @@ -170,7 +170,7 @@ export abstract class BaseTextEditor extends EditorPane implements ITextEditorPa editorContainer.setAttribute('aria-label', this.computeAriaLabel()); } - setOptions(options: EditorOptions | undefined): void { + override setOptions(options: EditorOptions | undefined): void { const textOptions = options as TextEditorOptions; if (textOptions && isFunction(textOptions.apply)) { const textEditor = assertIsDefined(this.getControl()); @@ -178,7 +178,7 @@ export abstract class BaseTextEditor extends EditorPane implements ITextEditorPa } } - protected setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { + protected override setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { // Pass on to Editor const editorControl = assertIsDefined(this.editorControl); @@ -206,7 +206,7 @@ export abstract class BaseTextEditor extends EditorPane implements ITextEditorPa // Subclasses can override } - focus(): void { + override focus(): void { // Pass on to Editor const editorControl = assertIsDefined(this.editorControl); @@ -220,7 +220,7 @@ export abstract class BaseTextEditor extends EditorPane implements ITextEditorPa editorControl.layout(dimension); } - getControl(): IEditor | undefined { + override getControl(): IEditor | undefined { return this.editorControl; } @@ -338,7 +338,7 @@ export abstract class BaseTextEditor extends EditorPane implements ITextEditorPa return undefined; } - dispose(): void { + override dispose(): void { this.lastAppliedEditorOptions = undefined; super.dispose(); diff --git a/src/vs/workbench/browser/parts/editor/textResourceEditor.ts b/src/vs/workbench/browser/parts/editor/textResourceEditor.ts index 63135239171..f5663239d8a 100644 --- a/src/vs/workbench/browser/parts/editor/textResourceEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textResourceEditor.ts @@ -45,7 +45,7 @@ export class AbstractTextResourceEditor extends BaseTextEditor { super(id, telemetryService, instantiationService, storageService, textResourceConfigurationService, themeService, editorService, editorGroupService); } - getTitle(): string | undefined { + override getTitle(): string | undefined { if (this.input) { return this.input.getName(); } @@ -53,7 +53,7 @@ export class AbstractTextResourceEditor extends BaseTextEditor { return localize('textEditor', "Text Editor"); } - async setInput(input: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + async override setInput(input: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { // Remember view settings if input changes this.saveTextResourceEditorViewState(this.input); @@ -119,7 +119,7 @@ export class AbstractTextResourceEditor extends BaseTextEditor { } } - clearInput(): void { + override clearInput(): void { // Keep editor view state in settings to restore when coming back this.saveTextResourceEditorViewState(this.input); @@ -133,7 +133,7 @@ export class AbstractTextResourceEditor extends BaseTextEditor { super.clearInput(); } - protected saveState(): void { + protected override saveState(): void { // Save View State (only for untitled) if (this.input instanceof UntitledTextEditorInput) { @@ -180,7 +180,7 @@ export class TextResourceEditor extends AbstractTextResourceEditor { super(TextResourceEditor.ID, telemetryService, instantiationService, storageService, textResourceConfigurationService, themeService, editorGroupService, editorService); } - protected createEditorControl(parent: HTMLElement, configuration: IEditorOptions): IEditor { + protected override createEditorControl(parent: HTMLElement, configuration: IEditorOptions): IEditor { const control = super.createEditorControl(parent, configuration); // Install a listener for paste to update this editors diff --git a/src/vs/workbench/browser/parts/editor/titleControl.ts b/src/vs/workbench/browser/parts/editor/titleControl.ts index 45af0d3b87f..ba961779f19 100644 --- a/src/vs/workbench/browser/parts/editor/titleControl.ts +++ b/src/vs/workbench/browser/parts/editor/titleControl.ts @@ -392,7 +392,7 @@ export abstract class TitleControl extends Themable { abstract getHeight(): IEditorGroupTitleHeight; - dispose(): void { + override dispose(): void { dispose(this.breadcrumbsControl); this.breadcrumbsControl = undefined; diff --git a/src/vs/workbench/browser/parts/notifications/notificationsActions.ts b/src/vs/workbench/browser/parts/notifications/notificationsActions.ts index 71c7ad75cd3..8079a5b819b 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsActions.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsActions.ts @@ -37,7 +37,7 @@ export class ClearNotificationAction extends Action { super(id, label, ThemeIcon.asClassName(clearIcon)); } - async run(notification: INotificationViewItem): Promise { + async override run(notification: INotificationViewItem): Promise { this.commandService.executeCommand(CLEAR_NOTIFICATION, notification); } } @@ -55,7 +55,7 @@ export class ClearAllNotificationsAction extends Action { super(id, label, ThemeIcon.asClassName(clearAllIcon)); } - async run(): Promise { + async override run(): Promise { this.commandService.executeCommand(CLEAR_ALL_NOTIFICATIONS); } } @@ -73,7 +73,7 @@ export class HideNotificationsCenterAction extends Action { super(id, label, ThemeIcon.asClassName(hideIcon)); } - async run(): Promise { + async override run(): Promise { this.commandService.executeCommand(HIDE_NOTIFICATIONS_CENTER); } } @@ -91,7 +91,7 @@ export class ExpandNotificationAction extends Action { super(id, label, ThemeIcon.asClassName(expandIcon)); } - async run(notification: INotificationViewItem): Promise { + async override run(notification: INotificationViewItem): Promise { this.commandService.executeCommand(EXPAND_NOTIFICATION, notification); } } @@ -109,7 +109,7 @@ export class CollapseNotificationAction extends Action { super(id, label, ThemeIcon.asClassName(collapseIcon)); } - async run(notification: INotificationViewItem): Promise { + async override run(notification: INotificationViewItem): Promise { this.commandService.executeCommand(COLLAPSE_NOTIFICATION, notification); } } @@ -141,7 +141,7 @@ export class CopyNotificationMessageAction extends Action { super(id, label); } - run(notification: INotificationViewItem): Promise { + override run(notification: INotificationViewItem): Promise { return this.clipboardService.writeText(notification.message.raw); } } @@ -166,7 +166,7 @@ export class NotificationActionRunner extends ActionRunner { super(); } - protected async runAction(action: IAction, context: INotificationViewItem | undefined): Promise { + protected async override runAction(action: IAction, context: INotificationViewItem | undefined): Promise { this.telemetryService.publicLog2('workbenchActionExecuted', { id: action.id, from: 'message' }); if (context) { // If the context is not present it is a "global" notification action. Will be captured by other events diff --git a/src/vs/workbench/browser/parts/notifications/notificationsCenter.ts b/src/vs/workbench/browser/parts/notifications/notificationsCenter.ts index 199584343bc..2c1d47f2a93 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsCenter.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsCenter.ts @@ -248,7 +248,7 @@ export class NotificationsCenter extends Themable implements INotificationsCente } } - protected updateStyles(): void { + protected override updateStyles(): void { if (this.notificationsCenterContainer && this.notificationsCenterHeader) { const widgetShadowColor = this.getColor(widgetShadow); this.notificationsCenterContainer.style.boxShadow = widgetShadowColor ? `0 0 8px 2px ${widgetShadowColor}` : ''; diff --git a/src/vs/workbench/browser/parts/notifications/notificationsList.ts b/src/vs/workbench/browser/parts/notifications/notificationsList.ts index b1e8112ea08..ec27091c6af 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsList.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsList.ts @@ -246,7 +246,7 @@ export class NotificationsList extends Themable { return isAncestor(document.activeElement, this.listContainer); } - protected updateStyles(): void { + protected override updateStyles(): void { if (this.listContainer) { const foreground = this.getColor(NOTIFICATIONS_FOREGROUND); this.listContainer.style.color = foreground ? foreground : ''; @@ -271,7 +271,7 @@ export class NotificationsList extends Themable { } } - dispose(): void { + override dispose(): void { this.hide(); super.dispose(); diff --git a/src/vs/workbench/browser/parts/notifications/notificationsToasts.ts b/src/vs/workbench/browser/parts/notifications/notificationsToasts.ts index 52cb176c577..8e82335367f 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsToasts.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsToasts.ts @@ -476,7 +476,7 @@ export class NotificationsToasts extends Themable implements INotificationsToast } } - protected updateStyles(): void { + protected override updateStyles(): void { this.mapNotificationToToast.forEach(({ toast }) => { const backgroundColor = this.getColor(NOTIFICATIONS_BACKGROUND); toast.style.background = backgroundColor ? backgroundColor : ''; diff --git a/src/vs/workbench/browser/parts/notifications/notificationsViewer.ts b/src/vs/workbench/browser/parts/notifications/notificationsViewer.ts index 3255a708ce5..e5c0c3767a0 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsViewer.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsViewer.ts @@ -444,7 +444,7 @@ export class NotificationTemplateRenderer extends Disposable { if (notification.expanded && isNonEmptyArray(primaryActions)) { const that = this; const actionRunner: IActionRunner = new class extends ActionRunner { - protected async runAction(action: IAction): Promise { + protected async override runAction(action: IAction): Promise { // Run action that.actionRunner.run(action, notification); diff --git a/src/vs/workbench/browser/parts/panel/panelActions.ts b/src/vs/workbench/browser/parts/panel/panelActions.ts index 0d447ee9d3d..c26cc115eb1 100644 --- a/src/vs/workbench/browser/parts/panel/panelActions.ts +++ b/src/vs/workbench/browser/parts/panel/panelActions.ts @@ -38,7 +38,7 @@ export class TogglePanelAction extends Action { super(id, name, layoutService.isVisible(Parts.PANEL_PART) ? 'panel expanded' : 'panel'); } - async run(): Promise { + async override run(): Promise { this.layoutService.setPanelHidden(this.layoutService.isVisible(Parts.PANEL_PART)); } } @@ -57,7 +57,7 @@ class FocusPanelAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { // Show panel if (!this.layoutService.isVisible(Parts.PANEL_PART)) { @@ -113,7 +113,7 @@ export class SetPanelPositionAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const position = positionByActionId.get(this.id); this.layoutService.setPanelPosition(position === undefined ? Position.BOTTOM : position); } @@ -128,7 +128,7 @@ export class PanelActivityAction extends ActivityAction { super(activity); } - async run(): Promise { + async override run(): Promise { await this.panelService.openPanel(this.activity.id, true); this.activate(); } @@ -169,7 +169,7 @@ export class SwitchPanelViewAction extends Action { super(id, name); } - async run(offset: number): Promise { + async override run(offset: number): Promise { const pinnedPanels = this.panelService.getPinnedPanels(); const activePanel = this.panelService.getActivePanel(); if (!activePanel) { @@ -201,7 +201,7 @@ export class PreviousPanelViewAction extends SwitchPanelViewAction { super(id, name, panelService); } - run(): Promise { + override run(): Promise { return super.run(-1); } } @@ -219,7 +219,7 @@ export class NextPanelViewAction extends SwitchPanelViewAction { super(id, name, panelService); } - run(): Promise { + override run(): Promise { return super.run(1); } } diff --git a/src/vs/workbench/browser/parts/panel/panelPart.ts b/src/vs/workbench/browser/parts/panel/panelPart.ts index c2cf7ea3b9e..27672e5895d 100644 --- a/src/vs/workbench/browser/parts/panel/panelPart.ts +++ b/src/vs/workbench/browser/parts/panel/panelPart.ts @@ -415,7 +415,7 @@ export class PanelPart extends CompositePart implements IPanelService { this.layoutEmptyMessage(); } - create(parent: HTMLElement): void { + override create(parent: HTMLElement): void { this.element = parent; super.create(parent); @@ -468,7 +468,7 @@ export class PanelPart extends CompositePart implements IPanelService { })); } - updateStyles(): void { + override updateStyles(): void { super.updateStyles(); const container = assertIsDefined(this.getContainer()); @@ -562,7 +562,7 @@ export class PanelPart extends CompositePart implements IPanelService { this.hideActiveComposite(); } - protected createTitleLabel(parent: HTMLElement): ICompositeTitleLabel { + protected override createTitleLabel(parent: HTMLElement): ICompositeTitleLabel { const titleArea = this.compositeBar.create(parent); titleArea.classList.add('panel-switcher-container'); @@ -579,7 +579,7 @@ export class PanelPart extends CompositePart implements IPanelService { }; } - layout(width: number, height: number): void { + override layout(width: number, height: number): void { if (!this.layoutService.isVisible(Parts.PANEL_PART)) { return; } @@ -646,7 +646,7 @@ export class PanelPart extends CompositePart implements IPanelService { return compositeActions; } - protected removeComposite(compositeId: string): boolean { + protected override removeComposite(compositeId: string): boolean { if (super.removeComposite(compositeId)) { this.compositeBar.removeComposite(compositeId); const compositeActions = this.compositeActions.get(compositeId); diff --git a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts index ed77ad7b157..b08f327c670 100644 --- a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts +++ b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts @@ -155,7 +155,7 @@ export class SidebarPart extends CompositePart implements IViewletServi })); } - create(parent: HTMLElement): void { + override create(parent: HTMLElement): void { this.element = parent; super.create(parent); @@ -165,7 +165,7 @@ export class SidebarPart extends CompositePart implements IViewletServi this._register(focusTracker.onDidBlur(() => this.sideBarFocusContextKey.set(false))); } - createTitleArea(parent: HTMLElement): HTMLElement { + override createTitleArea(parent: HTMLElement): HTMLElement { const titleArea = super.createTitleArea(parent); this._register(addDisposableListener(titleArea, EventType.CONTEXT_MENU, e => { @@ -183,7 +183,7 @@ export class SidebarPart extends CompositePart implements IViewletServi return titleArea; } - updateStyles(): void { + override updateStyles(): void { super.updateStyles(); // Part container @@ -203,7 +203,7 @@ export class SidebarPart extends CompositePart implements IViewletServi container.style.outlineColor = this.getColor(SIDE_BAR_DRAG_AND_DROP_BACKGROUND) ?? ''; } - layout(width: number, height: number): void { + override layout(width: number, height: number): void { if (!this.layoutService.isVisible(Parts.SIDEBAR_PART)) { return; } @@ -275,7 +275,7 @@ export class SidebarPart extends CompositePart implements IViewletServi return this.openComposite(id, focus) as Viewlet; } - protected getTitleAreaDropDownAnchorAlignment(): AnchorAlignment { + protected override getTitleAreaDropDownAnchorAlignment(): AnchorAlignment { return this.layoutService.getSideBarPosition() === SideBarPosition.LEFT ? AnchorAlignment.LEFT : AnchorAlignment.RIGHT; } diff --git a/src/vs/workbench/browser/parts/titlebar/menubarControl.ts b/src/vs/workbench/browser/parts/titlebar/menubarControl.ts index 701440fb360..2804a0edaab 100644 --- a/src/vs/workbench/browser/parts/titlebar/menubarControl.ts +++ b/src/vs/workbench/browser/parts/titlebar/menubarControl.ts @@ -740,7 +740,7 @@ export class CustomMenubarControl extends MenubarControl { }; } - protected onDidChangeWindowFocus(hasFocus: boolean): void { + protected override onDidChangeWindowFocus(hasFocus: boolean): void { if (!this.visible) { return; } @@ -759,7 +759,7 @@ export class CustomMenubarControl extends MenubarControl { } } - protected onUpdateStateChange(): void { + protected override onUpdateStateChange(): void { if (!this.visible) { return; } @@ -767,7 +767,7 @@ export class CustomMenubarControl extends MenubarControl { super.onUpdateStateChange(); } - protected onDidChangeRecentlyOpened(): void { + protected override onDidChangeRecentlyOpened(): void { if (!this.visible) { return; } @@ -775,7 +775,7 @@ export class CustomMenubarControl extends MenubarControl { super.onDidChangeRecentlyOpened(); } - protected onUpdateKeybindings(): void { + protected override onUpdateKeybindings(): void { if (!this.visible) { return; } @@ -783,7 +783,7 @@ export class CustomMenubarControl extends MenubarControl { super.onUpdateKeybindings(); } - protected registerListeners(): void { + protected override registerListeners(): void { super.registerListeners(); this._register(addDisposableListener(window, EventType.RESIZE, () => { diff --git a/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts b/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts index 94f766ad69d..4e4aa403fb5 100644 --- a/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts +++ b/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts @@ -341,7 +341,7 @@ export class TitlebarPart extends Part implements ITitleService { this._register(this.customMenubar.onVisibilityChange(e => this.onMenubarVisibilityChanged(e))); } - createContentArea(parent: HTMLElement): HTMLElement { + override createContentArea(parent: HTMLElement): HTMLElement { this.element = parent; // App Icon (Native Windows/Linux and Web) @@ -413,7 +413,7 @@ export class TitlebarPart extends Part implements ITitleService { return this.element; } - updateStyles(): void { + override updateStyles(): void { super.updateStyles(); // Part container @@ -514,7 +514,7 @@ export class TitlebarPart extends Part implements ITitleService { } } - layout(width: number, height: number): void { + override layout(width: number, height: number): void { this.updateLayout(new Dimension(width, height)); super.layoutContents(width, height); diff --git a/src/vs/workbench/browser/parts/views/treeView.ts b/src/vs/workbench/browser/parts/views/treeView.ts index a43e5f33edf..a63ee1b1993 100644 --- a/src/vs/workbench/browser/parts/views/treeView.ts +++ b/src/vs/workbench/browser/parts/views/treeView.ts @@ -90,26 +90,26 @@ export class TreeViewPane extends ViewPane { this.updateTreeVisibility(); } - focus(): void { + override focus(): void { super.focus(); this.treeView.focus(); } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this.renderTreeView(container); } - shouldShowWelcome(): boolean { + override shouldShowWelcome(): boolean { return ((this.treeView.dataProvider === undefined) || !!this.treeView.dataProvider.isTreeEmpty) && (this.treeView.message === undefined); } - layoutBody(height: number, width: number): void { + override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.layoutTreeView(height, width); } - getOptimalWidth(): number { + override getOptimalWidth(): number { return this.treeView.getOptimalWidth(); } @@ -1078,7 +1078,7 @@ class MultipleSelectionActionRunner extends ActionRunner { })); } - async runAction(action: IAction, context: TreeViewItemHandleArg): Promise { + async override runAction(action: IAction, context: TreeViewItemHandleArg): Promise { const selection = this.getSelectedResources(); let selectionHandleArgs: TreeViewItemHandleArg[] | undefined = undefined; let actionInSelected: boolean = false; @@ -1165,7 +1165,7 @@ export class CustomTreeView extends TreeView { super(id, title, themeService, instantiationService, commandService, configurationService, progressService, contextMenuService, keybindingService, notificationService, viewDescriptorService, hoverService, contextKeyService); } - setVisibility(isVisible: boolean): void { + override setVisibility(isVisible: boolean): void { super.setVisibility(isVisible); if (this.visible) { this.activate(); diff --git a/src/vs/workbench/browser/parts/views/viewPane.ts b/src/vs/workbench/browser/parts/views/viewPane.ts index 98a9e161bf9..fcc554591f9 100644 --- a/src/vs/workbench/browser/parts/views/viewPane.ts +++ b/src/vs/workbench/browser/parts/views/viewPane.ts @@ -233,11 +233,11 @@ export abstract class ViewPane extends Pane implements IView { this.viewWelcomeController = new ViewWelcomeController(this.id, contextKeyService); } - get headerVisible(): boolean { + override get headerVisible(): boolean { return super.headerVisible; } - set headerVisible(visible: boolean) { + override set headerVisible(visible: boolean) { super.headerVisible = visible; this.element.classList.toggle('merged-header', !visible); } @@ -260,7 +260,7 @@ export abstract class ViewPane extends Pane implements IView { return this._isVisible && this.isExpanded(); } - setExpanded(expanded: boolean): boolean { + override setExpanded(expanded: boolean): boolean { const changed = super.setExpanded(expanded); if (changed) { this._onDidChangeBodyVisibility.fire(expanded); @@ -272,7 +272,7 @@ export abstract class ViewPane extends Pane implements IView { return changed; } - render(): void { + override render(): void { super.render(); const focusTracker = trackFocus(this.element); @@ -316,7 +316,7 @@ export abstract class ViewPane extends Pane implements IView { return expanded ? viewPaneContainerExpandedIcon : viewPaneContainerCollapsedIcon; } - style(styles: IPaneStyles): void { + override style(styles: IPaneStyles): void { super.style(styles); const icon = this.getIcon(); diff --git a/src/vs/workbench/browser/parts/views/viewPaneContainer.ts b/src/vs/workbench/browser/parts/views/viewPaneContainer.ts index 32db51de439..61ba8767f47 100644 --- a/src/vs/workbench/browser/parts/views/viewPaneContainer.ts +++ b/src/vs/workbench/browser/parts/views/viewPaneContainer.ts @@ -134,7 +134,7 @@ class ViewPaneDropOverlay extends Themable { this.updateStyles(); } - protected updateStyles(): void { + protected override updateStyles(): void { // Overlay drop background this.overlay.style.backgroundColor = this.getColor(this.location === ViewContainerLocation.Panel ? PANEL_SECTION_DRAG_AND_DROP_BACKGROUND : SIDE_BAR_DRAG_AND_DROP_BACKGROUND) || ''; @@ -287,7 +287,7 @@ class ViewPaneDropOverlay extends Themable { return element === this.container || element === this.overlay; } - dispose(): void { + override dispose(): void { super.dispose(); this._disposed = true; @@ -720,7 +720,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer { return sizes; } - saveState(): void { + override saveState(): void { this.panes.forEach((view) => view.saveState()); this.storageService.store(this.visibleViewsStorageId, this.length, StorageScope.WORKSPACE, StorageTarget.USER); } @@ -1064,7 +1064,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer { return true; } - dispose(): void { + override dispose(): void { super.dispose(); this.paneItems.forEach(i => i.disposable.dispose()); if (this.paneview) { diff --git a/src/vs/workbench/browser/parts/views/viewsViewlet.ts b/src/vs/workbench/browser/parts/views/viewsViewlet.ts index 00b65ec2d31..c6e64141472 100644 --- a/src/vs/workbench/browser/parts/views/viewsViewlet.ts +++ b/src/vs/workbench/browser/parts/views/viewsViewlet.ts @@ -121,7 +121,7 @@ export abstract class FilterViewPaneContainer extends ViewPaneContainer { return views; } - onDidAddViewDescriptors(added: IAddedViewDescriptorRef[]): ViewPane[] { + override onDidAddViewDescriptors(added: IAddedViewDescriptorRef[]): ViewPane[] { const panes: ViewPane[] = super.onDidAddViewDescriptors(added); for (let i = 0; i < added.length; i++) { if (this.constantViewDescriptors.has(added[i].viewDescriptor.id)) { diff --git a/src/vs/workbench/common/editor.ts b/src/vs/workbench/common/editor.ts index ed529fdd054..619d21a159e 100644 --- a/src/vs/workbench/common/editor.ts +++ b/src/vs/workbench/common/editor.ts @@ -614,7 +614,7 @@ export abstract class EditorInput extends Disposable implements IEditorInput { return this.disposed; } - dispose(): void { + override dispose(): void { if (!this.disposed) { this.disposed = true; this._onWillDispose.fire(); @@ -804,7 +804,7 @@ export class SideBySideEditorInput extends EditorInput { return SideBySideEditorInput.ID; } - getName(): string { + override getName(): string { if (!this.name) { return localize('sideBySideLabels', "{0} - {1}", this._secondary.getName(), this._primary.getName()); } @@ -812,45 +812,45 @@ export class SideBySideEditorInput extends EditorInput { return this.name; } - getDescription(): string | undefined { + override getDescription(): string | undefined { return this.description; } - isReadonly(): boolean { + override isReadonly(): boolean { return this.primary.isReadonly(); } - isUntitled(): boolean { + override isUntitled(): boolean { return this.primary.isUntitled(); } - isDirty(): boolean { + override isDirty(): boolean { return this.primary.isDirty(); } - isSaving(): boolean { + override isSaving(): boolean { return this.primary.isSaving(); } - save(group: GroupIdentifier, options?: ISaveOptions): Promise { + override save(group: GroupIdentifier, options?: ISaveOptions): Promise { return this.primary.save(group, options); } - saveAs(group: GroupIdentifier, options?: ISaveOptions): Promise { + override saveAs(group: GroupIdentifier, options?: ISaveOptions): Promise { return this.primary.saveAs(group, options); } - revert(group: GroupIdentifier, options?: IRevertOptions): Promise { + override revert(group: GroupIdentifier, options?: IRevertOptions): Promise { return this.primary.revert(group, options); } - getTelemetryDescriptor(): { [key: string]: unknown } { + override getTelemetryDescriptor(): { [key: string]: unknown } { const descriptor = this.primary.getTelemetryDescriptor(); return Object.assign(descriptor, super.getTelemetryDescriptor()); } - matches(otherInput: unknown): boolean { + override matches(otherInput: unknown): boolean { if (otherInput === this) { return true; } @@ -904,7 +904,7 @@ export class EditorModel extends Disposable implements IEditorModel { /** * Subclasses should implement to free resources that have been claimed through loading. */ - dispose(): void { + override dispose(): void { this.disposed = true; this._onWillDispose.fire(); @@ -1122,7 +1122,7 @@ export class TextEditorOptions extends EditorOptions implements ITextEditorOptio /** * Overwrites option values from the provided bag. */ - overwrite(options: ITextEditorOptions): TextEditorOptions { + override overwrite(options: ITextEditorOptions): TextEditorOptions { super.overwrite(options); if (options.selection) { @@ -1245,7 +1245,7 @@ export class EditorCommandsContextActionRunner extends ActionRunner { super(); } - run(action: IAction): Promise { + override run(action: IAction): Promise { return super.run(action, this.context); } } diff --git a/src/vs/workbench/common/editor/binaryEditorModel.ts b/src/vs/workbench/common/editor/binaryEditorModel.ts index a426062a9ae..d635b70a141 100644 --- a/src/vs/workbench/common/editor/binaryEditorModel.ts +++ b/src/vs/workbench/common/editor/binaryEditorModel.ts @@ -56,7 +56,7 @@ export class BinaryEditorModel extends EditorModel { return this.etag; } - async resolve(): Promise { + async override resolve(): Promise { // Make sure to resolve up to date stat for file resources if (this.fileService.canHandleResource(this.resource)) { diff --git a/src/vs/workbench/common/editor/diffEditorInput.ts b/src/vs/workbench/common/editor/diffEditorInput.ts index 1b0eed959ae..1c5506e8cd0 100644 --- a/src/vs/workbench/common/editor/diffEditorInput.ts +++ b/src/vs/workbench/common/editor/diffEditorInput.ts @@ -37,11 +37,11 @@ export class DiffEditorInput extends SideBySideEditorInput { super(name, description, originalInput, modifiedInput); } - getTypeId(): string { + override getTypeId(): string { return DiffEditorInput.ID; } - getName(): string { + override getName(): string { if (!this.name) { // Craft a name from original and modified input that includes the @@ -58,7 +58,7 @@ export class DiffEditorInput extends SideBySideEditorInput { return this.name; } - getDescription(verbosity: Verbosity = Verbosity.MEDIUM): string | undefined { + override getDescription(verbosity: Verbosity = Verbosity.MEDIUM): string | undefined { if (typeof this.description !== 'string') { // Pass the description of the modified side in case both original @@ -88,7 +88,7 @@ export class DiffEditorInput extends SideBySideEditorInput { return undefined; } - async resolve(): Promise { + async override resolve(): Promise { // Create Model - we never reuse our cached model if refresh is true because we cannot // decide for the inputs within if the cached model can be reused or not. There may be @@ -104,7 +104,7 @@ export class DiffEditorInput extends SideBySideEditorInput { return this.cachedModel; } - getPreferredEditorId(candidates: string[]): string { + override getPreferredEditorId(candidates: string[]): string { return this.forceOpenAsBinary ? BINARY_DIFF_EDITOR_ID : TEXT_DIFF_EDITOR_ID; } @@ -125,7 +125,7 @@ export class DiffEditorInput extends SideBySideEditorInput { return new DiffEditorModel(withNullAsUndefined(originalEditorModel), withNullAsUndefined(modifiedEditorModel)); } - matches(otherInput: unknown): boolean { + override matches(otherInput: unknown): boolean { if (!super.matches(otherInput)) { return false; } @@ -133,7 +133,7 @@ export class DiffEditorInput extends SideBySideEditorInput { return otherInput instanceof DiffEditorInput && otherInput.forceOpenAsBinary === this.forceOpenAsBinary; } - dispose(): void { + override dispose(): void { // Free the diff editor model but do not propagate the dispose() call to the two inputs // We never created the two inputs (original and modified) so we can not dispose diff --git a/src/vs/workbench/common/editor/diffEditorModel.ts b/src/vs/workbench/common/editor/diffEditorModel.ts index ff95f51a8c9..3f4d4f1543c 100644 --- a/src/vs/workbench/common/editor/diffEditorModel.ts +++ b/src/vs/workbench/common/editor/diffEditorModel.ts @@ -25,18 +25,18 @@ export class DiffEditorModel extends EditorModel { this._modifiedModel = modifiedModel; } - async resolve(): Promise { + async override resolve(): Promise { await Promise.all([ this._originalModel?.resolve(), this._modifiedModel?.resolve() ]); } - isResolved(): boolean { + override isResolved(): boolean { return !!(this.originalModel?.isResolved() && this.modifiedModel?.isResolved()); } - dispose(): void { + override dispose(): void { // Do not propagate the dispose() call to the two models inside. We never created the two models // (original and modified) so we can not dispose them without sideeffects. Rather rely on the diff --git a/src/vs/workbench/common/editor/resourceEditorInput.ts b/src/vs/workbench/common/editor/resourceEditorInput.ts index 0167182c2e8..c8ce69c5094 100644 --- a/src/vs/workbench/common/editor/resourceEditorInput.ts +++ b/src/vs/workbench/common/editor/resourceEditorInput.ts @@ -48,7 +48,7 @@ export class ResourceEditorInput extends AbstractTextResourceEditorInput impleme return ResourceEditorInput.ID; } - getName(): string { + override getName(): string { return this.name || super.getName(); } @@ -60,7 +60,7 @@ export class ResourceEditorInput extends AbstractTextResourceEditorInput impleme } } - getDescription(): string | undefined { + override getDescription(): string | undefined { return this.description; } @@ -84,7 +84,7 @@ export class ResourceEditorInput extends AbstractTextResourceEditorInput impleme this.preferredMode = mode; } - async resolve(): Promise { + async override resolve(): Promise { if (!this.modelReference) { this.modelReference = this.textModelResolverService.createModelReference(this.resource); } @@ -110,7 +110,7 @@ export class ResourceEditorInput extends AbstractTextResourceEditorInput impleme return model; } - matches(otherInput: unknown): boolean { + override matches(otherInput: unknown): boolean { if (otherInput === this) { return true; } @@ -122,7 +122,7 @@ export class ResourceEditorInput extends AbstractTextResourceEditorInput impleme return false; } - dispose(): void { + override dispose(): void { if (this.modelReference) { this.modelReference.then(ref => ref.dispose()); this.modelReference = undefined; diff --git a/src/vs/workbench/common/editor/resourceEditorModel.ts b/src/vs/workbench/common/editor/resourceEditorModel.ts index 56f7aefe250..661bbe6496f 100644 --- a/src/vs/workbench/common/editor/resourceEditorModel.ts +++ b/src/vs/workbench/common/editor/resourceEditorModel.ts @@ -21,7 +21,7 @@ export class ResourceEditorModel extends BaseTextEditorModel { super(modelService, modeService, resource); } - dispose(): void { + override dispose(): void { // force this class to dispose the underlying model if (this.textEditorModelHandle) { diff --git a/src/vs/workbench/common/editor/textDiffEditorModel.ts b/src/vs/workbench/common/editor/textDiffEditorModel.ts index daf1e7e01e1..436b556ed37 100644 --- a/src/vs/workbench/common/editor/textDiffEditorModel.ts +++ b/src/vs/workbench/common/editor/textDiffEditorModel.ts @@ -13,11 +13,11 @@ import { DiffEditorModel } from 'vs/workbench/common/editor/diffEditorModel'; */ export class TextDiffEditorModel extends DiffEditorModel { - protected readonly _originalModel: BaseTextEditorModel | undefined; - get originalModel(): BaseTextEditorModel | undefined { return this._originalModel; } + protected override readonly _originalModel: BaseTextEditorModel | undefined; + override get originalModel(): BaseTextEditorModel | undefined { return this._originalModel; } - protected readonly _modifiedModel: BaseTextEditorModel | undefined; - get modifiedModel(): BaseTextEditorModel | undefined { return this._modifiedModel; } + protected override readonly _modifiedModel: BaseTextEditorModel | undefined; + override get modifiedModel(): BaseTextEditorModel | undefined { return this._modifiedModel; } private _textDiffEditorModel: IDiffEditorModel | undefined = undefined; get textDiffEditorModel(): IDiffEditorModel | undefined { return this._textDiffEditorModel; } @@ -31,7 +31,7 @@ export class TextDiffEditorModel extends DiffEditorModel { this.updateTextDiffEditorModel(); } - async resolve(): Promise { + async override resolve(): Promise { await super.resolve(); this.updateTextDiffEditorModel(); @@ -56,7 +56,7 @@ export class TextDiffEditorModel extends DiffEditorModel { } } - isResolved(): boolean { + override isResolved(): boolean { return !!this._textDiffEditorModel; } @@ -64,7 +64,7 @@ export class TextDiffEditorModel extends DiffEditorModel { return !!this.modifiedModel && this.modifiedModel.isReadonly(); } - dispose(): void { + override dispose(): void { // Free the diff editor model but do not propagate the dispose() call to the two models // inside. We never created the two models (original and modified) so we can not dispose diff --git a/src/vs/workbench/common/editor/textEditorModel.ts b/src/vs/workbench/common/editor/textEditorModel.ts index 3225ea5a9bb..8ff1fcee778 100644 --- a/src/vs/workbench/common/editor/textEditorModel.ts +++ b/src/vs/workbench/common/editor/textEditorModel.ts @@ -167,11 +167,11 @@ export class BaseTextEditorModel extends EditorModel implements ITextEditorModel return this.textEditorModel.createSnapshot(true /* preserve BOM */); } - isResolved(): this is IResolvedTextEditorModel { + override isResolved(): this is IResolvedTextEditorModel { return !!this.textEditorModelHandle; } - dispose(): void { + override dispose(): void { this.modelDisposeListener.dispose(); // dispose this first because it will trigger another dispose() otherwise if (this.textEditorModelHandle && this.createdEditorModel) { diff --git a/src/vs/workbench/common/editor/textResourceEditorInput.ts b/src/vs/workbench/common/editor/textResourceEditorInput.ts index f8b47aac4d1..296d3a01261 100644 --- a/src/vs/workbench/common/editor/textResourceEditorInput.ts +++ b/src/vs/workbench/common/editor/textResourceEditorInput.ts @@ -77,7 +77,7 @@ export abstract class AbstractTextResourceEditorInput extends EditorInput implem } private _name: string | undefined = undefined; - getName(): string { + override getName(): string { if (typeof this._name !== 'string') { this._name = this.labelService.getUriBasenameLabel(this._preferredResource); } @@ -85,7 +85,7 @@ export abstract class AbstractTextResourceEditorInput extends EditorInput implem return this._name; } - getDescription(verbosity: Verbosity = Verbosity.MEDIUM): string | undefined { + override getDescription(verbosity: Verbosity = Verbosity.MEDIUM): string | undefined { switch (verbosity) { case Verbosity.SHORT: return this.shortDescription; @@ -151,7 +151,7 @@ export abstract class AbstractTextResourceEditorInput extends EditorInput implem return this._longTitle; } - getTitle(verbosity: Verbosity): string { + override getTitle(verbosity: Verbosity): string { switch (verbosity) { case Verbosity.SHORT: return this.shortTitle; @@ -163,14 +163,14 @@ export abstract class AbstractTextResourceEditorInput extends EditorInput implem } } - isUntitled(): boolean { + override isUntitled(): boolean { // any file: is never untitled as it can be saved // untitled: is untitled by definition // any other: is untitled because it cannot be saved, as such we expect a "Save As" dialog return !this.fileService.canHandleResource(this.resource); } - isReadonly(): boolean { + override isReadonly(): boolean { if (this.isUntitled()) { return false; // untitled is never readonly } @@ -178,7 +178,7 @@ export abstract class AbstractTextResourceEditorInput extends EditorInput implem return this.fileService.hasCapability(this.resource, FileSystemProviderCapabilities.Readonly); } - isSaving(): boolean { + override isSaving(): boolean { if (this.isUntitled()) { return false; // untitled is never saving automatically } @@ -190,7 +190,7 @@ export abstract class AbstractTextResourceEditorInput extends EditorInput implem return false; } - save(group: GroupIdentifier, options?: ITextFileSaveOptions): Promise { + override save(group: GroupIdentifier, options?: ITextFileSaveOptions): Promise { // If this is neither an `untitled` resource, nor a resource // we can handle with the file service, we can only "Save As..." @@ -202,7 +202,7 @@ export abstract class AbstractTextResourceEditorInput extends EditorInput implem return this.doSave(options, false); } - saveAs(group: GroupIdentifier, options?: ITextFileSaveOptions): Promise { + override saveAs(group: GroupIdentifier, options?: ITextFileSaveOptions): Promise { return this.doSave(options, true); } @@ -233,7 +233,7 @@ export abstract class AbstractTextResourceEditorInput extends EditorInput implem return this; } - async revert(group: GroupIdentifier, options?: IRevertOptions): Promise { + async override revert(group: GroupIdentifier, options?: IRevertOptions): Promise { await this.textFileService.revert(this.resource, options); } } diff --git a/src/vs/workbench/contrib/backup/test/browser/backupRestorer.test.ts b/src/vs/workbench/contrib/backup/test/browser/backupRestorer.test.ts index 7d5e6e28dd3..a2821b27da6 100644 --- a/src/vs/workbench/contrib/backup/test/browser/backupRestorer.test.ts +++ b/src/vs/workbench/contrib/backup/test/browser/backupRestorer.test.ts @@ -22,7 +22,7 @@ import { DisposableStore } from 'vs/base/common/lifecycle'; suite('BackupRestorer', () => { class TestBackupRestorer extends BackupRestorer { - async doRestoreBackups(): Promise { + async override doRestoreBackups(): Promise { return super.doRestoreBackups(); } } diff --git a/src/vs/workbench/contrib/backup/test/browser/backupTracker.test.ts b/src/vs/workbench/contrib/backup/test/browser/backupTracker.test.ts index 9ecdb9bcda0..a5cd04afe6c 100644 --- a/src/vs/workbench/contrib/backup/test/browser/backupTracker.test.ts +++ b/src/vs/workbench/contrib/backup/test/browser/backupTracker.test.ts @@ -41,7 +41,7 @@ suite('BackupTracker (browser)', function () { super(backupFileService, filesConfigurationService, workingCopyService, lifecycleService, logService); } - protected getBackupScheduleDelay(): number { + protected override getBackupScheduleDelay(): number { return 10; // Reduce timeout for tests } } @@ -114,7 +114,7 @@ suite('BackupTracker (browser)', function () { accessor.workingCopyService.registerWorkingCopy(this); } - async backup(token: CancellationToken): Promise { + async override backup(token: CancellationToken): Promise { await timeout(this.backupDelay); return {}; diff --git a/src/vs/workbench/contrib/backup/test/electron-browser/backupTracker.test.ts b/src/vs/workbench/contrib/backup/test/electron-browser/backupTracker.test.ts index 27602496a68..6f4d5d91251 100644 --- a/src/vs/workbench/contrib/backup/test/electron-browser/backupTracker.test.ts +++ b/src/vs/workbench/contrib/backup/test/electron-browser/backupTracker.test.ts @@ -63,11 +63,11 @@ flakySuite('BackupTracker (native)', function () { super(backupFileService, filesConfigurationService, workingCopyService, lifecycleService, fileDialogService, dialogService, contextService, nativeHostService, logService, editorService, environmentService, progressService); } - protected getBackupScheduleDelay(): number { + protected override getBackupScheduleDelay(): number { return 10; // Reduce timeout for tests } - dispose() { + override dispose() { super.dispose(); for (const [_, disposable] of this.pendingBackups) { diff --git a/src/vs/workbench/contrib/bulkEdit/browser/bulkTextEdits.ts b/src/vs/workbench/contrib/bulkEdit/browser/bulkTextEdits.ts index 90b8704ba05..b7c76933f5e 100644 --- a/src/vs/workbench/contrib/bulkEdit/browser/bulkTextEdits.ts +++ b/src/vs/workbench/contrib/bulkEdit/browser/bulkTextEdits.ts @@ -109,11 +109,11 @@ class EditorEditTask extends ModelEditTask { this._editor = editor; } - getBeforeCursorState(): Selection[] | null { + override getBeforeCursorState(): Selection[] | null { return this._editor.getSelections(); } - apply(): void { + override apply(): void { if (this._edits.length > 0) { this._edits = this._edits.sort((a, b) => Range.compareRangesUsingStarts(a.range, b.range)); this._editor.executeEdits('', this._edits); diff --git a/src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEditPane.ts b/src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEditPane.ts index 8a4997a7c99..6cf35182be6 100644 --- a/src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEditPane.ts +++ b/src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEditPane.ts @@ -100,12 +100,12 @@ export class BulkEditPane extends ViewPane { this._ctxHasCheckedChanges = BulkEditPane.ctxHasCheckedChanges.bindTo(_contextKeyService); } - dispose(): void { + override dispose(): void { this._tree.dispose(); this._disposables.dispose(); } - protected renderBody(parent: HTMLElement): void { + protected override renderBody(parent: HTMLElement): void { super.renderBody(parent); const resourceLabels = this._instaService.createInstance( @@ -154,7 +154,7 @@ export class BulkEditPane extends ViewPane { this._setState(State.Message); } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this._tree.layout(height, width); } diff --git a/src/vs/workbench/contrib/bulkEdit/test/browser/bulkEditPreview.test.ts b/src/vs/workbench/contrib/bulkEdit/test/browser/bulkEditPreview.test.ts index 2bab33cfc5c..dd30a11bf77 100644 --- a/src/vs/workbench/contrib/bulkEdit/test/browser/bulkEditPreview.test.ts +++ b/src/vs/workbench/contrib/bulkEdit/test/browser/bulkEditPreview.test.ts @@ -24,17 +24,17 @@ suite('BulkEditPreview', function () { setup(function () { const fileService: IFileService = new class extends mock() { - onDidFilesChange = Event.None; - async exists() { + override onDidFilesChange = Event.None; + async override exists() { return true; } }; const modelService: IModelService = new class extends mock() { - getModel() { + override getModel() { return null; } - getModels() { + override getModels() { return []; } }; diff --git a/src/vs/workbench/contrib/callHierarchy/browser/callHierarchyPeek.ts b/src/vs/workbench/contrib/callHierarchy/browser/callHierarchyPeek.ts index fbf12cd12a2..96f6d8628af 100644 --- a/src/vs/workbench/contrib/callHierarchy/browser/callHierarchyPeek.ts +++ b/src/vs/workbench/contrib/callHierarchy/browser/callHierarchyPeek.ts @@ -101,7 +101,7 @@ export class CallHierarchyTreePeekWidget extends peekView.PeekViewWidget { this._disposables.add(this._previewDisposable); } - dispose(): void { + override dispose(): void { LayoutInfo.store(this._layoutInfo, this._storageService); this._splitView.dispose(); this._tree.dispose(); @@ -124,7 +124,7 @@ export class CallHierarchyTreePeekWidget extends peekView.PeekViewWidget { }); } - protected _fillHead(container: HTMLElement): void { + protected override _fillHead(container: HTMLElement): void { super._fillHead(container, true); const menu = this._menuService.createMenu(CallHierarchyTreePeekWidget.TitleMenu, this._contextKeyService); @@ -410,13 +410,13 @@ export class CallHierarchyTreePeekWidget extends peekView.PeekViewWidget { } } - protected _onWidth(width: number) { + protected override _onWidth(width: number) { if (this._dim) { this._doLayoutBody(this._dim.height, width); } } - protected _doLayoutBody(height: number, width: number): void { + protected override _doLayoutBody(height: number, width: number): void { if (this._dim.height !== height || this._dim.width !== width) { super._doLayoutBody(height, width); this._dim = new Dimension(width, height); diff --git a/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts b/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts index 4f6b7ff0d6f..7522b2f6387 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts @@ -143,7 +143,7 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget { this._editor.addOverlayWidget(this); } - public dispose(): void { + public override dispose(): void { this._editor.removeOverlayWidget(this); super.dispose(); } diff --git a/src/vs/workbench/contrib/codeEditor/browser/diffEditorHelper.ts b/src/vs/workbench/contrib/codeEditor/browser/diffEditorHelper.ts index 0f7a8480b32..2362766c741 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/diffEditorHelper.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/diffEditorHelper.ts @@ -98,7 +98,7 @@ class DiffEditorHelperContribution extends Disposable implements IDiffEditorCont } } - dispose(): void { + override dispose(): void { super.dispose(); } } diff --git a/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget.ts b/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget.ts index cb7b1e97b5c..9615ad74773 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget.ts @@ -321,7 +321,7 @@ export abstract class SimpleFindReplaceWidget extends Widget { } - dispose() { + override dispose() { super.dispose(); if (this._domNode && this._domNode.parentElement) { diff --git a/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindWidget.ts b/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindWidget.ts index 6226e8fb848..dc1c0e064cb 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindWidget.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindWidget.ts @@ -187,7 +187,7 @@ export abstract class SimpleFindWidget extends Widget { this._findInput.style(inputStyles); } - dispose() { + override dispose() { super.dispose(); if (this._domNode && this._domNode.parentElement) { diff --git a/src/vs/workbench/contrib/codeEditor/browser/inspectEditorTokens/inspectEditorTokens.ts b/src/vs/workbench/contrib/codeEditor/browser/inspectEditorTokens/inspectEditorTokens.ts index 97a0010dfbd..3fd351fc49e 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/inspectEditorTokens/inspectEditorTokens.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/inspectEditorTokens/inspectEditorTokens.ts @@ -71,7 +71,7 @@ class InspectEditorTokensController extends Disposable implements IEditorContrib this._register(this._editor.onKeyUp((e) => e.keyCode === KeyCode.Escape && this.stop())); } - public dispose(): void { + public override dispose(): void { this.stop(); super.dispose(); } @@ -214,7 +214,7 @@ class InspectEditorTokensWidget extends Disposable implements IContentWidget { this._editor.addContentWidget(this); } - public dispose(): void { + public override dispose(): void { this._isDisposed = true; this._editor.removeContentWidget(this); this._currentRequestCancellationTokenSource.cancel(); diff --git a/src/vs/workbench/contrib/codeEditor/browser/inspectKeybindings.ts b/src/vs/workbench/contrib/codeEditor/browser/inspectKeybindings.ts index d33ec461d47..f5e0bb1571f 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/inspectKeybindings.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/inspectKeybindings.ts @@ -47,7 +47,7 @@ class InspectKeyMapJSON extends Action { super(id, label); } - public run(): Promise { + public override run(): Promise { return this._editorService.openEditor({ contents: this._keybindingService._dumpDebugInfoJSON(), options: { pinned: true } }); } } diff --git a/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoLineQuickAccess.ts b/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoLineQuickAccess.ts index 99417655a68..73843d65ff6 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoLineQuickAccess.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoLineQuickAccess.ts @@ -41,7 +41,7 @@ export class GotoLineQuickAccessProvider extends AbstractGotoLineQuickAccessProv return this.editorService.activeTextEditorControl; } - protected gotoLocation(context: IQuickAccessTextEditorContext, options: { range: IRange, keyMods: IKeyMods, forceSideBySide?: boolean, preserveFocus?: boolean }): void { + protected override gotoLocation(context: IQuickAccessTextEditorContext, options: { range: IRange, keyMods: IKeyMods, forceSideBySide?: boolean, preserveFocus?: boolean }): void { // Check for sideBySide use if ((options.keyMods.alt || (this.configuration.openEditorPinned && options.keyMods.ctrlCmd) || options.forceSideBySide) && this.editorService.activeEditor) { diff --git a/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoSymbolQuickAccess.ts b/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoSymbolQuickAccess.ts index d3216f61a9b..7766be44b3a 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoSymbolQuickAccess.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoSymbolQuickAccess.ts @@ -67,7 +67,7 @@ export class GotoSymbolQuickAccessProvider extends AbstractGotoSymbolQuickAccess return this.editorService.activeTextEditorControl; } - protected gotoLocation(context: IQuickAccessTextEditorContext, options: { range: IRange, keyMods: IKeyMods, forceSideBySide?: boolean, preserveFocus?: boolean }): void { + protected override gotoLocation(context: IQuickAccessTextEditorContext, options: { range: IRange, keyMods: IKeyMods, forceSideBySide?: boolean, preserveFocus?: boolean }): void { // Check for sideBySide use if ((options.keyMods.alt || (this.configuration.openEditorPinned && options.keyMods.ctrlCmd) || options.forceSideBySide) && this.editorService.activeEditor) { @@ -110,17 +110,17 @@ export class GotoSymbolQuickAccessProvider extends AbstractGotoSymbolQuickAccess return this.doGetSymbolPicks(this.getDocumentSymbols(model, token), prepareQuery(filter), options, token); } - addDecorations(editor: IEditor, range: IRange): void { + override addDecorations(editor: IEditor, range: IRange): void { super.addDecorations(editor, range); } - clearDecorations(editor: IEditor): void { + override clearDecorations(editor: IEditor): void { super.clearDecorations(editor); } //#endregion - protected provideWithoutTextEditor(picker: IQuickPick): IDisposable { + protected override provideWithoutTextEditor(picker: IQuickPick): IDisposable { if (this.canPickWithOutlineService()) { return this.doGetOutlinePicks(picker); } diff --git a/src/vs/workbench/contrib/codeEditor/browser/toggleColumnSelection.ts b/src/vs/workbench/contrib/codeEditor/browser/toggleColumnSelection.ts index 858bf7be6fd..30f6dd38b5c 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/toggleColumnSelection.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/toggleColumnSelection.ts @@ -39,7 +39,7 @@ export class ToggleColumnSelectionAction extends Action { return this._codeEditorService.getActiveCodeEditor(); } - public async run(): Promise { + public async override run(): Promise { const oldValue = this._configurationService.getValue('editor.columnSelection'); const codeEditor = this._getCodeEditor(); await this._configurationService.updateValue('editor.columnSelection', !oldValue); diff --git a/src/vs/workbench/contrib/codeEditor/browser/toggleMinimap.ts b/src/vs/workbench/contrib/codeEditor/browser/toggleMinimap.ts index fbd79e0004d..1da1c3be2d5 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/toggleMinimap.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/toggleMinimap.ts @@ -23,7 +23,7 @@ export class ToggleMinimapAction extends Action { super(id, label); } - public run(): Promise { + public override run(): Promise { const newValue = !this._configurationService.getValue('editor.minimap.enabled'); return this._configurationService.updateValue('editor.minimap.enabled', newValue); } diff --git a/src/vs/workbench/contrib/codeEditor/browser/toggleMultiCursorModifier.ts b/src/vs/workbench/contrib/codeEditor/browser/toggleMultiCursorModifier.ts index 36a63179bf7..d271522e107 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/toggleMultiCursorModifier.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/toggleMultiCursorModifier.ts @@ -29,7 +29,7 @@ export class ToggleMultiCursorModifierAction extends Action { super(id, label); } - public run(): Promise { + public override run(): Promise { const editorConf = this.configurationService.getValue<{ multiCursorModifier: 'ctrlCmd' | 'alt' }>('editor'); const newValue: 'ctrlCmd' | 'alt' = (editorConf.multiCursorModifier === 'ctrlCmd' ? 'alt' : 'ctrlCmd'); diff --git a/src/vs/workbench/contrib/codeEditor/browser/toggleRenderControlCharacter.ts b/src/vs/workbench/contrib/codeEditor/browser/toggleRenderControlCharacter.ts index d530f1a875e..ecf2968c5c1 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/toggleRenderControlCharacter.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/toggleRenderControlCharacter.ts @@ -24,7 +24,7 @@ export class ToggleRenderControlCharacterAction extends Action { super(id, label); } - public run(): Promise { + public override run(): Promise { let newRenderControlCharacters = !this._configurationService.getValue('editor.renderControlCharacters'); return this._configurationService.updateValue('editor.renderControlCharacters', newRenderControlCharacters); } diff --git a/src/vs/workbench/contrib/codeEditor/browser/toggleRenderWhitespace.ts b/src/vs/workbench/contrib/codeEditor/browser/toggleRenderWhitespace.ts index 5a5174b899f..e9835e215b6 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/toggleRenderWhitespace.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/toggleRenderWhitespace.ts @@ -24,7 +24,7 @@ export class ToggleRenderWhitespaceAction extends Action { super(id, label); } - public run(): Promise { + public override run(): Promise { const renderWhitespace = this._configurationService.getValue('editor.renderWhitespace'); let newRenderWhitespace: string; diff --git a/src/vs/workbench/contrib/codeEditor/electron-sandbox/selectionClipboard.ts b/src/vs/workbench/contrib/codeEditor/electron-sandbox/selectionClipboard.ts index 015984db6ab..4441bbf6157 100644 --- a/src/vs/workbench/contrib/codeEditor/electron-sandbox/selectionClipboard.ts +++ b/src/vs/workbench/contrib/codeEditor/electron-sandbox/selectionClipboard.ts @@ -84,7 +84,7 @@ export class SelectionClipboard extends Disposable implements IEditorContributio } } - public dispose(): void { + public override dispose(): void { super.dispose(); } } diff --git a/src/vs/workbench/contrib/comments/browser/commentThreadWidget.ts b/src/vs/workbench/contrib/comments/browser/commentThreadWidget.ts index 1d4e0e38028..50be61d541d 100644 --- a/src/vs/workbench/contrib/comments/browser/commentThreadWidget.ts +++ b/src/vs/workbench/contrib/comments/browser/commentThreadWidget.ts @@ -180,7 +180,7 @@ export class ReviewZoneWidget extends ZoneWidget implements ICommentThreadWidget return undefined; } - protected revealLine(lineNumber: number) { + protected override revealLine(lineNumber: number) { // we don't do anything here as we always do the reveal ourselves. } @@ -397,11 +397,11 @@ export class ReviewZoneWidget extends ZoneWidget implements ICommentThreadWidget this.setFocusedComment(this._focusedComment); } - protected _onWidth(widthInPixel: number): void { + protected override _onWidth(widthInPixel: number): void { this._commentReplyComponent?.editor.layout({ height: 5 * 18, width: widthInPixel - 54 /* margin 20px * 10 + scrollbar 14px*/ }); } - protected _doLayout(heightInPixel: number, widthInPixel: number): void { + protected override _doLayout(heightInPixel: number, widthInPixel: number): void { this._commentReplyComponent?.editor.layout({ height: 5 * 18, width: widthInPixel - 54 /* margin 20px * 10 + scrollbar 14px*/ }); } @@ -953,13 +953,13 @@ export class ReviewZoneWidget extends ZoneWidget implements ICommentThreadWidget this.setCommentEditorDecorations(); } - show(rangeOrPos: IRange | IPosition, heightInLines: number): void { + override show(rangeOrPos: IRange | IPosition, heightInLines: number): void { this._isExpanded = true; super.show(rangeOrPos, heightInLines); this._refresh(); } - hide() { + override hide() { if (this._isExpanded) { this._isExpanded = false; // Focus the container so that the comment editor will be blurred before it is hidden @@ -968,7 +968,7 @@ export class ReviewZoneWidget extends ZoneWidget implements ICommentThreadWidget super.hide(); } - dispose() { + override dispose() { super.dispose(); if (this._resizeObserver) { this._resizeObserver.disconnect(); diff --git a/src/vs/workbench/contrib/comments/browser/commentsView.ts b/src/vs/workbench/contrib/comments/browser/commentsView.ts index 9212343cea2..8d3b040f9b8 100644 --- a/src/vs/workbench/contrib/comments/browser/commentsView.ts +++ b/src/vs/workbench/contrib/comments/browser/commentsView.ts @@ -61,7 +61,7 @@ export class CommentsPanel extends ViewPane { this.hasCommentsContextKey = CONTEXT_KEY_HAS_COMMENTS.bindTo(contextKeyService); } - public renderBody(container: HTMLElement): void { + public override renderBody(container: HTMLElement): void { super.renderBody(container); container.classList.add('comments-panel'); @@ -89,7 +89,7 @@ export class CommentsPanel extends ViewPane { this.renderComments(); } - public focus(): void { + public override focus(): void { if (this.tree && this.tree.getHTMLElement() === document.activeElement) { return; } @@ -144,7 +144,7 @@ export class CommentsPanel extends ViewPane { } } - public layoutBody(height: number, width: number): void { + public override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.tree.layout(height, width); } diff --git a/src/vs/workbench/contrib/comments/browser/reactionsAction.ts b/src/vs/workbench/contrib/comments/browser/reactionsAction.ts index ef091f4dd7b..28215b94592 100644 --- a/src/vs/workbench/contrib/comments/browser/reactionsAction.ts +++ b/src/vs/workbench/contrib/comments/browser/reactionsAction.ts @@ -17,7 +17,7 @@ export class ToggleReactionsAction extends Action { super(ToggleReactionsAction.ID, title || nls.localize('pickReactions', "Pick Reactions..."), 'toggle-reactions', true); this.toggleDropdownMenu = toggleDropdownMenu; } - run(): Promise { + override run(): Promise { this.toggleDropdownMenu(); return Promise.resolve(true); } @@ -32,7 +32,7 @@ export class ReactionActionViewItem extends ActionViewItem { constructor(action: ReactionAction) { super(null, action, {}); } - updateLabel(): void { + override updateLabel(): void { if (!this.label) { return; } diff --git a/src/vs/workbench/contrib/customEditor/browser/customEditorInput.ts b/src/vs/workbench/contrib/customEditor/browser/customEditorInput.ts index 9255be16157..8312c2aa186 100644 --- a/src/vs/workbench/contrib/customEditor/browser/customEditorInput.ts +++ b/src/vs/workbench/contrib/customEditor/browser/customEditorInput.ts @@ -60,7 +60,7 @@ export class CustomEditorInput extends LazilyResolvedWebviewEditorInput { private readonly _untitledDocumentData: VSBuffer | undefined; - get resource() { return this._editorResource; } + override get resource() { return this._editorResource; } private _modelRef?: IReference; @@ -85,20 +85,20 @@ export class CustomEditorInput extends LazilyResolvedWebviewEditorInput { this._untitledDocumentData = options.untitledDocumentData; } - public getTypeId(): string { + public override getTypeId(): string { return CustomEditorInput.typeId; } - public supportsSplitEditor() { + public override supportsSplitEditor() { return !!this.customEditorService.getCustomEditorCapabilities(this.viewType)?.supportsMultipleEditorsPerDocument; } - getName(): string { + override getName(): string { const name = basename(this.labelService.getUriLabel(this.resource)); return this.decorateLabel(name); } - matches(other: IEditorInput): boolean { + override matches(other: IEditorInput): boolean { return this === other || (other instanceof CustomEditorInput && this.viewType === other.viewType && isEqual(this.resource, other.resource)); @@ -119,7 +119,7 @@ export class CustomEditorInput extends LazilyResolvedWebviewEditorInput { return this.labelService.getUriLabel(this.resource); } - public getTitle(verbosity?: Verbosity): string { + public override getTitle(verbosity?: Verbosity): string { switch (verbosity) { case Verbosity.SHORT: return this.decorateLabel(this.shortTitle); @@ -144,22 +144,22 @@ export class CustomEditorInput extends LazilyResolvedWebviewEditorInput { }); } - public isReadonly(): boolean { + public override isReadonly(): boolean { return this._modelRef ? !this._modelRef.object.isEditable() : false; } - public isUntitled(): boolean { + public override isUntitled(): boolean { return this.resource.scheme === Schemas.untitled; } - public isDirty(): boolean { + public override isDirty(): boolean { if (!this._modelRef) { return !!this._defaultDirtyState; } return this._modelRef.object.isDirty(); } - public async save(groupId: GroupIdentifier, options?: ISaveOptions): Promise { + public async override save(groupId: GroupIdentifier, options?: ISaveOptions): Promise { if (!this._modelRef) { return undefined; } @@ -176,7 +176,7 @@ export class CustomEditorInput extends LazilyResolvedWebviewEditorInput { return this; } - public async saveAs(groupId: GroupIdentifier, options?: ISaveOptions): Promise { + public async override saveAs(groupId: GroupIdentifier, options?: ISaveOptions): Promise { if (!this._modelRef) { return undefined; } @@ -194,7 +194,7 @@ export class CustomEditorInput extends LazilyResolvedWebviewEditorInput { return this.rename(groupId, target)?.editor; } - public async revert(group: GroupIdentifier, options?: IRevertOptions): Promise { + public async override revert(group: GroupIdentifier, options?: IRevertOptions): Promise { if (this._modelRef) { return this._modelRef.object.revert(options); } @@ -202,7 +202,7 @@ export class CustomEditorInput extends LazilyResolvedWebviewEditorInput { this._onDidChangeDirty.fire(); } - public async resolve(): Promise { + public async override resolve(): Promise { await super.resolve(); if (this.isDisposed()) { @@ -222,7 +222,7 @@ export class CustomEditorInput extends LazilyResolvedWebviewEditorInput { return null; } - rename(group: GroupIdentifier, newResource: URI): { editor: IEditorInput } | undefined { + override rename(group: GroupIdentifier, newResource: URI): { editor: IEditorInput } | undefined { // See if we can keep using the same custom editor provider const editorInfo = this.customEditorService.getCustomEditor(this.viewType); if (editorInfo?.matches(newResource)) { @@ -266,7 +266,7 @@ export class CustomEditorInput extends LazilyResolvedWebviewEditorInput { this._moveHandler = handler; } - protected transfer(other: CustomEditorInput): CustomEditorInput | undefined { + protected override transfer(other: CustomEditorInput): CustomEditorInput | undefined { if (!super.transfer(other)) { return; } diff --git a/src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts b/src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts index 42297ad8f8c..c143ab6857b 100644 --- a/src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts +++ b/src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts @@ -55,7 +55,7 @@ export class CustomEditorInputSerializer extends WebviewEditorInputSerializer { super(webviewWorkbenchService); } - public serialize(input: CustomEditorInput): string | undefined { + public override serialize(input: CustomEditorInput): string | undefined { const dirty = input.isDirty(); const data: SerializedCustomEditor = { ...this.toJson(input), @@ -71,7 +71,7 @@ export class CustomEditorInputSerializer extends WebviewEditorInputSerializer { } } - protected fromJson(data: SerializedCustomEditor): DeserializedCustomEditor { + protected override fromJson(data: SerializedCustomEditor): DeserializedCustomEditor { return { ...super.fromJson(data), editorResource: URI.from(data.editorResource), @@ -79,7 +79,7 @@ export class CustomEditorInputSerializer extends WebviewEditorInputSerializer { }; } - public deserialize( + public override deserialize( _instantiationService: IInstantiationService, serializedEditorInput: string ): CustomEditorInput { diff --git a/src/vs/workbench/contrib/debug/browser/breakpointWidget.ts b/src/vs/workbench/contrib/debug/browser/breakpointWidget.ts index cc8b39633d1..f075b354d17 100644 --- a/src/vs/workbench/contrib/debug/browser/breakpointWidget.ts +++ b/src/vs/workbench/contrib/debug/browser/breakpointWidget.ts @@ -166,7 +166,7 @@ export class BreakpointWidget extends ZoneWidget implements IPrivateBreakpointWi } } - show(rangeOrPos: IRange | IPosition): void { + override show(rangeOrPos: IRange | IPosition): void { const lineNum = this.input.getModel().getLineCount(); super.show(rangeOrPos, lineNum + 1); } @@ -203,7 +203,7 @@ export class BreakpointWidget extends ZoneWidget implements IPrivateBreakpointWi setTimeout(() => this.input.focus(), 150); } - protected _doLayout(heightInPixel: number, widthInPixel: number): void { + protected override _doLayout(heightInPixel: number, widthInPixel: number): void { this.heightInPx = heightInPixel; this.input.layout({ height: heightInPixel, width: widthInPixel - 113 }); this.centerInputVertically(); @@ -336,7 +336,7 @@ export class BreakpointWidget extends ZoneWidget implements IPrivateBreakpointWi this.dispose(); } - dispose(): void { + override dispose(): void { super.dispose(); this.input.dispose(); lifecycle.dispose(this.toDispose); diff --git a/src/vs/workbench/contrib/debug/browser/breakpointsView.ts b/src/vs/workbench/contrib/debug/browser/breakpointsView.ts index fb71bcf669d..e911124ca95 100644 --- a/src/vs/workbench/contrib/debug/browser/breakpointsView.ts +++ b/src/vs/workbench/contrib/debug/browser/breakpointsView.ts @@ -104,7 +104,7 @@ export class BreakpointsView extends ViewPane { this._register(this.debugService.getModel().onDidChangeBreakpoints(() => this.onBreakpointsChange())); } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this.element.classList.add('debug-pane'); @@ -174,7 +174,7 @@ export class BreakpointsView extends ViewPane { })); } - focus(): void { + override focus(): void { super.focus(); if (this.list) { this.list.domFocus(); @@ -191,7 +191,7 @@ export class BreakpointsView extends ViewPane { return this._inputBoxData; } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { if (this.ignoreLayout) { return; } diff --git a/src/vs/workbench/contrib/debug/browser/callStackView.ts b/src/vs/workbench/contrib/debug/browser/callStackView.ts index 52b7dd311f5..b4499108d7b 100644 --- a/src/vs/workbench/contrib/debug/browser/callStackView.ts +++ b/src/vs/workbench/contrib/debug/browser/callStackView.ts @@ -203,7 +203,7 @@ export class CallStackView extends ViewPane { }, 50); } - protected renderHeaderTitle(container: HTMLElement): void { + protected override renderHeaderTitle(container: HTMLElement): void { super.renderHeaderTitle(container, this.options.title); this.stateMessage = dom.append(container, $('span.call-stack-state-message')); diff --git a/src/vs/workbench/contrib/debug/browser/debugActionViewItems.ts b/src/vs/workbench/contrib/debug/browser/debugActionViewItems.ts index e5197132f80..fb6c58472b7 100644 --- a/src/vs/workbench/contrib/debug/browser/debugActionViewItems.ts +++ b/src/vs/workbench/contrib/debug/browser/debugActionViewItems.ts @@ -67,7 +67,7 @@ export class StartDebugActionViewItem extends BaseActionViewItem { })); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { this.container = container; container.classList.add('start-debug-action-item'); this.start = dom.append(container, $(ThemeIcon.asCSSSelector(debugStart))); @@ -142,15 +142,15 @@ export class StartDebugActionViewItem extends BaseActionViewItem { this.updateOptions(); } - setActionContext(context: any): void { + override setActionContext(context: any): void { this.context = context; } - isEnabled(): boolean { + override isEnabled(): boolean { return true; } - focus(fromRight?: boolean): void { + override focus(fromRight?: boolean): void { if (fromRight) { this.selectBox.focus(); } else { @@ -159,13 +159,13 @@ export class StartDebugActionViewItem extends BaseActionViewItem { } } - blur(): void { + override blur(): void { this.start.tabIndex = -1; this.selectBox.blur(); this.container.blur(); } - setFocusable(focusable: boolean): void { + override setFocusable(focusable: boolean): void { if (focusable) { this.start.tabIndex = 0; } else { @@ -174,7 +174,7 @@ export class StartDebugActionViewItem extends BaseActionViewItem { } } - dispose(): void { + override dispose(): void { this.toDispose = dispose(this.toDispose); } @@ -292,7 +292,7 @@ export class FocusSessionActionViewItem extends SelectActionViewItem { this.update(selectedSession); } - protected getActionContext(_: string, index: number): any { + protected override getActionContext(_: string, index: number): any { return this.getSessions()[index]; } diff --git a/src/vs/workbench/contrib/debug/browser/debugConfigurationManager.ts b/src/vs/workbench/contrib/debug/browser/debugConfigurationManager.ts index 73ad3d564d1..b3f7e65f111 100644 --- a/src/vs/workbench/contrib/debug/browser/debugConfigurationManager.ts +++ b/src/vs/workbench/contrib/debug/browser/debugConfigurationManager.ts @@ -685,7 +685,7 @@ class UserLaunch extends AbstractLaunch implements ILaunch { return nls.localize('user settings', "user settings"); } - get hidden(): boolean { + override get hidden(): boolean { return true; } diff --git a/src/vs/workbench/contrib/debug/browser/debugToolBar.ts b/src/vs/workbench/contrib/debug/browser/debugToolBar.ts index 49fc520816f..eef15c3a7c0 100644 --- a/src/vs/workbench/contrib/debug/browser/debugToolBar.ts +++ b/src/vs/workbench/contrib/debug/browser/debugToolBar.ts @@ -172,7 +172,7 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { } } - protected updateStyles(): void { + protected override updateStyles(): void { super.updateStyles(); if (this.$el) { @@ -243,7 +243,7 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { dom.hide(this.$el); } - dispose(): void { + override dispose(): void { super.dispose(); if (this.$el) { diff --git a/src/vs/workbench/contrib/debug/browser/debugViewlet.ts b/src/vs/workbench/contrib/debug/browser/debugViewlet.ts index d1c14273d55..deb151b168b 100644 --- a/src/vs/workbench/contrib/debug/browser/debugViewlet.ts +++ b/src/vs/workbench/contrib/debug/browser/debugViewlet.ts @@ -74,12 +74,12 @@ export class DebugViewPaneContainer extends ViewPaneContainer { })); } - create(parent: HTMLElement): void { + override create(parent: HTMLElement): void { super.create(parent); parent.classList.add('debug-viewlet'); } - focus(): void { + override focus(): void { super.focus(); if (this.startDebugActionViewItem) { @@ -89,7 +89,7 @@ export class DebugViewPaneContainer extends ViewPaneContainer { } } - getActionViewItem(action: IAction): IActionViewItem | undefined { + override getActionViewItem(action: IAction): IActionViewItem | undefined { if (action.id === DEBUG_START_COMMAND_ID) { this.startDebugActionViewItem = this.instantiationService.createInstance(StartDebugActionViewItem, null, action); return this.startDebugActionViewItem; @@ -120,7 +120,7 @@ export class DebugViewPaneContainer extends ViewPaneContainer { } } - addPanes(panes: { pane: ViewPane, size: number, index?: number }[]): void { + override addPanes(panes: { pane: ViewPane, size: number, index?: number }[]): void { super.addPanes(panes); for (const { pane: pane } of panes) { @@ -134,7 +134,7 @@ export class DebugViewPaneContainer extends ViewPaneContainer { } } - removePanes(panes: ViewPane[]): void { + override removePanes(panes: ViewPane[]): void { super.removePanes(panes); for (const pane of panes) { dispose(this.paneListeners.get(pane.id)); diff --git a/src/vs/workbench/contrib/debug/browser/exceptionWidget.ts b/src/vs/workbench/contrib/debug/browser/exceptionWidget.ts index 67a12c4892c..430143af84c 100644 --- a/src/vs/workbench/contrib/debug/browser/exceptionWidget.ts +++ b/src/vs/workbench/contrib/debug/browser/exceptionWidget.ts @@ -57,7 +57,7 @@ export class ExceptionWidget extends ZoneWidget { }); // style() will trigger _applyStyles } - protected _applyStyles(): void { + protected override _applyStyles(): void { if (this.container) { this.container.style.backgroundColor = this.backgroundColor ? this.backgroundColor.toString() : ''; } @@ -105,7 +105,7 @@ export class ExceptionWidget extends ZoneWidget { container.setAttribute('aria-label', ariaLabel); } - protected _doLayout(_heightInPixel: number | undefined, _widthInPixel: number | undefined): void { + protected override _doLayout(_heightInPixel: number | undefined, _widthInPixel: number | undefined): void { // Reload the height with respect to the exception text content and relayout it to match the line count. this.container!.style.height = 'initial'; diff --git a/src/vs/workbench/contrib/debug/browser/extensionHostDebugService.ts b/src/vs/workbench/contrib/debug/browser/extensionHostDebugService.ts index 40e48c59c3e..6a2e78375f3 100644 --- a/src/vs/workbench/contrib/debug/browser/extensionHostDebugService.ts +++ b/src/vs/workbench/contrib/debug/browser/extensionHostDebugService.ts @@ -86,7 +86,7 @@ class BrowserExtensionHostDebugService extends ExtensionHostDebugChannelClient i } } - async openExtensionDevelopmentHostWindow(args: string[], _env: INullableProcessEnvironment | undefined, _debugRenderer: boolean): Promise { + async override openExtensionDevelopmentHostWindow(args: string[], _env: INullableProcessEnvironment | undefined, _debugRenderer: boolean): Promise { // Add environment parameters required for debug to work const environment = new Map(); diff --git a/src/vs/workbench/contrib/debug/browser/loadedScriptsView.ts b/src/vs/workbench/contrib/debug/browser/loadedScriptsView.ts index 6ebf580c295..c9733a43bd3 100644 --- a/src/vs/workbench/contrib/debug/browser/loadedScriptsView.ts +++ b/src/vs/workbench/contrib/debug/browser/loadedScriptsView.ts @@ -271,23 +271,23 @@ class SessionTreeItem extends BaseTreeItem { this._session = session; } - getInternalId(): string { + override getInternalId(): string { return this._session.getId(); } - getSession(): IDebugSession { + override getSession(): IDebugSession { return this._session; } - getHoverLabel(): string | undefined { + override getHoverLabel(): string | undefined { return undefined; } - hasChildren(): boolean { + override hasChildren(): boolean { return true; } - protected compare(a: BaseTreeItem, b: BaseTreeItem): number { + protected override compare(a: BaseTreeItem, b: BaseTreeItem): number { const acat = this.category(a); const bcat = this.category(b); if (acat !== bcat) { @@ -439,7 +439,7 @@ export class LoadedScriptsView extends ViewPane { this.loadedScriptsItemType = CONTEXT_LOADED_SCRIPTS_ITEM_TYPE.bindTo(contextKeyService); } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this.element.classList.add('debug-pane'); @@ -614,12 +614,12 @@ export class LoadedScriptsView extends ViewPane { this.debugService.getModel().getSessions().forEach(session => addSourcePathsToSession(session)); } - layoutBody(height: number, width: number): void { + override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.tree.layout(height, width); } - dispose(): void { + override dispose(): void { dispose(this.tree); dispose(this.treeLabels); super.dispose(); diff --git a/src/vs/workbench/contrib/debug/browser/repl.ts b/src/vs/workbench/contrib/debug/browser/repl.ts index 0bc759b8caf..d6a9949012d 100644 --- a/src/vs/workbench/contrib/debug/browser/repl.ts +++ b/src/vs/workbench/contrib/debug/browser/repl.ts @@ -454,7 +454,7 @@ export class Repl extends ViewPane implements IHistoryNavigationWidget { return removeAnsiEscapeCodes(text); } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.dimension = new dom.Dimension(width, height); const replInputHeight = Math.min(this.replInput.getContentHeight(), height); @@ -480,11 +480,11 @@ export class Repl extends ViewPane implements IHistoryNavigationWidget { return this.replInput; } - focus(): void { + override focus(): void { setTimeout(() => this.replInput.focus(), 0); } - getActionViewItem(action: IAction): IActionViewItem | undefined { + override getActionViewItem(action: IAction): IActionViewItem | undefined { if (action.id === selectReplCommandId) { const session = (this.tree ? this.tree.getInput() : undefined) ?? this.debugService.getViewModel().focusedSession; return this.instantiationService.createInstance(SelectReplActionViewItem, action, session); @@ -546,7 +546,7 @@ export class Repl extends ViewPane implements IHistoryNavigationWidget { // --- Creation - protected renderBody(parent: HTMLElement): void { + protected override renderBody(parent: HTMLElement): void { super.renderBody(parent); this.container = dom.append(parent, $('.repl')); this.treeContainer = dom.append(this.container, $(`.repl-tree.${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`)); @@ -686,7 +686,7 @@ export class Repl extends ViewPane implements IHistoryNavigationWidget { this.replInput.setDecorations(DECORATION_KEY, decorations); } - saveState(): void { + override saveState(): void { const replHistory = this.history.getHistory(); if (replHistory.length) { this.storageService.store(HISTORY_STORAGE_KEY, JSON.stringify(replHistory), StorageScope.WORKSPACE, StorageTarget.USER); @@ -705,7 +705,7 @@ export class Repl extends ViewPane implements IHistoryNavigationWidget { super.saveState(); } - dispose(): void { + override dispose(): void { this.replInput.dispose(); if (this.replElementsChangeListener) { this.replElementsChangeListener.dispose(); @@ -790,11 +790,11 @@ registerEditorAction(FilterReplAction); class SelectReplActionViewItem extends FocusSessionActionViewItem { - protected getSessions(): ReadonlyArray { + protected override getSessions(): ReadonlyArray { return this.debugService.getModel().getSessions(true).filter(s => s.hasSeparateRepl() && !sessionsToIgnore.has(s)); } - protected mapFocusedSessionToSelected(focusedSession: IDebugSession): IDebugSession { + protected override mapFocusedSessionToSelected(focusedSession: IDebugSession): IDebugSession { while (focusedSession.parentSession && !focusedSession.hasSeparateRepl()) { focusedSession = focusedSession.parentSession; } diff --git a/src/vs/workbench/contrib/debug/browser/replFilter.ts b/src/vs/workbench/contrib/debug/browser/replFilter.ts index 15f2c7bed61..333230c37bc 100644 --- a/src/vs/workbench/contrib/debug/browser/replFilter.ts +++ b/src/vs/workbench/contrib/debug/browser/replFilter.ts @@ -146,7 +146,7 @@ export class ReplFilterActionViewItem extends BaseActionViewItem { this._register(toDisposable(() => this.delayedFilterUpdate.cancel())); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { this.container = container; this.container.classList.add('repl-panel-filter-container'); @@ -157,19 +157,19 @@ export class ReplFilterActionViewItem extends BaseActionViewItem { this.updateClass(); } - focus(): void { + override focus(): void { if (this.filterInputBox) { this.filterInputBox.focus(); } } - blur(): void { + override blur(): void { if (this.filterInputBox) { this.filterInputBox.blur(); } } - setFocusable(): void { + override setFocusable(): void { // noop input elements are focusable by default } @@ -177,7 +177,7 @@ export class ReplFilterActionViewItem extends BaseActionViewItem { return this.filterInputBox.getHistory(); } - get trapsArrowNavigation(): boolean { + override get trapsArrowNavigation(): boolean { return true; } diff --git a/src/vs/workbench/contrib/debug/browser/replViewer.ts b/src/vs/workbench/contrib/debug/browser/replViewer.ts index 937976c6395..d393d97ca5f 100644 --- a/src/vs/workbench/contrib/debug/browser/replViewer.ts +++ b/src/vs/workbench/contrib/debug/browser/replViewer.ts @@ -294,7 +294,7 @@ export class ReplDelegate extends CachedListVirtualDelegate { super(); } - getHeight(element: IReplElement): number { + override getHeight(element: IReplElement): number { const config = this.configurationService.getValue('debug'); if (!config.console.wordWrap) { diff --git a/src/vs/workbench/contrib/debug/browser/statusbarColorProvider.ts b/src/vs/workbench/contrib/debug/browser/statusbarColorProvider.ts index 7db7fd1d453..48207bde922 100644 --- a/src/vs/workbench/contrib/debug/browser/statusbarColorProvider.ts +++ b/src/vs/workbench/contrib/debug/browser/statusbarColorProvider.ts @@ -54,7 +54,7 @@ export class StatusBarColorProvider extends Themable implements IWorkbenchContri this._register(this.contextService.onDidChangeWorkbenchState(state => this.updateStyles())); } - protected updateStyles(): void { + protected override updateStyles(): void { super.updateStyles(); const container = assertIsDefined(this.layoutService.getContainer(Parts.STATUSBAR_PART)); diff --git a/src/vs/workbench/contrib/debug/browser/variablesView.ts b/src/vs/workbench/contrib/debug/browser/variablesView.ts index 537bf780c48..19ee0ed8b94 100644 --- a/src/vs/workbench/contrib/debug/browser/variablesView.ts +++ b/src/vs/workbench/contrib/debug/browser/variablesView.ts @@ -113,7 +113,7 @@ export class VariablesView extends ViewPane { }, 400); } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this.element.classList.add('debug-pane'); @@ -182,12 +182,12 @@ export class VariablesView extends ViewPane { })); } - layoutBody(width: number, height: number): void { + override layoutBody(width: number, height: number): void { super.layoutBody(height, width); this.tree.layout(width, height); } - focus(): void { + override focus(): void { this.tree.domFocus(); } diff --git a/src/vs/workbench/contrib/debug/browser/watchExpressionsView.ts b/src/vs/workbench/contrib/debug/browser/watchExpressionsView.ts index 23ee7babf2f..d11740157ef 100644 --- a/src/vs/workbench/contrib/debug/browser/watchExpressionsView.ts +++ b/src/vs/workbench/contrib/debug/browser/watchExpressionsView.ts @@ -75,7 +75,7 @@ export class WatchExpressionsView extends ViewPane { this.watchItemType = CONTEXT_WATCH_ITEM_TYPE.bindTo(contextKeyService); } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this.element.classList.add('debug-pane'); @@ -163,12 +163,12 @@ export class WatchExpressionsView extends ViewPane { })); } - layoutBody(height: number, width: number): void { + override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.tree.layout(height, width); } - focus(): void { + override focus(): void { this.tree.domFocus(); } diff --git a/src/vs/workbench/contrib/debug/browser/welcomeView.ts b/src/vs/workbench/contrib/debug/browser/welcomeView.ts index e33671e73e8..c418a45ff19 100644 --- a/src/vs/workbench/contrib/debug/browser/welcomeView.ts +++ b/src/vs/workbench/contrib/debug/browser/welcomeView.ts @@ -100,7 +100,7 @@ export class WelcomeView extends ViewPane { debugKeybindingLabel = debugKeybinding ? ` (${debugKeybinding.getLabel()})` : ''; } - shouldShowWelcome(): boolean { + override shouldShowWelcome(): boolean { return true; } } diff --git a/src/vs/workbench/contrib/debug/common/debugModel.ts b/src/vs/workbench/contrib/debug/common/debugModel.ts index a72057fba60..44efdbcf49e 100644 --- a/src/vs/workbench/contrib/debug/common/debugModel.ts +++ b/src/vs/workbench/contrib/debug/common/debugModel.ts @@ -208,7 +208,7 @@ export class Expression extends ExpressionContainer implements IExpression { this.available = await this.evaluateExpression(this.name, session, stackFrame, context); } - toString(): string { + override toString(): string { return `${this.name}\n${this.value}`; } } @@ -258,7 +258,7 @@ export class Variable extends ExpressionContainer implements IExpression { } } - toString(): string { + override toString(): string { return this.name ? `${this.name}: ${this.value}` : this.value; } @@ -287,7 +287,7 @@ export class Scope extends ExpressionContainer implements IScope { super(stackFrame.thread.session, stackFrame.thread.threadId, reference, `scope:${name}:${index}`, namedVariables, indexedVariables); } - toString(): string { + override toString(): string { return this.name; } @@ -310,7 +310,7 @@ export class ErrorScope extends Scope { super(stackFrame, index, message, 0, false); } - toString(): string { + override toString(): string { return this.name; } } @@ -700,7 +700,7 @@ export class Breakpoint extends BaseBreakpoint implements IBreakpoint { return this.verified && this.data && typeof this.data.line === 'number' ? this.data.line : this._lineNumber; } - get verified(): boolean { + override get verified(): boolean { if (this.data) { return this.data.verified && !this.textFileService.isDirty(this._uri); } @@ -716,7 +716,7 @@ export class Breakpoint extends BaseBreakpoint implements IBreakpoint { return this.verified && this.data && typeof this.data.column === 'number' ? this.data.column : this._column; } - get message(): string | undefined { + override get message(): string | undefined { if (this.textFileService.isDirty(this.uri)) { return nls.localize('breakpointDirtydHover', "Unverified breakpoint. File is modified, please restart debug session."); } @@ -761,14 +761,14 @@ export class Breakpoint extends BaseBreakpoint implements IBreakpoint { } - setSessionData(sessionId: string, data: IBreakpointSessionData | undefined): void { + override setSessionData(sessionId: string, data: IBreakpointSessionData | undefined): void { super.setSessionData(sessionId, data); if (!this._adapterData) { this._adapterData = this.adapterData; } } - toJSON(): any { + override toJSON(): any { const result = super.toJSON(); result.uri = this._uri; result.lineNumber = this._lineNumber; @@ -778,7 +778,7 @@ export class Breakpoint extends BaseBreakpoint implements IBreakpoint { return result; } - toString(): string { + override toString(): string { return `${resources.basenameOrAuthority(this.uri)} ${this.lineNumber}`; } @@ -814,7 +814,7 @@ export class FunctionBreakpoint extends BaseBreakpoint implements IFunctionBreak super(enabled, hitCondition, condition, logMessage, id); } - toJSON(): any { + override toJSON(): any { const result = super.toJSON(); result.name = this.name; @@ -829,7 +829,7 @@ export class FunctionBreakpoint extends BaseBreakpoint implements IFunctionBreak return this.data.supportsFunctionBreakpoints; } - toString(): string { + override toString(): string { return this.name; } } @@ -851,7 +851,7 @@ export class DataBreakpoint extends BaseBreakpoint implements IDataBreakpoint { super(enabled, hitCondition, condition, logMessage, id); } - toJSON(): any { + override toJSON(): any { const result = super.toJSON(); result.description = this.description; result.dataId = this.dataId; @@ -868,7 +868,7 @@ export class DataBreakpoint extends BaseBreakpoint implements IDataBreakpoint { return this.data.supportsDataBreakpoints; } - toString(): string { + override toString(): string { return this.description; } } @@ -898,7 +898,7 @@ export class ExceptionBreakpoint extends Enablement implements IExceptionBreakpo return result; } - toString(): string { + override toString(): string { return this.label; } } diff --git a/src/vs/workbench/contrib/debug/common/replModel.ts b/src/vs/workbench/contrib/debug/common/replModel.ts index 61fde3f5893..0c5f39e9394 100644 --- a/src/vs/workbench/contrib/debug/common/replModel.ts +++ b/src/vs/workbench/contrib/debug/common/replModel.ts @@ -131,14 +131,14 @@ export class ReplEvaluationResult extends ExpressionContainer implements IReplEl super(undefined, undefined, 0, generateUuid()); } - async evaluateExpression(expression: string, session: IDebugSession | undefined, stackFrame: IStackFrame | undefined, context: string): Promise { + async override evaluateExpression(expression: string, session: IDebugSession | undefined, stackFrame: IStackFrame | undefined, context: string): Promise { const result = await super.evaluateExpression(expression, session, stackFrame, context); this._available = result; return result; } - toString(): string { + override toString(): string { return `${this.value}`; } } diff --git a/src/vs/workbench/contrib/debug/test/browser/callStack.test.ts b/src/vs/workbench/contrib/debug/test/browser/callStack.test.ts index 6fab5782eb8..e2eb1fb4f10 100644 --- a/src/vs/workbench/contrib/debug/test/browser/callStack.test.ts +++ b/src/vs/workbench/contrib/debug/test/browser/callStack.test.ts @@ -45,7 +45,7 @@ function createTwoStackFrames(session: DebugSession): { firstStackFrame: StackFr let firstStackFrame: StackFrame; let secondStackFrame: StackFrame; const thread = new class extends Thread { - public getCallStack(): StackFrame[] { + public override getCallStack(): StackFrame[] { return [firstStackFrame, secondStackFrame]; } }(session, 'mockthread', 1); @@ -375,7 +375,7 @@ suite('Debug - CallStack', () => { // Add the threads const session = new class extends DebugSession { - get state(): State { + override get state(): State { return State.Stopped; } }(generateUuid(), { resolved: { name: 'stoppedSession', type: 'node', request: 'launch' }, unresolved: undefined }, undefined!, model, undefined, undefined!, undefined!, undefined!, undefined!, undefined!, mockWorkspaceContextService, undefined!, undefined!, NullOpenerService, undefined!, undefined!, mockUriIdentityService, undefined!); diff --git a/src/vs/workbench/contrib/debug/test/browser/debugHover.test.ts b/src/vs/workbench/contrib/debug/test/browser/debugHover.test.ts index 2d9eaeb1a12..19b009efad2 100644 --- a/src/vs/workbench/contrib/debug/test/browser/debugHover.test.ts +++ b/src/vs/workbench/contrib/debug/test/browser/debugHover.test.ts @@ -18,7 +18,7 @@ suite('Debug - Hover', () => { let stackFrame: StackFrame; const thread = new class extends Thread { - public getCallStack(): StackFrame[] { + public override getCallStack(): StackFrame[] { return [stackFrame]; } }(session, 'mockthread', 1); @@ -31,7 +31,7 @@ suite('Debug - Hover', () => { let scope: Scope; stackFrame = new class extends StackFrame { - getScopes(): Promise { + override getScopes(): Promise { return Promise.resolve([scope]); } }(thread, 1, firstSource, 'app.js', 'normal', { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 10 }, 1, true); @@ -40,13 +40,13 @@ suite('Debug - Hover', () => { let variableA: Variable; let variableB: Variable; scope = new class extends Scope { - getChildren(): Promise { + override getChildren(): Promise { return Promise.resolve([variableA]); } }(stackFrame, 1, 'local', 1, false, 10, 10); variableA = new class extends Variable { - getChildren(): Promise { + override getChildren(): Promise { return Promise.resolve([variableB]); } }(session, 1, scope, 2, 'A', 'A', undefined!, 0, 0, {}, 'string'); diff --git a/src/vs/workbench/contrib/debug/test/browser/mockDebug.ts b/src/vs/workbench/contrib/debug/test/browser/mockDebug.ts index 8983f96e3d6..4e0173b43a6 100644 --- a/src/vs/workbench/contrib/debug/test/browser/mockDebug.ts +++ b/src/vs/workbench/contrib/debug/test/browser/mockDebug.ts @@ -593,32 +593,32 @@ class MockDebugStorage extends DebugStorage { super(undefined as any, undefined as any, undefined as any); } - loadBreakpoints(): Breakpoint[] { + override loadBreakpoints(): Breakpoint[] { return []; } - loadFunctionBreakpoints(): FunctionBreakpoint[] { + override loadFunctionBreakpoints(): FunctionBreakpoint[] { return []; } - loadExceptionBreakpoints(): ExceptionBreakpoint[] { + override loadExceptionBreakpoints(): ExceptionBreakpoint[] { return []; } - loadDataBreakpoints(): DataBreakpoint[] { + override loadDataBreakpoints(): DataBreakpoint[] { return []; } - loadWatchExpressions(): Expression[] { + override loadWatchExpressions(): Expression[] { return []; } - storeWatchExpressions(_watchExpressions: (IExpression & IEvaluate)[]): void { } + override storeWatchExpressions(_watchExpressions: (IExpression & IEvaluate)[]): void { } - storeBreakpoints(_debugModel: IDebugModel): void { } + override storeBreakpoints(_debugModel: IDebugModel): void { } } export function createMockDebugModel(): DebugModel { diff --git a/src/vs/workbench/contrib/experiments/test/electron-browser/experimentService.test.ts b/src/vs/workbench/contrib/experiments/test/electron-browser/experimentService.test.ts index ca3ba1e63f1..6fbe6a85644 100644 --- a/src/vs/workbench/contrib/experiments/test/electron-browser/experimentService.test.ts +++ b/src/vs/workbench/contrib/experiments/test/electron-browser/experimentService.test.ts @@ -58,7 +58,7 @@ function aLocalExtension(name: string = 'someext', manifest: any = {}, propertie } export class TestExperimentService extends ExperimentService { - public getExperiments(): Promise { + public override getExperiments(): Promise { return Promise.resolve(experimentData.experiments); } } diff --git a/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.ts b/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.ts index 2d976c8df18..6fda704cff8 100644 --- a/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.ts +++ b/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.ts @@ -477,7 +477,7 @@ export class ShowRuntimeExtensionsAction extends Action { super(id, label); } - public async run(e?: any): Promise { + public async override run(e?: any): Promise { await this._editorService.openEditor(RuntimeExtensionsInput.instance, { revealIfOpened: true, pinned: true }); } } diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts index 668c5d01356..44659d99371 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts @@ -113,7 +113,7 @@ export class PromptExtensionInstallFailureAction extends Action { super('extension.promptExtensionInstallFailure'); } - async run(): Promise { + async override run(): Promise { if (isPromiseCanceledError(this.error)) { return; } @@ -178,11 +178,11 @@ export class ActionWithDropDownAction extends ExtensionAction { private _menuActions: IAction[] = []; get menuActions(): IAction[] { return [...this._menuActions]; } - get extension(): IExtension | null { + override get extension(): IExtension | null { return super.extension; } - set extension(extension: IExtension | null) { + override set extension(extension: IExtension | null) { this.actions.forEach(a => a.extension = extension); super.extension = extension; } @@ -220,7 +220,7 @@ export class ActionWithDropDownAction extends ExtensionAction { this.class = clazz; } - run(): Promise { + override run(): Promise { const enabledActions = this.actions.filter(a => a.enabled); return enabledActions[0].run(); } @@ -259,7 +259,7 @@ export abstract class AbstractInstallAction extends ExtensionAction { } } - async run(): Promise { + async override run(): Promise { if (!this.extension) { return; } @@ -393,7 +393,7 @@ export class InstallAndSyncAction extends AbstractInstallAction { } - update(): void { + override update(): void { super.update(); if (this.enabled) { this.enabled = this.userDataAutoSyncEnablementService.isEnabled() && this.userDataSyncResourceEnablementService.isResourceEnabled(SyncResource.Extensions); @@ -535,7 +535,7 @@ export abstract class InstallInOtherServerAction extends ExtensionAction { return false; } - async run(): Promise { + async override run(): Promise { if (!this.extension) { return; } @@ -607,7 +607,7 @@ export class WebInstallAction extends InstallInOtherServerAction { return localize('install browser', "Install in Browser"); } - protected canInstall(): boolean { + protected override canInstall(): boolean { if (super.canInstall()) { return !!this.extension?.gallery && this.webExtensionsScannerService.canAddExtension(this.extension.gallery); } @@ -663,7 +663,7 @@ export class UninstallAction extends ExtensionAction { this.enabled = true; } - async run(): Promise { + async override run(): Promise { if (!this.extension) { return; } @@ -711,7 +711,7 @@ export class UpdateAction extends ExtensionAction { this.label = this.extension.outdated ? this.getUpdateLabel(this.extension.latestVersion) : this.getUpdateLabel(); } - async run(): Promise { + async override run(): Promise { if (!this.extension) { return; } @@ -747,12 +747,12 @@ export class ExtensionActionWithDropdownActionViewItem extends ActionWithDropdow super(null, action, options, contextMenuProvider); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); this.updateClass(); } - updateClass(): void { + override updateClass(): void { super.updateClass(); if (this.element && this.dropdownMenuActionViewItem && this.dropdownMenuActionViewItem.element) { this.element.classList.toggle('empty', (this._action).menuActions.length === 0); @@ -780,7 +780,7 @@ export abstract class ExtensionDropDownAction extends ExtensionAction { return this._actionViewItem; } - public run({ actionGroups, disposeActionsOnHide }: { actionGroups: IAction[][], disposeActionsOnHide: boolean }): Promise { + public override run({ actionGroups, disposeActionsOnHide }: { actionGroups: IAction[][], disposeActionsOnHide: boolean }): Promise { if (this._actionViewItem) { this._actionViewItem.showMenu(actionGroups, disposeActionsOnHide); } @@ -917,7 +917,7 @@ export class ManageExtensionAction extends ExtensionDropDownAction { return groups; } - async run(): Promise { + async override run(): Promise { const runtimeExtensions = await this.extensionService.getExtensions(); return super.run({ actionGroups: await this.getActionGroups(runtimeExtensions), disposeActionsOnHide: true }); } @@ -945,7 +945,7 @@ export class ExtensionEditorManageExtensionAction extends ExtensionDropDownActio update(): void { } - run(): Promise { + override run(): Promise { const actionGroups: IAction[][] = []; getContextMenuActions(this.extension, true, this.instantiationService).forEach(actions => actionGroups.push(actions)); actionGroups.forEach(group => group.forEach(extensionAction => { @@ -976,7 +976,7 @@ export class MenuItemExtensionAction extends ExtensionAction { } } - async run(): Promise { + async override run(): Promise { if (this.extension) { await this.action.run(this.extension.identifier.id); } @@ -1002,7 +1002,7 @@ export class InstallAnotherVersionAction extends ExtensionAction { this.enabled = !!this.extension && !this.extension.isBuiltin && !!this.extension.gallery && this.extension.state === ExtensionState.Installed; } - run(): Promise { + override run(): Promise { if (!this.enabled) { return Promise.resolve(); } @@ -1055,7 +1055,7 @@ export class EnableForWorkspaceAction extends ExtensionAction { } } - async run(): Promise { + async override run(): Promise { if (!this.extension) { return; } @@ -1086,7 +1086,7 @@ export class EnableGloballyAction extends ExtensionAction { } } - async run(): Promise { + async override run(): Promise { if (!this.extension) { return; } @@ -1123,7 +1123,7 @@ export class DisableForWorkspaceAction extends ExtensionAction { } } - async run(): Promise { + async override run(): Promise { if (!this.extension) { return; } @@ -1160,7 +1160,7 @@ export class DisableGloballyAction extends ExtensionAction { } } - async run(): Promise { + async override run(): Promise { if (!this.extension) { return; } @@ -1364,7 +1364,7 @@ export class ReloadAction extends ExtensionAction { } } - run(): Promise { + override run(): Promise { return Promise.resolve(this.hostService.reload()); } } @@ -1419,7 +1419,7 @@ export class SetColorThemeAction extends ExtensionAction { this.class = this.enabled ? SetColorThemeAction.EnabledClass : SetColorThemeAction.DisabledClass; } - async run({ showCurrentTheme, ignoreFocusLost }: { showCurrentTheme: boolean, ignoreFocusLost: boolean } = { showCurrentTheme: false, ignoreFocusLost: false }): Promise { + async override run({ showCurrentTheme, ignoreFocusLost }: { showCurrentTheme: boolean, ignoreFocusLost: boolean } = { showCurrentTheme: false, ignoreFocusLost: false }): Promise { this.colorThemes = await this.workbenchThemeService.getColorThemes(); this.update(); @@ -1472,7 +1472,7 @@ export class SetFileIconThemeAction extends ExtensionAction { this.class = this.enabled ? SetFileIconThemeAction.EnabledClass : SetFileIconThemeAction.DisabledClass; } - async run({ showCurrentTheme, ignoreFocusLost }: { showCurrentTheme: boolean, ignoreFocusLost: boolean } = { showCurrentTheme: false, ignoreFocusLost: false }): Promise { + async override run({ showCurrentTheme, ignoreFocusLost }: { showCurrentTheme: boolean, ignoreFocusLost: boolean } = { showCurrentTheme: false, ignoreFocusLost: false }): Promise { this.fileIconThemes = await this.workbenchThemeService.getFileIconThemes(); this.update(); if (!this.enabled) { @@ -1526,7 +1526,7 @@ export class SetProductIconThemeAction extends ExtensionAction { this.class = this.enabled ? SetProductIconThemeAction.EnabledClass : SetProductIconThemeAction.DisabledClass; } - async run({ showCurrentTheme, ignoreFocusLost }: { showCurrentTheme: boolean, ignoreFocusLost: boolean } = { showCurrentTheme: false, ignoreFocusLost: false }): Promise { + async override run({ showCurrentTheme, ignoreFocusLost }: { showCurrentTheme: boolean, ignoreFocusLost: boolean } = { showCurrentTheme: false, ignoreFocusLost: false }): Promise { this.productIconThemes = await this.workbenchThemeService.getProductIconThemes(); this.update(); if (!this.enabled) { @@ -1564,7 +1564,7 @@ export class ShowRecommendedExtensionAction extends Action { this.extensionId = extensionId; } - run(): Promise { + override run(): Promise { return this.viewletService.openViewlet(VIEWLET_ID, true) .then(viewlet => viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer) .then(viewlet => { @@ -1599,7 +1599,7 @@ export class InstallRecommendedExtensionAction extends Action { this.extensionId = extensionId; } - async run(): Promise { + async override run(): Promise { const viewlet = await this.viewletService.openViewlet(VIEWLET_ID, true); const viewPaneContainer = viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer; viewPaneContainer.search(`@id:${this.extensionId}`); @@ -1634,7 +1634,7 @@ export class IgnoreExtensionRecommendationAction extends Action { this.enabled = true; } - public run(): Promise { + public override run(): Promise { this.extensionRecommendationsManagementService.toggleGlobalIgnoredRecommendation(this.extension.identifier.id, true); return Promise.resolve(); } @@ -1657,7 +1657,7 @@ export class UndoIgnoreExtensionRecommendationAction extends Action { this.enabled = true; } - public run(): Promise { + public override run(): Promise { this.extensionRecommendationsManagementService.toggleGlobalIgnoredRecommendation(this.extension.identifier.id, false); return Promise.resolve(); } @@ -1672,7 +1672,7 @@ export class SearchExtensionsAction extends Action { super('extensions.searchExtensions', localize('search recommendations', "Search Extensions"), undefined, true); } - async run(): Promise { + async override run(): Promise { const viewPaneContainer = (await this.viewletService.openViewlet(VIEWLET_ID, true))?.getViewPaneContainer() as IExtensionsViewPaneContainer; viewPaneContainer.search(this.searchValue); viewPaneContainer.focus(); @@ -1789,7 +1789,7 @@ export class ConfigureWorkspaceRecommendedExtensionsAction extends AbstractConfi this.enabled = this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY; } - public run(): Promise { + public override run(): Promise { switch (this.contextService.getWorkbenchState()) { case WorkbenchState.FOLDER: return this.openExtensionsFile(this.contextService.getWorkspace().folders[0].toResource(EXTENSIONS_CONFIG)); @@ -1819,7 +1819,7 @@ export class ConfigureWorkspaceFolderRecommendedExtensionsAction extends Abstrac super(id, label, contextService, fileService, textFileService, editorService, jsonEditingService, textModelResolverService); } - public run(): Promise { + public override run(): Promise { const folderCount = this.contextService.getWorkspace().folders.length; const pickFolderPromise = folderCount === 1 ? Promise.resolve(this.contextService.getWorkspace().folders[0]) : this.commandService.executeCommand(PICK_WORKSPACE_FOLDER_COMMAND_ID); return Promise.resolve(pickFolderPromise) @@ -1928,7 +1928,7 @@ export class StatusLabelAction extends Action implements IExtensionContainer { return null; } - run(): Promise { + override run(): Promise { return Promise.resolve(); } @@ -1953,7 +1953,7 @@ export class MaliciousStatusLabelAction extends ExtensionAction { } } - run(): Promise { + override run(): Promise { return Promise.resolve(); } } @@ -1984,7 +1984,7 @@ export class ToggleSyncExtensionAction extends ExtensionDropDownAction { } } - async run(): Promise { + async override run(): Promise { return super.run({ actionGroups: [ [ @@ -2070,7 +2070,7 @@ export class ExtensionToolTipAction extends ExtensionAction { return ''; } - run(): Promise { + override run(): Promise { return Promise.resolve(null); } } @@ -2169,7 +2169,7 @@ export class SystemDisabledWarningAction extends ExtensionAction { } } - run(): Promise { + override run(): Promise { return Promise.resolve(null); } } @@ -2191,11 +2191,11 @@ export class ReinstallAction extends Action { super(id, label); } - get enabled(): boolean { + override get enabled(): boolean { return this.extensionsWorkbenchService.local.filter(l => !l.isBuiltin && l.local).length > 0; } - run(): Promise { + override run(): Promise { return this.quickInputService.pick(this.getEntries(), { placeHolder: localize('selectExtensionToReinstall', "Select Extension to Reinstall") }) .then(pick => pick && this.reinstallExtension(pick.extension)); } @@ -2259,11 +2259,11 @@ export class InstallSpecificVersionOfExtensionAction extends Action { super(id, label); } - get enabled(): boolean { + override get enabled(): boolean { return this.extensionsWorkbenchService.local.some(l => this.isEnabled(l)); } - async run(): Promise { + async override run(): Promise { const extensionPick = await this.quickInputService.pick(this.getExtensionEntries(), { placeHolder: localize('selectExtension', "Select Extension"), matchOnDetail: true }); if (extensionPick && extensionPick.extension) { const versionPick = await this.quickInputService.pick(extensionPick.versions.map(v => ({ id: v.version, label: v.version, description: `${getRelativeDateLabel(new Date(Date.parse(v.date)))}${v.version === extensionPick.extension.version ? ` (${localize('current', "Current")})` : ''}` })), { placeHolder: localize('selectVersion', "Select Version to Install"), matchOnDetail: true }); @@ -2361,7 +2361,7 @@ export abstract class AbstractInstallExtensionsInServerAction extends Action { this.tooltip = this.label; } - async run(): Promise { + async override run(): Promise { return this.selectAndInstallExtensions(); } @@ -2432,7 +2432,7 @@ export class InstallLocalExtensionsInRemoteAction extends AbstractInstallExtensi super('workbench.extensions.actions.installLocalExtensionsInRemote', extensionsWorkbenchService, quickInputService, notificationService, progressService); } - get label(): string { + override get label(): string { if (this.extensionManagementServerService && this.extensionManagementServerService.remoteExtensionManagementServer) { return localize('select and install local extensions', "Install Local Extensions in '{0}'...", this.extensionManagementServerService.remoteExtensionManagementServer.label); } @@ -2485,7 +2485,7 @@ export class InstallRemoteExtensionsInLocalAction extends AbstractInstallExtensi super(id, extensionsWorkbenchService, quickInputService, notificationService, progressService); } - get label(): string { + override get label(): string { return localize('select and install remote extensions', "Install Remote Extensions Locally..."); } diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsViewer.ts b/src/vs/workbench/contrib/extensions/browser/extensionsViewer.ts index a57134fb516..4185fb859ec 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsViewer.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsViewer.ts @@ -226,7 +226,7 @@ class OpenExtensionAction extends Action { this._extension = extension; } - run(sideByside: boolean): Promise { + override run(sideByside: boolean): Promise { if (this._extension) { return this.extensionsWorkdbenchService.open(this._extension, { sideByside }); } diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts b/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts index 4c1c975a732..aa403b249bd 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts @@ -465,7 +465,7 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE return this.searchBox?.getValue(); } - create(parent: HTMLElement): void { + override create(parent: HTMLElement): void { parent.classList.add('extensions-viewlet'); this.root = parent; @@ -555,13 +555,13 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE super.create(append(this.root, $('.extensions'))); } - focus(): void { + override focus(): void { if (this.searchBox) { this.searchBox.focus(); } } - layout(dimension: Dimension): void { + override layout(dimension: Dimension): void { if (this.root) { this.root.classList.toggle('narrow', dimension.width <= 300); } @@ -571,7 +571,7 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE super.layout(new Dimension(dimension.width, dimension.height - 41)); } - getOptimalWidth(): number { + override getOptimalWidth(): number { return 400; } @@ -612,7 +612,7 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE : ''; } - saveState(): void { + override saveState(): void { const value = this.searchBox ? this.searchBox.getValue() : ''; if (ExtensionsListView.isLocalExtensionsQuery(value)) { this.searchViewletState['query.value'] = value; @@ -642,7 +642,7 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE ))).then(() => undefined); } - protected onDidAddViewDescriptors(added: IAddedViewDescriptorRef[]): ViewPane[] { + protected override onDidAddViewDescriptors(added: IAddedViewDescriptorRef[]): ViewPane[] { const addedViews = super.onDidAddViewDescriptors(added); this.progress(Promise.all(addedViews.map(addedView => (addedView).show(this.normalizedQuery()) diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsViews.ts b/src/vs/workbench/contrib/extensions/browser/extensionsViews.ts index f9a525c8466..0ab5c5927ec 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsViews.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsViews.ts @@ -141,7 +141,7 @@ export class ExtensionsListView extends ViewPane { protected registerActions(): void { } - protected renderHeader(container: HTMLElement): void { + protected override renderHeader(container: HTMLElement): void { container.classList.add('extension-view-header'); super.renderHeader(container); @@ -149,7 +149,7 @@ export class ExtensionsListView extends ViewPane { this._register(attachBadgeStyler(this.badge, this.themeService)); } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); const extensionsList = append(container, $('.extensions-list')); @@ -193,7 +193,7 @@ export class ExtensionsListView extends ViewPane { }; } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); if (this.bodyTemplate) { this.bodyTemplate.extensionsList.style.height = height + 'px'; @@ -908,7 +908,7 @@ export class ExtensionsListView extends ViewPane { return new PagedModel(pager); } - dispose(): void { + override dispose(): void { super.dispose(); if (this.queryRequest) { this.queryRequest.request.cancel(); @@ -979,7 +979,7 @@ export class ExtensionsListView extends ViewPane { return /@recommended:keymaps/i.test(query); } - focus(): void { + override focus(): void { super.focus(); if (!this.list) { return; @@ -994,7 +994,7 @@ export class ExtensionsListView extends ViewPane { export class ServerInstalledExtensionsView extends ExtensionsListView { - async show(query: string): Promise> { + async override show(query: string): Promise> { query = query ? query : '@installed'; if (!ExtensionsListView.isLocalExtensionsQuery(query)) { query = query += ' @installed'; @@ -1006,7 +1006,7 @@ export class ServerInstalledExtensionsView extends ExtensionsListView { export class EnabledExtensionsView extends ExtensionsListView { - async show(query: string): Promise> { + async override show(query: string): Promise> { query = query || '@enabled'; return ExtensionsListView.isEnabledExtensionsQuery(query) ? super.show(query) : this.showEmptyModel(); } @@ -1014,26 +1014,26 @@ export class EnabledExtensionsView extends ExtensionsListView { export class DisabledExtensionsView extends ExtensionsListView { - async show(query: string): Promise> { + async override show(query: string): Promise> { query = query || '@disabled'; return ExtensionsListView.isDisabledExtensionsQuery(query) ? super.show(query) : this.showEmptyModel(); } } export class BuiltInFeatureExtensionsView extends ExtensionsListView { - async show(query: string): Promise> { + async override show(query: string): Promise> { return (query && query.trim() !== '@builtin') ? this.showEmptyModel() : super.show('@builtin:features'); } } export class BuiltInThemesExtensionsView extends ExtensionsListView { - async show(query: string): Promise> { + async override show(query: string): Promise> { return (query && query.trim() !== '@builtin') ? this.showEmptyModel() : super.show('@builtin:themes'); } } export class BuiltInProgrammingLanguageExtensionsView extends ExtensionsListView { - async show(query: string): Promise> { + async override show(query: string): Promise> { return (query && query.trim() !== '@builtin') ? this.showEmptyModel() : super.show('@builtin:basics'); } } @@ -1041,7 +1041,7 @@ export class BuiltInProgrammingLanguageExtensionsView extends ExtensionsListView export class DefaultRecommendedExtensionsView extends ExtensionsListView { private readonly recommendedExtensionsQuery = '@recommended:all'; - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this._register(this.extensionRecommendationsService.onDidChangeRecommendations(() => { @@ -1049,7 +1049,7 @@ export class DefaultRecommendedExtensionsView extends ExtensionsListView { })); } - async show(query: string): Promise> { + async override show(query: string): Promise> { if (query && query.trim() !== this.recommendedExtensionsQuery) { return this.showEmptyModel(); } @@ -1066,7 +1066,7 @@ export class DefaultRecommendedExtensionsView extends ExtensionsListView { export class RecommendedExtensionsView extends ExtensionsListView { private readonly recommendedExtensionsQuery = '@recommended'; - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this._register(this.extensionRecommendationsService.onDidChangeRecommendations(() => { @@ -1074,7 +1074,7 @@ export class RecommendedExtensionsView extends ExtensionsListView { })); } - async show(query: string): Promise> { + async override show(query: string): Promise> { return (query && query.trim() !== this.recommendedExtensionsQuery) ? this.showEmptyModel() : super.show(this.recommendedExtensionsQuery); } } @@ -1082,14 +1082,14 @@ export class RecommendedExtensionsView extends ExtensionsListView { export class WorkspaceRecommendedExtensionsView extends ExtensionsListView implements IWorkspaceRecommendedExtensionsView { private readonly recommendedExtensionsQuery = '@recommended:workspace'; - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this._register(this.extensionRecommendationsService.onDidChangeRecommendations(() => this.show(this.recommendedExtensionsQuery))); this._register(this.contextService.onDidChangeWorkbenchState(() => this.show(this.recommendedExtensionsQuery))); } - async show(query: string): Promise> { + async override show(query: string): Promise> { let shouldShowEmptyView = query && query.trim() !== '@recommended' && query.trim() !== '@recommended:workspace'; let model = await (shouldShowEmptyView ? this.showEmptyModel() : super.show(this.recommendedExtensionsQuery)); this.setExpanded(model.length > 0); diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts index 15ceb565957..c114b95be95 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts @@ -1333,7 +1333,7 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension this.ignoredAutoUpdateExtensions = this.ignoredAutoUpdateExtensions.filter(extensionId => this.local.some(local => !!local.local && new ExtensionIdentifierWithVersion(local.identifier, local.version).key() === extensionId)); } - dispose(): void { + override dispose(): void { super.dispose(); this.syncDelayer.cancel(); } diff --git a/src/vs/workbench/contrib/extensions/common/extensionsInput.ts b/src/vs/workbench/contrib/extensions/common/extensionsInput.ts index eef812021ea..1a03601c368 100644 --- a/src/vs/workbench/contrib/extensions/common/extensionsInput.ts +++ b/src/vs/workbench/contrib/extensions/common/extensionsInput.ts @@ -32,15 +32,15 @@ export class ExtensionsInput extends EditorInput { return ExtensionsInput.ID; } - getName(): string { + override getName(): string { return localize('extensionsInputName', "Extension: {0}", this.extension.displayName); } - supportsSplitEditor(): boolean { + override supportsSplitEditor(): boolean { return false; } - matches(other: unknown): boolean { + override matches(other: unknown): boolean { if (super.matches(other)) { return true; } diff --git a/src/vs/workbench/contrib/extensions/common/runtimeExtensionsInput.ts b/src/vs/workbench/contrib/extensions/common/runtimeExtensionsInput.ts index 8fa384f074a..df328a2d9b7 100644 --- a/src/vs/workbench/contrib/extensions/common/runtimeExtensionsInput.ts +++ b/src/vs/workbench/contrib/extensions/common/runtimeExtensionsInput.ts @@ -29,15 +29,15 @@ export class RuntimeExtensionsInput extends EditorInput { return RuntimeExtensionsInput.ID; } - getName(): string { + override getName(): string { return nls.localize('extensionsInputName', "Running Extensions"); } - supportsSplitEditor(): boolean { + override supportsSplitEditor(): boolean { return false; } - matches(other: unknown): boolean { + override matches(other: unknown): boolean { return other instanceof RuntimeExtensionsInput; } } diff --git a/src/vs/workbench/contrib/extensions/electron-browser/debugExtensionHostAction.ts b/src/vs/workbench/contrib/extensions/electron-browser/debugExtensionHostAction.ts index bd3ea4886c1..22095c34251 100644 --- a/src/vs/workbench/contrib/extensions/electron-browser/debugExtensionHostAction.ts +++ b/src/vs/workbench/contrib/extensions/electron-browser/debugExtensionHostAction.ts @@ -27,7 +27,7 @@ export class DebugExtensionHostAction extends Action { super(DebugExtensionHostAction.ID, DebugExtensionHostAction.LABEL, DebugExtensionHostAction.CSS_CLASS); } - async run(): Promise { + async override run(): Promise { const inspectPort = await this._extensionService.getInspectPort(false); if (!inspectPort) { diff --git a/src/vs/workbench/contrib/extensions/electron-browser/extensionsSlowActions.ts b/src/vs/workbench/contrib/extensions/electron-browser/extensionsSlowActions.ts index d025c2e1316..53ee0c44897 100644 --- a/src/vs/workbench/contrib/extensions/electron-browser/extensionsSlowActions.ts +++ b/src/vs/workbench/contrib/extensions/electron-browser/extensionsSlowActions.ts @@ -74,7 +74,7 @@ export class SlowExtensionAction extends Action { this.enabled = Boolean(RepoInfo.fromExtension(extension)); } - async run(): Promise { + async override run(): Promise { const action = await this._instantiationService.invokeFunction(createSlowExtensionAction, this.extension, this.profile); if (action) { await action.run(); @@ -127,7 +127,7 @@ class ReportExtensionSlowAction extends Action { super('report.slow', localize('cmd.report', "Report Issue")); } - async run(): Promise { + async override run(): Promise { // rewrite pii (paths) and store on disk const profiler = await import('v8-inspect-profiler'); @@ -171,7 +171,7 @@ class ShowExtensionSlowAction extends Action { super('show.slow', localize('cmd.show', "Show Issues")); } - async run(): Promise { + async override run(): Promise { // rewrite pii (paths) and store on disk const profiler = await import('v8-inspect-profiler'); diff --git a/src/vs/workbench/contrib/extensions/electron-browser/reportExtensionIssueAction.ts b/src/vs/workbench/contrib/extensions/electron-browser/reportExtensionIssueAction.ts index bd4331a381d..d89536ffb4b 100644 --- a/src/vs/workbench/contrib/extensions/electron-browser/reportExtensionIssueAction.ts +++ b/src/vs/workbench/contrib/extensions/electron-browser/reportExtensionIssueAction.ts @@ -40,7 +40,7 @@ export class ReportExtensionIssueAction extends Action { this.enabled = extension.description.isBuiltin || (!!extension.description.repository && !!extension.description.repository.url); } - async run(): Promise { + async override run(): Promise { if (!this._url) { this._url = await this._generateNewIssueUrl(this.extension); } diff --git a/src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsEditor.ts b/src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsEditor.ts index 8aba9dd18a1..a5c303f843a 100644 --- a/src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsEditor.ts +++ b/src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsEditor.ts @@ -134,7 +134,7 @@ export class StartExtensionHostProfileAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { this._extensionHostProfileService.startProfiling(); return Promise.resolve(); } @@ -151,7 +151,7 @@ export class StopExtensionHostProfileAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { this._extensionHostProfileService.stopProfiling(); return Promise.resolve(); } @@ -175,7 +175,7 @@ export class SaveExtensionHostProfileAction extends Action { }); } - run(): Promise { + override run(): Promise { return Promise.resolve(this._asyncRun()); } diff --git a/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsActions.ts b/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsActions.ts index 99cd8d052d8..ce16a3b34d9 100644 --- a/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsActions.ts +++ b/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsActions.ts @@ -26,7 +26,7 @@ export class OpenExtensionsFolderAction extends Action { super(id, label, undefined, true); } - async run(): Promise { + async override run(): Promise { const extensionsHome = URI.file(this.environmentService.extensionsPath); const file = await this.fileService.resolve(extensionsHome); diff --git a/src/vs/workbench/contrib/extensions/test/electron-browser/extensionRecommendationsService.test.ts b/src/vs/workbench/contrib/extensions/test/electron-browser/extensionRecommendationsService.test.ts index fdc9e739110..3379afc2e53 100644 --- a/src/vs/workbench/contrib/extensions/test/electron-browser/extensionRecommendationsService.test.ts +++ b/src/vs/workbench/contrib/extensions/test/electron-browser/extensionRecommendationsService.test.ts @@ -261,7 +261,7 @@ suite('ExtensionRecommendationsService Test', () => { prompted = false; class TestNotificationService2 extends TestNotificationService { - public prompt(severity: Severity, message: string, choices: IPromptChoice[], options?: IPromptOptions) { + public override prompt(severity: Severity, message: string, choices: IPromptChoice[], options?: IPromptOptions) { prompted = true; promptedEmitter.fire(); return super.prompt(severity, message, choices, options); diff --git a/src/vs/workbench/contrib/feedback/browser/feedback.ts b/src/vs/workbench/contrib/feedback/browser/feedback.ts index 223c6bb7f87..9bd1c3ba108 100644 --- a/src/vs/workbench/contrib/feedback/browser/feedback.ts +++ b/src/vs/workbench/contrib/feedback/browser/feedback.ts @@ -92,7 +92,7 @@ export class FeedbackWidget extends Dropdown { this.element.title = nls.localize('sendFeedback', "Tweet Feedback"); } - protected getAnchor(): HTMLElement | IAnchor { + protected override getAnchor(): HTMLElement | IAnchor { const position = dom.getDomNodePagePosition(this.element); return { @@ -103,7 +103,7 @@ export class FeedbackWidget extends Dropdown { }; } - protected renderContents(container: HTMLElement): IDisposable { + protected override renderContents(container: HTMLElement): IDisposable { const disposables = new DisposableStore(); container.classList.add('monaco-menu-container'); @@ -379,7 +379,7 @@ export class FeedbackWidget extends Dropdown { return element; } - show(): void { + override show(): void { super.show(); if (this.options.onFeedbackVisibilityChange) { @@ -389,13 +389,13 @@ export class FeedbackWidget extends Dropdown { this.updateCharCountText(); } - protected onHide(): void { + protected override onHide(): void { if (this.options.onFeedbackVisibilityChange) { this.options.onFeedbackVisibilityChange(false); } } - hide(): void { + override hide(): void { if (this.feedbackDescriptionInput) { this.feedback = this.feedbackDescriptionInput.value; } @@ -412,7 +412,7 @@ export class FeedbackWidget extends Dropdown { super.hide(); } - onEvent(e: Event, activeElement: HTMLElement): void { + override onEvent(e: Event, activeElement: HTMLElement): void { if (e instanceof KeyboardEvent) { const keyboardEvent = e; if (keyboardEvent.keyCode === 27) { // Escape diff --git a/src/vs/workbench/contrib/files/browser/editors/binaryFileEditor.ts b/src/vs/workbench/contrib/files/browser/editors/binaryFileEditor.ts index 59334b13ead..dc9ec77a603 100644 --- a/src/vs/workbench/contrib/files/browser/editors/binaryFileEditor.ts +++ b/src/vs/workbench/contrib/files/browser/editors/binaryFileEditor.ts @@ -55,7 +55,7 @@ export class BinaryFileEditor extends BaseBinaryResourceEditor { } } - getTitle(): string { + override getTitle(): string { return this.input ? this.input.getName() : nls.localize('binaryFileEditor', "Binary File Viewer"); } } diff --git a/src/vs/workbench/contrib/files/browser/editors/textFileEditor.ts b/src/vs/workbench/contrib/files/browser/editors/textFileEditor.ts index 6bbeff0f38a..0fe6b4da1d2 100644 --- a/src/vs/workbench/contrib/files/browser/editors/textFileEditor.ts +++ b/src/vs/workbench/contrib/files/browser/editors/textFileEditor.ts @@ -88,7 +88,7 @@ export class TextFileEditor extends BaseTextEditor { } } - protected onWillCloseEditorInGroup(editor: IEditorInput): void { + protected override onWillCloseEditorInGroup(editor: IEditorInput): void { // React to editors closing to preserve or clear view state. This needs to happen // in the onWillCloseEditor because at that time the editor has not yet @@ -96,15 +96,15 @@ export class TextFileEditor extends BaseTextEditor { this.doSaveOrClearTextEditorViewState(editor); } - getTitle(): string { + override getTitle(): string { return this.input ? this.input.getName() : localize('textFileEditor', "Text File Editor"); } - get input(): FileEditorInput | undefined { + override get input(): FileEditorInput | undefined { return this._input as FileEditorInput; } - async setInput(input: FileEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + async override setInput(input: FileEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { // Update/clear view settings if input changes this.doSaveOrClearTextEditorViewState(this.input); @@ -229,7 +229,7 @@ export class TextFileEditor extends BaseTextEditor { } } - clearInput(): void { + override clearInput(): void { // Update/clear editor view state in settings this.doSaveOrClearTextEditorViewState(this.input); @@ -244,7 +244,7 @@ export class TextFileEditor extends BaseTextEditor { super.clearInput(); } - protected saveState(): void { + protected override saveState(): void { // Update/clear editor view State this.doSaveOrClearTextEditorViewState(this.input); diff --git a/src/vs/workbench/contrib/files/browser/editors/textFileSaveErrorHandler.ts b/src/vs/workbench/contrib/files/browser/editors/textFileSaveErrorHandler.ts index 1ef4caee830..2efcb9b9418 100644 --- a/src/vs/workbench/contrib/files/browser/editors/textFileSaveErrorHandler.ts +++ b/src/vs/workbench/contrib/files/browser/editors/textFileSaveErrorHandler.ts @@ -180,7 +180,7 @@ export class TextFileSaveErrorHandler extends Disposable implements ISaveErrorHa this.messages.set(model.resource, handle); } - dispose(): void { + override dispose(): void { super.dispose(); this.messages.clear(); @@ -205,7 +205,7 @@ class ResolveConflictLearnMoreAction extends Action { super('workbench.files.action.resolveConflictLearnMore', localize('learnMore', "Learn More")); } - async run(): Promise { + async override run(): Promise { await this.openerService.open(URI.parse('https://go.microsoft.com/fwlink/?linkid=868264')); } } @@ -218,7 +218,7 @@ class DoNotShowResolveConflictLearnMoreAction extends Action { super('workbench.files.action.resolveConflictLearnMoreDoNotShowAgain', localize('dontShowAgain', "Don't Show Again")); } - async run(notification: IDisposable): Promise { + async override run(notification: IDisposable): Promise { this.storageService.store(LEARN_MORE_DIRTY_WRITE_IGNORE_KEY, true, StorageScope.GLOBAL, StorageTarget.USER); // Hide notification @@ -238,7 +238,7 @@ class ResolveSaveConflictAction extends Action { super('workbench.files.action.resolveConflict', localize('compareChanges', "Compare")); } - async run(): Promise { + async override run(): Promise { if (!this.model.isDisposed()) { const resource = this.model.resource; const name = basename(resource); @@ -269,7 +269,7 @@ class SaveModelElevatedAction extends Action { super('workbench.files.action.saveModelElevated', triedToUnlock ? isWindows ? localize('overwriteElevated', "Overwrite as Admin...") : localize('overwriteElevatedSudo', "Overwrite as Sudo...") : isWindows ? localize('saveElevated', "Retry as Admin...") : localize('saveElevatedSudo', "Retry as Sudo...")); } - async run(): Promise { + async override run(): Promise { if (!this.model.isDisposed()) { await this.model.save({ writeElevated: true, @@ -288,7 +288,7 @@ class RetrySaveModelAction extends Action { super('workbench.files.action.saveModel', localize('retry', "Retry")); } - async run(): Promise { + async override run(): Promise { if (!this.model.isDisposed()) { await this.model.save({ reason: SaveReason.EXPLICIT }); } @@ -303,7 +303,7 @@ class DiscardModelAction extends Action { super('workbench.files.action.discardModel', localize('discard', "Discard")); } - async run(): Promise { + async override run(): Promise { if (!this.model.isDisposed()) { await this.model.revert(); } @@ -320,7 +320,7 @@ class SaveModelAsAction extends Action { super('workbench.files.action.saveModelAs', SAVE_FILE_AS_LABEL); } - async run(): Promise { + async override run(): Promise { if (!this.model.isDisposed()) { const editor = this.findEditor(); if (editor) { @@ -361,7 +361,7 @@ class UnlockModelAction extends Action { super('workbench.files.action.unlock', localize('overwrite', "Overwrite")); } - async run(): Promise { + async override run(): Promise { if (!this.model.isDisposed()) { await this.model.save({ writeUnlock: true, reason: SaveReason.EXPLICIT }); } @@ -376,7 +376,7 @@ class SaveModelIgnoreModifiedSinceAction extends Action { super('workbench.files.action.saveIgnoreModifiedSince', localize('overwrite', "Overwrite")); } - async run(): Promise { + async override run(): Promise { if (!this.model.isDisposed()) { await this.model.save({ ignoreModifiedSince: true, reason: SaveReason.EXPLICIT }); } @@ -391,7 +391,7 @@ class ConfigureSaveConflictAction extends Action { super('workbench.files.action.configureSaveConflict', localize('configure', "Configure")); } - async run(): Promise { + async override run(): Promise { this.preferencesService.openSettings(undefined, 'files.saveConflictResolution'); } } diff --git a/src/vs/workbench/contrib/files/browser/explorerViewlet.ts b/src/vs/workbench/contrib/files/browser/explorerViewlet.ts index dbe99c77bf3..306248770a6 100644 --- a/src/vs/workbench/contrib/files/browser/explorerViewlet.ts +++ b/src/vs/workbench/contrib/files/browser/explorerViewlet.ts @@ -192,12 +192,12 @@ export class ExplorerViewPaneContainer extends ViewPaneContainer { this._register(this.contextService.onDidChangeWorkspaceName(e => this.updateTitleArea())); } - create(parent: HTMLElement): void { + override create(parent: HTMLElement): void { super.create(parent); parent.classList.add('explorer-viewlet'); } - protected createView(viewDescriptor: IViewDescriptor, options: IViewletViewOptions): ViewPane { + protected override createView(viewDescriptor: IViewDescriptor, options: IViewletViewOptions): ViewPane { if (viewDescriptor.id === VIEW_ID) { // Create a delegating editor service for the explorer to be able to delay the refresh in the opened // editors view above. This is a workaround for being able to double click on a file to make it pinned @@ -245,12 +245,12 @@ export class ExplorerViewPaneContainer extends ViewPaneContainer { return this.getView(OpenEditorsView.ID); } - public setVisible(visible: boolean): void { + public override setVisible(visible: boolean): void { this.viewletVisibleContextKey.set(visible); super.setVisible(visible); } - focus(): void { + override focus(): void { const explorerView = this.getView(VIEW_ID); if (explorerView && this.panes.every(p => !p.isExpanded())) { explorerView.setExpanded(true); diff --git a/src/vs/workbench/contrib/files/browser/fileActions.ts b/src/vs/workbench/contrib/files/browser/fileActions.ts index 02ebcee8765..a8eecafced1 100644 --- a/src/vs/workbench/contrib/files/browser/fileActions.ts +++ b/src/vs/workbench/contrib/files/browser/fileActions.ts @@ -448,7 +448,7 @@ export class GlobalCompareResourcesAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const activeInput = this.editorService.activeEditor; const activeResource = EditorResourceAccessor.getOriginalUri(activeInput); if (activeResource && this.textModelService.canHandleResource(activeResource)) { @@ -508,7 +508,7 @@ export class ToggleAutoSaveAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { return this.filesConfigurationService.toggleAutoSave(); } } @@ -547,7 +547,7 @@ export abstract class BaseSaveAllAction extends Action { } } - async run(context?: unknown): Promise { + async override run(context?: unknown): Promise { try { await this.doRun(context); } catch (error) { @@ -561,7 +561,7 @@ export class SaveAllInGroupAction extends BaseSaveAllAction { static readonly ID = 'workbench.files.action.saveAllInGroup'; static readonly LABEL = nls.localize('saveAllInGroup', "Save All in Group"); - get class(): string { + override get class(): string { return 'explorer-action ' + Codicon.saveAll.classNames; } @@ -579,7 +579,7 @@ export class CloseGroupAction extends Action { super(id, label, Codicon.closeAll.classNames); } - run(context?: unknown): Promise { + override run(context?: unknown): Promise { return this.commandService.executeCommand(CLOSE_EDITORS_AND_GROUP_COMMAND_ID, {}, context); } } @@ -597,7 +597,7 @@ export class FocusFilesExplorer extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { await this.viewletService.openViewlet(VIEWLET_ID, true); } } @@ -617,7 +617,7 @@ export class ShowActiveFileInExplorer extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const resource = EditorResourceAccessor.getOriginalUri(this.editorService.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY }); if (resource) { this.commandService.executeCommand(REVEAL_IN_EXPLORER_COMMAND_ID, resource); @@ -643,7 +643,7 @@ export class ShowOpenedFileInNewWindow extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const fileResource = EditorResourceAccessor.getOriginalUri(this.editorService.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY }); if (fileResource) { if (this.fileService.canHandleResource(fileResource)) { @@ -755,7 +755,7 @@ export class CompareWithClipboardAction extends Action { this.enabled = true; } - async run(): Promise { + async override run(): Promise { const resource = EditorResourceAccessor.getOriginalUri(this.editorService.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY }); const scheme = `clipboardCompare${CompareWithClipboardAction.SCHEME_COUNTER++}`; if (resource && (this.fileService.canHandleResource(resource) || resource.scheme === Schemas.untitled)) { @@ -778,7 +778,7 @@ export class CompareWithClipboardAction extends Action { } } - dispose(): void { + override dispose(): void { super.dispose(); dispose(this.registrationDisposal); diff --git a/src/vs/workbench/contrib/files/browser/views/emptyView.ts b/src/vs/workbench/contrib/files/browser/views/emptyView.ts index 7e70f008f29..d36b245d996 100644 --- a/src/vs/workbench/contrib/files/browser/views/emptyView.ts +++ b/src/vs/workbench/contrib/files/browser/views/emptyView.ts @@ -45,11 +45,11 @@ export class EmptyView extends ViewPane { this._register(this.labelService.onDidChangeFormatters(() => this.refreshTitle())); } - shouldShowWelcome(): boolean { + override shouldShowWelcome(): boolean { return true; } - protected renderBody(container: HTMLElement): void { + protected override renderBody(container: HTMLElement): void { super.renderBody(container); this._register(new DragAndDropObserver(container, { diff --git a/src/vs/workbench/contrib/files/browser/views/explorerView.ts b/src/vs/workbench/contrib/files/browser/views/explorerView.ts index 05f26f13526..f8512b1715b 100644 --- a/src/vs/workbench/contrib/files/browser/views/explorerView.ts +++ b/src/vs/workbench/contrib/files/browser/views/explorerView.ts @@ -207,11 +207,11 @@ export class ExplorerView extends ViewPane { return this.labelService.getWorkspaceLabel(this.contextService.getWorkspace()); } - get title(): string { + override get title(): string { return this.name; } - set title(_: string) { + override set title(_: string) { // noop } @@ -232,7 +232,7 @@ export class ExplorerView extends ViewPane { // Split view methods - protected renderHeader(container: HTMLElement): void { + protected override renderHeader(container: HTMLElement): void { super.renderHeader(container); // Expand on drag over @@ -252,12 +252,12 @@ export class ExplorerView extends ViewPane { setHeader(); } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.tree.layout(height, width); } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this.container = container; @@ -297,7 +297,7 @@ export class ExplorerView extends ViewPane { })); } - focus(): void { + override focus(): void { this.tree.domFocus(); const focused = this.tree.getFocus(); @@ -621,7 +621,7 @@ export class ExplorerView extends ViewPane { } } - getOptimalWidth(): number { + override getOptimalWidth(): number { const parentNode = this.tree.getHTMLElement(); const childNodes = ([] as HTMLElement[]).slice.call(parentNode.querySelectorAll('.explorer-item .label-name')); // select all file labels @@ -835,7 +835,7 @@ export class ExplorerView extends ViewPane { } } - dispose(): void { + override dispose(): void { if (this.dragHandler) { this.dragHandler.dispose(); } diff --git a/src/vs/workbench/contrib/files/browser/views/openEditorsView.ts b/src/vs/workbench/contrib/files/browser/views/openEditorsView.ts index 81912c52f46..71f7d47cddd 100644 --- a/src/vs/workbench/contrib/files/browser/views/openEditorsView.ts +++ b/src/vs/workbench/contrib/files/browser/views/openEditorsView.ts @@ -192,7 +192,7 @@ export class OpenEditorsView extends ViewPane { })); } - protected renderHeaderTitle(container: HTMLElement): void { + protected override renderHeaderTitle(container: HTMLElement): void { super.renderHeaderTitle(container, this.title); const count = dom.append(container, $('.count')); @@ -214,7 +214,7 @@ export class OpenEditorsView extends ViewPane { this.updateDirtyIndicator(); } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); container.classList.add('open-editors'); @@ -309,7 +309,7 @@ export class OpenEditorsView extends ViewPane { })); } - focus(): void { + override focus(): void { super.focus(); this.list.domFocus(); } @@ -318,7 +318,7 @@ export class OpenEditorsView extends ViewPane { return this.list; } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); if (this.list) { this.list.layout(height, width); @@ -467,7 +467,7 @@ export class OpenEditorsView extends ViewPane { this.structuralRefreshDelay = delay; } - getOptimalWidth(): number { + override getOptimalWidth(): number { let parentNode = this.list.getHTMLElement(); let childNodes: HTMLElement[] = [].slice.call(parentNode.querySelectorAll('.open-editor > a')); @@ -492,7 +492,7 @@ interface IEditorGroupTemplateData { class OpenEditorActionRunner extends ActionRunner { public editor: OpenEditor | undefined; - async run(action: IAction): Promise { + async override run(action: IAction): Promise { if (!this.editor) { return; } diff --git a/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts b/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts index 530f47bd49c..6b8989a45c7 100644 --- a/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts +++ b/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts @@ -88,7 +88,7 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements } } - protected registerListeners(): void { + protected override registerListeners(): void { super.registerListeners(); // Attach to model that matches our resource once created @@ -131,7 +131,7 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements return FILE_EDITOR_INPUT_ID; } - getName(): string { + override getName(): string { return this.preferredName || this.decorateLabel(super.getName()); } @@ -155,7 +155,7 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements return this.preferredName; } - getDescription(verbosity?: Verbosity): string | undefined { + override getDescription(verbosity?: Verbosity): string | undefined { return this.preferredDescription || super.getDescription(verbosity); } @@ -175,7 +175,7 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements return this.preferredDescription; } - getTitle(verbosity: Verbosity): string { + override getTitle(verbosity: Verbosity): string { switch (verbosity) { case Verbosity.SHORT: return this.decorateLabel(super.getName()); @@ -241,11 +241,11 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements this.forceOpenAs = ForceOpenAs.Binary; } - isDirty(): boolean { + override isDirty(): boolean { return !!(this.model?.isDirty()); } - isReadonly(): boolean { + override isReadonly(): boolean { if (this.model) { return this.model.isReadonly(); } @@ -253,7 +253,7 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements return super.isReadonly(); } - isSaving(): boolean { + override isSaving(): boolean { if (this.model?.hasState(TextFileEditorModelState.SAVED) || this.model?.hasState(TextFileEditorModelState.CONFLICT) || this.model?.hasState(TextFileEditorModelState.ERROR)) { return false; // require the model to be dirty and not in conflict or error state } @@ -266,11 +266,11 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements return super.isSaving(); } - getPreferredEditorId(candidates: string[]): string { + override getPreferredEditorId(candidates: string[]): string { return this.forceOpenAs === ForceOpenAs.Binary ? BINARY_FILE_EDITOR_ID : TEXT_FILE_EDITOR_ID; } - resolve(): Promise { + override resolve(): Promise { // Resolve as binary if (this.forceOpenAs === ForceOpenAs.Binary) { @@ -338,7 +338,7 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements return !!this.model; } - rename(group: GroupIdentifier, target: URI): IMoveResult { + override rename(group: GroupIdentifier, target: URI): IMoveResult { return { editor: { resource: target, @@ -362,7 +362,7 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements return undefined; } - matches(otherInput: unknown): boolean { + override matches(otherInput: unknown): boolean { if (otherInput === this) { return true; } @@ -374,7 +374,7 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements return false; } - dispose(): void { + override dispose(): void { // Model this.model = undefined; diff --git a/src/vs/workbench/contrib/files/common/workspaceWatcher.ts b/src/vs/workbench/contrib/files/common/workspaceWatcher.ts index 1534bdc8608..7f6ec9c6384 100644 --- a/src/vs/workbench/contrib/files/common/workspaceWatcher.ts +++ b/src/vs/workbench/contrib/files/common/workspaceWatcher.ts @@ -143,7 +143,7 @@ export class WorkspaceWatcher extends Disposable { this.watches.clear(); } - dispose(): void { + override dispose(): void { super.dispose(); this.unwatchWorkspaces(); diff --git a/src/vs/workbench/contrib/files/electron-sandbox/textFileEditor.ts b/src/vs/workbench/contrib/files/electron-sandbox/textFileEditor.ts index d79e4a08201..c5a07f93a9d 100644 --- a/src/vs/workbench/contrib/files/electron-sandbox/textFileEditor.ts +++ b/src/vs/workbench/contrib/files/electron-sandbox/textFileEditor.ts @@ -50,7 +50,7 @@ export class NativeTextFileEditor extends TextFileEditor { super(telemetryService, fileService, viewletService, instantiationService, contextService, storageService, textResourceConfigurationService, editorService, themeService, editorGroupService, textFileService, explorerService, uriIdentityService); } - protected handleSetInputError(error: Error, input: FileEditorInput, options: EditorOptions | undefined): void { + protected override handleSetInputError(error: Error, input: FileEditorInput, options: EditorOptions | undefined): void { // Allow to restart with higher memory limit if the file is too large if ((error).fileOperationResult === FileOperationResult.FILE_EXCEEDS_MEMORY_LIMIT) { diff --git a/src/vs/workbench/contrib/files/test/browser/fileEditorInput.test.ts b/src/vs/workbench/contrib/files/test/browser/fileEditorInput.test.ts index 5bc0b1c119e..b82dd23a1e4 100644 --- a/src/vs/workbench/contrib/files/test/browser/fileEditorInput.test.ts +++ b/src/vs/workbench/contrib/files/test/browser/fileEditorInput.test.ts @@ -34,7 +34,7 @@ suite('Files - FileEditorInput', () => { instantiationService = workbenchInstantiationService({ editorService: () => { return new class extends TestEditorService { - createEditorInput(input: IResourceEditorInput) { + override createEditorInput(input: IResourceEditorInput) { return createFileInput(input.resource); } }; diff --git a/src/vs/workbench/contrib/issue/electron-sandbox/issueActions.ts b/src/vs/workbench/contrib/issue/electron-sandbox/issueActions.ts index 8b8422eed46..79b6607dd35 100644 --- a/src/vs/workbench/contrib/issue/electron-sandbox/issueActions.ts +++ b/src/vs/workbench/contrib/issue/electron-sandbox/issueActions.ts @@ -20,7 +20,7 @@ export class OpenProcessExplorer extends Action { super(id, label); } - run(): Promise { + override run(): Promise { return this.issueService.openProcessExplorer(); } } @@ -37,7 +37,7 @@ export class ReportPerformanceIssueUsingReporterAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { return this.issueService.openReporter({ issueType: IssueType.PerformanceIssue }); } } diff --git a/src/vs/workbench/contrib/localizations/browser/localizationsActions.ts b/src/vs/workbench/contrib/localizations/browser/localizationsActions.ts index 1304e665581..f5636c21025 100644 --- a/src/vs/workbench/contrib/localizations/browser/localizationsActions.ts +++ b/src/vs/workbench/contrib/localizations/browser/localizationsActions.ts @@ -44,7 +44,7 @@ export class ConfigureLocaleAction extends Action { .concat({ label: localize('installAdditionalLanguages', "Install additional languages...") }); } - public async run(): Promise { + public async override run(): Promise { const languageOptions = await this.getLanguageOptions(); const currentLanguageIndex = languageOptions.findIndex(l => l.label === language); diff --git a/src/vs/workbench/contrib/logs/common/logsActions.ts b/src/vs/workbench/contrib/logs/common/logsActions.ts index f19eb8a8fed..7ad4c630cd8 100644 --- a/src/vs/workbench/contrib/logs/common/logsActions.ts +++ b/src/vs/workbench/contrib/logs/common/logsActions.ts @@ -25,7 +25,7 @@ export class SetLogLevelAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { const current = this.logService.getLevel(); const entries = [ { label: nls.localize('trace', "Trace"), level: LogLevel.Trace, description: this.getDescription(LogLevel.Trace, current) }, @@ -72,7 +72,7 @@ export class OpenWindowSessionLogFileAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const sessionResult = await this.quickInputService.pick( this.getSessions().then(sessions => sessions.map((s, index) => ({ id: s.toString(), diff --git a/src/vs/workbench/contrib/logs/electron-sandbox/logsActions.ts b/src/vs/workbench/contrib/logs/electron-sandbox/logsActions.ts index cd377536bf7..cbe21096c1c 100644 --- a/src/vs/workbench/contrib/logs/electron-sandbox/logsActions.ts +++ b/src/vs/workbench/contrib/logs/electron-sandbox/logsActions.ts @@ -23,7 +23,7 @@ export class OpenLogsFolderAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { return this.nativeHostService.showItemInFolder(URI.file(join(this.environmentService.logsPath, 'main.log')).fsPath); } } @@ -41,7 +41,7 @@ export class OpenExtensionLogsFolderAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const folderStat = await this.fileService.resolve(this.environmentSerice.extHostLogsPath); if (folderStat.children && folderStat.children[0]) { return this.nativeHostService.showItemInFolder(folderStat.children[0].resource.fsPath); diff --git a/src/vs/workbench/contrib/markers/browser/markersTreeViewer.ts b/src/vs/workbench/contrib/markers/browser/markersTreeViewer.ts index f66d8357d67..3b56e25be94 100644 --- a/src/vs/workbench/contrib/markers/browser/markersTreeViewer.ts +++ b/src/vs/workbench/contrib/markers/browser/markersTreeViewer.ts @@ -262,12 +262,12 @@ const toggleMultilineAction = 'problems.action.toggleMultiline'; class ToggleMultilineActionViewItem extends ActionViewItem { - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); this.updateExpandedAttribute(); } - updateClass(): void { + override updateClass(): void { super.updateClass(); this.updateExpandedAttribute(); } @@ -857,7 +857,7 @@ export class MarkersViewModel extends Disposable { } } - dispose(): void { + override dispose(): void { this.markersViewStates.forEach(({ disposables }) => dispose(disposables)); this.markersViewStates.clear(); this.markersPerResource.clear(); diff --git a/src/vs/workbench/contrib/markers/browser/markersView.ts b/src/vs/workbench/contrib/markers/browser/markersView.ts index 5f257dc27c9..ddab4379a4a 100644 --- a/src/vs/workbench/contrib/markers/browser/markersView.ts +++ b/src/vs/workbench/contrib/markers/browser/markersView.ts @@ -146,7 +146,7 @@ export class MarkersView extends ViewPane implements IMarkersView { })); } - public renderBody(parent: HTMLElement): void { + public override renderBody(parent: HTMLElement): void { super.renderBody(parent); parent.classList.add('markers-panel'); @@ -168,7 +168,7 @@ export class MarkersView extends ViewPane implements IMarkersView { return Messages.MARKERS_PANEL_TITLE_PROBLEMS; } - public layoutBody(height: number, width: number): void { + public override layoutBody(height: number, width: number): void { super.layoutBody(height, width); const wasSmallLayout = this.smallLayout; this.smallLayout = width < 600 && height > 100; @@ -187,7 +187,7 @@ export class MarkersView extends ViewPane implements IMarkersView { this.filters.layout = new dom.Dimension(this.smallLayout ? width : width - 200, height); } - public focus(): void { + public override focus(): void { if (this.tree && this.tree.getHTMLElement() === document.activeElement) { return; } @@ -808,7 +808,7 @@ export class MarkersView extends ViewPane implements IMarkersView { return this.tree?.getFocus()[0] || undefined; } - public getActionViewItem(action: IAction): IActionViewItem | undefined { + public override getActionViewItem(action: IAction): IActionViewItem | undefined { if (action.id === `workbench.actions.treeView.${this.id}.filter`) { return this.instantiationService.createInstance(MarkersFilterActionViewItem, action, this); } @@ -864,7 +864,7 @@ export class MarkersView extends ViewPane implements IMarkersView { this.telemetryService.publicLog('problems.filter', data); } - saveState(): void { + override saveState(): void { this.panelState['filter'] = this.filters.filterText; this.panelState['filterHistory'] = this.filters.filterHistory; this.panelState['showErrors'] = this.filters.showErrors; @@ -877,7 +877,7 @@ export class MarkersView extends ViewPane implements IMarkersView { super.saveState(); } - dispose() { + override dispose() { super.dispose(); } @@ -901,7 +901,7 @@ class MarkersTree extends WorkbenchObjectTree { super(user, container, delegate, renderers, options, contextKeyService, listService, themeService, configurationService, keybindingService, accessibilityService); } - layout(height: number, width: number): void { + override layout(height: number, width: number): void { this.container.style.height = `${height}px`; super.layout(height, width); } diff --git a/src/vs/workbench/contrib/markers/browser/markersViewActions.ts b/src/vs/workbench/contrib/markers/browser/markersViewActions.ts index 708f6d6eaad..f34cc274754 100644 --- a/src/vs/workbench/contrib/markers/browser/markersViewActions.ts +++ b/src/vs/workbench/contrib/markers/browser/markersViewActions.ts @@ -166,7 +166,7 @@ class FiltersDropdownMenuActionViewItem extends DropdownMenuActionViewItem { ); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); this.updateChecked(); } @@ -227,7 +227,7 @@ class FiltersDropdownMenuActionViewItem extends DropdownMenuActionViewItem { ]; } - updateChecked(): void { + override updateChecked(): void { this.element!.classList.toggle('checked', this._action.checked); } @@ -265,7 +265,7 @@ export class MarkersFilterActionViewItem extends BaseActionViewItem { this._register(markersView.filters.onDidChange(e => this.onDidFiltersChange(e))); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { this.container = container; this.container.classList.add('markers-panel-action-filter-container'); @@ -278,23 +278,23 @@ export class MarkersFilterActionViewItem extends BaseActionViewItem { this.adjustInputBox(); } - focus(): void { + override focus(): void { if (this.filterInputBox) { this.filterInputBox.focus(); } } - blur(): void { + override blur(): void { if (this.filterInputBox) { this.filterInputBox.blur(); } } - setFocusable(): void { + override setFocusable(): void { // noop input elements are focusable by default } - get trapsArrowNavigation(): boolean { + override get trapsArrowNavigation(): boolean { return true; } @@ -427,7 +427,7 @@ export class MarkersFilterActionViewItem extends BaseActionViewItem { } } - protected updateClass(): void { + protected override updateClass(): void { if (this.element && this.container) { this.element.className = this.class; this.container.classList.toggle('grow', this.element.classList.contains('grow')); @@ -474,7 +474,7 @@ export class QuickFixAction extends Action { super(QuickFixAction.ID, Messages.MARKERS_PANEL_ACTION_TOOLTIP_QUICKFIX, QuickFixAction.CLASS, false); } - run(): Promise { + override run(): Promise { this._onShowQuickFixes.fire(); return Promise.resolve(); } @@ -488,7 +488,7 @@ export class QuickFixActionViewItem extends ActionViewItem { super(null, action, { icon: true, label: false }); } - public onClick(event: DOM.EventLike): void { + public override onClick(event: DOM.EventLike): void { DOM.EventHelper.stop(event, true); this.showQuickFixes(); } diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/clipboard/test/notebookClipboard.test.ts b/src/vs/workbench/contrib/notebook/browser/contrib/clipboard/test/notebookClipboard.test.ts index 1864f4597dd..ede86215825 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/clipboard/test/notebookClipboard.test.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/clipboard/test/notebookClipboard.test.ts @@ -18,16 +18,16 @@ import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/mode suite('Notebook Clipboard', () => { const createEditorService = (editor: IActiveNotebookEditor) => { const visibleEditorPane = new class extends mock() { - getId(): string { + override getId(): string { return NOTEBOOK_EDITOR_ID; } - getControl(): INotebookEditor { + override getControl(): INotebookEditor { return editor; } }; const editorService: IEditorService = new class extends mock() { - get activeEditorPane(): IVisibleEditorPane | undefined { + override get activeEditorPane(): IVisibleEditorPane | undefined { return visibleEditorPane; } }; @@ -112,8 +112,8 @@ suite('Notebook Clipboard', () => { let _cells: NotebookCellTextModel[] = []; accessor.stub(INotebookService, new class extends mock() { - setToCopy(cells: NotebookCellTextModel[]) { _cells = cells; } - getToCopy() { return { items: _cells, isCopy: true }; } + override setToCopy(cells: NotebookCellTextModel[]) { _cells = cells; } + override getToCopy() { return { items: _cells, isCopy: true }; } }); const clipboardContrib = new NotebookClipboardContribution(createEditorService(editor)); @@ -154,8 +154,8 @@ suite('Notebook Clipboard', () => { ], async (editor, accessor) => { accessor.stub(INotebookService, new class extends mock() { - setToCopy() { } - getToCopy() { + override setToCopy() { } + override getToCopy() { return { items: [ editor.viewModel.cellAt(0)!.model @@ -190,8 +190,8 @@ suite('Notebook Clipboard', () => { async (editor, accessor) => { let _toCopy: NotebookCellTextModel[] = []; accessor.stub(INotebookService, new class extends mock() { - setToCopy(toCopy: NotebookCellTextModel[]) { _toCopy = toCopy; } - getToCopy() { + override setToCopy(toCopy: NotebookCellTextModel[]) { _toCopy = toCopy; } + override getToCopy() { return { items: _toCopy, isCopy: true @@ -220,8 +220,8 @@ suite('Notebook Clipboard', () => { ], async (editor, accessor) => { accessor.stub(INotebookService, new class extends mock() { - setToCopy() { } - getToCopy() { + override setToCopy() { } + override getToCopy() { return { items: [], isCopy: true }; } }); @@ -262,8 +262,8 @@ suite('Notebook Clipboard', () => { ], async (editor, accessor) => { accessor.stub(INotebookService, new class extends mock() { - setToCopy() { } - getToCopy() { + override setToCopy() { } + override getToCopy() { return { items: [], isCopy: true }; } }); @@ -287,8 +287,8 @@ suite('Notebook Clipboard', () => { ], async (editor, accessor) => { accessor.stub(INotebookService, new class extends mock() { - setToCopy() { } - getToCopy() { + override setToCopy() { } + override getToCopy() { return { items: [], isCopy: true }; } }); diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts b/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts index e0c074a6041..6b4974eaeb8 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts @@ -221,7 +221,7 @@ export abstract class NotebookCellAction extends return undefined; } - async run(accessor: ServicesAccessor, context?: INotebookCellActionContext, ...additionalArgs: any[]): Promise { + async override run(accessor: ServicesAccessor, context?: INotebookCellActionContext, ...additionalArgs: any[]): Promise { if (this.isCellActionContext(context)) { const telemetryService = accessor.get(ITelemetryService); telemetryService.publicLog2('workbenchActionExecuted', { id: this.desc.id, from: 'cellToolbar' }); @@ -305,7 +305,7 @@ registerAction2(class ExecuteCell extends NotebookCellAction { }); } - getCellContextFromArgs(accessor: ServicesAccessor, context?: ICellRange, ...additionalArgs: any[]): INotebookCellActionContext | undefined { + override getCellContextFromArgs(accessor: ServicesAccessor, context?: ICellRange, ...additionalArgs: any[]): INotebookCellActionContext | undefined { if (!context) { return; } @@ -396,7 +396,7 @@ registerAction2(class CancelExecuteCell extends NotebookCellAction { }); } - getCellContextFromArgs(accessor: ServicesAccessor, context?: ICellRange, ...additionalArgs: any[]): INotebookCellActionContext | undefined { + override getCellContextFromArgs(accessor: ServicesAccessor, context?: ICellRange, ...additionalArgs: any[]): INotebookCellActionContext | undefined { if (!context || typeof context.start !== 'number' || typeof context.end !== 'number' || context.start >= context.end) { return; } @@ -554,7 +554,7 @@ registerAction2(class extends NotebookAction { }); } - getEditorContextFromArgsOrActive(accessor: ServicesAccessor, context?: UriComponents): INotebookActionContext | undefined { + override getEditorContextFromArgsOrActive(accessor: ServicesAccessor, context?: UriComponents): INotebookActionContext | undefined { return getContextFromUri(accessor, context) ?? getContextFromActiveEditor(accessor.get(IEditorService)); } @@ -608,7 +608,7 @@ registerAction2(class CancelNotebook extends NotebookAction { }); } - getEditorContextFromArgsOrActive(accessor: ServicesAccessor, context?: UriComponents): INotebookActionContext | undefined { + override getEditorContextFromArgsOrActive(accessor: ServicesAccessor, context?: UriComponents): INotebookActionContext | undefined { return getContextFromUri(accessor, context) ?? getContextFromActiveEditor(accessor.get(IEditorService)); } @@ -810,7 +810,7 @@ registerAction2(class extends NotebookAction { }); } - async run(accessor: ServicesAccessor, context?: INotebookActionContext): Promise { + async override run(accessor: ServicesAccessor, context?: INotebookActionContext): Promise { context = context ?? this.getEditorContextFromArgsOrActive(accessor); if (context) { this.runWithContext(accessor, context); @@ -835,7 +835,7 @@ registerAction2(class extends NotebookAction { }); } - async run(accessor: ServicesAccessor, context?: INotebookActionContext): Promise { + async override run(accessor: ServicesAccessor, context?: INotebookActionContext): Promise { context = context ?? this.getEditorContextFromArgsOrActive(accessor); if (context) { this.runWithContext(accessor, context); @@ -1375,7 +1375,7 @@ export class ChangeCellLanguageAction extends NotebookCellAction { }); } - protected getCellContextFromArgs(accessor: ServicesAccessor, context?: ICellRange, ...additionalArgs: any[]): IChangeCellContext | undefined { + protected override getCellContextFromArgs(accessor: ServicesAccessor, context?: ICellRange, ...additionalArgs: any[]): IChangeCellContext | undefined { if (!context || typeof context.start !== 'number' || typeof context.end !== 'number' || context.start >= context.end) { return; } diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/find/findController.ts b/src/vs/workbench/contrib/notebook/browser/contrib/find/findController.ts index 1fcab2227dc..e2febb837cc 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/find/findController.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/find/findController.ts @@ -270,7 +270,7 @@ export class NotebookFindWidget extends SimpleFindReplaceWidget implements INote }); } - show(initialInput?: string): void { + override show(initialInput?: string): void { super.show(initialInput); this._findInput.select(); @@ -312,7 +312,7 @@ export class NotebookFindWidget extends SimpleFindReplaceWidget implements INote } } - hide() { + override hide() { super.hide(); this.set([], false); @@ -341,7 +341,7 @@ export class NotebookFindWidget extends SimpleFindReplaceWidget implements INote this._findMatches = []; } - dispose() { + override dispose() { this._notebookEditor?.removeClassName(FIND_SHOW_TRANSITION); this._notebookEditor?.removeClassName(FIND_HIDE_TRANSITION); super.dispose(); diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/outline/test/notebookOutline.test.ts b/src/vs/workbench/contrib/notebook/browser/contrib/outline/test/notebookOutline.test.ts index f06e3f8a775..f1e7fe845ba 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/outline/test/notebookOutline.test.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/outline/test/notebookOutline.test.ts @@ -23,8 +23,8 @@ suite('Notebook Outline', function () { instantiationService.set(IEditorService, new class extends mock() { }); instantiationService.set(IMarkerService, new MarkerService()); instantiationService.set(IThemeService, new class extends mock() { - onDidFileIconThemeChange = Event.None; - getFileIconTheme(): IFileIconTheme { + override onDidFileIconThemeChange = Event.None; + override getFileIconTheme(): IFileIconTheme { return { hasFileIcons: true, hasFolderIcons: true, hidesExplorerArrows: false }; } }); diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/troubleshoot/layout.ts b/src/vs/workbench/contrib/notebook/browser/contrib/troubleshoot/layout.ts index 2e8c382e66d..cc7576ee80a 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/troubleshoot/layout.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/troubleshoot/layout.ts @@ -77,7 +77,7 @@ export class TroubleshootController extends Disposable implements INotebookEdito })); } - dispose() { + override dispose() { dispose(this._cellStateListeners); super.dispose(); } diff --git a/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts b/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts index 3155bc0596c..671298c7cf5 100644 --- a/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts +++ b/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts @@ -745,7 +745,7 @@ abstract class AbstractElementRenderer extends Disposable { this.templateData.bottomBorder.style.top = `${this.cell.layoutInfo.totalHeight - 32}px`; } - dispose() { + override dispose() { if (this._outputEditor) { this.cell.saveOutputEditorViewState(this._outputEditor.saveViewState()); } @@ -807,7 +807,7 @@ abstract class SingleSideDiffElement extends AbstractElementRenderer { this._diagonalFill = this.templateData.diagonalFill; } - buildBody() { + override buildBody() { const body = this.templateData.body; this._diffEditorContainer = this.templateData.diffEditorContainer; body.classList.remove('left', 'right', 'full'); @@ -1101,7 +1101,7 @@ export class DeletedElement extends SingleSideDiffElement { } } - dispose() { + override dispose() { if (this._editor) { this.cell.saveSpirceEditorViewState(this._editor.saveViewState()); } @@ -1251,7 +1251,7 @@ export class InsertElement extends SingleSideDiffElement { }); } - dispose() { + override dispose() { if (this._editor) { this.cell.saveSpirceEditorViewState(this._editor.saveViewState()); } @@ -1598,7 +1598,7 @@ export class ModifiedElement extends AbstractElementRenderer { }); } - dispose() { + override dispose() { if (this._editor) { this.cell.saveSpirceEditorViewState(this._editor.saveViewState()); } diff --git a/src/vs/workbench/contrib/notebook/browser/diff/notebookTextDiffEditor.ts b/src/vs/workbench/contrib/notebook/browser/diff/notebookTextDiffEditor.ts index 1ed00f27ebe..ef7e28ece69 100644 --- a/src/vs/workbench/contrib/notebook/browser/diff/notebookTextDiffEditor.ts +++ b/src/vs/workbench/contrib/notebook/browser/diff/notebookTextDiffEditor.ts @@ -284,7 +284,7 @@ export class NotebookTextDiffEditor extends EditorPane implements INotebookTextD } } - async setInput(input: NotebookDiffEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + async override setInput(input: NotebookDiffEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { await super.setInput(input, options, context, token); const model = await input.resolve(); @@ -652,19 +652,19 @@ export class NotebookTextDiffEditor extends EditorPane implements INotebookTextD return this._overflowContainer; } - getControl(): NotebookEditorWidget | undefined { + override getControl(): NotebookEditorWidget | undefined { return undefined; } - setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { + override setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { super.setEditorVisible(visible, group); } - focus() { + override focus() { super.focus(); } - clearInput(): void { + override clearInput(): void { super.clearInput(); this._modifiedResourceDisposableStore.clear(); @@ -772,7 +772,7 @@ export class NotebookTextDiffEditor extends EditorPane implements INotebookTextD this._eventDispatcher?.emit([new NotebookDiffLayoutChangedEvent({ width: true, fontInfo: true }, this.getLayoutInfo())]); } - dispose() { + override dispose() { this._isDisposed = true; super.dispose(); } diff --git a/src/vs/workbench/contrib/notebook/browser/diff/notebookTextDiffList.ts b/src/vs/workbench/contrib/notebook/browser/diff/notebookTextDiffList.ts index ce2bc9c6ec2..4d5dd5f06c7 100644 --- a/src/vs/workbench/contrib/notebook/browser/diff/notebookTextDiffList.ts +++ b/src/vs/workbench/contrib/notebook/browser/diff/notebookTextDiffList.ts @@ -321,7 +321,7 @@ export class NotebookTextDiffList extends WorkbenchList { + async override save(group: GroupIdentifier, options?: ISaveOptions): Promise { if (this._modifiedTextModel) { if (this.isUntitled()) { @@ -112,7 +112,7 @@ export class NotebookDiffEditorInput extends EditorInput { return undefined; } - async saveAs(group: GroupIdentifier, options?: ISaveOptions): Promise { + async override saveAs(group: GroupIdentifier, options?: ISaveOptions): Promise { if (!this._modifiedTextModel || !this.viewType) { return undefined; } @@ -156,7 +156,7 @@ ${patterns} } // called when users rename a notebook document - rename(group: GroupIdentifier, target: URI): IMoveResult | undefined { + override rename(group: GroupIdentifier, target: URI): IMoveResult | undefined { if (this._modifiedTextModel) { const contributedNotebookProviders = this._notebookService.getContributedNotebookProviders(target); @@ -171,7 +171,7 @@ ${patterns} return undefined; } - async revert(group: GroupIdentifier, options?: IRevertOptions): Promise { + async override revert(group: GroupIdentifier, options?: IRevertOptions): Promise { if (this._modifiedTextModel && this._modifiedTextModel.object.isDirty()) { await this._modifiedTextModel.object.revert(options); } @@ -179,7 +179,7 @@ ${patterns} return; } - async resolve(): Promise { + async override resolve(): Promise { if (!await this._notebookService.canResolve(this.viewType!)) { return null; } @@ -199,7 +199,7 @@ ${patterns} return new NotebookDiffEditorModel(this._originalTextModel.object, this._modifiedTextModel.object); } - matches(otherInput: unknown): boolean { + override matches(otherInput: unknown): boolean { if (this === otherInput) { return true; } @@ -210,7 +210,7 @@ ${patterns} return false; } - dispose() { + override dispose() { this._modifiedTextModel?.dispose(); this._modifiedTextModel = null; this._originalTextModel?.dispose(); diff --git a/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts b/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts index 8a906ba2151..5994e19b720 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts @@ -70,11 +70,11 @@ export class NotebookEditor extends EditorPane { return this._widget.value?.viewModel; } - get minimumWidth(): number { return 375; } + override get minimumWidth(): number { return 375; } get maximumWidth(): number { return Number.POSITIVE_INFINITY; } // these setters need to exist because this extends from EditorPane - set minimumWidth(value: number) { /*noop*/ } + override set minimumWidth(value: number) { /*noop*/ } set maximumWidth(value: number) { /*noop*/ } //#region Editor Core diff --git a/src/vs/workbench/contrib/notebook/browser/view/notebookCellList.ts b/src/vs/workbench/contrib/notebook/browser/view/notebookCellList.ts index d2457355670..47b705295e9 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/notebookCellList.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/notebookCellList.ts @@ -625,19 +625,19 @@ export class NotebookCellList extends WorkbenchList implements ID this.setSelection(indices); } - focusNext(n: number | undefined, loop: boolean | undefined, browserEvent?: UIEvent, filter?: (element: CellViewModel) => boolean): void { + override focusNext(n: number | undefined, loop: boolean | undefined, browserEvent?: UIEvent, filter?: (element: CellViewModel) => boolean): void { this._focusNextPreviousDelegate.onFocusNext(() => { super.focusNext(n, loop, browserEvent, filter); }); } - focusPrevious(n: number | undefined, loop: boolean | undefined, browserEvent?: UIEvent, filter?: (element: CellViewModel) => boolean): void { + override focusPrevious(n: number | undefined, loop: boolean | undefined, browserEvent?: UIEvent, filter?: (element: CellViewModel) => boolean): void { this._focusNextPreviousDelegate.onFocusPrevious(() => { super.focusPrevious(n, loop, browserEvent, filter); }); } - setFocus(indexes: number[], browserEvent?: UIEvent, ignoreTextModelUpdate?: boolean): void { + override setFocus(indexes: number[], browserEvent?: UIEvent, ignoreTextModelUpdate?: boolean): void { if (ignoreTextModelUpdate) { super.setFocus(indexes, browserEvent); return; @@ -665,7 +665,7 @@ export class NotebookCellList extends WorkbenchList implements ID super.setFocus(indexes, browserEvent); } - setSelection(indexes: number[], browserEvent?: UIEvent | undefined, ignoreTextModelUpdate?: boolean) { + override setSelection(indexes: number[], browserEvent?: UIEvent | undefined, ignoreTextModelUpdate?: boolean) { if (ignoreTextModelUpdate) { super.setSelection(indexes, browserEvent); return; @@ -867,7 +867,7 @@ export class NotebookCellList extends WorkbenchList implements ID } // override - domFocus() { + override domFocus() { const focused = this.getFocusedElements()[0]; const focusedDomElement = focused && this.domElementOfElement(focused); @@ -1128,7 +1128,7 @@ export class NotebookCellList extends WorkbenchList implements ID } - style(styles: IListStyles) { + override style(styles: IListStyles) { const selectorSuffix = this.view.domId; if (!this.styleElement) { this.styleElement = DOM.createStyleSheet(this.view.domNode); @@ -1251,7 +1251,7 @@ export class NotebookCellList extends WorkbenchList implements ID return this.view.renderHeight; } - layout(height?: number, width?: number): void { + override layout(height?: number, width?: number): void { this._isInLayout = true; super.layout(height, width); if (this.renderHeight === 0) { @@ -1262,7 +1262,7 @@ export class NotebookCellList extends WorkbenchList implements ID this._isInLayout = false; } - dispose() { + override dispose() { this._isDisposed = true; this._viewModelStore.dispose(); this._localDisposableStore.dispose(); diff --git a/src/vs/workbench/contrib/notebook/browser/view/output/transforms/richTransform.ts b/src/vs/workbench/contrib/notebook/browser/view/output/transforms/richTransform.ts index cfba7650b01..4285b38c02a 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/output/transforms/richTransform.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/output/transforms/richTransform.ts @@ -195,15 +195,15 @@ class StreamRendererContrib extends Disposable implements IOutputRendererContrib } class StderrRendererContrib extends StreamRendererContrib { - getType() { + override getType() { return RenderOutputType.Mainframe; } - getMimetypes() { + override getMimetypes() { return ['application/x.notebook.stderr']; } - render(output: ICellOutputViewModel, items: IOutputItemDto[], container: HTMLElement, notebookUri: URI | undefined): IRenderOutput { + override render(output: ICellOutputViewModel, items: IOutputItemDto[], container: HTMLElement, notebookUri: URI | undefined): IRenderOutput { const result = super.render(output, items, container, notebookUri); container.classList.add('error'); return result; diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts index f74dde00d2c..b8dbec50a9e 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts @@ -1551,7 +1551,7 @@ var requirejs = (function() { this._preloadsCache.clear(); } - dispose() { + override dispose() { this._disposed = true; this.webview?.dispose(); super.dispose(); diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/cellActionView.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/cellActionView.ts index 886a0e942c9..b12e001352e 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/cellActionView.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/cellActionView.ts @@ -26,7 +26,7 @@ export class VerticalSeparator extends Action { } export class VerticalSeparatorViewItem extends BaseActionViewItem { - render(container: HTMLElement) { + override render(container: HTMLElement) { container.classList.add('verticalSeparator'); // const iconContainer = DOM.append(container, $('.verticalSeparator')); // DOM.addClasses(iconContainer, 'codicon', 'codicon-chrome-minimize'); @@ -89,7 +89,7 @@ export class CodiconActionViewItem extends MenuEntryActionViewItem { ) { super(_action, keybindingService, notificationService); } - updateLabel(): void { + override updateLabel(): void { if (this.options.label && this.label) { DOM.reset(this.label, ...renderLabelWithIcons(this._commandAction.label ?? '')); } diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/cellOutput.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/cellOutput.ts index e374f742ab3..5f377b78618 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/cellOutput.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/cellOutput.ts @@ -335,7 +335,7 @@ export class CellOutputElement extends Disposable { this.notebookEditor.layoutNotebookCell(this.viewCell, this.viewCell.layoutInfo.totalHeight); } - dispose() { + override dispose() { this.viewCell.updateOutputMinHeight(0); if (this._outputHeightTimer) { @@ -600,7 +600,7 @@ export class CellOutputContainer extends Disposable { this.notebookEditor.layoutNotebookCell(this.viewCell, this.viewCell.layoutInfo.totalHeight); } - dispose() { + override dispose() { this.viewCell.updateOutputMinHeight(0); if (this._outputHeightTimer) { diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/cellWidgets.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/cellWidgets.ts index 88c3cccfcb7..73c4163fd75 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/cellWidgets.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/cellWidgets.ts @@ -332,7 +332,7 @@ export class BrowserResizeObserver extends Disposable implements IResizeObserver this.observer.unobserve(this.referenceDomElement!); } - dispose(): void { + override dispose(): void { this.observer.disconnect(); super.dispose(); } diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/markdownCell.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/markdownCell.ts index 93c27645e27..3c290aa3e11 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/markdownCell.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/markdownCell.ts @@ -275,7 +275,7 @@ export class StatefulMarkdownCell extends Disposable { updatePlaceholder(); } - dispose() { + override dispose() { this.localDisposables.dispose(); this.viewCell.detachTextEditor(); super.dispose(); diff --git a/src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts b/src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts index 0e241949831..bfd85888c56 100644 --- a/src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts +++ b/src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts @@ -1139,7 +1139,7 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD return this._notebook === notebook; } - dispose() { + override dispose() { this._localStore.clear(); this._viewCells.forEach(cell => { cell.dispose(); diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts index 84cb0f83a72..61ff0524dc7 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts @@ -98,7 +98,7 @@ export class ComplexNotebookEditorModel extends EditorModel implements INotebook })); } - isResolved(): this is IResolvedNotebookEditorModel { + override isResolved(): this is IResolvedNotebookEditorModel { return this.notebook !== undefined; } @@ -406,7 +406,7 @@ export class SimpleNotebookEditorModel extends EditorModel implements INotebookE super(); } - dispose(): void { + override dispose(): void { this._workingCopyListeners.dispose(); this._workingCopy?.dispose(); this._onDidChangeDirty.dispose(); @@ -418,7 +418,7 @@ export class SimpleNotebookEditorModel extends EditorModel implements INotebookE return this._workingCopy?.model.notebookModel; } - isResolved(): this is IResolvedNotebookEditorModel { + override isResolved(): this is IResolvedNotebookEditorModel { return Boolean(this._workingCopy); } diff --git a/src/vs/workbench/contrib/notebook/test/notebookEditor.test.ts b/src/vs/workbench/contrib/notebook/test/notebookEditor.test.ts index e983d30ffcd..9f2dbae129b 100644 --- a/src/vs/workbench/contrib/notebook/test/notebookEditor.test.ts +++ b/src/vs/workbench/contrib/notebook/test/notebookEditor.test.ts @@ -57,8 +57,8 @@ suite('ListViewInfoAccessor', () => { assert.deepStrictEqual(listViewInfoAccessor.getCellsFromViewRange(1, 2), viewModel.getCells({ start: 2, end: 5 })); const notebookEditor = new class extends mock() { - getViewIndex(cell: ICellViewModel) { return listViewInfoAccessor.getViewIndex(cell); } - getCellRangeFromViewRange(startIndex: number, endIndex: number) { return listViewInfoAccessor.getCellRangeFromViewRange(startIndex, endIndex); } + override getViewIndex(cell: ICellViewModel) { return listViewInfoAccessor.getViewIndex(cell); } + override getCellRangeFromViewRange(startIndex: number, endIndex: number) { return listViewInfoAccessor.getCellRangeFromViewRange(startIndex, endIndex); } }; assert.deepStrictEqual(expandCellRangesWithHiddenCells(notebookEditor, viewModel, [{ start: 0, end: 1 }]), [{ start: 0, end: 2 }]); diff --git a/src/vs/workbench/contrib/notebook/test/notebookEditorModel.test.ts b/src/vs/workbench/contrib/notebook/test/notebookEditorModel.test.ts index 8d4567ed075..7728628c114 100644 --- a/src/vs/workbench/contrib/notebook/test/notebookEditorModel.test.ts +++ b/src/vs/workbench/contrib/notebook/test/notebookEditorModel.test.ts @@ -28,10 +28,10 @@ suite('NotebookEditorModel', function () { const notificationService = new class extends mock() { }; const untitledTextEditorService = new class extends mock() { }; const fileService = new class extends mock() { - onDidFilesChange = Event.None; + override onDidFilesChange = Event.None; }; const labelService = new class extends mock() { - getUriBasenameLabel(uri: URI) { return uri.toString(); } + override getUriBasenameLabel(uri: URI) { return uri.toString(); } }; const notebookDataProvider = new class extends mock() { }; @@ -43,7 +43,7 @@ suite('NotebookEditorModel', function () { const copies: IWorkingCopy[] = []; const workingCopyService = new class extends mock() { - registerWorkingCopy(copy: IWorkingCopy) { + override registerWorkingCopy(copy: IWorkingCopy) { copies.push(copy); return Disposable.None; } diff --git a/src/vs/workbench/contrib/notebook/test/notebookServiceImpl.test.ts b/src/vs/workbench/contrib/notebook/test/notebookServiceImpl.test.ts index d0b1e289885..0ff0ef9e0b5 100644 --- a/src/vs/workbench/contrib/notebook/test/notebookServiceImpl.test.ts +++ b/src/vs/workbench/contrib/notebook/test/notebookServiceImpl.test.ts @@ -19,11 +19,11 @@ suite('NotebookProviderInfoStore', function () { const store = new NotebookProviderInfoStore( new class extends mock() { - get() { return ''; } - store() { } + override get() { return ''; } + override store() { } }, new class extends mock() { - onDidRegisterExtensions = Event.None; + override onDidRegisterExtensions = Event.None; } ); diff --git a/src/vs/workbench/contrib/notebook/test/testNotebookEditor.ts b/src/vs/workbench/contrib/notebook/test/testNotebookEditor.ts index 793714c047c..a67a19ff23e 100644 --- a/src/vs/workbench/contrib/notebook/test/testNotebookEditor.ts +++ b/src/vs/workbench/contrib/notebook/test/testNotebookEditor.ts @@ -160,20 +160,20 @@ function _createTestNotebookEditor(instantiationService: TestInstantiationServic const listViewInfoAccessor = new ListViewInfoAccessor(cellList); const notebookEditor: IActiveNotebookEditor = new class extends mock() { - dispose() { + override dispose() { viewModel.dispose(); } onDidChangeModel: Event = new Emitter().event; get viewModel() { return viewModel; } - hasModel(): this is IActiveNotebookEditor { + override hasModel(): this is IActiveNotebookEditor { return !!this.viewModel; } - getFocus() { return viewModel.getFocus(); } - getSelections() { return viewModel.getSelections(); } - getViewIndex(cell: ICellViewModel) { return listViewInfoAccessor.getViewIndex(cell); } + override getFocus() { return viewModel.getFocus(); } + override getSelections() { return viewModel.getSelections(); } + override getViewIndex(cell: ICellViewModel) { return listViewInfoAccessor.getViewIndex(cell); } getCellRangeFromViewRange(startIndex: number, endIndex: number) { return listViewInfoAccessor.getCellRangeFromViewRange(startIndex, endIndex); } revealCellRangeInView() { } - setHiddenAreas(_ranges: ICellRange[]): boolean { + override setHiddenAreas(_ranges: ICellRange[]): boolean { return cellList.setHiddenAreas(_ranges, true); } getActiveCell() { diff --git a/src/vs/workbench/contrib/outline/browser/outlinePane.ts b/src/vs/workbench/contrib/outline/browser/outlinePane.ts index 22410907986..8b16ac9dc58 100644 --- a/src/vs/workbench/contrib/outline/browser/outlinePane.ts +++ b/src/vs/workbench/contrib/outline/browser/outlinePane.ts @@ -118,18 +118,18 @@ export class OutlinePane extends ViewPane { this._disposables.add(this._outlineViewState.onDidChange(updateContext)); } - dispose(): void { + override dispose(): void { this._disposables.dispose(); this._editorDisposables.dispose(); this._editorListener.dispose(); super.dispose(); } - focus(): void { + override focus(): void { this._tree?.domFocus(); } - protected renderBody(container: HTMLElement): void { + protected override renderBody(container: HTMLElement): void { super.renderBody(container); this._domNode = container; @@ -158,7 +158,7 @@ export class OutlinePane extends ViewPane { })); } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this._tree?.layout(height, width); this._treeDimensions = new dom.Dimension(width, height); diff --git a/src/vs/workbench/contrib/output/browser/logViewer.ts b/src/vs/workbench/contrib/output/browser/logViewer.ts index a8fb736ea74..656dcce9058 100644 --- a/src/vs/workbench/contrib/output/browser/logViewer.ts +++ b/src/vs/workbench/contrib/output/browser/logViewer.ts @@ -53,7 +53,7 @@ export class LogViewerInput extends ResourceEditorInput { ); } - getTypeId(): string { + override getTypeId(): string { return LogViewerInput.ID; } } @@ -74,7 +74,7 @@ export class LogViewer extends AbstractTextResourceEditor { super(LogViewer.LOG_VIEWER_EDITOR_ID, telemetryService, instantiationService, storageService, textResourceConfigurationService, themeService, editorGroupService, editorService); } - protected getConfigurationOverrides(): IEditorOptions { + protected override getConfigurationOverrides(): IEditorOptions { const options = super.getConfigurationOverrides(); options.wordWrap = 'off'; // all log viewers do not wrap options.folding = false; diff --git a/src/vs/workbench/contrib/output/browser/outputView.ts b/src/vs/workbench/contrib/output/browser/outputView.ts index d7c7c6ddb69..50b3047ee4d 100644 --- a/src/vs/workbench/contrib/output/browser/outputView.ts +++ b/src/vs/workbench/contrib/output/browser/outputView.ts @@ -80,14 +80,14 @@ export class OutputViewPane extends ViewPane { } } - focus(): void { + override focus(): void { super.focus(); if (this.editorPromise) { this.editorPromise.then(() => this.editor.focus()); } } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this.editor.create(container); container.classList.add('output-view'); @@ -117,12 +117,12 @@ export class OutputViewPane extends ViewPane { })); } - layoutBody(height: number, width: number): void { + override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.editor.layout(new Dimension(width, height)); } - getActionViewItem(action: IAction): IActionViewItem | undefined { + override getActionViewItem(action: IAction): IActionViewItem | undefined { if (action.id === 'workbench.output.action.switchBetweenOutputs') { return this.instantiationService.createInstance(SwitchOutputActionViewItem, action); } @@ -178,15 +178,15 @@ export class OutputEditor extends AbstractTextResourceEditor { super(OUTPUT_VIEW_ID, telemetryService, instantiationService, storageService, textResourceConfigurationService, themeService, editorGroupService, editorService); } - getId(): string { + override getId(): string { return OUTPUT_VIEW_ID; } - getTitle(): string { + override getTitle(): string { return nls.localize('output', "Output"); } - protected getConfigurationOverrides(): IEditorOptions { + protected override getConfigurationOverrides(): IEditorOptions { const options = super.getConfigurationOverrides(); options.wordWrap = 'on'; // all output editors wrap options.lineNumbers = 'off'; // all output editors hide line numbers @@ -219,7 +219,7 @@ export class OutputEditor extends AbstractTextResourceEditor { return channel ? nls.localize('outputViewWithInputAriaLabel', "{0}, Output panel", channel.label) : nls.localize('outputViewAriaLabel', "Output panel"); } - async setInput(input: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + async override setInput(input: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { const focus = !(options && options.preserveFocus); if (input.matches(this.input)) { return; @@ -236,7 +236,7 @@ export class OutputEditor extends AbstractTextResourceEditor { this.revealLastLine(); } - clearInput(): void { + override clearInput(): void { if (this.input) { // Dispose current input (Output panel is not a workbench editor) this.input.dispose(); @@ -244,7 +244,7 @@ export class OutputEditor extends AbstractTextResourceEditor { super.clearInput(); } - protected createEditor(parent: HTMLElement): void { + protected override createEditor(parent: HTMLElement): void { parent.setAttribute('role', 'document'); @@ -281,7 +281,7 @@ class SwitchOutputActionViewItem extends SelectActionViewItem { this.updateOtions(); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); container.classList.add('switch-output'); this._register(attachStylerCallback(this.themeService, { selectBorder }, colors => { @@ -289,7 +289,7 @@ class SwitchOutputActionViewItem extends SelectActionViewItem { })); } - protected getActionContext(option: string, index: number): string { + protected override getActionContext(option: string, index: number): string { const channel = index < this.outputChannels.length ? this.outputChannels[index] : this.logChannels[index - this.outputChannels.length - 1]; return channel ? channel.id : option; } diff --git a/src/vs/workbench/contrib/output/common/outputChannelModel.ts b/src/vs/workbench/contrib/output/common/outputChannelModel.ts index d5507658394..98f16262606 100644 --- a/src/vs/workbench/contrib/output/common/outputChannelModel.ts +++ b/src/vs/workbench/contrib/output/common/outputChannelModel.ts @@ -122,7 +122,7 @@ export abstract class AbstractFileOutputChannelModel extends Disposable implemen protected onUpdateModelCancelled() { } protected updateModel() { } - dispose(): void { + override dispose(): void { this._onDispose.fire(); super.dispose(); } @@ -176,7 +176,7 @@ class OutputFileListener extends Disposable { } } - dispose(): void { + override dispose(): void { this.unwatch(); super.dispose(); } @@ -229,7 +229,7 @@ class FileOutputChannelModel extends AbstractFileOutputChannelModel implements I return this.loadModelPromise; } - clear(till?: number): void { + override clear(till?: number): void { const loadModelPromise: Promise = this.loadModelPromise ? this.loadModelPromise : Promise.resolve(); loadModelPromise.then(() => { super.clear(till); @@ -241,7 +241,7 @@ class FileOutputChannelModel extends AbstractFileOutputChannelModel implements I throw new Error('Not supported'); } - protected updateModel(): void { + protected override updateModel(): void { if (this.model) { this.fileService.readFile(this.file, { position: this.endOffset }) .then(content => { @@ -257,15 +257,15 @@ class FileOutputChannelModel extends AbstractFileOutputChannelModel implements I } } - protected onModelCreated(model: ITextModel): void { + protected override onModelCreated(model: ITextModel): void { this.fileHandler.watch(this.etag); } - protected onModelWillDispose(model: ITextModel | null): void { + protected override onModelWillDispose(model: ITextModel | null): void { this.fileHandler.unwatch(); } - protected onUpdateModelCancelled(): void { + protected override onUpdateModelCancelled(): void { this.updateInProgress = false; } @@ -273,7 +273,7 @@ class FileOutputChannelModel extends AbstractFileOutputChannelModel implements I return VSBuffer.fromString(str).byteLength; } - update(size?: number): void { + override update(size?: number): void { if (this.model) { if (!this.updateInProgress) { this.updateInProgress = true; @@ -368,7 +368,7 @@ export class BufferredOutputChannel extends Disposable implements IOutputChannel } } - dispose(): void { + override dispose(): void { this._onDispose.fire(); super.dispose(); } diff --git a/src/vs/workbench/contrib/output/electron-sandbox/outputChannelModelService.ts b/src/vs/workbench/contrib/output/electron-sandbox/outputChannelModelService.ts index 2da8fc1a7a3..2b0824c09c6 100644 --- a/src/vs/workbench/contrib/output/electron-sandbox/outputChannelModelService.ts +++ b/src/vs/workbench/contrib/output/electron-sandbox/outputChannelModelService.ts @@ -77,7 +77,7 @@ class OutputChannelBackedByFile extends AbstractFileOutputChannelModel implement } } - clear(till?: number): void { + override clear(till?: number): void { super.clear(till); this.appendedMessage = ''; } @@ -122,7 +122,7 @@ class OutputChannelBackedByFile extends AbstractFileOutputChannelModel implement .then(content => this.appendedMessage ? content.value + this.appendedMessage : content.value.toString()); } - protected updateModel(): void { + protected override updateModel(): void { if (this.model && this.appendedMessage) { this.appendToModel(this.appendedMessage); this.appendedMessage = ''; @@ -213,7 +213,7 @@ export class OutputChannelModelService extends AbstractOutputChannelModelService super(instantiationService); } - createOutputChannelModel(id: string, modelUri: URI, mimeType: string, file?: URI): IOutputChannelModel { + override createOutputChannelModel(id: string, modelUri: URI, mimeType: string, file?: URI): IOutputChannelModel { return file ? super.createOutputChannelModel(id, modelUri, mimeType, file) : this.instantiationService.createInstance(DelegatedOutputChannelModel, id, modelUri, mimeType, this.outputDir); } diff --git a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts index eb340b3ffc6..3f2e11c2b84 100644 --- a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts +++ b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts @@ -72,7 +72,7 @@ export class PerfviewInput extends ResourceEditorInput { ); } - getTypeId(): string { + override getTypeId(): string { return PerfviewInput.Id; } } diff --git a/src/vs/workbench/contrib/preferences/browser/keybindingWidgets.ts b/src/vs/workbench/contrib/preferences/browser/keybindingWidgets.ts index 0e640c7528b..844ddab9fde 100644 --- a/src/vs/workbench/contrib/preferences/browser/keybindingWidgets.ts +++ b/src/vs/workbench/contrib/preferences/browser/keybindingWidgets.ts @@ -69,7 +69,7 @@ export class KeybindingsSearchWidget extends SearchWidget { this._reset(); } - clear(): void { + override clear(): void { this._reset(); super.clear(); } @@ -336,7 +336,7 @@ export class DefineKeybindingOverlayWidget extends Disposable implements IOverla }; } - dispose(): void { + override dispose(): void { this._editor.removeOverlayWidget(this); super.dispose(); } diff --git a/src/vs/workbench/contrib/preferences/browser/keybindingsEditor.ts b/src/vs/workbench/contrib/preferences/browser/keybindingsEditor.ts index 7c5303e3c5e..3e5f527c23f 100644 --- a/src/vs/workbench/contrib/preferences/browser/keybindingsEditor.ts +++ b/src/vs/workbench/contrib/preferences/browser/keybindingsEditor.ts @@ -59,7 +59,7 @@ class ThemableCheckboxActionViewItem extends CheckboxActionViewItem { super(context, action, options); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); if (this.checkbox) { this.disposables.add(attachCheckboxStyler(this.checkbox, this.themeService)); @@ -146,13 +146,13 @@ export class KeybindingsEditor extends EditorPane implements IKeybindingsEditorP this.createBody(keybindingsEditorElement); } - setInput(input: KeybindingsEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + override setInput(input: KeybindingsEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { this.keybindingsEditorContextKey.set(true); return super.setInput(input, options, context, token) .then(() => this.render(!!(options && options.preserveFocus))); } - clearInput(): void { + override clearInput(): void { super.clearInput(); this.keybindingsEditorContextKey.reset(); this.keybindingFocusContextKey.reset(); @@ -170,7 +170,7 @@ export class KeybindingsEditor extends EditorPane implements IKeybindingsEditorP this._onLayout.fire(); } - focus(): void { + override focus(): void { const activeKeybindingEntry = this.activeKeybindingEntry; if (activeKeybindingEntry) { this.selectEntry(activeKeybindingEntry); diff --git a/src/vs/workbench/contrib/preferences/browser/keybindingsEditorContribution.ts b/src/vs/workbench/contrib/preferences/browser/keybindingsEditorContribution.ts index 35e42607f78..389647b326f 100644 --- a/src/vs/workbench/contrib/preferences/browser/keybindingsEditorContribution.ts +++ b/src/vs/workbench/contrib/preferences/browser/keybindingsEditorContribution.ts @@ -63,7 +63,7 @@ export class DefineKeybindingController extends Disposable implements IEditorCon return this._keybindingWidgetRenderer; } - dispose(): void { + override dispose(): void { this._disposeKeybindingWidgetRenderer(); this._disposeKeybindingDecorationRenderer(); super.dispose(); diff --git a/src/vs/workbench/contrib/preferences/browser/keyboardLayoutPicker.ts b/src/vs/workbench/contrib/preferences/browser/keyboardLayoutPicker.ts index a7e4bad5e7a..ac9c8cf5a90 100644 --- a/src/vs/workbench/contrib/preferences/browser/keyboardLayoutPicker.ts +++ b/src/vs/workbench/contrib/preferences/browser/keyboardLayoutPicker.ts @@ -109,7 +109,7 @@ export class KeyboardLayoutPickerAction extends Action { super(actionId, actionLabel, undefined, true); } - async run(): Promise { + async override run(): Promise { let layouts = this.keyboardLayoutService.getAllKeyboardLayouts(); let currentLayout = this.keyboardLayoutService.getCurrentKeyboardLayout(); let layoutConfig = this.configurationService.getValue('keyboard.layout'); diff --git a/src/vs/workbench/contrib/preferences/browser/preferencesActions.ts b/src/vs/workbench/contrib/preferences/browser/preferencesActions.ts index 03d0c473b17..7bae5549965 100644 --- a/src/vs/workbench/contrib/preferences/browser/preferencesActions.ts +++ b/src/vs/workbench/contrib/preferences/browser/preferencesActions.ts @@ -28,7 +28,7 @@ export class ConfigureLanguageBasedSettingsAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const languages = this.modeService.getRegisteredLanguageNames(); const picks: IQuickPickItem[] = languages.sort().map((lang, index) => { const description: string = nls.localize('languageDescriptionConfigured', "({0})", this.modeService.getModeIdForLanguageName(lang.toLowerCase())); diff --git a/src/vs/workbench/contrib/preferences/browser/preferencesEditor.ts b/src/vs/workbench/contrib/preferences/browser/preferencesEditor.ts index b92b3b4385f..69b8248289f 100644 --- a/src/vs/workbench/contrib/preferences/browser/preferencesEditor.ts +++ b/src/vs/workbench/contrib/preferences/browser/preferencesEditor.ts @@ -71,17 +71,17 @@ export class PreferencesEditor extends EditorPane { private lastFocusedWidget: SearchWidget | SideBySidePreferencesWidget | undefined = undefined; - get minimumWidth(): number { return this.sideBySidePreferencesWidget ? this.sideBySidePreferencesWidget.minimumWidth : 0; } - get maximumWidth(): number { return this.sideBySidePreferencesWidget ? this.sideBySidePreferencesWidget.maximumWidth : Number.POSITIVE_INFINITY; } + override get minimumWidth(): number { return this.sideBySidePreferencesWidget ? this.sideBySidePreferencesWidget.minimumWidth : 0; } + override get maximumWidth(): number { return this.sideBySidePreferencesWidget ? this.sideBySidePreferencesWidget.maximumWidth : Number.POSITIVE_INFINITY; } // these setters need to exist because this extends from EditorPane - set minimumWidth(value: number) { /*noop*/ } - set maximumWidth(value: number) { /*noop*/ } + override set minimumWidth(value: number) { /*noop*/ } + override set maximumWidth(value: number) { /*noop*/ } - get minimumHeight() { return 260; } + override get minimumHeight() { return 260; } private _onDidCreateWidget = this._register(new Emitter<{ width: number; height: number; } | undefined>()); - readonly onDidChangeSizeConstraints: Event<{ width: number; height: number; } | undefined> = this._onDidCreateWidget.event; + override readonly onDidChangeSizeConstraints: Event<{ width: number; height: number; } | undefined> = this._onDidCreateWidget.event; constructor( @IPreferencesService private readonly preferencesService: IPreferencesService, @@ -151,7 +151,7 @@ export class PreferencesEditor extends EditorPane { this.preferencesRenderers.editFocusedPreference(); } - setInput(newInput: EditorInput, options: SettingsEditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + override setInput(newInput: EditorInput, options: SettingsEditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { this.defaultSettingsEditorContextKey.set(true); this.defaultSettingsJSONEditorContextKey.set(true); if (options && options.query) { @@ -167,11 +167,11 @@ export class PreferencesEditor extends EditorPane { this.sideBySidePreferencesWidget.layout(new DOM.Dimension(dimension.width, dimension.height - headerHeight)); } - getControl(): IEditorControl | undefined { + override getControl(): IEditorControl | undefined { return this.sideBySidePreferencesWidget.getControl(); } - focus(): void { + override focus(): void { if (this.lastFocusedWidget) { this.lastFocusedWidget.focus(); } @@ -191,7 +191,7 @@ export class PreferencesEditor extends EditorPane { } } - clearInput(): void { + override clearInput(): void { this.defaultSettingsEditorContextKey.set(false); this.defaultSettingsJSONEditorContextKey.set(false); this.sideBySidePreferencesWidget.clearInput(); @@ -199,7 +199,7 @@ export class PreferencesEditor extends EditorPane { super.clearInput(); } - protected setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { + protected override setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { this.sideBySidePreferencesWidget.setEditorVisible(visible, group); super.setEditorVisible(visible, group); } @@ -331,11 +331,11 @@ export class PreferencesEditor extends EditorPane { class SettingsNavigator extends ArrayNavigator { - next(): ISetting | null { + override next(): ISetting | null { return super.next() || super.first(); } - previous(): ISetting | null { + override previous(): ISetting | null { return super.previous() || super.last(); } @@ -749,7 +749,7 @@ class PreferencesRenderersController extends Disposable { return settings; } - dispose(): void { + override dispose(): void { dispose(this._defaultPreferencesRendererDisposables); dispose(this._editablePreferencesRendererDisposables); super.dispose(); @@ -958,7 +958,7 @@ class SideBySidePreferencesWidget extends Widget { } } - dispose(): void { + override dispose(): void { this.disposeEditors(); super.dispose(); } @@ -987,7 +987,7 @@ export class DefaultPreferencesEditor extends BaseTextEditor { return contributions; } - createEditorControl(parent: HTMLElement, configuration: IEditorOptions): editorCommon.IEditor { + override createEditorControl(parent: HTMLElement, configuration: IEditorOptions): editorCommon.IEditor { const editor = this.instantiationService.createInstance(CodeEditorWidget, parent, configuration, { contributions: DefaultPreferencesEditor._getContributions() }); // Inform user about editor being readonly if user starts type @@ -1004,7 +1004,7 @@ export class DefaultPreferencesEditor extends BaseTextEditor { } } - protected getConfigurationOverrides(): IEditorOptions { + protected override getConfigurationOverrides(): IEditorOptions { const options = super.getConfigurationOverrides(); options.readOnly = true; if (this.input) { @@ -1025,7 +1025,7 @@ export class DefaultPreferencesEditor extends BaseTextEditor { return options; } - async setInput(input: DefaultPreferencesEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + async override setInput(input: DefaultPreferencesEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { await super.setInput(input, options, context, token); const editorModel = await this.input!.resolve(); if (!editorModel) { @@ -1042,7 +1042,7 @@ export class DefaultPreferencesEditor extends BaseTextEditor { editor.setModel((editorModel).textEditorModel); } - clearInput(): void { + override clearInput(): void { // Clear Model const editor = this.getControl(); if (editor) { @@ -1053,7 +1053,7 @@ export class DefaultPreferencesEditor extends BaseTextEditor { super.clearInput(); } - layout(dimension: DOM.Dimension) { + override layout(dimension: DOM.Dimension) { const editor = assertIsDefined(this.getControl()); editor.layout(dimension); } @@ -1144,7 +1144,7 @@ abstract class AbstractSettingsEditorContribution extends Disposable implements } } - dispose() { + override dispose() { this.disposePreferencesRenderer(); super.dispose(); } diff --git a/src/vs/workbench/contrib/preferences/browser/preferencesRenderers.ts b/src/vs/workbench/contrib/preferences/browser/preferencesRenderers.ts index a65db9f9b45..96e8b714f27 100644 --- a/src/vs/workbench/contrib/preferences/browser/preferencesRenderers.ts +++ b/src/vs/workbench/contrib/preferences/browser/preferencesRenderers.ts @@ -197,16 +197,16 @@ export class WorkspaceSettingsRenderer extends UserSettingsRenderer implements I this.workspaceConfigurationRenderer = this._register(instantiationService.createInstance(WorkspaceConfigurationRenderer, editor, preferencesModel)); } - protected createHeader(): void { + protected override createHeader(): void { this._register(new SettingsHeaderWidget(this.editor, '')).setMessage(nls.localize('emptyWorkspaceSettingsHeader', "Place your settings here to override the User Settings.")); } - setAssociatedPreferencesModel(associatedPreferencesModel: IPreferencesEditorModel): void { + override setAssociatedPreferencesModel(associatedPreferencesModel: IPreferencesEditorModel): void { super.setAssociatedPreferencesModel(associatedPreferencesModel); this.workspaceConfigurationRenderer.render(this.getAssociatedPreferencesModel()); } - render(): void { + override render(): void { super.render(); this.workspaceConfigurationRenderer.render(this.getAssociatedPreferencesModel()); } @@ -223,7 +223,7 @@ export class FolderSettingsRenderer extends UserSettingsRenderer implements IPre super(editor, preferencesModel, preferencesService, configurationService, instantiationService); } - protected createHeader(): void { + protected override createHeader(): void { this._register(new SettingsHeaderWidget(this.editor, '')).setMessage(nls.localize('emptyFolderSettingsHeader', "Place your folder settings here to override those from the Workspace Settings.")); } @@ -521,7 +521,7 @@ export class SettingsGroupTitleRenderer extends Disposable implements HiddenArea this.renderDisposables.clear(); } - dispose() { + override dispose() { this.disposeWidgets(); super.dispose(); } @@ -542,7 +542,7 @@ export class HiddenAreasRenderer extends Disposable { this.editor.setHiddenAreas(ranges); } - dispose() { + override dispose() { this.editor.setHiddenAreas([]); super.dispose(); } @@ -593,7 +593,7 @@ export class FilteredMatchesRenderer extends Disposable implements HiddenAreasPr return notMatchesRanges; } - dispose() { + override dispose() { this.decorationIds = this.editor.deltaDecorations(this.decorationIds, []); super.dispose(); } @@ -619,7 +619,7 @@ export class HighlightMatchesRenderer extends Disposable { }; } - dispose() { + override dispose() { this.decorationIds = this.editor.deltaDecorations(this.decorationIds, []); super.dispose(); } @@ -1068,7 +1068,7 @@ class UnsupportedSettingsRenderer extends Disposable { }; } - public dispose(): void { + public override dispose(): void { this.markerService.remove('UnsupportedSettingsRenderer', [this.settingsEditorModel.uri]); super.dispose(); } @@ -1139,7 +1139,7 @@ class WorkspaceConfigurationRenderer extends Disposable { }; } - dispose(): void { + override dispose(): void { this.markerService.remove('WorkspaceConfigurationRenderer', [this.workspaceSettingsEditorModel.uri]); this.decorationIds = this.editor.deltaDecorations(this.decorationIds, []); super.dispose(); diff --git a/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts b/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts index 4d993c9f85e..5cae81d7586 100644 --- a/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts +++ b/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts @@ -97,7 +97,7 @@ export class SettingsHeaderWidget extends Widget implements IViewZone { } } - dispose() { + override dispose() { this.editor.changeViewZones(accessor => { accessor.removeZone(this.id); }); @@ -110,7 +110,7 @@ export class DefaultSettingsHeaderWidget extends SettingsHeaderWidget { private _onClick = this._register(new Emitter()); readonly onClick: Event = this._onClick.event; - protected create() { + protected override create() { super.create(); this.toggleMessage(true); @@ -302,7 +302,7 @@ export class SettingsGroupTitleWidget extends Widget implements IViewZone { return false; } - dispose() { + override dispose() { this.editor.changeViewZones(accessor => { accessor.removeZone(this.id); }); @@ -352,7 +352,7 @@ export class FolderSettingsActionViewItem extends BaseActionViewItem { this.update(); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { this.element = container; this.container = container; @@ -383,7 +383,7 @@ export class FolderSettingsActionViewItem extends BaseActionViewItem { } } - onClick(event: DOM.EventLike): void { + override onClick(event: DOM.EventLike): void { DOM.EventHelper.stop(event, true); if (!this.folder || this._action.checked) { this.showMenu(); @@ -392,11 +392,11 @@ export class FolderSettingsActionViewItem extends BaseActionViewItem { } } - protected updateEnabled(): void { + protected override updateEnabled(): void { this.update(); } - protected updateChecked(): void { + protected override updateChecked(): void { this.update(); } @@ -753,7 +753,7 @@ export class SearchWidget extends Widget { return this.inputBox.value = value; } - dispose(): void { + override dispose(): void { if (this.options.focusKey) { this.options.focusKey.set(false); } @@ -820,7 +820,7 @@ export class EditPreferenceWidget extends Disposable { return this._editPreferenceDecoration.length > 0; } - dispose(): void { + override dispose(): void { this.hide(); super.dispose(); } diff --git a/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts b/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts index 51d5a3c84b8..467abd9dc91 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts @@ -202,12 +202,12 @@ export class SettingsEditor2 extends EditorPane { })); } - get minimumWidth(): number { return 375; } - get maximumWidth(): number { return Number.POSITIVE_INFINITY; } + override get minimumWidth(): number { return 375; } + override get maximumWidth(): number { return Number.POSITIVE_INFINITY; } // these setters need to exist because this extends from EditorPane - set minimumWidth(value: number) { /*noop*/ } - set maximumWidth(value: number) { /*noop*/ } + override set minimumWidth(value: number) { /*noop*/ } + override set maximumWidth(value: number) { /*noop*/ } private get currentSettingsModel() { return this.searchResultModel || this.settingsTreeModel; @@ -246,7 +246,7 @@ export class SettingsEditor2 extends EditorPane { this.updateStyles(); } - setInput(input: SettingsEditor2Input, options: SettingsEditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + override setInput(input: SettingsEditor2Input, options: SettingsEditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { this.inSettingsEditorContextKey.set(true); return super.setInput(input, options, context, token) .then(() => timeout(0)) // Force setInput to be async @@ -293,7 +293,7 @@ export class SettingsEditor2 extends EditorPane { return withUndefinedAsNull(cachedState); } - setOptions(options: SettingsEditorOptions | undefined): void { + override setOptions(options: SettingsEditorOptions | undefined): void { super.setOptions(options); if (options) { @@ -317,7 +317,7 @@ export class SettingsEditor2 extends EditorPane { } } - clearInput(): void { + override clearInput(): void { this.inSettingsEditorContextKey.set(false); super.clearInput(); } @@ -340,7 +340,7 @@ export class SettingsEditor2 extends EditorPane { this.rootElement.classList.toggle('narrow-width', dimension.width < 600); } - focus(): void { + override focus(): void { if (this._currentFocusContext === SettingsFocusContext.Search) { this.focusSearch(); } else if (this._currentFocusContext === SettingsFocusContext.SettingControl) { @@ -359,7 +359,7 @@ export class SettingsEditor2 extends EditorPane { } } - protected setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { + protected override setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { super.setEditorVisible(visible, group); if (!visible) { @@ -1395,7 +1395,7 @@ export class SettingsEditor2 extends EditorPane { this.tocTree.layout(tocTreeHeight); } - protected saveState(): void { + protected override saveState(): void { if (this.isVisible()) { const searchQuery = this.searchWidget.getValue().trim(); const target = this.settingsTargetsWidget.settingsTarget as SettingsTarget; diff --git a/src/vs/workbench/contrib/preferences/browser/settingsTree.ts b/src/vs/workbench/contrib/preferences/browser/settingsTree.ts index 9e89f833324..1b97ca5f409 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsTree.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsTree.ts @@ -1827,11 +1827,11 @@ class SettingsTreeDelegate extends CachedListVirtualDelegate extends ObjectTreeModel { - isCollapsible(element: T): boolean { + override isCollapsible(element: T): boolean { return false; } - setCollapsed(element: T, collapsed?: boolean, recursive?: boolean): boolean { + override setCollapsed(element: T, collapsed?: boolean, recursive?: boolean): boolean { return false; } } @@ -1991,7 +1991,7 @@ export class SettingsTree extends WorkbenchObjectTree { })); } - protected createModel(user: string, view: IList>, options: IObjectTreeOptions): ITreeModel { + protected override createModel(user: string, view: IList>, options: IObjectTreeOptions): ITreeModel { return new NonCollapsibleObjectTreeModel(user, view, options); } } @@ -2006,7 +2006,7 @@ class CopySettingIdAction extends Action { super(CopySettingIdAction.ID, CopySettingIdAction.LABEL); } - async run(context: SettingsTreeSettingElement): Promise { + async override run(context: SettingsTreeSettingElement): Promise { if (context) { await this.clipboardService.writeText(context.setting.key); } @@ -2025,7 +2025,7 @@ class CopySettingAsJSONAction extends Action { super(CopySettingAsJSONAction.ID, CopySettingAsJSONAction.LABEL); } - async run(context: SettingsTreeSettingElement): Promise { + async override run(context: SettingsTreeSettingElement): Promise { if (context) { const jsonResult = `"${context.setting.key}": ${JSON.stringify(context.value, undefined, ' ')}`; await this.clipboardService.writeText(jsonResult); @@ -2053,7 +2053,7 @@ class SyncSettingAction extends Action { this.checked = !ignoredSettings.includes(this.setting.key); } - async run(): Promise { + async override run(): Promise { // first remove the current setting completely from ignored settings let currentValue = [...this.configService.getValue('settingsSync.ignoredSettings')]; currentValue = currentValue.filter(v => v !== this.setting.key && v !== `-${this.setting.key}`); diff --git a/src/vs/workbench/contrib/preferences/browser/settingsWidgets.ts b/src/vs/workbench/contrib/preferences/browser/settingsWidgets.ts index b863ddcf71a..897d1239ddc 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsWidgets.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsWidgets.ts @@ -623,17 +623,17 @@ export class ListSettingWidget extends AbstractListSettingWidget } export class ExcludeSettingWidget extends ListSettingWidget { - protected getContainerClasses() { + protected override getContainerClasses() { return ['setting-list-exclude-widget']; } - protected getLocalizedRowTitle({ value, sibling }: IListDataItem): string { + protected override getLocalizedRowTitle({ value, sibling }: IListDataItem): string { return isUndefinedOrNull(sibling) ? localize('excludePatternHintLabel', "Exclude files matching `{0}`", value) : localize('excludeSiblingHintLabel', "Exclude files matching `{0}`, only when a file matching `{1}` is present", value, sibling); } - protected getLocalizedStrings() { + protected override getLocalizedStrings() { return { deleteActionTooltip: localize('removeExcludeItem', "Remove Exclude Item"), editActionTooltip: localize('editExcludeItem', "Edit Exclude Item"), @@ -703,7 +703,7 @@ export class ObjectSettingWidget extends AbstractListSettingWidget undefined; private valueSuggester: IObjectValueSuggester = () => undefined; - setValue(listData: IObjectDataItem[], options?: IObjectSetValueOptions): void { + override setValue(listData: IObjectDataItem[], options?: IObjectSetValueOptions): void { this.showAddButton = options?.showAddButton ?? this.showAddButton; this.keySuggester = options?.keySuggester ?? this.keySuggester; this.valueSuggester = options?.valueSuggester ?? this.valueSuggester; @@ -721,7 +721,7 @@ export class ObjectSettingWidget extends AbstractListSettingWidget 1) { super.render(container); container.classList.add('switch-remote'); } } - protected getActionContext(_: string, index: number): any { + protected override getActionContext(_: string, index: number): any { return this.optionsItems[index]; } diff --git a/src/vs/workbench/contrib/remote/browser/remote.ts b/src/vs/workbench/contrib/remote/browser/remote.ts index 5e2ea816afc..d8a68ff6633 100644 --- a/src/vs/workbench/contrib/remote/browser/remote.ts +++ b/src/vs/workbench/contrib/remote/browser/remote.ts @@ -403,7 +403,7 @@ class HelpPanel extends ViewPane { super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService); } - protected renderBody(container: HTMLElement): void { + protected override renderBody(container: HTMLElement): void { super.renderBody(container); container.classList.add('remote-help'); @@ -436,7 +436,7 @@ class HelpPanel extends ViewPane { })); } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.tree.layout(height, width); } @@ -522,7 +522,7 @@ export class RemoteViewPaneContainer extends FilterViewPaneContainer implements this.remoteExplorerService.targetType = isStringArray(viewDescriptor.remoteAuthority) ? viewDescriptor.remoteAuthority : [viewDescriptor.remoteAuthority!]; } - public getActionViewItem(action: Action): IActionViewItem | undefined { + public override getActionViewItem(action: Action): IActionViewItem | undefined { if (action.id === SwitchRemoteAction.ID) { const optionItems = SwitchRemoteViewItem.createOptionItems(Registry.as(Extensions.ViewsRegistry).getViews(this.viewContainer), this.contextKeyService); const item = this.instantiationService.createInstance(SwitchRemoteViewItem, action, optionItems); diff --git a/src/vs/workbench/contrib/remote/browser/urlFinder.ts b/src/vs/workbench/contrib/remote/browser/urlFinder.ts index ba36c2b5414..b66495b0157 100644 --- a/src/vs/workbench/contrib/remote/browser/urlFinder.ts +++ b/src/vs/workbench/contrib/remote/browser/urlFinder.ts @@ -89,7 +89,7 @@ export class UrlFinder extends Disposable { } } - dispose() { + override dispose() { super.dispose(); const listeners = this.listeners.values(); for (const listener of listeners) { diff --git a/src/vs/workbench/contrib/scm/browser/dirtydiffDecorator.ts b/src/vs/workbench/contrib/scm/browser/dirtydiffDecorator.ts index 385bbbaabe0..f9a808c423b 100644 --- a/src/vs/workbench/contrib/scm/browser/dirtydiffDecorator.ts +++ b/src/vs/workbench/contrib/scm/browser/dirtydiffDecorator.ts @@ -53,7 +53,7 @@ import { Codicon } from 'vs/base/common/codicons'; class DiffActionRunner extends ActionRunner { - runAction(action: IAction, context: any): Promise { + override runAction(action: IAction, context: any): Promise { if (action instanceof MenuItemAction) { return action.run(...context); } @@ -121,7 +121,7 @@ class UIEditorAction extends Action { this.editor = editor; } - run(): Promise { + override run(): Promise { return Promise.resolve(this.instantiationService.invokeFunction(accessor => this.action.run(accessor, this.editor, null))); } } @@ -245,7 +245,7 @@ class DirtyDiffWidget extends PeekViewWidget { this.setTitle(this.title, detail); } - protected _fillHead(container: HTMLElement): void { + protected override _fillHead(container: HTMLElement): void { super._fillHead(container, true); const previous = this.instantiationService.createInstance(UIEditorAction, this.editor, new ShowPreviousChangeAction(), ThemeIcon.asClassName(gotoPreviousLocation)); @@ -263,7 +263,7 @@ class DirtyDiffWidget extends PeekViewWidget { }), { label: false, icon: true }); } - protected _getActionBarOptions(): IActionBarOptions { + protected override _getActionBarOptions(): IActionBarOptions { const actionRunner = new DiffActionRunner(); // close widget on successful action @@ -300,7 +300,7 @@ class DirtyDiffWidget extends PeekViewWidget { this.diffEditor = this.instantiationService.createInstance(EmbeddedDiffEditorWidget, container, options, this.editor); } - _onWidth(width: number): void { + override _onWidth(width: number): void { if (typeof this.height === 'undefined') { return; } @@ -308,7 +308,7 @@ class DirtyDiffWidget extends PeekViewWidget { this.diffEditor.layout({ height: this.height, width }); } - protected _doLayoutBody(height: number, width: number): void { + protected override _doLayoutBody(height: number, width: number): void { super._doLayoutBody(height, width); this.diffEditor.layout({ height, width }); @@ -347,7 +347,7 @@ class DirtyDiffWidget extends PeekViewWidget { }); } - protected revealLine(lineNumber: number) { + protected override revealLine(lineNumber: number) { this.editor.revealLineInCenterIfOutsideViewport(lineNumber, ScrollType.Smooth); } @@ -840,7 +840,7 @@ export class DirtyDiffController extends Disposable implements IEditorContributi return model.changes; } - dispose(): void { + override dispose(): void { this.gutterActionDisposables.dispose(); super.dispose(); } @@ -994,7 +994,7 @@ class DirtyDiffDecorator extends Disposable { this.decorations = this.editorModel.deltaDecorations(this.decorations, decorations); } - dispose(): void { + override dispose(): void { super.dispose(); if (this.editorModel && !this.editorModel.isDisposed()) { @@ -1262,7 +1262,7 @@ export class DirtyDiffModel extends Disposable { return this.changes.length - 1; } - dispose(): void { + override dispose(): void { super.dispose(); this._disposed = true; @@ -1433,7 +1433,7 @@ export class DirtyDiffWorkbenchController extends Disposable implements ext.IWor return null; } - dispose(): void { + override dispose(): void { this.disable(); super.dispose(); } diff --git a/src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts index 39d95cc7bc2..85b35ceac5d 100644 --- a/src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts @@ -56,7 +56,7 @@ export class SCMRepositoriesViewPane extends ViewPane { super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService); } - protected renderBody(container: HTMLElement): void { + protected override renderBody(container: HTMLElement): void { super.renderBody(container); const listContainer = append(container, $('.scm-view.scm-repositories-view')); @@ -120,11 +120,11 @@ export class SCMRepositoriesViewPane extends ViewPane { this.updateBodySize(); } - focus(): void { + override focus(): void { this.list.domFocus(); } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.list.layout(height, width); } diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts index 091613b355d..104d7d0f511 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts @@ -301,7 +301,7 @@ class RepositoryPaneActionRunner extends ActionRunner { super(); } - async runAction(action: IAction, context: ISCMResource | IResourceNode): Promise { + async override runAction(action: IAction, context: ISCMResource | IResourceNode): Promise { if (!(action instanceof MenuItemAction)) { return super.runAction(action, context); } @@ -1797,7 +1797,7 @@ class SCMInputWidget extends Disposable { this.validationDisposable.dispose(); } - dispose(): void { + override dispose(): void { this.input = undefined; this.repositoryDisposables.dispose(); this.validationDisposable.dispose(); @@ -1847,7 +1847,7 @@ export class SCMViewPane extends ViewPane { this._register(Event.any(this.scmService.onDidAddRepository, this.scmService.onDidRemoveRepository)(() => this._onDidChangeViewWelcomeState.fire())); } - protected renderBody(container: HTMLElement): void { + protected override renderBody(container: HTMLElement): void { super.renderBody(container); // List @@ -1969,7 +1969,7 @@ export class SCMViewPane extends ViewPane { this.storageService.store(`scm.viewMode`, this._viewModel.mode, StorageScope.WORKSPACE, StorageTarget.USER); } - layoutBody(height: number | undefined = this.layoutCache.height, width: number | undefined = this.layoutCache.width): void { + override layoutBody(height: number | undefined = this.layoutCache.height, width: number | undefined = this.layoutCache.width): void { if (height === undefined) { return; } @@ -1986,7 +1986,7 @@ export class SCMViewPane extends ViewPane { this.tree.layout(height, width); } - focus(): void { + override focus(): void { super.focus(); if (this.isExpanded()) { @@ -2122,7 +2122,7 @@ export class SCMViewPane extends ViewPane { .filter(r => !!r && !isSCMResourceGroup(r))! as any; } - shouldShowWelcome(): boolean { + override shouldShowWelcome(): boolean { return this.scmService.repositories.length === 0; } } diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPaneContainer.ts b/src/vs/workbench/contrib/scm/browser/scmViewPaneContainer.ts index 1e014cf01f2..09c35778b5a 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPaneContainer.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPaneContainer.ts @@ -35,16 +35,16 @@ export class SCMViewPaneContainer extends ViewPaneContainer { super(VIEWLET_ID, { mergeViewWithContainerWhenSingleView: true }, instantiationService, configurationService, layoutService, contextMenuService, telemetryService, extensionService, themeService, storageService, contextService, viewDescriptorService); } - create(parent: HTMLElement): void { + override create(parent: HTMLElement): void { super.create(parent); parent.classList.add('scm-viewlet'); } - getOptimalWidth(): number { + override getOptimalWidth(): number { return 400; } - getTitle(): string { + override getTitle(): string { return localize('source control', "Source Control"); } } diff --git a/src/vs/workbench/contrib/scm/browser/util.ts b/src/vs/workbench/contrib/scm/browser/util.ts index 7ba4c62ec4d..250b8cfce6b 100644 --- a/src/vs/workbench/contrib/scm/browser/util.ts +++ b/src/vs/workbench/contrib/scm/browser/util.ts @@ -90,7 +90,7 @@ export class StatusBarAction extends Action { this.tooltip = command.tooltip || ''; } - run(): Promise { + override run(): Promise { return this.commandService.executeCommand(this.command.id, ...(this.command.arguments || [])); } } @@ -101,7 +101,7 @@ class StatusBarActionViewItem extends ActionViewItem { super(null, action, {}); } - updateLabel(): void { + override updateLabel(): void { if (this.options.label && this.label) { reset(this.label, ...renderLabelWithIcons(this.getAction().label)); } diff --git a/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts b/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts index 3ea89e9870a..fce8acd1d97 100644 --- a/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts +++ b/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts @@ -200,7 +200,7 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider, token: CancellationToken): IDisposable { + override provide(picker: IQuickPick, token: CancellationToken): IDisposable { const disposables = new DisposableStore(); // Update the pick state for this run diff --git a/src/vs/workbench/contrib/search/browser/patternInputWidget.ts b/src/vs/workbench/contrib/search/browser/patternInputWidget.ts index 72425e8cf98..160e680c752 100644 --- a/src/vs/workbench/contrib/search/browser/patternInputWidget.ts +++ b/src/vs/workbench/contrib/search/browser/patternInputWidget.ts @@ -67,7 +67,7 @@ export class PatternInputWidget extends Widget implements IThemable { parent.appendChild(this.domNode); } - dispose(): void { + override dispose(): void { super.dispose(); if (this.inputFocusTracker) { this.inputFocusTracker.dispose(); @@ -199,7 +199,7 @@ export class IncludePatternInputWidget extends PatternInputWidget { private useSearchInEditorsBox!: Checkbox; - dispose(): void { + override dispose(): void { super.dispose(); this.useSearchInEditorsBox.dispose(); } @@ -212,11 +212,11 @@ export class IncludePatternInputWidget extends PatternInputWidget { this.useSearchInEditorsBox.checked = value; } - protected getSubcontrolsWidth(): number { + protected override getSubcontrolsWidth(): number { return super.getSubcontrolsWidth() + this.useSearchInEditorsBox.width(); } - protected renderSubcontrols(controlsDiv: HTMLDivElement): void { + protected override renderSubcontrols(controlsDiv: HTMLDivElement): void { this.useSearchInEditorsBox = this._register(new Checkbox({ icon: Codicon.book, title: nls.localize('onlySearchInOpenEditors', "Search only in Open Editors"), @@ -249,7 +249,7 @@ export class ExcludePatternInputWidget extends PatternInputWidget { private useExcludesAndIgnoreFilesBox!: Checkbox; - dispose(): void { + override dispose(): void { super.dispose(); this.useExcludesAndIgnoreFilesBox.dispose(); } @@ -263,11 +263,11 @@ export class ExcludePatternInputWidget extends PatternInputWidget { this._onChangeIgnoreBoxEmitter.fire(); } - protected getSubcontrolsWidth(): number { + protected override getSubcontrolsWidth(): number { return super.getSubcontrolsWidth() + this.useExcludesAndIgnoreFilesBox.width(); } - protected renderSubcontrols(controlsDiv: HTMLDivElement): void { + protected override renderSubcontrols(controlsDiv: HTMLDivElement): void { this.useExcludesAndIgnoreFilesBox = this._register(new Checkbox({ icon: Codicon.exclude, actionClassName: 'useExcludesAndIgnoreFiles', diff --git a/src/vs/workbench/contrib/search/browser/search.contribution.ts b/src/vs/workbench/contrib/search/browser/search.contribution.ts index 9feb3fed98d..0a6480886f0 100644 --- a/src/vs/workbench/contrib/search/browser/search.contribution.ts +++ b/src/vs/workbench/contrib/search/browser/search.contribution.ts @@ -608,7 +608,7 @@ class ShowAllSymbolsAction extends Action { super(actionId, actionLabel); } - async run(): Promise { + async override run(): Promise { this.quickInputService.quickAccess.show(ShowAllSymbolsAction.ALL_SYMBOLS_PREFIX); } } diff --git a/src/vs/workbench/contrib/search/browser/searchActions.ts b/src/vs/workbench/contrib/search/browser/searchActions.ts index d18d2f4fc0c..d550b950219 100644 --- a/src/vs/workbench/contrib/search/browser/searchActions.ts +++ b/src/vs/workbench/contrib/search/browser/searchActions.ts @@ -102,7 +102,7 @@ export class FocusNextInputAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const input = this.editorService.activeEditor; if (input instanceof SearchEditorInput) { // cast as we cannot import SearchEditor as a value b/c cyclic dependency. @@ -127,7 +127,7 @@ export class FocusPreviousInputAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const input = this.editorService.activeEditor; if (input instanceof SearchEditorInput) { // cast as we cannot import SearchEditor as a value b/c cyclic dependency. @@ -149,7 +149,7 @@ export abstract class FindOrReplaceInFilesAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { return openSearchView(this.viewsService, false).then(openedView => { if (openedView) { const searchAndReplaceWidget = openedView.searchAndReplaceWidget; @@ -226,7 +226,7 @@ export class CloseReplaceAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { const searchView = getSearchView(this.viewsService); if (searchView) { searchView.searchAndReplaceWidget.toggleReplace(false); @@ -253,7 +253,7 @@ export class ToggleSearchOnTypeAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { const searchOnType = this.configurationService.getValue(ToggleSearchOnTypeAction.searchOnTypeKey); return this.configurationService.updateValue(ToggleSearchOnTypeAction.searchOnTypeKey, !searchOnType); } @@ -344,7 +344,7 @@ export class FocusNextSearchResultAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const input = this.editorService.activeEditor; if (input instanceof SearchEditorInput) { // cast as we cannot import SearchEditor as a value b/c cyclic dependency. @@ -370,7 +370,7 @@ export class FocusPreviousSearchResultAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { const input = this.editorService.activeEditor; if (input instanceof SearchEditorInput) { // cast as we cannot import SearchEditor as a value b/c cyclic dependency. @@ -452,7 +452,7 @@ export class RemoveAction extends AbstractSearchAndReplaceAction { super('remove', RemoveAction.LABEL, ThemeIcon.asClassName(searchRemoveIcon)); } - run(): Promise { + override run(): Promise { const currentFocusElement = this.viewer.getFocus()[0]; const nextFocusElement = !currentFocusElement || currentFocusElement instanceof SearchResult || elementIsEqualOrParent(currentFocusElement, this.element) ? this.getElementToFocusAfterRemoved(this.viewer, this.element) : @@ -492,7 +492,7 @@ export class ReplaceAllAction extends AbstractSearchAndReplaceAction { super(Constants.ReplaceAllInFileActionId, appendKeyBindingLabel(ReplaceAllAction.LABEL, keyBindingService.lookupKeybinding(Constants.ReplaceAllInFileActionId), keyBindingService), ThemeIcon.asClassName(searchReplaceAllIcon)); } - run(): Promise { + override run(): Promise { const tree = this.viewlet.getControl(); const nextFocusElement = this.getElementToFocusAfterRemoved(tree, this.fileMatch); return this.fileMatch.parent().replace(this.fileMatch).then(() => { @@ -516,7 +516,7 @@ export class ReplaceAllInFolderAction extends AbstractSearchAndReplaceAction { super(Constants.ReplaceAllInFolderActionId, appendKeyBindingLabel(ReplaceAllInFolderAction.LABEL, keyBindingService.lookupKeybinding(Constants.ReplaceAllInFolderActionId), keyBindingService), ThemeIcon.asClassName(searchReplaceAllIcon)); } - run(): Promise { + override run(): Promise { const nextFocusElement = this.getElementToFocusAfterRemoved(this.viewer, this.folderMatch); return this.folderMatch.replaceAll().then(() => { if (nextFocusElement) { @@ -543,7 +543,7 @@ export class ReplaceAction extends AbstractSearchAndReplaceAction { super(Constants.ReplaceActionId, appendKeyBindingLabel(ReplaceAction.LABEL, keyBindingService.lookupKeybinding(Constants.ReplaceActionId), keyBindingService), ThemeIcon.asClassName(searchReplaceIcon)); } - async run(): Promise { + async override run(): Promise { this.enabled = false; await this.element.parent().replace(this.element); diff --git a/src/vs/workbench/contrib/search/browser/searchView.ts b/src/vs/workbench/contrib/search/browser/searchView.ts index 107bba65340..db3dae14894 100644 --- a/src/vs/workbench/contrib/search/browser/searchView.ts +++ b/src/vs/workbench/contrib/search/browser/searchView.ts @@ -255,7 +255,7 @@ export class SearchView extends ViewPane { } } - renderBody(parent: HTMLElement): void { + override renderBody(parent: HTMLElement): void { super.renderBody(parent); this.container = dom.append(parent, dom.$('.search-view')); @@ -890,7 +890,7 @@ export class SearchView extends ViewPane { this.tree.domFocus(); } - focus(): void { + override focus(): void { super.focus(); if (this.lastFocusState === 'input' || !this.hasSearchResults()) { const updatedText = this.searchConfig.seedOnFocus ? this.updateTextFromSelection({ allowSearchOnType: false }) : false; @@ -1045,7 +1045,7 @@ export class SearchView extends ViewPane { this.tree.layout(); // The tree will measure its container } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.size = new dom.Dimension(width, height); this.reLayout(); @@ -1798,7 +1798,7 @@ export class SearchView extends ViewPane { this.inputPatternIncludes.clearHistory(); } - public saveState(): void { + public override saveState(): void { const isRegex = this.searchWidget.searchInput.getRegex(); const isWholeWords = this.searchWidget.searchInput.getWholeWords(); const isCaseSensitive = this.searchWidget.searchInput.getCaseSensitive(); @@ -1868,7 +1868,7 @@ export class SearchView extends ViewPane { } } - dispose(): void { + override dispose(): void { this.isDisposed = true; this.saveState(); super.dispose(); diff --git a/src/vs/workbench/contrib/search/browser/searchWidget.ts b/src/vs/workbench/contrib/search/browser/searchWidget.ts index 747a9984005..e4b413be3b6 100644 --- a/src/vs/workbench/contrib/search/browser/searchWidget.ts +++ b/src/vs/workbench/contrib/search/browser/searchWidget.ts @@ -64,7 +64,7 @@ class ReplaceAllAction extends Action { this._searchWidget = searchWidget; } - run(): Promise { + override run(): Promise { if (this._searchWidget) { return this._searchWidget.triggerReplaceAll(); } @@ -653,7 +653,7 @@ export class SearchWidget extends Widget { this.onContextLinesChanged(); } - dispose(): void { + override dispose(): void { this.setReplaceAllActionState(false); super.dispose(); } diff --git a/src/vs/workbench/contrib/search/common/searchModel.ts b/src/vs/workbench/contrib/search/common/searchModel.ts index 1e3b7a634d2..a215cd5265b 100644 --- a/src/vs/workbench/contrib/search/common/searchModel.ts +++ b/src/vs/workbench/contrib/search/common/searchModel.ts @@ -439,7 +439,7 @@ export class FileMatch extends Disposable implements IFileMatch { this._fileStat = stat; } - dispose(): void { + override dispose(): void { this.setSelectedMatch(null); this.unbindModel(); this._onDispose.fire(); @@ -630,7 +630,7 @@ export class FolderMatch extends Disposable { this._unDisposedFileMatches.clear(); } - dispose(): void { + override dispose(): void { this.disposeMatches(); this._onDispose.fire(); super.dispose(); @@ -649,7 +649,7 @@ export class FolderMatchWithResource extends FolderMatch { super(_resource, _id, _index, _query, _parent, _searchModel, replaceService, instantiationService); } - get resource(): URI { + override get resource(): URI { return this._resource!; } } @@ -971,7 +971,7 @@ export class SearchResult extends Disposable { this._rangeHighlightDecorations.removeHighlightRange(); } - dispose(): void { + override dispose(): void { this.disposePastResults(); this.disposeMatches(); this._rangeHighlightDecorations.dispose(); @@ -1173,7 +1173,7 @@ export class SearchModel extends Disposable { return false; } - dispose(): void { + override dispose(): void { this.cancelSearch(); this.searchResult.dispose(); super.dispose(); diff --git a/src/vs/workbench/contrib/searchEditor/browser/searchEditor.ts b/src/vs/workbench/contrib/searchEditor/browser/searchEditor.ts index 160aa6ebd49..13012897c0d 100644 --- a/src/vs/workbench/contrib/searchEditor/browser/searchEditor.ts +++ b/src/vs/workbench/contrib/searchEditor/browser/searchEditor.ts @@ -119,7 +119,7 @@ export class SearchEditor extends BaseTextEditor { this.searchModel = this._register(this.instantiationService.createInstance(SearchModel)); } - createEditor(parent: HTMLElement) { + override createEditor(parent: HTMLElement) { DOM.append(parent, this.container); this.createQueryEditor(this.container); @@ -238,11 +238,11 @@ export class SearchEditor extends BaseTextEditor { }); } - getControl() { + override getControl() { return this.searchResultEditor; } - focus() { + override focus() { const viewState = this.loadViewState(); if (viewState && viewState.focused === 'editor') { this.searchResultEditor.focus(); @@ -544,7 +544,7 @@ export class SearchEditor extends BaseTextEditor { await Promise.all(files); } - layout(dimension: DOM.Dimension) { + override layout(dimension: DOM.Dimension) { this.dimension = dimension; this.reLayout(); } @@ -583,7 +583,7 @@ export class SearchEditor extends BaseTextEditor { if (config.showIncludesExcludes !== undefined) { this.toggleIncludesExcludes(config.showIncludesExcludes); } } - async setInput(newInput: SearchEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + async override setInput(newInput: SearchEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { this.saveViewState(); await super.setInput(newInput, options, context, token); @@ -625,7 +625,7 @@ export class SearchEditor extends BaseTextEditor { this.reLayout(); } - saveState() { + override saveState() { this.saveViewState(); super.saveState(); } @@ -635,7 +635,7 @@ export class SearchEditor extends BaseTextEditor { if (resource) { this.saveTextEditorViewState(resource); } } - protected retrieveTextEditorViewState(resource: URI): SearchEditorViewState | null { + protected override retrieveTextEditorViewState(resource: URI): SearchEditorViewState | null { const control = this.getControl(); const editorViewState = control.saveViewState(); if (!editorViewState) { return null; } @@ -654,7 +654,7 @@ export class SearchEditor extends BaseTextEditor { if (viewState) { this.searchResultEditor.restoreViewState(viewState); } } - clearInput() { + override clearInput() { this.saveViewState(); super.clearInput(); } diff --git a/src/vs/workbench/contrib/searchEditor/browser/searchEditorInput.ts b/src/vs/workbench/contrib/searchEditor/browser/searchEditorInput.ts index b724ea5a3fc..fdb12771312 100644 --- a/src/vs/workbench/contrib/searchEditor/browser/searchEditorInput.ts +++ b/src/vs/workbench/contrib/searchEditor/browser/searchEditorInput.ts @@ -121,7 +121,7 @@ export class SearchEditorInput extends EditorInput { this._register(this.workingCopyService.registerWorkingCopy(workingCopyAdapter)); } - async save(group: GroupIdentifier, options?: ITextFileSaveOptions): Promise { + async override save(group: GroupIdentifier, options?: ITextFileSaveOptions): Promise { if ((await this.model).isDisposed()) { return; } if (this.backingUri) { @@ -141,7 +141,7 @@ export class SearchEditorInput extends EditorInput { return { config: this.config, body: await this.model }; } - async saveAs(group: GroupIdentifier, options?: ITextFileSaveOptions): Promise { + async override saveAs(group: GroupIdentifier, options?: ITextFileSaveOptions): Promise { const path = await this.fileDialogService.pickFileToSave(await this.suggestFileName(), options?.availableFileSystems); if (path) { this.telemetryService.publicLog2('searchEditor/saveSearchResults'); @@ -163,7 +163,7 @@ export class SearchEditorInput extends EditorInput { return SearchEditorInput.ID; } - getName(maxLength = 12): string { + override getName(maxLength = 12): string { const trimToMax = (label: string) => (label.length < maxLength ? label : `${label.slice(0, maxLength - 3)}...`); if (this.backingUri) { @@ -183,19 +183,19 @@ export class SearchEditorInput extends EditorInput { this._onDidChangeDirty.fire(); } - isDirty() { + override isDirty() { return this.dirty; } - isReadonly() { + override isReadonly() { return false; } - isUntitled() { + override isUntitled() { return !this.backingUri; } - rename(group: GroupIdentifier, target: URI): IMoveResult | undefined { + override rename(group: GroupIdentifier, target: URI): IMoveResult | undefined { if (this._cachedModel && extname(target) === SEARCH_EDITOR_EXT) { return { editor: this.instantiationService.invokeFunction(getOrMakeSearchEditorInput, { config: this.config, text: this._cachedModel.getValue(), backingUri: target }) @@ -205,12 +205,12 @@ export class SearchEditorInput extends EditorInput { return undefined; } - dispose() { + override dispose() { this.modelService.destroyModel(this.modelUri); super.dispose(); } - matches(other: unknown) { + override matches(other: unknown) { if (this === other) { return true; } if (other instanceof SearchEditorInput) { @@ -233,7 +233,7 @@ export class SearchEditorInput extends EditorInput { ({ range, options: { className: SearchEditorFindMatchClass, stickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges } }))); } - async revert(group: GroupIdentifier, options?: IRevertOptions) { + async override revert(group: GroupIdentifier, options?: IRevertOptions) { if (options?.soft) { this.setDirty(false); return; @@ -250,7 +250,7 @@ export class SearchEditorInput extends EditorInput { this.setDirty(false); } - supportsSplitEditor() { + override supportsSplitEditor() { return false; } diff --git a/src/vs/workbench/contrib/tasks/common/problemCollectors.ts b/src/vs/workbench/contrib/tasks/common/problemCollectors.ts index ae04ea8f3e0..adec04cbbe6 100644 --- a/src/vs/workbench/contrib/tasks/common/problemCollectors.ts +++ b/src/vs/workbench/contrib/tasks/common/problemCollectors.ts @@ -546,7 +546,7 @@ export class WatchingProblemCollector extends AbstractProblemCollector implement } } - public done(): void { + public override done(): void { [...this.applyToByOwner.keys()].forEach(owner => { this.recordResourcesToClean(owner); }); diff --git a/src/vs/workbench/contrib/tasks/common/problemMatcher.ts b/src/vs/workbench/contrib/tasks/common/problemMatcher.ts index 66db97d2fe6..a115b921876 100644 --- a/src/vs/workbench/contrib/tasks/common/problemMatcher.ts +++ b/src/vs/workbench/contrib/tasks/common/problemMatcher.ts @@ -424,7 +424,7 @@ class SingleLineMatcher extends AbstractLineMatcher { return 1; } - public handle(lines: string[], start: number = 0): HandleResult { + public override handle(lines: string[], start: number = 0): HandleResult { Assert.ok(lines.length - start === 1); let data: ProblemData = Object.create(null); if (this.pattern.kind !== undefined) { @@ -441,7 +441,7 @@ class SingleLineMatcher extends AbstractLineMatcher { return { match: null, continue: false }; } - public next(line: string): ProblemMatch | null { + public override next(line: string): ProblemMatch | null { return null; } } @@ -460,7 +460,7 @@ class MultiLineMatcher extends AbstractLineMatcher { return this.patterns.length; } - public handle(lines: string[], start: number = 0): HandleResult { + public override handle(lines: string[], start: number = 0): HandleResult { Assert.ok(lines.length - start === this.patterns.length); this.data = Object.create(null); let data = this.data!; @@ -486,7 +486,7 @@ class MultiLineMatcher extends AbstractLineMatcher { return { match: markerMatch ? markerMatch : null, continue: loop }; } - public next(line: string): ProblemMatch | null { + public override next(line: string): ProblemMatch | null { let pattern = this.patterns[this.patterns.length - 1]; Assert.ok(pattern.loop === true && this.data !== null); let matches = pattern.regexp.exec(line); diff --git a/src/vs/workbench/contrib/tasks/common/tasks.ts b/src/vs/workbench/contrib/tasks/common/tasks.ts index c8ca3c4fa9f..3532f09d686 100644 --- a/src/vs/workbench/contrib/tasks/common/tasks.ts +++ b/src/vs/workbench/contrib/tasks/common/tasks.ts @@ -670,7 +670,7 @@ export class CustomTask extends CommonTask { /** * Indicated the source of the task (e.g. tasks.json or extension) */ - _source: FileBasedTaskSource; + override _source: FileBasedTaskSource; hasDefinedMatchers: boolean; @@ -689,7 +689,7 @@ export class CustomTask extends CommonTask { } } - public clone(): CustomTask { + public override clone(): CustomTask { return new CustomTask(this._id, this._source, this._label, this.type, this.command, this.hasDefinedMatchers, this.runOptions, this.configurationProperties); } @@ -700,7 +700,7 @@ export class CustomTask extends CommonTask { return undefined; } - public getDefinition(useSource: boolean = false): KeyedTaskIdentifier { + public override getDefinition(useSource: boolean = false): KeyedTaskIdentifier { if (useSource && this._source.customizes !== undefined) { return this._source.customizes; } else { @@ -740,7 +740,7 @@ export class CustomTask extends CommonTask { return value instanceof CustomTask; } - public getMapKey(): string { + public override getMapKey(): string { let workspaceFolder = this._source.config.workspaceFolder; return workspaceFolder ? `${workspaceFolder.uri.toString()}|${this._id}|${this.instance}` : `${this._id}|${this.instance}`; } @@ -749,11 +749,11 @@ export class CustomTask extends CommonTask { return this._source.kind === TaskSourceKind.User ? USER_TASKS_GROUP_KEY : this._source.config.workspaceFolder?.uri.toString(); } - public getCommonTaskId(): string { + public override getCommonTaskId(): string { return this._source.customizes ? super.getCommonTaskId() : (this.getRecentlyUsedKey() ?? super.getCommonTaskId()); } - public getRecentlyUsedKey(): string | undefined { + public override getRecentlyUsedKey(): string | undefined { interface CustomKey { type: string; folder: string; @@ -771,15 +771,15 @@ export class CustomTask extends CommonTask { return JSON.stringify(key); } - public getWorkspaceFolder(): IWorkspaceFolder | undefined { + public override getWorkspaceFolder(): IWorkspaceFolder | undefined { return this._source.config.workspaceFolder; } - public getWorkspaceFileName(): string | undefined { + public override getWorkspaceFileName(): string | undefined { return (this._source.config.workspace && this._source.config.workspace.configuration) ? resources.basename(this._source.config.workspace.configuration) : undefined; } - public getTelemetryKind(): string { + public override getTelemetryKind(): string { if (this._source.customizes) { return 'workspace>extension'; } else { @@ -797,7 +797,7 @@ export class ConfiguringTask extends CommonTask { /** * Indicated the source of the task (e.g. tasks.json or extension) */ - _source: FileBasedTaskSource; + override _source: FileBasedTaskSource; configures: KeyedTaskIdentifier; @@ -816,15 +816,15 @@ export class ConfiguringTask extends CommonTask { return object; } - public getDefinition(): KeyedTaskIdentifier { + public override getDefinition(): KeyedTaskIdentifier { return this.configures; } - public getWorkspaceFileName(): string | undefined { + public override getWorkspaceFileName(): string | undefined { return (this._source.config.workspace && this._source.config.workspace.configuration) ? resources.basename(this._source.config.workspace.configuration) : undefined; } - public getWorkspaceFolder(): IWorkspaceFolder | undefined { + public override getWorkspaceFolder(): IWorkspaceFolder | undefined { return this._source.config.workspaceFolder; } @@ -832,7 +832,7 @@ export class ConfiguringTask extends CommonTask { return this._source.kind === TaskSourceKind.User ? USER_TASKS_GROUP_KEY : this._source.config.workspaceFolder?.uri.toString(); } - public getRecentlyUsedKey(): string | undefined { + public override getRecentlyUsedKey(): string | undefined { interface CustomKey { type: string; folder: string; @@ -879,11 +879,11 @@ export class ContributedTask extends CommonTask { this.command = command; } - public clone(): ContributedTask { + public override clone(): ContributedTask { return new ContributedTask(this._id, this._source, this._label, this.type, this.defines, this.command, this.hasDefinedMatchers, this.runOptions, this.configurationProperties); } - public getDefinition(): KeyedTaskIdentifier { + public override getDefinition(): KeyedTaskIdentifier { return this.defines; } @@ -891,7 +891,7 @@ export class ContributedTask extends CommonTask { return value instanceof ContributedTask; } - public getMapKey(): string { + public override getMapKey(): string { let workspaceFolder = this._source.workspaceFolder; return workspaceFolder ? `${this._source.scope.toString()}|${workspaceFolder.uri.toString()}|${this._id}|${this.instance}` @@ -905,7 +905,7 @@ export class ContributedTask extends CommonTask { return undefined; } - public getRecentlyUsedKey(): string | undefined { + public override getRecentlyUsedKey(): string | undefined { interface ContributedKey { type: string; scope: number; @@ -918,11 +918,11 @@ export class ContributedTask extends CommonTask { return JSON.stringify(key); } - public getWorkspaceFolder(): IWorkspaceFolder | undefined { + public override getWorkspaceFolder(): IWorkspaceFolder | undefined { return this._source.workspaceFolder; } - public getTelemetryKind(): string { + public override getTelemetryKind(): string { return 'extension'; } @@ -935,7 +935,7 @@ export class InMemoryTask extends CommonTask { /** * Indicated the source of the task (e.g. tasks.json or extension) */ - _source: InMemoryTaskSource; + override _source: InMemoryTaskSource; instance: number | undefined; @@ -947,7 +947,7 @@ export class InMemoryTask extends CommonTask { this._source = source; } - public clone(): InMemoryTask { + public override clone(): InMemoryTask { return new InMemoryTask(this._id, this._source, this._label, this.type, this.runOptions, this.configurationProperties); } @@ -955,11 +955,11 @@ export class InMemoryTask extends CommonTask { return value instanceof InMemoryTask; } - public getTelemetryKind(): string { + public override getTelemetryKind(): string { return 'composite'; } - public getMapKey(): string { + public override getMapKey(): string { return `${this._id}|${this.instance}`; } diff --git a/src/vs/workbench/contrib/tasks/test/common/configuration.test.ts b/src/vs/workbench/contrib/tasks/test/common/configuration.test.ts index b7fae91924d..5f4ab95416f 100644 --- a/src/vs/workbench/contrib/tasks/test/common/configuration.test.ts +++ b/src/vs/workbench/contrib/tasks/test/common/configuration.test.ts @@ -361,7 +361,7 @@ class PatternBuilder { } class TasksMockContextKeyService extends MockContextKeyService { - public getContext(domNode: HTMLElement): IContext { + public override getContext(domNode: HTMLElement): IContext { return { getValue: (_key: string) => { return true; diff --git a/src/vs/workbench/contrib/terminal/browser/links/terminalLink.ts b/src/vs/workbench/contrib/terminal/browser/links/terminalLink.ts index 19521e14c41..6c382e0e04a 100644 --- a/src/vs/workbench/contrib/terminal/browser/links/terminalLink.ts +++ b/src/vs/workbench/contrib/terminal/browser/links/terminalLink.ts @@ -44,7 +44,7 @@ export class TerminalLink extends DisposableStore implements ILink { }; } - dispose(): void { + override dispose(): void { super.dispose(); this._hoverListeners?.dispose(); this._hoverListeners = undefined; diff --git a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts index dcad36009a6..b6605889c85 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts @@ -100,7 +100,7 @@ export class TerminalLaunchHelpAction extends Action { super('workbench.action.terminal.launchHelp', localize('terminalLaunchHelp', "Open Help")); } - async run(): Promise { + async override run(): Promise { this._openerService.open('https://aka.ms/vscode-troubleshoot-terminal-launch'); } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalFindWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalFindWidget.ts index ce03ffc9857..038c3424f80 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalFindWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalFindWidget.ts @@ -39,7 +39,7 @@ export class TerminalFindWidget extends SimpleFindWidget { } } - public hide() { + public override hide() { super.hide(); const instance = this._terminalService.getActiveInstance(); if (instance) { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index c8a9d2ed03c..6450ad88010 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -808,7 +808,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { this._terminalAltBufferActiveContextKey.set(!!(this._xterm && this._xterm.buffer.active === this._xterm.buffer.alternate)); } - public dispose(immediate?: boolean): void { + public override dispose(immediate?: boolean): void { this._logService.trace(`terminalInstance#dispose (instanceId: ${this.instanceId})`); dispose(this._linkManager); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts index c147aaf12e2..5f1cb27eb9d 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts @@ -148,7 +148,7 @@ export class TerminalProcessManager extends Disposable implements ITerminalProce }); } - public dispose(immediate: boolean = false): void { + public override dispose(immediate: boolean = false): void { this._isDisposed = true; if (this._process) { // If the process was still connected this dispose came from diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts index 35f01ef3bfd..0f089c7c3da 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts @@ -281,7 +281,7 @@ export class TerminalTab extends Disposable implements ITerminalTab { this._onInstancesChanged.fire(); } - public dispose(): void { + public override dispose(): void { super.dispose(); if (this._container && this._tabElement) { this._container.removeChild(this._tabElement); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTypeAheadAddon.ts b/src/vs/workbench/contrib/terminal/browser/terminalTypeAheadAddon.ts index efe2e6fd639..e665a3b6b4a 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTypeAheadAddon.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTypeAheadAddon.ts @@ -516,13 +516,13 @@ class NewlinePrediction implements IPrediction { * prediction, but shells handle it slightly differently. */ class LinewrapPrediction extends NewlinePrediction implements IPrediction { - public apply(_: IBuffer, cursor: Cursor) { + public override apply(_: IBuffer, cursor: Cursor) { this.prevPosition = cursor.coordinate; cursor.move(0, cursor.y + 1); return ' \r'; } - public matches(input: StringReader) { + public override matches(input: StringReader) { // bash and zshell add a space which wraps in the terminal, then a CR const r = input.eatGradually(' \r'); if (r !== MatchResult.Failure) { diff --git a/src/vs/workbench/contrib/terminal/browser/widgets/environmentVariableInfoWidget.ts b/src/vs/workbench/contrib/terminal/browser/widgets/environmentVariableInfoWidget.ts index b13ff32f460..f843f08e0ad 100644 --- a/src/vs/workbench/contrib/terminal/browser/widgets/environmentVariableInfoWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/widgets/environmentVariableInfoWidget.ts @@ -65,7 +65,7 @@ export class EnvironmentVariableInfoWidget extends Widget implements ITerminalWi }); } - dispose() { + override dispose() { super.dispose(); this._domNode?.parentElement?.removeChild(this._domNode); this._mouseMoveListener?.dispose(); diff --git a/src/vs/workbench/contrib/terminal/browser/widgets/terminalHoverWidget.ts b/src/vs/workbench/contrib/terminal/browser/widgets/terminalHoverWidget.ts index fcf02fb583e..dd8904d0df2 100644 --- a/src/vs/workbench/contrib/terminal/browser/widgets/terminalHoverWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/widgets/terminalHoverWidget.ts @@ -35,7 +35,7 @@ export class TerminalHover extends Disposable implements ITerminalWidget { super(); } - dispose() { + override dispose() { super.dispose(); } @@ -117,7 +117,7 @@ class CellHoverTarget extends Widget implements IHoverTarget { container.appendChild(this._domNode); } - dispose(): void { + override dispose(): void { this._domNode?.parentElement?.removeChild(this._domNode); super.dispose(); } diff --git a/src/vs/workbench/contrib/terminal/electron-sandbox/terminalRemote.ts b/src/vs/workbench/contrib/terminal/electron-sandbox/terminalRemote.ts index 030ede3dd1d..3df718ab3ec 100644 --- a/src/vs/workbench/contrib/terminal/electron-sandbox/terminalRemote.ts +++ b/src/vs/workbench/contrib/terminal/electron-sandbox/terminalRemote.ts @@ -29,7 +29,7 @@ export class CreateNewLocalTerminalAction extends Action { super(id, label); } - public run(): Promise { + public override run(): Promise { const instance = this._terminalService.createTerminal({ cwd: this._nativeEnvironmentService.userHome }); if (!instance) { return Promise.resolve(undefined); diff --git a/src/vs/workbench/contrib/testing/browser/explorerProjections/hierarchalByName.ts b/src/vs/workbench/contrib/testing/browser/explorerProjections/hierarchalByName.ts index 4e379d918c5..41a5824a3a5 100644 --- a/src/vs/workbench/contrib/testing/browser/explorerProjections/hierarchalByName.ts +++ b/src/vs/workbench/contrib/testing/browser/explorerProjections/hierarchalByName.ts @@ -34,7 +34,7 @@ export class HierarchicalByNameElement extends HierarchicalElement { public readonly isTestRoot = !this.actualParent; public readonly actualChildren = new Set(); - public get expandable() { + public override get expandable() { return TestItemExpandState.NotExpandable; } @@ -68,7 +68,7 @@ export class HierarchicalByNameElement extends HierarchicalElement { /** * @override */ - public update(patch: ITestItemUpdate) { + public override update(patch: ITestItemUpdate) { super.update(patch); if (patch.item?.runnable !== undefined) { @@ -136,7 +136,7 @@ export class HierarchicalByNameProjection extends HierarchicalByLocationProjecti /** * @override */ - protected createItem(item: InternalTestItem, folder: IWorkspaceFolder): HierarchicalElement { + protected override createItem(item: InternalTestItem, folder: IWorkspaceFolder): HierarchicalElement { const parent = this.getOrCreateFolderElement(folder); const actualParent = item.parent ? this.items.get(item.parent) as HierarchicalByNameElement : undefined; for (const testRoot of parent.children) { @@ -151,7 +151,7 @@ export class HierarchicalByNameProjection extends HierarchicalByLocationProjecti /** * @override */ - protected unstoreItem(item: HierarchicalElement) { + protected override unstoreItem(item: HierarchicalElement) { const treeChildren = super.unstoreItem(item); if (item instanceof HierarchicalByNameElement) { item.remove(); @@ -164,7 +164,7 @@ export class HierarchicalByNameProjection extends HierarchicalByLocationProjecti /** * @override */ - protected getRevealDepth(element: HierarchicalElement) { + protected override getRevealDepth(element: HierarchicalElement) { return element.depth === 1 ? Infinity : undefined; } } diff --git a/src/vs/workbench/contrib/testing/browser/testExplorerActions.ts b/src/vs/workbench/contrib/testing/browser/testExplorerActions.ts index 6fb5b296ee1..d1f066f0e00 100644 --- a/src/vs/workbench/contrib/testing/browser/testExplorerActions.ts +++ b/src/vs/workbench/contrib/testing/browser/testExplorerActions.ts @@ -72,7 +72,7 @@ export class HideOrShowTestAction extends Action { /** * @override */ - public run() { + public override run() { this.testService.setTestExcluded(this.testId); return Promise.resolve(); } @@ -95,7 +95,7 @@ export class DebugAction extends Action { /** * @override */ - public run(): Promise { + public override run(): Promise { return this.testService.runTests({ tests: [...this.tests], debug: true, @@ -120,7 +120,7 @@ export class RunAction extends Action { /** * @override */ - public run(): Promise { + public override run(): Promise { return this.testService.runTests({ tests: [...this.tests], debug: false, @@ -520,7 +520,7 @@ export class EditFocusedTest extends ViewAction { }); } - public async run(accessor: ServicesAccessor, test?: ITestItem, preserveFocus?: boolean) { + public async override run(accessor: ServicesAccessor, test?: ITestItem, preserveFocus?: boolean) { if (test) { await this.runForTest(accessor, test, preserveFocus); } else { diff --git a/src/vs/workbench/contrib/testing/browser/testingDecorations.ts b/src/vs/workbench/contrib/testing/browser/testingDecorations.ts index cd1e0fd3292..5360799a39c 100644 --- a/src/vs/workbench/contrib/testing/browser/testingDecorations.ts +++ b/src/vs/workbench/contrib/testing/browser/testingDecorations.ts @@ -311,7 +311,7 @@ class RunTestDecoration extends Disposable implements ITestDecoration { return true; } - public dispose() { + public override dispose() { // no-op } diff --git a/src/vs/workbench/contrib/testing/browser/testingExplorerFilter.ts b/src/vs/workbench/contrib/testing/browser/testingExplorerFilter.ts index aa31df731aa..04f12a92609 100644 --- a/src/vs/workbench/contrib/testing/browser/testingExplorerFilter.ts +++ b/src/vs/workbench/contrib/testing/browser/testingExplorerFilter.ts @@ -104,7 +104,7 @@ export class TestingExplorerFilter extends BaseActionViewItem { /** * @override */ - public render(container: HTMLElement) { + public override render(container: HTMLElement) { container.classList.add('testing-filter-action-item'); const updateDelayer = this._register(new Delayer(400)); @@ -154,7 +154,7 @@ export class TestingExplorerFilter extends BaseActionViewItem { /** * Focuses the filter input. */ - public focus(): void { + public override focus(): void { this.input.focus(); } @@ -173,7 +173,7 @@ export class TestingExplorerFilter extends BaseActionViewItem { /** * @override */ - public dispose() { + public override dispose() { this.saveState(); super.dispose(); } @@ -209,7 +209,7 @@ class FiltersDropdownMenuActionViewItem extends DropdownMenuActionViewItem { ); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); this.updateChecked(); } @@ -267,7 +267,7 @@ class FiltersDropdownMenuActionViewItem extends DropdownMenuActionViewItem { ]; } - updateChecked(): void { + override updateChecked(): void { this.element!.classList.toggle('checked', this._action.checked); } } diff --git a/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts b/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts index e9e3f202176..542763578e0 100644 --- a/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts +++ b/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts @@ -94,14 +94,14 @@ export class TestingExplorerView extends ViewPane { /** * @override */ - public shouldShowWelcome() { + public override shouldShowWelcome() { return this.testService.providers === 0; } /** * @override */ - protected renderBody(container: HTMLElement): void { + protected override renderBody(container: HTMLElement): void { super.renderBody(container); this.container = dom.append(container, dom.$('.test-explorer')); @@ -145,7 +145,7 @@ export class TestingExplorerView extends ViewPane { /** * @override */ - public getActionViewItem(action: IAction): IActionViewItem | undefined { + public override getActionViewItem(action: IAction): IActionViewItem | undefined { if (action.id === Testing.FilterActionId) { return this.instantiationService.createInstance(TestingExplorerFilter, action); } @@ -156,7 +156,7 @@ export class TestingExplorerView extends ViewPane { /** * @override */ - public saveState() { + public override saveState() { super.saveState(); } @@ -181,7 +181,7 @@ export class TestingExplorerView extends ViewPane { /** * @override */ - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.container.style.height = `${height}px`; this.viewModel.layout(height, width); diff --git a/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts b/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts index e23bd334eb2..4a778721adb 100644 --- a/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts +++ b/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts @@ -329,7 +329,7 @@ abstract class TestingOutputPeek extends PeekViewWidget { /** * @override */ - protected _doLayoutBody(height: number, width: number) { + protected override _doLayoutBody(height: number, width: number) { super._doLayoutBody(height, width); this.dimension = new dom.Dimension(width, height); } @@ -415,7 +415,7 @@ class TestingDiffOutputPeek extends TestingOutputPeek { /** * @override */ - protected _doLayoutBody(height: number, width: number) { + protected override _doLayoutBody(height: number, width: number) { super._doLayoutBody(height, width); this.diff.value?.layout(this.dimension); } @@ -468,7 +468,7 @@ class TestingMessageOutputPeek extends TestingOutputPeek { /** * @override */ - protected _doLayoutBody(height: number, width: number) { + protected override _doLayoutBody(height: number, width: number) { super._doLayoutBody(height, width); this.preview.value?.layout(this.dimension); } @@ -490,7 +490,7 @@ class SimpleDiffEditorModel extends EditorModel { super(); } - public dispose() { + public override dispose() { super.dispose(); this._original.dispose(); this._modified.dispose(); diff --git a/src/vs/workbench/contrib/testing/browser/testingViewPaneContainer.ts b/src/vs/workbench/contrib/testing/browser/testingViewPaneContainer.ts index 974f93ba539..783093f9f78 100644 --- a/src/vs/workbench/contrib/testing/browser/testingViewPaneContainer.ts +++ b/src/vs/workbench/contrib/testing/browser/testingViewPaneContainer.ts @@ -34,16 +34,16 @@ export class TestingViewPaneContainer extends ViewPaneContainer { super(Testing.ViewletId, { mergeViewWithContainerWhenSingleView: true }, instantiationService, configurationService, layoutService, contextMenuService, telemetryService, extensionService, themeService, storageService, contextService, viewDescriptorService); } - create(parent: HTMLElement): void { + override create(parent: HTMLElement): void { super.create(parent); parent.classList.add('testing-view-pane'); } - getOptimalWidth(): number { + override getOptimalWidth(): number { return 400; } - getTitle(): string { + override getTitle(): string { return localize('testing', "Testing"); } } diff --git a/src/vs/workbench/contrib/testing/common/testServiceImpl.ts b/src/vs/workbench/contrib/testing/common/testServiceImpl.ts index 069e5efc788..d9aed4e08a7 100644 --- a/src/vs/workbench/contrib/testing/common/testServiceImpl.ts +++ b/src/vs/workbench/contrib/testing/common/testServiceImpl.ts @@ -456,7 +456,7 @@ export class MainThreadTestCollection extends AbstractIncrementalTestCollection< /** * Applies the diff to the collection. */ - public apply(diff: TestsDiff) { + public override apply(diff: TestsDiff) { let prevBusy = this.busyProviderCount; let prevPendingRoots = this.pendingRootCount; super.apply(diff); @@ -495,7 +495,7 @@ export class MainThreadTestCollection extends AbstractIncrementalTestCollection< /** * @override */ - protected retireTest(testId: string) { + protected override retireTest(testId: string) { this.retireTestEmitter.fire(testId); } diff --git a/src/vs/workbench/contrib/testing/common/testStubs.ts b/src/vs/workbench/contrib/testing/common/testStubs.ts index 1e4af97bf6a..5c0e5241df6 100644 --- a/src/vs/workbench/contrib/testing/common/testStubs.ts +++ b/src/vs/workbench/contrib/testing/common/testStubs.ts @@ -14,7 +14,7 @@ export class StubTestItem extends TestItem { super(id, label, URI.file('/'), pendingChildren.length > 0); } - public discoverChildren(progress: IProgress<{ busy: boolean }>) { + public override discoverChildren(progress: IProgress<{ busy: boolean }>) { for (const child of this.pendingChildren) { this.children.add(child); } diff --git a/src/vs/workbench/contrib/testing/test/common/ownedTestCollection.ts b/src/vs/workbench/contrib/testing/test/common/ownedTestCollection.ts index 87b248eab5e..8ac8a8d22ce 100644 --- a/src/vs/workbench/contrib/testing/test/common/ownedTestCollection.ts +++ b/src/vs/workbench/contrib/testing/test/common/ownedTestCollection.ts @@ -28,7 +28,7 @@ export class TestOwnedTestCollection extends OwnedTestCollection { return Iterable.first(this.testIdsToInternal.values())!; } - public createForHierarchy(publishDiff: (diff: TestsDiff) => void = () => undefined) { + public override createForHierarchy(publishDiff: (diff: TestsDiff) => void = () => undefined) { return new TestSingleUseCollection(this.createIdMap(0), publishDiff); } } diff --git a/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts b/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts index 7372f4dc969..061261b83e2 100644 --- a/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts +++ b/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts @@ -136,7 +136,7 @@ suite('Workbench - Test Results Service', () => { let results: TestResultService; class TestTestResultService extends TestResultService { - persistScheduler = { schedule: () => this.persistImmediately() } as any; + override persistScheduler = { schedule: () => this.persistImmediately() } as any; } setup(() => { diff --git a/src/vs/workbench/contrib/themes/browser/themes.contribution.ts b/src/vs/workbench/contrib/themes/browser/themes.contribution.ts index 9c00aae3317..5ce51eb1821 100644 --- a/src/vs/workbench/contrib/themes/browser/themes.contribution.ts +++ b/src/vs/workbench/contrib/themes/browser/themes.contribution.ts @@ -39,7 +39,7 @@ export class SelectColorThemeAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { return this.themeService.getColorThemes().then(themes => { const currentTheme = this.themeService.getColorTheme(); @@ -203,7 +203,7 @@ class SelectFileIconThemeAction extends AbstractIconThemeAction { return this.themeService.setFileIconTheme(id, settingsTarget); } - async run(): Promise { + async override run(): Promise { this.pick(await this.themeService.getFileIconThemes(), this.themeService.getFileIconTheme()); } } @@ -234,7 +234,7 @@ class SelectProductIconThemeAction extends AbstractIconThemeAction { return this.themeService.setProductIconTheme(id, settingsTarget); } - async run(): Promise { + async override run(): Promise { this.pick(await this.themeService.getProductIconThemes(), this.themeService.getProductIconTheme()); } } @@ -298,7 +298,7 @@ class GenerateColorThemeAction extends Action { super(id, label); } - run(): Promise { + override run(): Promise { let theme = this.themeService.getColorTheme(); let colors = Registry.as(ColorRegistryExtensions.ColorContribution).getColors(); let colorIds = colors.map(c => c.id).sort(); diff --git a/src/vs/workbench/contrib/timeline/browser/timelinePane.ts b/src/vs/workbench/contrib/timeline/browser/timelinePane.ts index 4b0994af970..a7050bd2aa6 100644 --- a/src/vs/workbench/contrib/timeline/browser/timelinePane.ts +++ b/src/vs/workbench/contrib/timeline/browser/timelinePane.ts @@ -797,12 +797,12 @@ export class TimelinePane extends ViewPane { this.refresh(); } - focus(): void { + override focus(): void { super.focus(); this.tree.domFocus(); } - setExpanded(expanded: boolean): boolean { + override setExpanded(expanded: boolean): boolean { const changed = super.setExpanded(expanded); if (changed && this.isBodyVisible()) { @@ -816,7 +816,7 @@ export class TimelinePane extends ViewPane { return changed; } - setVisible(visible: boolean): void { + override setVisible(visible: boolean): void { if (visible) { this.visibilityDisposables = new DisposableStore(); @@ -834,18 +834,18 @@ export class TimelinePane extends ViewPane { } } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.tree.layout(height, width); } - protected renderHeaderTitle(container: HTMLElement): void { + protected override renderHeaderTitle(container: HTMLElement): void { super.renderHeaderTitle(container, this.title); container.classList.add('timeline-view'); } - protected renderBody(container: HTMLElement): void { + protected override renderBody(container: HTMLElement): void { super.renderBody(container); this.$container = container; @@ -1051,7 +1051,7 @@ export class TimelineIdentityProvider implements IIdentityProvider class TimelineActionRunner extends ActionRunner { - runAction(action: IAction, { uri, item }: TimelineActionContext): Promise { + override runAction(action: IAction, { uri, item }: TimelineActionContext): Promise { if (!isTimelineItem(item)) { // TODO@eamodio do we need to do anything else? return action.run(); diff --git a/src/vs/workbench/contrib/update/browser/update.ts b/src/vs/workbench/contrib/update/browser/update.ts index 2315cdb25b0..e32f8e2a9ca 100644 --- a/src/vs/workbench/contrib/update/browser/update.ts +++ b/src/vs/workbench/contrib/update/browser/update.ts @@ -54,7 +54,7 @@ export class OpenLatestReleaseNotesInBrowserAction extends Action { super('update.openLatestReleaseNotes', nls.localize('releaseNotes', "Release Notes"), undefined, true); } - async run(): Promise { + async override run(): Promise { if (this.productService.releaseNotesUrl) { const uri = URI.parse(this.productService.releaseNotesUrl); await this.openerService.open(uri); @@ -75,7 +75,7 @@ export abstract class AbstractShowReleaseNotesAction extends Action { super(id, label, undefined, true); } - async run(): Promise { + async override run(): Promise { if (!this.enabled) { return; } @@ -636,7 +636,7 @@ export class CheckForVSCodeUpdateAction extends Action { super(id, label, undefined, true); } - run(): Promise { + override run(): Promise { return this.updateService.checkForUpdates(this.environmentService.sessionId); } } diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts index 2a8095c0e9b..9e443a31a49 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts @@ -1333,7 +1333,7 @@ class AcceptChangesContribution extends Disposable implements IEditorContributio this.acceptChangesButton = undefined; } - dispose(): void { + override dispose(): void { this.disposeAcceptChangesWidgetRenderer(); super.dispose(); } diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataSyncMergesView.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataSyncMergesView.ts index cbfc048962f..cb0c35e2c0d 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataSyncMergesView.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataSyncMergesView.ts @@ -77,7 +77,7 @@ export class UserDataSyncMergesViewPane extends TreeViewPane { this.registerActions(); } - protected renderTreeView(container: HTMLElement): void { + protected override renderTreeView(container: HTMLElement): void { super.renderTreeView(DOM.append(container, DOM.$(''))); this.createButtons(container); @@ -101,7 +101,7 @@ export class UserDataSyncMergesViewPane extends TreeViewPane { this._register(this.cancelButton.onDidClick(() => this.cancel())); } - protected layoutTreeView(height: number, width: number): void { + protected override layoutTreeView(height: number, width: number): void { const buttonContainerHeight = 78; this.buttonsContainer.style.height = `${buttonContainerHeight}px`; this.buttonsContainer.style.width = `${width}px`; @@ -499,7 +499,7 @@ class AcceptChangesContribution extends Disposable implements IEditorContributio this.acceptChangesButton = undefined; } - dispose(): void { + override dispose(): void { this.disposeAcceptChangesWidgetRenderer(); super.dispose(); } diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataSyncViews.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataSyncViews.ts index d66cdd4382a..1f00fd95200 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataSyncViews.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataSyncViews.ts @@ -339,7 +339,7 @@ class RemoteUserDataSyncActivityViewDataProvider extends UserDataSyncActivityVie super(userDataSyncService, userDataAutoSyncService, userDataSyncWorkbenchService, notificationService); } - async getChildren(element?: ITreeItem): Promise { + async override getChildren(element?: ITreeItem): Promise { if (!element) { this.machinesPromise = undefined; } @@ -357,7 +357,7 @@ class RemoteUserDataSyncActivityViewDataProvider extends UserDataSyncActivityVie return this.userDataSyncService.getRemoteSyncResourceHandles(syncResource); } - protected async getChildrenForSyncResourceTreeItem(element: SyncResourceHandleTreeItem): Promise { + protected async override getChildrenForSyncResourceTreeItem(element: SyncResourceHandleTreeItem): Promise { const children = await super.getChildrenForSyncResourceTreeItem(element); if (children.length) { const machineId = await this.userDataSyncService.getMachineId(element.syncResourceHandle.syncResource, element.syncResourceHandle); diff --git a/src/vs/workbench/contrib/webview/browser/dynamicWebviewEditorOverlay.ts b/src/vs/workbench/contrib/webview/browser/dynamicWebviewEditorOverlay.ts index 1a9d6c2f159..80cfb3a5851 100644 --- a/src/vs/workbench/contrib/webview/browser/dynamicWebviewEditorOverlay.ts +++ b/src/vs/workbench/contrib/webview/browser/dynamicWebviewEditorOverlay.ts @@ -65,7 +65,7 @@ export class DynamicWebviewEditorOverlay extends Disposable implements WebviewOv private readonly _onDidDispose = this._register(new Emitter()); public onDidDispose = this._onDidDispose.event; - dispose() { + override dispose() { this._isDisposed = true; this.container.remove(); this._onDidDispose.fire(); diff --git a/src/vs/workbench/contrib/webview/browser/webviewFindWidget.ts b/src/vs/workbench/contrib/webview/browser/webviewFindWidget.ts index ed69cb1a7f5..109d1e547ce 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewFindWidget.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewFindWidget.ts @@ -40,7 +40,7 @@ export class WebviewFindWidget extends SimpleFindWidget { } } - public hide() { + public override hide() { super.hide(); this._delegate.stopFind(true); this._delegate.focus(); diff --git a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts index 0db327e9c51..b31051b134b 100644 --- a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts @@ -357,19 +357,19 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme this.element?.paste(); } - public cut() { + public override cut() { this.element?.cut(); } - public undo() { + public override undo() { this.element?.undo(); } - public redo() { + public override redo() { this.element?.redo(); } - protected on(channel: WebviewMessageChannels | string, handler: (data: T) => void): IDisposable { + protected override on(channel: WebviewMessageChannels | string, handler: (data: T) => void): IDisposable { if (!this.element) { throw new Error('Cannot add event listener. No webview element found.'); } diff --git a/src/vs/workbench/contrib/webview/electron-browser/webviewService.ts b/src/vs/workbench/contrib/webview/electron-browser/webviewService.ts index 70202f572c2..0c47969aa80 100644 --- a/src/vs/workbench/contrib/webview/electron-browser/webviewService.ts +++ b/src/vs/workbench/contrib/webview/electron-browser/webviewService.ts @@ -21,7 +21,7 @@ export class ElectronWebviewService extends WebviewService { super(instantiationService); } - createWebviewElement( + override createWebviewElement( id: string, options: WebviewOptions, contentOptions: WebviewContentOptions, @@ -33,7 +33,7 @@ export class ElectronWebviewService extends WebviewService { return webview; } - createWebviewOverlay( + override createWebviewOverlay( id: string, options: WebviewOptions, contentOptions: WebviewContentOptions, diff --git a/src/vs/workbench/contrib/webview/electron-sandbox/iframeWebviewElement.ts b/src/vs/workbench/contrib/webview/electron-sandbox/iframeWebviewElement.ts index 3749c997f97..3ed06082141 100644 --- a/src/vs/workbench/contrib/webview/electron-sandbox/iframeWebviewElement.ts +++ b/src/vs/workbench/contrib/webview/electron-sandbox/iframeWebviewElement.ts @@ -79,7 +79,7 @@ export class ElectronIframeWebview extends IFrameWebview { return `https://${this.id}.vscode-webview-test.com`; } - protected get extraContentOptions() { + protected override get extraContentOptions() { return { endpoint: this.webviewContentEndpoint, }; diff --git a/src/vs/workbench/contrib/webviewPanel/browser/webviewEditor.ts b/src/vs/workbench/contrib/webviewPanel/browser/webviewEditor.ts index f4b7e44cd68..e49039b7a21 100644 --- a/src/vs/workbench/contrib/webviewPanel/browser/webviewEditor.ts +++ b/src/vs/workbench/contrib/webviewPanel/browser/webviewEditor.ts @@ -37,7 +37,7 @@ export class WebviewEditor extends EditorPane { private readonly _onFocusWindowHandler = this._register(new MutableDisposable()); private readonly _onDidFocusWebview = this._register(new Emitter()); - public get onDidFocus(): Event { return this._onDidFocusWebview.event; } + public override get onDidFocus(): Event { return this._onDidFocusWebview.event; } private readonly _scopedContextKeyService = this._register(new MutableDisposable()); @@ -58,7 +58,7 @@ export class WebviewEditor extends EditorPane { return this.input instanceof WebviewInput ? this.input.webview : undefined; } - get scopedContextKeyService(): IContextKeyService | undefined { + override get scopedContextKeyService(): IContextKeyService | undefined { return this._scopedContextKeyService.value; } @@ -71,7 +71,7 @@ export class WebviewEditor extends EditorPane { this._scopedContextKeyService.value = this._contextKeyService.createScoped(element); } - public dispose(): void { + public override dispose(): void { this._isDisposed = true; this._element?.remove(); @@ -87,7 +87,7 @@ export class WebviewEditor extends EditorPane { } } - public focus(): void { + public override focus(): void { super.focus(); if (!this._onFocusWindowHandler.value && !isWeb) { // Make sure we restore focus when switching back to a VS Code window @@ -100,7 +100,7 @@ export class WebviewEditor extends EditorPane { this.webview?.focus(); } - protected setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { + protected override setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { this._visible = visible; if (this.input instanceof WebviewInput && this.webview) { if (visible) { @@ -112,7 +112,7 @@ export class WebviewEditor extends EditorPane { super.setEditorVisible(visible, group); } - public clearInput() { + public override clearInput() { if (this.webview) { this.webview.release(this); this._webviewVisibleDisposables.clear(); @@ -121,7 +121,7 @@ export class WebviewEditor extends EditorPane { super.clearInput(); } - public async setInput(input: EditorInput, options: EditorOptions, context: IEditorOpenContext, token: CancellationToken): Promise { + public async override setInput(input: EditorInput, options: EditorOptions, context: IEditorOpenContext, token: CancellationToken): Promise { if (input.matches(this.input)) { return; } diff --git a/src/vs/workbench/contrib/webviewPanel/browser/webviewEditorInput.ts b/src/vs/workbench/contrib/webviewPanel/browser/webviewEditorInput.ts index ff6904c3134..1a1754029f8 100644 --- a/src/vs/workbench/contrib/webviewPanel/browser/webviewEditorInput.ts +++ b/src/vs/workbench/contrib/webviewPanel/browser/webviewEditorInput.ts @@ -40,7 +40,7 @@ export class WebviewInput extends EditorInput { this._webview = webview; } - dispose() { + override dispose() { if (!this.isDisposed()) { if (!this._hasTransfered) { this._webview?.dispose(); @@ -53,15 +53,15 @@ export class WebviewInput extends EditorInput { return WebviewInput.typeId; } - public getName(): string { + public override getName(): string { return this._name; } - public getTitle(_verbosity?: Verbosity): string { + public override getTitle(_verbosity?: Verbosity): string { return this.getName(); } - public getDescription(): string | undefined { + public override getDescription(): string | undefined { return undefined; } @@ -87,7 +87,7 @@ export class WebviewInput extends EditorInput { this._iconManager.setIcons(this.id, value); } - public matches(other: IEditorInput): boolean { + public override matches(other: IEditorInput): boolean { return other === this; } @@ -99,7 +99,7 @@ export class WebviewInput extends EditorInput { this._group = group; } - public supportsSplitEditor() { + public override supportsSplitEditor() { return false; } diff --git a/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts b/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts index 1ff457bf6ee..5ba2cc8e5cf 100644 --- a/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts +++ b/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts @@ -107,14 +107,14 @@ export class LazilyResolvedWebviewEditorInput extends WebviewInput { super(id, viewType, name, webview, _webviewWorkbenchService.iconManager); } - dispose() { + override dispose() { super.dispose(); this.#resolvePromise?.cancel(); this.#resolvePromise = undefined; } @memoize - public async resolve() { + public async override resolve() { if (!this.#resolved) { this.#resolved = true; this.#resolvePromise = this._webviewWorkbenchService.resolveWebview(this); @@ -129,7 +129,7 @@ export class LazilyResolvedWebviewEditorInput extends WebviewInput { return super.resolve(); } - protected transfer(other: LazilyResolvedWebviewEditorInput): WebviewInput | undefined { + protected override transfer(other: LazilyResolvedWebviewEditorInput): WebviewInput | undefined { if (!super.transfer(other)) { return; } diff --git a/src/vs/workbench/contrib/webviewView/browser/webviewViewPane.ts b/src/vs/workbench/contrib/webviewView/browser/webviewViewPane.ts index eed36d2b0a9..f1291d26032 100644 --- a/src/vs/workbench/contrib/webviewView/browser/webviewViewPane.ts +++ b/src/vs/workbench/contrib/webviewView/browser/webviewViewPane.ts @@ -91,18 +91,18 @@ export class WebviewViewPane extends ViewPane { private readonly _onDispose = this._register(new Emitter()); readonly onDispose = this._onDispose.event; - dispose() { + override dispose() { this._onDispose.fire(); super.dispose(); } - focus(): void { + override focus(): void { super.focus(); this._webview.value?.focus(); } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this._container = container; @@ -123,7 +123,7 @@ export class WebviewViewPane extends ViewPane { } } - public saveState() { + public override saveState() { if (this._webview.value) { this.viewState[storageKeys.webviewState] = this._webview.value.state; } @@ -132,7 +132,7 @@ export class WebviewViewPane extends ViewPane { super.saveState(); } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); if (!this._webview.value) { @@ -210,7 +210,7 @@ export class WebviewViewPane extends ViewPane { } } - protected updateTitle(value: string | undefined) { + protected override updateTitle(value: string | undefined) { this.setTitle = value; super.updateTitle(typeof value === 'string' ? value : this.defaultTitle); } diff --git a/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.ts b/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.ts index 80aa88662c9..c683be4742a 100644 --- a/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.ts +++ b/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.ts @@ -175,7 +175,7 @@ export class GettingStartedPage extends EditorPane { this.recentlyOpened = workspacesService.getRecentlyOpened(); } - async setInput(newInput: GettingStartedInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken) { + async override setInput(newInput: GettingStartedInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken) { this.container.classList.remove('animationReady'); this.editorInput = newInput; await super.setInput(newInput, options, context, token); diff --git a/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedInput.ts b/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedInput.ts index 2bd489a8832..c36bc2eec0d 100644 --- a/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedInput.ts +++ b/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedInput.ts @@ -22,7 +22,7 @@ export class GettingStartedInput extends EditorInput { return GettingStartedInput.ID; } - matches(other: unknown) { + override matches(other: unknown) { if (other instanceof GettingStartedInput) { return other.selectedCategory === this.selectedCategory; } @@ -37,7 +37,7 @@ export class GettingStartedInput extends EditorInput { this.selectedTask = options.selectedTask; } - getName() { + override getName() { return localize('gettingStarted', "Getting Started"); } diff --git a/src/vs/workbench/contrib/welcome/overlay/browser/welcomeOverlay.ts b/src/vs/workbench/contrib/welcome/overlay/browser/welcomeOverlay.ts index 301cd634ae0..671530ca3eb 100644 --- a/src/vs/workbench/contrib/welcome/overlay/browser/welcomeOverlay.ts +++ b/src/vs/workbench/contrib/welcome/overlay/browser/welcomeOverlay.ts @@ -122,7 +122,7 @@ export class WelcomeOverlayAction extends Action { super(id, label); } - public run(): Promise { + public override run(): Promise { if (!welcomeOverlay) { welcomeOverlay = this.instantiationService.createInstance(WelcomeOverlay); } @@ -143,7 +143,7 @@ export class HideWelcomeOverlayAction extends Action { super(id, label); } - public run(): Promise { + public override run(): Promise { if (welcomeOverlay) { welcomeOverlay.hide(); } diff --git a/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts b/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts index cac9823f7e2..9d80508fcb3 100644 --- a/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts +++ b/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts @@ -269,7 +269,7 @@ export class WelcomePageAction extends Action { super(id, label); } - public run(): Promise { + public override run(): Promise { return this.instantiationService.createInstance(WelcomePage) .openEditor() .then(() => undefined); diff --git a/src/vs/workbench/contrib/welcome/walkThrough/browser/editor/editorWalkThrough.ts b/src/vs/workbench/contrib/welcome/walkThrough/browser/editor/editorWalkThrough.ts index c77c5bf9491..4c055d9f81e 100644 --- a/src/vs/workbench/contrib/welcome/walkThrough/browser/editor/editorWalkThrough.ts +++ b/src/vs/workbench/contrib/welcome/walkThrough/browser/editor/editorWalkThrough.ts @@ -39,7 +39,7 @@ export class EditorWalkThroughAction extends Action { super(id, label); } - public run(): Promise { + public override run(): Promise { const input = this.instantiationService.createInstance(WalkThroughInput, inputOptions); return this.editorService.openEditor(input, { pinned: true, override: EditorOverride.DISABLED }) .then(() => void (0)); diff --git a/src/vs/workbench/contrib/welcome/walkThrough/browser/walkThroughInput.ts b/src/vs/workbench/contrib/welcome/walkThrough/browser/walkThroughInput.ts index 09d5c3df118..2c6a4a59804 100644 --- a/src/vs/workbench/contrib/welcome/walkThrough/browser/walkThroughInput.ts +++ b/src/vs/workbench/contrib/welcome/walkThrough/browser/walkThroughInput.ts @@ -30,7 +30,7 @@ export class WalkThroughModel extends EditorModel { return this.snippetRefs.map(snippet => snippet.object); } - dispose() { + override dispose() { this.snippetRefs.forEach(ref => ref.dispose()); super.dispose(); } @@ -66,11 +66,11 @@ export class WalkThroughInput extends EditorInput { return this.options.typeId; } - getName(): string { + override getName(): string { return this.options.name; } - getDescription(): string { + override getDescription(): string { return this.options.description || ''; } @@ -78,7 +78,7 @@ export class WalkThroughInput extends EditorInput { return this.options.telemetryFrom; } - getTelemetryDescriptor(): { [key: string]: unknown; } { + override getTelemetryDescriptor(): { [key: string]: unknown; } { const descriptor = super.getTelemetryDescriptor(); descriptor['target'] = this.getTelemetryFrom(); /* __GDPR__FRAGMENT__ @@ -97,7 +97,7 @@ export class WalkThroughInput extends EditorInput { return this.options.layout; } - resolve(): Promise { + override resolve(): Promise { if (!this.promise) { this.promise = requireToContent(this.options.resource) .then(content => { @@ -124,7 +124,7 @@ export class WalkThroughInput extends EditorInput { return this.promise; } - matches(otherInput: unknown): boolean { + override matches(otherInput: unknown): boolean { if (super.matches(otherInput) === true) { return true; } @@ -139,7 +139,7 @@ export class WalkThroughInput extends EditorInput { return false; } - dispose(): void { + override dispose(): void { if (this.promise) { this.promise.then(model => model.dispose()); this.promise = null; diff --git a/src/vs/workbench/contrib/welcome/walkThrough/browser/walkThroughPart.ts b/src/vs/workbench/contrib/welcome/walkThrough/browser/walkThroughPart.ts index 5dc0c290601..e6bdd4688c8 100644 --- a/src/vs/workbench/contrib/welcome/walkThrough/browser/walkThroughPart.ts +++ b/src/vs/workbench/contrib/welcome/walkThrough/browser/walkThroughPart.ts @@ -226,7 +226,7 @@ export class WalkThroughPart extends EditorPane { } } - focus(): void { + override focus(): void { let active = document.activeElement; while (active && active !== this.content) { active = active.parentElement; @@ -267,7 +267,7 @@ export class WalkThroughPart extends EditorPane { this.scrollbar.setScrollPosition({ scrollTop: scrollPosition.scrollTop + scrollDimensions.height }); } - setInput(input: WalkThroughInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + override setInput(input: WalkThroughInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { if (this.input instanceof WalkThroughInput) { this.saveTextEditorViewState(this.input); } @@ -499,7 +499,7 @@ export class WalkThroughPart extends EditorPane { } } - public clearInput(): void { + public override clearInput(): void { if (this.input instanceof WalkThroughInput) { this.saveTextEditorViewState(this.input); } @@ -507,7 +507,7 @@ export class WalkThroughPart extends EditorPane { super.clearInput(); } - protected saveState(): void { + protected override saveState(): void { if (this.input instanceof WalkThroughInput) { this.saveTextEditorViewState(this.input); } @@ -515,7 +515,7 @@ export class WalkThroughPart extends EditorPane { super.saveState(); } - dispose(): void { + override dispose(): void { this.editorFocus.reset(); this.contentDisposables = dispose(this.contentDisposables); this.disposables.dispose(); diff --git a/src/vs/workbench/contrib/workspace/browser/workspaceTrustEditor.ts b/src/vs/workbench/contrib/workspace/browser/workspaceTrustEditor.ts index 2cf9305c386..312cb21d935 100644 --- a/src/vs/workbench/contrib/workspace/browser/workspaceTrustEditor.ts +++ b/src/vs/workbench/contrib/workspace/browser/workspaceTrustEditor.ts @@ -51,7 +51,7 @@ const trustedIcon = registerCodicon('workspace-trusted-icon', Codicon.workspaceT const unspecified = registerCodicon('workspace-unspecified-icon', Codicon.workspaceUnspecified); class WorkspaceTrustExtensionDelegate extends Delegate { - getHeight() { return super.getHeight() + 36; } + override getHeight() { return super.getHeight() + 36; } } export class WorkspaceTrustEditor extends EditorPane { @@ -114,7 +114,7 @@ export class WorkspaceTrustEditor extends EditorPane { })); } - async setInput(input: WorkspaceTrustEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + async override setInput(input: WorkspaceTrustEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { await super.setInput(input, options, context, token); if (token.isCancellationRequested) { return; } diff --git a/src/vs/workbench/contrib/workspace/browser/workspaceTrustTree.ts b/src/vs/workbench/contrib/workspace/browser/workspaceTrustTree.ts index 8856bc28795..71e235f4f82 100644 --- a/src/vs/workbench/contrib/workspace/browser/workspaceTrustTree.ts +++ b/src/vs/workbench/contrib/workspace/browser/workspaceTrustTree.ts @@ -109,7 +109,7 @@ class WorkspaceTrustFolderSettingWidget extends AbstractListSettingWidget>, options: IObjectTreeOptions): ITreeModel { + protected override createModel(user: string, view: IList>, options: IObjectTreeOptions): ITreeModel { return new NonCollapsibleObjectTreeModel(user, view, options); } } diff --git a/src/vs/workbench/electron-sandbox/actions/windowActions.ts b/src/vs/workbench/electron-sandbox/actions/windowActions.ts index c6567c33e06..afed7f3eb0f 100644 --- a/src/vs/workbench/electron-sandbox/actions/windowActions.ts +++ b/src/vs/workbench/electron-sandbox/actions/windowActions.ts @@ -35,7 +35,7 @@ export class CloseCurrentWindowAction extends Action { super(id, label); } - async run(): Promise { + async override run(): Promise { this.nativeHostService.closeWindow(); } } @@ -81,7 +81,7 @@ export class ZoomInAction extends BaseZoomAction { super(id, label, configurationService); } - async run(): Promise { + async override run(): Promise { this.setConfiguredZoomLevel(getZoomLevel() + 1); } } @@ -99,7 +99,7 @@ export class ZoomOutAction extends BaseZoomAction { super(id, label, configurationService); } - async run(): Promise { + async override run(): Promise { this.setConfiguredZoomLevel(getZoomLevel() - 1); } } @@ -117,7 +117,7 @@ export class ZoomResetAction extends BaseZoomAction { super(id, label, configurationService); } - async run(): Promise { + async override run(): Promise { this.setConfiguredZoomLevel(0); } } @@ -149,7 +149,7 @@ export abstract class BaseSwitchWindow extends Action { protected abstract isQuickNavigate(): boolean; - async run(): Promise { + async override run(): Promise { const currentWindowId = this.nativeHostService.windowId; const windows = await this.nativeHostService.getWindows(); diff --git a/src/vs/workbench/electron-sandbox/parts/titlebar/titlebarPart.ts b/src/vs/workbench/electron-sandbox/parts/titlebar/titlebarPart.ts index e6caf086a14..0ae18af065f 100644 --- a/src/vs/workbench/electron-sandbox/parts/titlebar/titlebarPart.ts +++ b/src/vs/workbench/electron-sandbox/parts/titlebar/titlebarPart.ts @@ -41,8 +41,8 @@ export class TitlebarPart extends BrowserTitleBarPart { return 22; } - get minimumHeight(): number { return isMacintosh ? this.getMacTitlebarSize() / getZoomFactor() : super.minimumHeight; } - get maximumHeight(): number { return this.minimumHeight; } + override get minimumHeight(): number { return isMacintosh ? this.getMacTitlebarSize() / getZoomFactor() : super.minimumHeight; } + override get maximumHeight(): number { return this.minimumHeight; } constructor( @IContextMenuService contextMenuService: IContextMenuService, @@ -105,7 +105,7 @@ export class TitlebarPart extends BrowserTitleBarPart { } } - protected onMenubarVisibilityChanged(visible: boolean): void { + protected override onMenubarVisibilityChanged(visible: boolean): void { // Hide title when toggling menu bar if ((isWindows || isLinux) && this.currentMenubarVisibility === 'toggle' && visible) { // Hack to fix issue #52522 with layered webkit-app-region elements appearing under cursor @@ -118,7 +118,7 @@ export class TitlebarPart extends BrowserTitleBarPart { super.onMenubarVisibilityChanged(visible); } - protected onConfigurationChanged(event: IConfigurationChangeEvent): void { + protected override onConfigurationChanged(event: IConfigurationChangeEvent): void { super.onConfigurationChanged(event); if (event.affectsConfiguration('window.doubleClickIconToClose')) { @@ -128,7 +128,7 @@ export class TitlebarPart extends BrowserTitleBarPart { } } - protected adjustTitleMarginToCenter(): void { + protected override adjustTitleMarginToCenter(): void { if (this.customMenubar && this.menubar) { const leftMarker = (this.appIcon ? this.appIcon.clientWidth : 0) + this.menubar.clientWidth + 10; const rightMarker = this.element.clientWidth - (this.windowControls ? this.windowControls.clientWidth : 0) - 10; @@ -150,7 +150,7 @@ export class TitlebarPart extends BrowserTitleBarPart { this.title.style.maxWidth = `calc(100vw - ${2 * ((this.windowControls?.clientWidth || 70) + 10)}px)`; } - protected installMenubar(): void { + protected override installMenubar(): void { super.installMenubar(); if (this.menubar) { @@ -162,7 +162,7 @@ export class TitlebarPart extends BrowserTitleBarPart { } } - createContentArea(parent: HTMLElement): HTMLElement { + override createContentArea(parent: HTMLElement): HTMLElement { const ret = super.createContentArea(parent); // Native menu controller @@ -219,7 +219,7 @@ export class TitlebarPart extends BrowserTitleBarPart { return ret; } - updateLayout(dimension: Dimension): void { + override updateLayout(dimension: Dimension): void { this.lastLayoutDimensions = dimension; if (getTitleBarStyle(this.configurationService) === 'custom') { diff --git a/src/vs/workbench/services/accessibility/electron-sandbox/accessibilityService.ts b/src/vs/workbench/services/accessibility/electron-sandbox/accessibilityService.ts index cdf58500913..236f9c238bf 100644 --- a/src/vs/workbench/services/accessibility/electron-sandbox/accessibilityService.ts +++ b/src/vs/workbench/services/accessibility/electron-sandbox/accessibilityService.ts @@ -42,7 +42,7 @@ export class NativeAccessibilityService extends AccessibilityService implements this.setAccessibilitySupport(environmentService.configuration.accessibilitySupport ? AccessibilitySupport.Enabled : AccessibilitySupport.Disabled); } - async alwaysUnderlineAccessKeys(): Promise { + async override alwaysUnderlineAccessKeys(): Promise { if (!isWindows) { return false; } @@ -55,7 +55,7 @@ export class NativeAccessibilityService extends AccessibilityService implements return this.shouldAlwaysUnderlineAccessKeys; } - setAccessibilitySupport(accessibilitySupport: AccessibilitySupport): void { + override setAccessibilitySupport(accessibilitySupport: AccessibilitySupport): void { super.setAccessibilitySupport(accessibilitySupport); if (!this.didSendTelemetry && accessibilitySupport === AccessibilitySupport.Enabled) { diff --git a/src/vs/workbench/services/activity/browser/activityService.ts b/src/vs/workbench/services/activity/browser/activityService.ts index 8a3e3c59931..a3a9eace600 100644 --- a/src/vs/workbench/services/activity/browser/activityService.ts +++ b/src/vs/workbench/services/activity/browser/activityService.ts @@ -46,7 +46,7 @@ class ViewContainerActivityByView extends Disposable { } } - dispose() { + override dispose() { this.activityDisposable.dispose(); } } diff --git a/src/vs/workbench/services/activity/common/activity.ts b/src/vs/workbench/services/activity/common/activity.ts index b7665e85069..8eda8c67e8e 100644 --- a/src/vs/workbench/services/activity/common/activity.ts +++ b/src/vs/workbench/services/activity/common/activity.ts @@ -63,7 +63,7 @@ export class NumberBadge extends BaseBadge { this.number = number; } - getDescription(): string { + override getDescription(): string { return this.descriptorFn(this.number); } } diff --git a/src/vs/workbench/services/backup/test/electron-browser/backupFileService.test.ts b/src/vs/workbench/services/backup/test/electron-browser/backupFileService.test.ts index 03cb1c99e4a..0e2ddeb0a02 100644 --- a/src/vs/workbench/services/backup/test/electron-browser/backupFileService.test.ts +++ b/src/vs/workbench/services/backup/test/electron-browser/backupFileService.test.ts @@ -41,7 +41,7 @@ class TestWorkbenchEnvironmentService extends NativeWorkbenchEnvironmentService export class NodeTestBackupFileService extends NativeBackupFileService { - readonly fileService: IFileService; + override readonly fileService: IFileService; private backupResourceJoiners: Function[]; private discardBackupJoiners: Function[]; @@ -73,7 +73,7 @@ export class NodeTestBackupFileService extends NativeBackupFileService { return new Promise(resolve => this.backupResourceJoiners.push(resolve)); } - async backup(resource: URI, content?: ITextSnapshot, versionId?: number, meta?: any, token?: CancellationToken): Promise { + async override backup(resource: URI, content?: ITextSnapshot, versionId?: number, meta?: any, token?: CancellationToken): Promise { const p = super.backup(resource, content, versionId, meta, token); const removeFromPendingBackups = insert(this.pendingBackupsArr, p.then(undefined, undefined)); @@ -92,7 +92,7 @@ export class NodeTestBackupFileService extends NativeBackupFileService { return new Promise(resolve => this.discardBackupJoiners.push(resolve)); } - async discardBackup(resource: URI): Promise { + async override discardBackup(resource: URI): Promise { await super.discardBackup(resource); this.discardedBackups.push(resource); diff --git a/src/vs/workbench/services/clipboard/browser/clipboardService.ts b/src/vs/workbench/services/clipboard/browser/clipboardService.ts index 7475c744b7b..295cc7bfae8 100644 --- a/src/vs/workbench/services/clipboard/browser/clipboardService.ts +++ b/src/vs/workbench/services/clipboard/browser/clipboardService.ts @@ -23,7 +23,7 @@ export class BrowserClipboardService extends BaseBrowserClipboardService { super(); } - async readText(type?: string): Promise { + async override readText(type?: string): Promise { if (type) { return super.readText(type); } diff --git a/src/vs/workbench/services/commands/test/common/commandService.test.ts b/src/vs/workbench/services/commands/test/common/commandService.test.ts index ef6962caccc..e4e13a410de 100644 --- a/src/vs/workbench/services/commands/test/common/commandService.test.ts +++ b/src/vs/workbench/services/commands/test/common/commandService.test.ts @@ -27,7 +27,7 @@ suite('CommandService', function () { let lastEvent: string; let service = new CommandService(new InstantiationService(), new class extends NullExtensionService { - activateByEvent(activationEvent: string): Promise { + override activateByEvent(activationEvent: string): Promise { lastEvent = activationEvent; return super.activateByEvent(activationEvent); } @@ -46,7 +46,7 @@ suite('CommandService', function () { test('fwd activation error', async function () { const extensionService = new class extends NullExtensionService { - activateByEvent(activationEvent: string): Promise { + override activateByEvent(activationEvent: string): Promise { return Promise.reject(new Error('bad_activate')); } }; @@ -66,7 +66,7 @@ suite('CommandService', function () { let reg = CommandsRegistry.registerCommand('bar', () => callCounter += 1); let service = new CommandService(new InstantiationService(), new class extends NullExtensionService { - whenInstalledExtensionsRegistered() { + override whenInstalledExtensionsRegistered() { return new Promise(_resolve => { /*ignore*/ }); } }, new NullLogService()); @@ -83,7 +83,7 @@ suite('CommandService', function () { const whenInstalledExtensionsRegistered = new Promise(_resolve => { resolveFunc = _resolve; }); let service = new CommandService(new InstantiationService(), new class extends NullExtensionService { - whenInstalledExtensionsRegistered() { + override whenInstalledExtensionsRegistered() { return whenInstalledExtensionsRegistered; } }, new NullLogService()); @@ -107,7 +107,7 @@ suite('CommandService', function () { let events: string[] = []; let service = new CommandService(new InstantiationService(), new class extends NullExtensionService { - activateByEvent(event: string): Promise { + override activateByEvent(event: string): Promise { events.push(event); if (event === '*') { return new Promise(() => { }); //forever promise... @@ -142,7 +142,7 @@ suite('CommandService', function () { const disposables = new DisposableStore(); let service = new CommandService(new InstantiationService(), new class extends NullExtensionService { - activateByEvent(event: string): Promise { + override activateByEvent(event: string): Promise { if (event === '*') { return new Promise(() => { }); //forever promise... } diff --git a/src/vs/workbench/services/configuration/common/configurationModels.ts b/src/vs/workbench/services/configuration/common/configurationModels.ts index ad60a05ab72..c2ee0980e88 100644 --- a/src/vs/workbench/services/configuration/common/configurationModels.ts +++ b/src/vs/workbench/services/configuration/common/configurationModels.ts @@ -47,7 +47,7 @@ export class WorkspaceConfigurationModelParser extends ConfigurationModelParser this._settingsModelParser.parse(); } - protected doParseRaw(raw: any): IConfigurationModel { + protected override doParseRaw(raw: any): IConfigurationModel { this._folders = (raw['folders'] || []) as IStoredWorkspaceFolder[]; this._settingsModelParser.parseRaw(raw['settings']); this._launchModel = this.createConfigurationModelFrom(raw, 'launch'); @@ -74,7 +74,7 @@ export class StandaloneConfigurationModelParser extends ConfigurationModelParser super(name); } - protected doParseRaw(raw: any): IConfigurationModel { + protected override doParseRaw(raw: any): IConfigurationModel { const contents = toValuesTree(raw, message => console.error(`Conflict in settings file ${this._name}: ${message}`)); const scopedContents = Object.create(null); scopedContents[this.scope] = contents; @@ -98,15 +98,15 @@ export class Configuration extends BaseConfiguration { super(defaults, localUser, remoteUser, workspaceConfiguration, folders, memoryConfiguration, memoryConfigurationByResource); } - getValue(key: string | undefined, overrides: IConfigurationOverrides = {}): any { + override getValue(key: string | undefined, overrides: IConfigurationOverrides = {}): any { return super.getValue(key, overrides, this._workspace); } - inspect(key: string, overrides: IConfigurationOverrides = {}): IConfigurationValue { + override inspect(key: string, overrides: IConfigurationOverrides = {}): IConfigurationValue { return super.inspect(key, overrides, this._workspace); } - keys(): { + override keys(): { default: string[]; user: string[]; workspace: string[]; @@ -115,7 +115,7 @@ export class Configuration extends BaseConfiguration { return super.keys(this._workspace); } - compareAndDeleteFolderConfiguration(folder: URI): IConfigurationChange { + override compareAndDeleteFolderConfiguration(folder: URI): IConfigurationChange { if (this._workspace && this._workspace.folders.length > 0 && this._workspace.folders[0].uri.toString() === folder.toString()) { // Do not remove workspace configuration return { keys: [], overrides: [] }; diff --git a/src/vs/workbench/services/configuration/test/browser/configurationService.test.ts b/src/vs/workbench/services/configuration/test/browser/configurationService.test.ts index 245883de666..ec703c35280 100644 --- a/src/vs/workbench/services/configuration/test/browser/configurationService.test.ts +++ b/src/vs/workbench/services/configuration/test/browser/configurationService.test.ts @@ -54,7 +54,7 @@ function convertToWorkspacePayload(folder: URI): ISingleFolderWorkspaceIdentifie } class ConfigurationCache extends BrowserConfigurationCache { - needsCaching() { return false; } + override needsCaching() { return false; } } const ROOT = URI.file('tests').with({ scheme: 'vscode-tests' }); diff --git a/src/vs/workbench/services/configurationResolver/browser/configurationResolverService.ts b/src/vs/workbench/services/configurationResolver/browser/configurationResolverService.ts index bc564af8e2e..3bae9221acd 100644 --- a/src/vs/workbench/services/configurationResolver/browser/configurationResolverService.ts +++ b/src/vs/workbench/services/configurationResolver/browser/configurationResolverService.ts @@ -105,7 +105,7 @@ export abstract class BaseConfigurationResolverService extends AbstractVariableR }, labelService, envVariables, envVariablesPromise); } - public async resolveWithInteractionReplace(folder: IWorkspaceFolder | undefined, config: any, section?: string, variables?: IStringDictionary, target?: ConfigurationTarget): Promise { + public async override resolveWithInteractionReplace(folder: IWorkspaceFolder | undefined, config: any, section?: string, variables?: IStringDictionary, target?: ConfigurationTarget): Promise { // resolve any non-interactive variables and any contributed variables config = this.resolveAny(folder, config); @@ -122,7 +122,7 @@ export abstract class BaseConfigurationResolverService extends AbstractVariableR }); } - public async resolveWithInteraction(folder: IWorkspaceFolder | undefined, config: any, section?: string, variables?: IStringDictionary, target?: ConfigurationTarget): Promise | undefined> { + public async override resolveWithInteraction(folder: IWorkspaceFolder | undefined, config: any, section?: string, variables?: IStringDictionary, target?: ConfigurationTarget): Promise | undefined> { // resolve any non-interactive variables and any contributed variables const resolved = await this.resolveAnyMap(folder, config); config = resolved.newConfig; diff --git a/src/vs/workbench/services/configurationResolver/test/electron-browser/configurationResolverService.test.ts b/src/vs/workbench/services/configurationResolver/test/electron-browser/configurationResolverService.test.ts index 68a27e97772..f827a7d78d5 100644 --- a/src/vs/workbench/services/configurationResolver/test/electron-browser/configurationResolverService.test.ts +++ b/src/vs/workbench/services/configurationResolver/test/electron-browser/configurationResolverService.test.ts @@ -28,7 +28,7 @@ import { TestWorkbenchConfiguration } from 'vs/workbench/test/electron-browser/w const mockLineNumber = 10; class TestEditorServiceWithActiveEditor extends TestEditorService { - get activeTextEditorControl(): any { + override get activeTextEditorControl(): any { return { getEditorType() { return EditorType.ICodeEditor; @@ -38,7 +38,7 @@ class TestEditorServiceWithActiveEditor extends TestEditorService { } }; } - get activeEditor(): any { + override get activeEditor(): any { return { get resource(): any { return uri.parse('file:///VSCode/workspaceLocation/file'); @@ -676,7 +676,7 @@ class MockLabelService implements ILabelService { } class MockInputsConfigurationService extends TestConfigurationService { - public getValue(arg1?: any, arg2?: any): any { + public override getValue(arg1?: any, arg2?: any): any { let configuration; if (arg1 === 'tasks') { configuration = { diff --git a/src/vs/workbench/services/decorations/test/browser/decorationsService.test.ts b/src/vs/workbench/services/decorations/test/browser/decorationsService.test.ts index c3127aa4d82..834ffca6e2c 100644 --- a/src/vs/workbench/services/decorations/test/browser/decorationsService.test.ts +++ b/src/vs/workbench/services/decorations/test/browser/decorationsService.test.ts @@ -25,7 +25,7 @@ suite('DecorationsService', function () { service = new DecorationsService( new TestThemeService(), new class extends mock() { - extUri = resources.extUri; + override extUri = resources.extUri; } ); }); diff --git a/src/vs/workbench/services/editor/browser/editorService.ts b/src/vs/workbench/services/editor/browser/editorService.ts index 1f46c7b698b..2452c02f989 100644 --- a/src/vs/workbench/services/editor/browser/editorService.ts +++ b/src/vs/workbench/services/editor/browser/editorService.ts @@ -1414,7 +1414,7 @@ export class EditorService extends Disposable implements EditorServiceImpl { //#endregion - dispose(): void { + override dispose(): void { super.dispose(); // Dispose remaining watchers if any diff --git a/src/vs/workbench/services/editor/test/browser/editorService.test.ts b/src/vs/workbench/services/editor/test/browser/editorService.test.ts index 698d8abef34..71d654b4459 100644 --- a/src/vs/workbench/services/editor/test/browser/editorService.test.ts +++ b/src/vs/workbench/services/editor/test/browser/editorService.test.ts @@ -383,7 +383,7 @@ suite('EditorService', () => { super(id, undefined!, new TestThemeService(), new TestStorageService()); } - getId(): string { + override getId(): string { return 'myEditor'; } diff --git a/src/vs/workbench/services/environment/electron-sandbox/environmentService.ts b/src/vs/workbench/services/environment/electron-sandbox/environmentService.ts index aa3533c159f..351214221f7 100644 --- a/src/vs/workbench/services/environment/electron-sandbox/environmentService.ts +++ b/src/vs/workbench/services/environment/electron-sandbox/environmentService.ts @@ -60,7 +60,7 @@ export class NativeWorkbenchEnvironmentService extends AbstractNativeEnvironment get execPath() { return this.configuration.execPath; } @memoize - get userRoamingDataHome(): URI { return this.appSettingsHome.with({ scheme: Schemas.userData }); } + override get userRoamingDataHome(): URI { return this.appSettingsHome.with({ scheme: Schemas.userData }); } @memoize get logFile(): URI { return URI.file(join(this.logsPath, `renderer${this.configuration.windowId}.log`)); } diff --git a/src/vs/workbench/services/extensionManagement/common/remoteExtensionManagementService.ts b/src/vs/workbench/services/extensionManagement/common/remoteExtensionManagementService.ts index a16c16fe2b4..588bccce94e 100644 --- a/src/vs/workbench/services/extensionManagement/common/remoteExtensionManagementService.ts +++ b/src/vs/workbench/services/extensionManagement/common/remoteExtensionManagementService.ts @@ -26,7 +26,7 @@ export class WebRemoteExtensionManagementService extends ExtensionManagementChan this.extensionKindController = new ExtensionKindController(productService, configurationService); } - async canInstall(extension: IGalleryExtension): Promise { + async override canInstall(extension: IGalleryExtension): Promise { const manifest = await this.galleryService.getManifest(extension, CancellationToken.None); return !!manifest && this.extensionKindController.canExecuteOnWorkspace(manifest); } diff --git a/src/vs/workbench/services/extensionManagement/electron-sandbox/extensionManagementService.ts b/src/vs/workbench/services/extensionManagement/electron-sandbox/extensionManagementService.ts index 3a052402d98..7b3c8a638f0 100644 --- a/src/vs/workbench/services/extensionManagement/electron-sandbox/extensionManagementService.ts +++ b/src/vs/workbench/services/extensionManagement/electron-sandbox/extensionManagementService.ts @@ -36,7 +36,7 @@ export class ExtensionManagementService extends BaseExtensionManagementService { super(extensionManagementServerService, extensionGalleryService, configurationService, productService, downloadService, userDataAutoSyncEnablementService, userDataSyncResourceEnablementService, dialogService, workspaceTrustService); } - protected async installVSIX(vsix: URI, server: IExtensionManagementServer): Promise { + protected async override installVSIX(vsix: URI, server: IExtensionManagementServer): Promise { if (vsix.scheme === Schemas.vscodeRemote && server === this.extensionManagementServerService.localExtensionManagementServer) { const downloadedLocation = joinPath(this.environmentService.tmpDir, generateUuid()); await this.downloadService.download(vsix, downloadedLocation); diff --git a/src/vs/workbench/services/extensionManagement/electron-sandbox/extensionTipsService.ts b/src/vs/workbench/services/extensionManagement/electron-sandbox/extensionTipsService.ts index df25bdb6ef8..35f7415d48b 100644 --- a/src/vs/workbench/services/extensionManagement/electron-sandbox/extensionTipsService.ts +++ b/src/vs/workbench/services/extensionManagement/electron-sandbox/extensionTipsService.ts @@ -17,7 +17,7 @@ import { Schemas } from 'vs/base/common/network'; class NativeExtensionTipsService extends ExtensionTipsService implements IExtensionTipsService { - _serviceBrand: any; + override _serviceBrand: any; private readonly channel: IChannel; @@ -32,22 +32,22 @@ class NativeExtensionTipsService extends ExtensionTipsService implements IExtens this.channel = sharedProcessService.getChannel('extensionTipsService'); } - getConfigBasedTips(folder: URI): Promise { + override getConfigBasedTips(folder: URI): Promise { if (folder.scheme === Schemas.file) { return this.channel.call('getConfigBasedTips', [folder]); } return super.getConfigBasedTips(folder); } - getImportantExecutableBasedTips(): Promise { + override getImportantExecutableBasedTips(): Promise { return this.channel.call('getImportantExecutableBasedTips'); } - getOtherExecutableBasedTips(): Promise { + override getOtherExecutableBasedTips(): Promise { return this.channel.call('getOtherExecutableBasedTips'); } - getAllWorkspacesTips(): Promise { + override getAllWorkspacesTips(): Promise { return this.channel.call('getAllWorkspacesTips'); } diff --git a/src/vs/workbench/services/extensionManagement/electron-sandbox/remoteExtensionManagementService.ts b/src/vs/workbench/services/extensionManagement/electron-sandbox/remoteExtensionManagementService.ts index 5a467603f12..2457ecfb80b 100644 --- a/src/vs/workbench/services/extensionManagement/electron-sandbox/remoteExtensionManagementService.ts +++ b/src/vs/workbench/services/extensionManagement/electron-sandbox/remoteExtensionManagementService.ts @@ -39,13 +39,13 @@ export class NativeRemoteExtensionManagementService extends WebRemoteExtensionMa this.localExtensionManagementService = localExtensionManagementServer.extensionManagementService; } - async install(vsix: URI): Promise { + async override install(vsix: URI): Promise { const local = await super.install(vsix); await this.installUIDependenciesAndPackedExtensions(local); return local; } - async installFromGallery(extension: IGalleryExtension, installOptions?: InstallOptions): Promise { + async override installFromGallery(extension: IGalleryExtension, installOptions?: InstallOptions): Promise { const local = await this.doInstallFromGallery(extension, installOptions); await this.installUIDependenciesAndPackedExtensions(local); return local; diff --git a/src/vs/workbench/services/extensions/browser/extensionService.ts b/src/vs/workbench/services/extensions/browser/extensionService.ts index 16717d1fdc6..ff766f4de59 100644 --- a/src/vs/workbench/services/extensions/browser/extensionService.ts +++ b/src/vs/workbench/services/extensions/browser/extensionService.ts @@ -73,7 +73,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten this._initFetchFileSystem(); } - dispose(): void { + override dispose(): void { this._disposables.dispose(); super.dispose(); } diff --git a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts index 681e77fa6c7..fee40e289d8 100644 --- a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts +++ b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts @@ -325,7 +325,7 @@ export class WebWorkerExtensionHost extends Disposable implements IExtensionHost return protocol; } - public dispose(): void { + public override dispose(): void { if (this._isTerminating) { return; } diff --git a/src/vs/workbench/services/extensions/common/extensionHostManager.ts b/src/vs/workbench/services/extensions/common/extensionHostManager.ts index 41e5a222880..5d158e414bf 100644 --- a/src/vs/workbench/services/extensions/common/extensionHostManager.ts +++ b/src/vs/workbench/services/extensions/common/extensionHostManager.ts @@ -85,7 +85,7 @@ export class ExtensionHostManager extends Disposable { this._resolveAuthorityAttempt = 0; } - public dispose(): void { + public override dispose(): void { if (this._extensionHost) { this._extensionHost.dispose(); } diff --git a/src/vs/workbench/services/extensions/common/remoteExtensionHost.ts b/src/vs/workbench/services/extensions/common/remoteExtensionHost.ts index 24ee4f4a791..4b07928a83d 100644 --- a/src/vs/workbench/services/extensions/common/remoteExtensionHost.ts +++ b/src/vs/workbench/services/extensions/common/remoteExtensionHost.ts @@ -269,7 +269,7 @@ export class RemoteExtensionHost extends Disposable implements IExtensionHost { return Promise.resolve(false); } - dispose(): void { + override dispose(): void { super.dispose(); this._terminating = true; diff --git a/src/vs/workbench/services/extensions/common/rpcProtocol.ts b/src/vs/workbench/services/extensions/common/rpcProtocol.ts index a9fef74ecec..096c87fd5f6 100644 --- a/src/vs/workbench/services/extensions/common/rpcProtocol.ts +++ b/src/vs/workbench/services/extensions/common/rpcProtocol.ts @@ -110,7 +110,7 @@ export class RPCProtocol extends Disposable implements IRPCProtocol { this._protocol.onMessage((msg) => this._receiveOneMessage(msg)); } - public dispose(): void { + public override dispose(): void { this._isDisposed = true; // Release all outstanding promises with a canceled error diff --git a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts index ce6a554d8bb..47ba56a9a49 100644 --- a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts +++ b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts @@ -225,7 +225,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten return result; } - protected _onExtensionHostCrashed(extensionHost: ExtensionHostManager, code: number, signal: string | null): void { + protected override _onExtensionHostCrashed(extensionHost: ExtensionHostManager, code: number, signal: string | null): void { const activatedExtensions = Array.from(this._extensionHostActiveExtensions.values()); super._onExtensionHostCrashed(extensionHost, code, signal); @@ -429,7 +429,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten } } - public async getInspectPort(tryEnableInspector: boolean): Promise { + public async override getInspectPort(tryEnableInspector: boolean): Promise { const localProcessExtensionHost = this._getExtensionHostManager(ExtensionHostKind.LocalProcess); if (localProcessExtensionHost) { return localProcessExtensionHost.getInspectPort(tryEnableInspector); diff --git a/src/vs/workbench/services/hover/browser/hoverWidget.ts b/src/vs/workbench/services/hover/browser/hoverWidget.ts index fe21b0cc742..252fdfc3c0d 100644 --- a/src/vs/workbench/services/hover/browser/hoverWidget.ts +++ b/src/vs/workbench/services/hover/browser/hoverWidget.ts @@ -204,7 +204,7 @@ export class HoverWidget extends Widget { this.dispose(); } - public dispose(): void { + public override dispose(): void { if (!this._isDisposed) { this._onDispose.fire(); this._hover.containerDomNode.parentElement?.removeChild(this.domNode); diff --git a/src/vs/workbench/services/keybinding/browser/keybindingService.ts b/src/vs/workbench/services/keybinding/browser/keybindingService.ts index 728be660d35..b7c015d5125 100644 --- a/src/vs/workbench/services/keybinding/browser/keybindingService.ts +++ b/src/vs/workbench/services/keybinding/browser/keybindingService.ts @@ -353,7 +353,7 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService { return JSON.stringify(info, null, '\t'); } - public customKeybindingsCount(): number { + public override customKeybindingsCount(): number { return this.userKeybindings.keybindings.length; } @@ -578,7 +578,7 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService { return desc; } - public getDefaultKeybindingsContent(): string { + public override getDefaultKeybindingsContent(): string { const resolver = this._getResolver(); const defaultKeybindings = resolver.getDefaultKeybindings(); const boundCommands = resolver.getDefaultBoundCommands(); @@ -612,7 +612,7 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService { return '// ' + nls.localize('unboundCommands', "Here are other available commands: ") + '\n// - ' + pretty; } - mightProducePrintableCharacter(event: IKeyboardEvent): boolean { + override mightProducePrintableCharacter(event: IKeyboardEvent): boolean { if (event.ctrlKey || event.metaKey || event.altKey) { // ignore ctrl/cmd/alt-combination but not shift-combinatios return false; diff --git a/src/vs/workbench/services/mode/common/workbenchModeService.ts b/src/vs/workbench/services/mode/common/workbenchModeService.ts index c6033d4ef98..7294d461781 100644 --- a/src/vs/workbench/services/mode/common/workbenchModeService.ts +++ b/src/vs/workbench/services/mode/common/workbenchModeService.ts @@ -156,7 +156,7 @@ export class WorkbenchModeServiceImpl extends ModeServiceImpl { }); } - protected _onReady(): Promise { + protected override _onReady(): Promise { if (!this._onReadyPromise) { this._onReadyPromise = Promise.resolve( this._extensionService.whenInstalledExtensionsRegistered().then(() => true) diff --git a/src/vs/workbench/services/preferences/browser/keybindingsEditorModel.ts b/src/vs/workbench/services/preferences/browser/keybindingsEditorModel.ts index 1b9c1c74ae7..2df514f63aa 100644 --- a/src/vs/workbench/services/preferences/browser/keybindingsEditorModel.ts +++ b/src/vs/workbench/services/preferences/browser/keybindingsEditorModel.ts @@ -140,7 +140,7 @@ export class KeybindingsEditorModel extends EditorModel { return result; } - async resolve(actionLabels = new Map()): Promise { + async override resolve(actionLabels = new Map()): Promise { const workbenchActionsRegistry = Registry.as(ActionExtensions.WorkbenchActions); this._keybindingItemsSortedByPrecedence = []; diff --git a/src/vs/workbench/services/preferences/browser/preferencesEditorInput.ts b/src/vs/workbench/services/preferences/browser/preferencesEditorInput.ts index f679a2c6dae..5e3d03877e4 100644 --- a/src/vs/workbench/services/preferences/browser/preferencesEditorInput.ts +++ b/src/vs/workbench/services/preferences/browser/preferencesEditorInput.ts @@ -24,11 +24,11 @@ import { Schemas } from 'vs/base/common/network'; export class PreferencesEditorInput extends SideBySideEditorInput { static readonly ID: string = 'workbench.editorinputs.preferencesEditorInput'; - getTypeId(): string { + override getTypeId(): string { return PreferencesEditorInput.ID; } - getTitle(verbosity: Verbosity): string { + override getTitle(verbosity: Verbosity): string { return this.primary.getTitle(verbosity); } } @@ -48,11 +48,11 @@ export class DefaultPreferencesEditorInput extends ResourceEditorInput { super(defaultSettingsResource, nls.localize('settingsEditorName', "Default Settings"), '', undefined, textModelResolverService, textFileService, editorService, editorGroupService, fileService, labelService, filesConfigurationService); } - getTypeId(): string { + override getTypeId(): string { return DefaultPreferencesEditorInput.ID; } - matches(other: unknown): boolean { + override matches(other: unknown): boolean { if (other instanceof DefaultPreferencesEditorInput) { return true; } @@ -88,19 +88,19 @@ export class KeybindingsEditorInput extends EditorInput { return KeybindingsEditorInput.ID; } - getName(): string { + override getName(): string { return nls.localize('keybindingsInputName', "Keyboard Shortcuts"); } - async resolve(): Promise { + async override resolve(): Promise { return this.keybindingsModel; } - matches(otherInput: unknown): boolean { + override matches(otherInput: unknown): boolean { return otherInput instanceof KeybindingsEditorInput; } - dispose(): void { + override dispose(): void { this.keybindingsModel.dispose(); super.dispose(); @@ -125,7 +125,7 @@ export class SettingsEditor2Input extends EditorInput { this._settingsModel = _preferencesService.createSettings2EditorModel(); } - matches(otherInput: unknown): boolean { + override matches(otherInput: unknown): boolean { return otherInput instanceof SettingsEditor2Input; } @@ -133,15 +133,15 @@ export class SettingsEditor2Input extends EditorInput { return SettingsEditor2Input.ID; } - getName(): string { + override getName(): string { return nls.localize('settingsEditor2InputName', "Settings"); } - async resolve(): Promise { + async override resolve(): Promise { return this._settingsModel; } - dispose(): void { + override dispose(): void { this._settingsModel.dispose(); super.dispose(); diff --git a/src/vs/workbench/services/preferences/browser/preferencesService.ts b/src/vs/workbench/services/preferences/browser/preferencesService.ts index 31a041a6274..62c6cda5a33 100644 --- a/src/vs/workbench/services/preferences/browser/preferencesService.ts +++ b/src/vs/workbench/services/preferences/browser/preferencesService.ts @@ -650,7 +650,7 @@ export class PreferencesService extends Disposable implements IPreferencesServic return position; } - public dispose(): void { + public override dispose(): void { this._onDispose.fire(); super.dispose(); } diff --git a/src/vs/workbench/services/preferences/common/preferencesModels.ts b/src/vs/workbench/services/preferences/common/preferencesModels.ts index e7ed150f44f..49c49dc5634 100644 --- a/src/vs/workbench/services/preferences/common/preferencesModels.ts +++ b/src/vs/workbench/services/preferences/common/preferencesModels.ts @@ -235,7 +235,7 @@ export class Settings2EditorModel extends AbstractSettingsModel implements ISett })); } - protected get filterGroups(): ISettingsGroup[] { + protected override get filterGroups(): ISettingsGroup[] { // Don't filter "commonly used" return this.settingsGroups.slice(1); } @@ -434,12 +434,12 @@ export class WorkspaceConfigurationEditorModel extends SettingsEditorModel { return this._configurationGroups; } - protected parse(): void { + protected override parse(): void { super.parse(); this._configurationGroups = parse(this.settingsModel, (property: string, previousParents: string[]): boolean => previousParents.length === 0); } - protected isSettingsProperty(property: string, previousParents: string[]): boolean { + protected override isSettingsProperty(property: string, previousParents: string[]): boolean { return property === 'settings' && previousParents.length === 1; } @@ -740,7 +740,7 @@ export class DefaultSettingsEditorModel extends AbstractSettingsModel implements return this.defaultSettings.getSettingsGroups(); } - protected get filterGroups(): ISettingsGroup[] { + protected override get filterGroups(): ISettingsGroup[] { // Don't look at "commonly used" for filter return this.settingsGroups.slice(1); } @@ -868,7 +868,7 @@ export class DefaultSettingsEditorModel extends AbstractSettingsModel implements return []; } - getPreference(key: string): ISetting | undefined { + override getPreference(key: string): ISetting | undefined { for (const group of this.settingsGroups) { for (const section of group.sections) { for (const setting of section.settings) { @@ -1043,7 +1043,7 @@ class RawSettingsContentBuilder extends SettingsContentBuilder { super(0); } - pushGroup(settingsGroups: ISettingsGroup): void { + override pushGroup(settingsGroups: ISettingsGroup): void { this._pushGroup(settingsGroups, this.indent); } diff --git a/src/vs/workbench/services/preferences/test/browser/preferencesService.test.ts b/src/vs/workbench/services/preferences/test/browser/preferencesService.test.ts index 79c20bb4b4f..1b1c65b518f 100644 --- a/src/vs/workbench/services/preferences/test/browser/preferencesService.test.ts +++ b/src/vs/workbench/services/preferences/test/browser/preferencesService.test.ts @@ -58,7 +58,7 @@ suite('PreferencesService', () => { class TestEditorService2 extends TestEditorService { lastOpenEditorOptions: any; - async openEditor(editor: any, optionsOrGroup?: any): Promise { + async override openEditor(editor: any, optionsOrGroup?: any): Promise { this.lastOpenEditorOptions = optionsOrGroup; return undefined; } diff --git a/src/vs/workbench/services/progress/browser/progressIndicator.ts b/src/vs/workbench/services/progress/browser/progressIndicator.ts index 79ad961bd5a..89cbbf5999b 100644 --- a/src/vs/workbench/services/progress/browser/progressIndicator.ts +++ b/src/vs/workbench/services/progress/browser/progressIndicator.ts @@ -77,9 +77,9 @@ export class EditorProgressIndicator extends ProgressBarIndicator { })); } - show(infinite: true, delay?: number): IProgressRunner; - show(total: number, delay?: number): IProgressRunner; - show(infiniteOrTotal: true | number, delay?: number): IProgressRunner { + override show(infinite: true, delay?: number): IProgressRunner; + override show(total: number, delay?: number): IProgressRunner; + override show(infiniteOrTotal: true | number, delay?: number): IProgressRunner { // No editor open: ignore any progress reporting if (this.group.isEmpty) { @@ -93,7 +93,7 @@ export class EditorProgressIndicator extends ProgressBarIndicator { return super.show(infiniteOrTotal, delay); } - async showWhile(promise: Promise, delay?: number): Promise { + async override showWhile(promise: Promise, delay?: number): Promise { // No editor open: ignore any progress reporting if (this.group.isEmpty) { diff --git a/src/vs/workbench/services/progress/browser/progressService.ts b/src/vs/workbench/services/progress/browser/progressService.ts index 36af9db211c..a8752e7c4c3 100644 --- a/src/vs/workbench/services/progress/browser/progressService.ts +++ b/src/vs/workbench/services/progress/browser/progressService.ts @@ -213,7 +213,7 @@ export class ProgressService extends Disposable implements IProgressService { this.dispose(); } - dispose(): void { + override dispose(): void { this._done = true; this._onWillDispose.fire(); @@ -274,7 +274,7 @@ export class ProgressService extends Disposable implements IProgressService { super(`progress.button.${button}`, button, undefined, true); } - async run(): Promise { + async override run(): Promise { progressStateModel.cancel(index); } }; @@ -290,7 +290,7 @@ export class ProgressService extends Disposable implements IProgressService { super('progress.cancel', localize('cancel', "Cancel"), undefined, true); } - async run(): Promise { + async override run(): Promise { progressStateModel.cancel(); } }; diff --git a/src/vs/workbench/services/quickinput/browser/quickInputService.ts b/src/vs/workbench/services/quickinput/browser/quickInputService.ts index fcdad25645e..50b96fa6b17 100644 --- a/src/vs/workbench/services/quickinput/browser/quickInputService.ts +++ b/src/vs/workbench/services/quickinput/browser/quickInputService.ts @@ -39,7 +39,7 @@ export class QuickInputService extends BaseQuickInputService { this._register(this.onHide(() => this.inQuickInputContext.set(false))); } - protected createController(): QuickInputController { + protected override createController(): QuickInputController { return super.createController(this.layoutService, { ignoreFocusOut: () => !this.configurationService.getValue('workbench.quickOpen.closeOnFocusLost'), backKeybindingLabel: () => this.keybindingService.lookupKeybinding('workbench.action.quickInputBack')?.getLabel() || undefined, diff --git a/src/vs/workbench/services/remote/browser/tunnelServiceImpl.ts b/src/vs/workbench/services/remote/browser/tunnelServiceImpl.ts index 2f88ae5e1d8..029c2e53d03 100644 --- a/src/vs/workbench/services/remote/browser/tunnelServiceImpl.ts +++ b/src/vs/workbench/services/remote/browser/tunnelServiceImpl.ts @@ -31,7 +31,7 @@ export class TunnelService extends AbstractTunnelService { return undefined; } - canTunnel(uri: URI): boolean { + override canTunnel(uri: URI): boolean { return super.canTunnel(uri) && !!this.environmentService.remoteAuthority; } } diff --git a/src/vs/workbench/services/remote/electron-browser/tunnelServiceImpl.ts b/src/vs/workbench/services/remote/electron-browser/tunnelServiceImpl.ts index e3c74cd9f82..41921078bdb 100644 --- a/src/vs/workbench/services/remote/electron-browser/tunnelServiceImpl.ts +++ b/src/vs/workbench/services/remote/electron-browser/tunnelServiceImpl.ts @@ -25,7 +25,7 @@ export class TunnelService extends BaseTunnelService { super(nodeSocketFactory, logService, signService, productService); } - canTunnel(uri: URI): boolean { + override canTunnel(uri: URI): boolean { return super.canTunnel(uri) && !!this.environmentService.remoteAuthority; } } diff --git a/src/vs/workbench/services/request/browser/requestService.ts b/src/vs/workbench/services/request/browser/requestService.ts index 16aa984a3f3..507c358999d 100644 --- a/src/vs/workbench/services/request/browser/requestService.ts +++ b/src/vs/workbench/services/request/browser/requestService.ts @@ -21,7 +21,7 @@ export class BrowserRequestService extends RequestService { super(configurationService, logService); } - async request(options: IRequestOptions, token: CancellationToken): Promise { + async override request(options: IRequestOptions, token: CancellationToken): Promise { try { const context = await super.request(options, token); const connection = this.remoteAgentService.getConnection(); diff --git a/src/vs/workbench/services/request/electron-sandbox/requestService.ts b/src/vs/workbench/services/request/electron-sandbox/requestService.ts index 86d4700ef05..698a8db3916 100644 --- a/src/vs/workbench/services/request/electron-sandbox/requestService.ts +++ b/src/vs/workbench/services/request/electron-sandbox/requestService.ts @@ -20,7 +20,7 @@ export class NativeRequestService extends RequestService { super(configurationService, logService); } - async resolveProxy(url: string): Promise { + async override resolveProxy(url: string): Promise { return this.nativeHostService.resolveProxy(url); } } diff --git a/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts b/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts index da0483de317..d871f4ab545 100644 --- a/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts +++ b/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts @@ -199,9 +199,9 @@ export class RipgrepParser extends EventEmitter { } - on(event: 'result', listener: (result: TextSearchResult) => void): this; - on(event: 'hitLimit', listener: () => void): this; - on(event: string, listener: (...args: any[]) => void): this { + override on(event: 'result', listener: (result: TextSearchResult) => void): this; + override on(event: 'hitLimit', listener: () => void): this; + override on(event: string, listener: (...args: any[]) => void): this { super.on(event, listener); return this; } diff --git a/src/vs/workbench/services/textMate/electron-sandbox/textMateService.ts b/src/vs/workbench/services/textMate/electron-sandbox/textMateService.ts index 209e19fbb5b..59ba481695d 100644 --- a/src/vs/workbench/services/textMate/electron-sandbox/textMateService.ts +++ b/src/vs/workbench/services/textMate/electron-sandbox/textMateService.ts @@ -88,7 +88,7 @@ class ModelWorkerTextMateTokenizer extends Disposable { this._worker.acceptRemovedModel(this._model.uri.toString()); } - public dispose() { + public override dispose() { super.dispose(); this._endSync(); } @@ -189,7 +189,7 @@ export class TextMateService extends AbstractTextMateService { return response; } - protected _onDidCreateGrammarFactory(grammarDefinitions: IValidGrammarDefinition[]): void { + protected override _onDidCreateGrammarFactory(grammarDefinitions: IValidGrammarDefinition[]): void { this._killWorker(); if (RUN_TEXTMATE_IN_WORKER) { @@ -218,14 +218,14 @@ export class TextMateService extends AbstractTextMateService { } } - protected _doUpdateTheme(grammarFactory: TMGrammarFactory, theme: IRawTheme, colorMap: string[]): void { + protected override _doUpdateTheme(grammarFactory: TMGrammarFactory, theme: IRawTheme, colorMap: string[]): void { super._doUpdateTheme(grammarFactory, theme, colorMap); if (this._currentTheme && this._currentTokenColorMap && this._workerProxy) { this._workerProxy.acceptTheme(this._currentTheme, this._currentTokenColorMap); } } - protected _onDidDisposeGrammarFactory(): void { + protected override _onDidDisposeGrammarFactory(): void { this._killWorker(); } diff --git a/src/vs/workbench/services/textMate/electron-sandbox/textMateWorker.ts b/src/vs/workbench/services/textMate/electron-sandbox/textMateWorker.ts index 5b811274fbc..c4af0042757 100644 --- a/src/vs/workbench/services/textMate/electron-sandbox/textMateWorker.ts +++ b/src/vs/workbench/services/textMate/electron-sandbox/textMateWorker.ts @@ -55,7 +55,7 @@ class TextMateWorkerModel extends MirrorTextModel { this._resetTokenization(); } - public dispose(): void { + public override dispose(): void { this._isDisposed = true; super.dispose(); } @@ -65,7 +65,7 @@ class TextMateWorkerModel extends MirrorTextModel { this._resetTokenization(); } - onEvents(e: IModelChangedEvent): void { + override onEvents(e: IModelChangedEvent): void { super.onEvents(e); for (let i = 0; i < e.changes.length; i++) { const change = e.changes[i]; diff --git a/src/vs/workbench/services/textfile/browser/browserTextFileService.ts b/src/vs/workbench/services/textfile/browser/browserTextFileService.ts index ad654cd4dcf..ade0b17718f 100644 --- a/src/vs/workbench/services/textfile/browser/browserTextFileService.ts +++ b/src/vs/workbench/services/textfile/browser/browserTextFileService.ts @@ -9,7 +9,7 @@ import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; export class BrowserTextFileService extends AbstractTextFileService { - protected registerListeners(): void { + protected override registerListeners(): void { super.registerListeners(); // Lifecycle diff --git a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts index ce6cdd87bdc..fc2a3c78134 100644 --- a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts +++ b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts @@ -179,7 +179,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil this.modelService.setMode(this.textEditorModel, languageSelection); } - setMode(mode: string): void { + override setMode(mode: string): void { super.setMode(mode); this.preferredMode = mode; @@ -248,7 +248,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil //#region Resolve - async resolve(options?: ITextFileResolveOptions): Promise { + async override resolve(options?: ITextFileResolveOptions): Promise { this.logService.trace('[text file model] resolve() - enter', this.resource.toString(true)); // Return early if we are disposed @@ -910,9 +910,9 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil return this.saveSequentializer.pending ?? Promise.resolve(); } - getMode(this: IResolvedTextFileEditorModel): string; - getMode(): string | undefined; - getMode(): string | undefined { + override getMode(this: IResolvedTextFileEditorModel): string; + override getMode(): string | undefined; + override getMode(): string | undefined { if (this.textEditorModel) { return this.textEditorModel.getModeId(); } @@ -987,15 +987,15 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil //#endregion - isResolved(): this is IResolvedTextFileEditorModel { + override isResolved(): this is IResolvedTextFileEditorModel { return !!this.textEditorModel; } - isReadonly(): boolean { + override isReadonly(): boolean { return this.fileService.hasCapability(this.resource, FileSystemProviderCapabilities.Readonly); } - dispose(): void { + override dispose(): void { this.logService.trace('[text file model] dispose()', this.resource.toString(true)); this.inConflictMode = false; diff --git a/src/vs/workbench/services/textfile/common/textFileEditorModelManager.ts b/src/vs/workbench/services/textfile/common/textFileEditorModelManager.ts index 402b69ae6fb..1b2efab582e 100644 --- a/src/vs/workbench/services/textfile/common/textFileEditorModelManager.ts +++ b/src/vs/workbench/services/textfile/common/textFileEditorModelManager.ts @@ -479,7 +479,7 @@ export class TextFileEditorModelManager extends Disposable implements ITextFileE return true; } - dispose(): void { + override dispose(): void { super.dispose(); this.clear(); diff --git a/src/vs/workbench/services/textfile/common/textFileSaveParticipant.ts b/src/vs/workbench/services/textfile/common/textFileSaveParticipant.ts index 037f389fed8..c2fde636ccd 100644 --- a/src/vs/workbench/services/textfile/common/textFileSaveParticipant.ts +++ b/src/vs/workbench/services/textfile/common/textFileSaveParticipant.ts @@ -64,7 +64,7 @@ export class TextFileSaveParticipant extends Disposable { }); } - dispose(): void { + override dispose(): void { this.saveParticipants.splice(0, this.saveParticipants.length); } } diff --git a/src/vs/workbench/services/textfile/electron-sandbox/nativeTextFileService.ts b/src/vs/workbench/services/textfile/electron-sandbox/nativeTextFileService.ts index e6e23106a86..80930d5fd4c 100644 --- a/src/vs/workbench/services/textfile/electron-sandbox/nativeTextFileService.ts +++ b/src/vs/workbench/services/textfile/electron-sandbox/nativeTextFileService.ts @@ -56,7 +56,7 @@ export class NativeTextFileService extends AbstractTextFileService { super(fileService, untitledTextEditorService, lifecycleService, instantiationService, modelService, environmentService, dialogService, fileDialogService, textResourceConfigurationService, filesConfigurationService, textModelService, codeEditorService, pathService, workingCopyFileService, uriIdentityService, modeService, logService); } - protected registerListeners(): void { + protected override registerListeners(): void { super.registerListeners(); // Lifecycle @@ -75,7 +75,7 @@ export class NativeTextFileService extends AbstractTextFileService { } } - async read(resource: URI, options?: IReadTextFileOptions): Promise { + async override read(resource: URI, options?: IReadTextFileOptions): Promise { // ensure size & memory limits options = this.ensureLimits(options); @@ -83,7 +83,7 @@ export class NativeTextFileService extends AbstractTextFileService { return super.read(resource, options); } - async readStream(resource: URI, options?: IReadTextFileOptions): Promise { + async override readStream(resource: URI, options?: IReadTextFileOptions): Promise { // ensure size & memory limits options = this.ensureLimits(options); @@ -119,7 +119,7 @@ export class NativeTextFileService extends AbstractTextFileService { return ensuredOptions; } - async write(resource: URI, value: string | ITextSnapshot, options?: IWriteTextFileOptions): Promise { + async override write(resource: URI, value: string | ITextSnapshot, options?: IWriteTextFileOptions): Promise { // check for `writeElevated property` to write elevated // (file:// only: https://github.com/microsoft/vscode/issues/48659) diff --git a/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts b/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts index 171c9e185c9..12e2fa4b1d1 100644 --- a/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts +++ b/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts @@ -51,11 +51,11 @@ export class UntitledTextEditorInput extends AbstractTextResourceEditorInput imp return UntitledTextEditorInput.ID; } - getName(): string { + override getName(): string { return this.model.name; } - getDescription(verbosity: Verbosity = Verbosity.MEDIUM): string | undefined { + override getDescription(verbosity: Verbosity = Verbosity.MEDIUM): string | undefined { // Without associated path: only use if name and description differ if (!this.model.hasAssociatedFilePath) { @@ -71,7 +71,7 @@ export class UntitledTextEditorInput extends AbstractTextResourceEditorInput imp return super.getDescription(verbosity); } - getTitle(verbosity: Verbosity): string { + override getTitle(verbosity: Verbosity): string { // Without associated path: check if name and description differ to decide // if description should appear besides the name to distinguish better @@ -89,7 +89,7 @@ export class UntitledTextEditorInput extends AbstractTextResourceEditorInput imp return super.getTitle(verbosity); } - isDirty(): boolean { + override isDirty(): boolean { return this.model.isDirty(); } @@ -109,7 +109,7 @@ export class UntitledTextEditorInput extends AbstractTextResourceEditorInput imp return this.model.getMode(); } - async resolve(): Promise { + async override resolve(): Promise { if (!this.modelResolve) { this.modelResolve = this.model.resolve(); } @@ -119,7 +119,7 @@ export class UntitledTextEditorInput extends AbstractTextResourceEditorInput imp return this.model; } - matches(otherInput: unknown): boolean { + override matches(otherInput: unknown): boolean { if (otherInput === this) { return true; } @@ -131,7 +131,7 @@ export class UntitledTextEditorInput extends AbstractTextResourceEditorInput imp return false; } - dispose(): void { + override dispose(): void { this.modelResolve = undefined; super.dispose(); diff --git a/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts b/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts index 261c565f1b8..c1f446a2f7b 100644 --- a/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts +++ b/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts @@ -177,7 +177,7 @@ export class UntitledTextEditorModel extends BaseTextEditorModel implements IUnt private _hasModeSetExplicitly: boolean = false; get hasModeSetExplicitly(): boolean { return this._hasModeSetExplicitly; } - setMode(mode: string): void { + override setMode(mode: string): void { // Remember that an explicit mode was set this._hasModeSetExplicitly = true; @@ -199,7 +199,7 @@ export class UntitledTextEditorModel extends BaseTextEditorModel implements IUnt } } - getMode(): string | undefined { + override getMode(): string | undefined { if (this.textEditorModel) { return this.textEditorModel.getModeId(); } @@ -233,7 +233,7 @@ export class UntitledTextEditorModel extends BaseTextEditorModel implements IUnt } } - isReadonly(): boolean { + override isReadonly(): boolean { return false; } @@ -272,7 +272,7 @@ export class UntitledTextEditorModel extends BaseTextEditorModel implements IUnt return { content: withNullAsUndefined(this.createSnapshot()) }; } - async resolve(): Promise { + async override resolve(): Promise { // Check for backups const backup = await this.backupFileService.resolve(this.resource); diff --git a/src/vs/workbench/services/uriIdentity/test/common/uriIdentityService.test.ts b/src/vs/workbench/services/uriIdentity/test/common/uriIdentityService.test.ts index 09e956b2930..ad03c1f0548 100644 --- a/src/vs/workbench/services/uriIdentity/test/common/uriIdentityService.test.ts +++ b/src/vs/workbench/services/uriIdentity/test/common/uriIdentityService.test.ts @@ -14,16 +14,16 @@ suite('URI Identity', function () { class FakeFileService extends mock() { - onDidChangeFileSystemProviderCapabilities = Event.None; - onDidChangeFileSystemProviderRegistrations = Event.None; + override onDidChangeFileSystemProviderCapabilities = Event.None; + override onDidChangeFileSystemProviderRegistrations = Event.None; constructor(readonly data: Map) { super(); } - canHandleResource(uri: URI) { + override canHandleResource(uri: URI) { return this.data.has(uri.scheme); } - hasCapability(uri: URI, flag: FileSystemProviderCapabilities): boolean { + override hasCapability(uri: URI, flag: FileSystemProviderCapabilities): boolean { const mask = this.data.get(uri.scheme) ?? 0; return Boolean(mask & flag); } diff --git a/src/vs/workbench/services/url/electron-sandbox/urlService.ts b/src/vs/workbench/services/url/electron-sandbox/urlService.ts index 79220df33de..4e8594d7f65 100644 --- a/src/vs/workbench/services/url/electron-sandbox/urlService.ts +++ b/src/vs/workbench/services/url/electron-sandbox/urlService.ts @@ -37,7 +37,7 @@ export class RelayURLService extends NativeURLService implements IURLHandler, IO openerService.registerOpener(this); } - create(options?: Partial): URI { + override create(options?: Partial): URI { const uri = super.create(options); let query = uri.query; @@ -50,7 +50,7 @@ export class RelayURLService extends NativeURLService implements IURLHandler, IO return uri.with({ query }); } - async open(resource: URI | string, options?: IRelayOpenURLOptions): Promise { + async override open(resource: URI | string, options?: IRelayOpenURLOptions): Promise { if (!matchesScheme(resource, this.productService.urlProtocol)) { return false; diff --git a/src/vs/workbench/services/userData/browser/userDataInit.ts b/src/vs/workbench/services/userData/browser/userDataInit.ts index 45a05b802d7..843f48d3657 100644 --- a/src/vs/workbench/services/userData/browser/userDataInit.ts +++ b/src/vs/workbench/services/userData/browser/userDataInit.ts @@ -232,7 +232,7 @@ class WorkbenchExtensionsInitializer extends ExtensionsInitializer { super(extensionManagementService, galleryService, extensionEnablementService, storageService, ignoredExtensionsManagementService, fileService, environmentService, logService); } - protected async initializeRemoteExtensions(remoteExtensions: ISyncExtension[]): Promise { + protected async override initializeRemoteExtensions(remoteExtensions: ISyncExtension[]): Promise { const newlyEnabledExtensions = (await super.initializeRemoteExtensions(remoteExtensions)); const canEnabledExtensions = newlyEnabledExtensions.filter(e => this.extensionService.canAddExtension(toExtensionDescription(e))); if (!(await this.areExtensionsRunning(canEnabledExtensions))) { diff --git a/src/vs/workbench/services/userData/test/browser/fileUserDataProvider.test.ts b/src/vs/workbench/services/userData/test/browser/fileUserDataProvider.test.ts index cd427f4a2b0..0c8685ce36c 100644 --- a/src/vs/workbench/services/userData/test/browser/fileUserDataProvider.test.ts +++ b/src/vs/workbench/services/userData/test/browser/fileUserDataProvider.test.ts @@ -25,7 +25,7 @@ class TestWorkbenchEnvironmentService extends BrowserWorkbenchEnvironmentService constructor(private readonly appSettingsHome: URI) { super(Object.create(null), TestProductService); } - get userRoamingDataHome() { return this.appSettingsHome.with({ scheme: Schemas.userData }); } + override get userRoamingDataHome() { return this.appSettingsHome.with({ scheme: Schemas.userData }); } } suite('FileUserDataProvider', () => { diff --git a/src/vs/workbench/services/userDataSync/browser/userDataAutoSyncEnablementService.ts b/src/vs/workbench/services/userDataSync/browser/userDataAutoSyncEnablementService.ts index 9684c842da2..7d4c6ffbb1a 100644 --- a/src/vs/workbench/services/userDataSync/browser/userDataAutoSyncEnablementService.ts +++ b/src/vs/workbench/services/userDataSync/browser/userDataAutoSyncEnablementService.ts @@ -13,11 +13,11 @@ export class WebUserDataAutoSyncEnablementService extends UserDataAutoSyncEnable private get workbenchEnvironmentService(): IWorkbenchEnvironmentService { return this.environmentService; } private enabled: boolean | undefined = undefined; - canToggleEnablement(): boolean { + override canToggleEnablement(): boolean { return this.isTrusted() && super.canToggleEnablement(); } - isEnabled(): boolean { + override isEnabled(): boolean { if (!this.isTrusted()) { return false; } @@ -30,7 +30,7 @@ export class WebUserDataAutoSyncEnablementService extends UserDataAutoSyncEnable return this.enabled; } - setEnablement(enabled: boolean) { + override setEnablement(enabled: boolean) { if (enabled && !this.canToggleEnablement()) { return; } diff --git a/src/vs/workbench/services/userDataSync/browser/userDataSyncResourceEnablementService.ts b/src/vs/workbench/services/userDataSync/browser/userDataSyncResourceEnablementService.ts index 8c361845bda..203ff7ebea7 100644 --- a/src/vs/workbench/services/userDataSync/browser/userDataSyncResourceEnablementService.ts +++ b/src/vs/workbench/services/userDataSync/browser/userDataSyncResourceEnablementService.ts @@ -20,7 +20,7 @@ export class UserDataSyncResourceEnablementService extends BaseUserDataSyncResou super(storageService, telemetryService); } - getResourceSyncStateVersion(resource: SyncResource): string | undefined { + override getResourceSyncStateVersion(resource: SyncResource): string | undefined { return resource === SyncResource.Extensions ? this.environmentService.options?.settingsSyncOptions?.extensionsSyncStateVersion : undefined; } diff --git a/src/vs/workbench/services/workingCopy/common/fileWorkingCopyManager.ts b/src/vs/workbench/services/workingCopy/common/fileWorkingCopyManager.ts index bef0d22e2c5..57a7c5e8dec 100644 --- a/src/vs/workbench/services/workingCopy/common/fileWorkingCopyManager.ts +++ b/src/vs/workbench/services/workingCopy/common/fileWorkingCopyManager.ts @@ -703,7 +703,7 @@ export class FileWorkingCopyManager extends Dis return true; } - dispose(): void { + override dispose(): void { super.dispose(); this.clear(); diff --git a/src/vs/workbench/services/workingCopy/common/workingCopyFileOperationParticipant.ts b/src/vs/workbench/services/workingCopy/common/workingCopyFileOperationParticipant.ts index 5c6cc819459..741f1d51219 100644 --- a/src/vs/workbench/services/workingCopy/common/workingCopyFileOperationParticipant.ts +++ b/src/vs/workbench/services/workingCopy/common/workingCopyFileOperationParticipant.ts @@ -43,7 +43,7 @@ export class WorkingCopyFileOperationParticipant extends Disposable { } } - dispose(): void { + override dispose(): void { this.participants.clear(); } } diff --git a/src/vs/workbench/services/workspaces/browser/workspaceTrustEditorInput.ts b/src/vs/workbench/services/workspaces/browser/workspaceTrustEditorInput.ts index 78181c577ee..eae52f311b2 100644 --- a/src/vs/workbench/services/workspaces/browser/workspaceTrustEditorInput.ts +++ b/src/vs/workbench/services/workspaces/browser/workspaceTrustEditorInput.ts @@ -28,15 +28,15 @@ export class WorkspaceTrustEditorInput extends EditorInput { return WorkspaceTrustEditorInput.ID; } - matches(otherInput: unknown): boolean { + override matches(otherInput: unknown): boolean { return otherInput instanceof WorkspaceTrustEditorInput; } - getName(): string { + override getName(): string { return localize('workspaceTrustEditorInputName', "Workspace Trust"); } - async resolve(): Promise { + async override resolve(): Promise { return this.workspaceTrustService.workspaceTrustEditorModel; } } diff --git a/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts b/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts index 486e9e290b5..a6e8dac55e2 100644 --- a/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts +++ b/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts @@ -139,7 +139,7 @@ export class NativeWorkspaceEditingService extends AbstractWorkspaceEditingServi } } - async isValidTargetWorkspacePath(path: URI): Promise { + async override isValidTargetWorkspacePath(path: URI): Promise { const windows = await this.nativeHostService.getWindows(); // Prevent overwriting a workspace that is currently opened in another window diff --git a/src/vs/workbench/test/browser/api/extHostApiCommands.test.ts b/src/vs/workbench/test/browser/api/extHostApiCommands.test.ts index 499997b5d27..8cce22132c4 100644 --- a/src/vs/workbench/test/browser/api/extHostApiCommands.test.ts +++ b/src/vs/workbench/test/browser/api/extHostApiCommands.test.ts @@ -90,14 +90,14 @@ suite('ExtHostLanguageFeatureCommands', function () { rpcProtocol = new TestRPCProtocol(); const services = new ServiceCollection(); services.set(IExtensionService, new class extends mock() { - async activateByEvent() { + async override activateByEvent() { } }); services.set(ICommandService, new SyncDescriptor(class extends mock() { - executeCommand(id: string, ...args: any): any { + override executeCommand(id: string, ...args: any): any { const command = CommandsRegistry.getCommands().get(id); if (!command) { return Promise.reject(new Error(id + ' NOT known')); @@ -108,17 +108,17 @@ suite('ExtHostLanguageFeatureCommands', function () { })); services.set(IMarkerService, new MarkerService()); services.set(IModelService, new class extends mock() { - getModel() { return model; } + override getModel() { return model; } }); services.set(ITextModelService, new class extends mock() { - async createModelReference() { + async override createModelReference() { return new ImmortalReference(new class extends mock() { - textEditorModel = model; + override textEditorModel = model; }); } }); services.set(IEditorWorkerService, new class extends mock() { - async computeMoreMinimalEdits(_uri: any, edits: any) { + async override computeMoreMinimalEdits(_uri: any, edits: any) { return edits || undefined; } }); diff --git a/src/vs/workbench/test/browser/api/extHostBulkEdits.test.ts b/src/vs/workbench/test/browser/api/extHostBulkEdits.test.ts index 88a25eea8bb..a77e9d63c8d 100644 --- a/src/vs/workbench/test/browser/api/extHostBulkEdits.test.ts +++ b/src/vs/workbench/test/browser/api/extHostBulkEdits.test.ts @@ -24,7 +24,7 @@ suite('ExtHostBulkEdits.applyWorkspaceEdit', () => { let rpcProtocol = new TestRPCProtocol(); rpcProtocol.set(MainContext.MainThreadBulkEdits, new class extends mock() { - $tryApplyWorkspaceEdit(_workspaceResourceEdits: IWorkspaceEditDto): Promise { + override $tryApplyWorkspaceEdit(_workspaceResourceEdits: IWorkspaceEditDto): Promise { workspaceResourceEdits = _workspaceResourceEdits; return Promise.resolve(true); } diff --git a/src/vs/workbench/test/browser/api/extHostCommands.test.ts b/src/vs/workbench/test/browser/api/extHostCommands.test.ts index 2ecab2e8d61..f20ed5033a6 100644 --- a/src/vs/workbench/test/browser/api/extHostCommands.test.ts +++ b/src/vs/workbench/test/browser/api/extHostCommands.test.ts @@ -18,10 +18,10 @@ suite('ExtHostCommands', function () { let lastUnregister: string; const shape = new class extends mock() { - $registerCommand(id: string): void { + override $registerCommand(id: string): void { // } - $unregisterCommand(id: string): void { + override $unregisterCommand(id: string): void { lastUnregister = id; } }; @@ -41,10 +41,10 @@ suite('ExtHostCommands', function () { let unregisterCounter = 0; const shape = new class extends mock() { - $registerCommand(id: string): void { + override $registerCommand(id: string): void { // } - $unregisterCommand(id: string): void { + override $unregisterCommand(id: string): void { unregisterCounter += 1; } }; @@ -65,10 +65,10 @@ suite('ExtHostCommands', function () { let count = 0; const shape = new class extends mock() { - $registerCommand(id: string): void { + override $registerCommand(id: string): void { // } - async $executeCommand(id: string, args: any[], retry: boolean): Promise { + async override $executeCommand(id: string, args: any[], retry: boolean): Promise { count++; assert.strictEqual(retry, count === 1); if (count === 1) { diff --git a/src/vs/workbench/test/browser/api/extHostConfiguration.test.ts b/src/vs/workbench/test/browser/api/extHostConfiguration.test.ts index 6c27e95c9e0..08a15f45ed2 100644 --- a/src/vs/workbench/test/browser/api/extHostConfiguration.test.ts +++ b/src/vs/workbench/test/browser/api/extHostConfiguration.test.ts @@ -24,7 +24,7 @@ suite('ExtHostConfiguration', function () { class RecordingShape extends mock() { lastArgs!: [ConfigurationTarget, string, any]; - $updateConfigurationOption(target: ConfigurationTarget, key: string, value: any): Promise { + override $updateConfigurationOption(target: ConfigurationTarget, key: string, value: any): Promise { this.lastArgs = [target, key, value]; return Promise.resolve(undefined); } @@ -657,7 +657,7 @@ suite('ExtHostConfiguration', function () { test('update/error-state not OK', function () { const shape = new class extends mock() { - $updateConfigurationOption(target: ConfigurationTarget, key: string, value: any): Promise { + override $updateConfigurationOption(target: ConfigurationTarget, key: string, value: any): Promise { return Promise.reject(new Error('Unknown Key')); // something !== OK } }; diff --git a/src/vs/workbench/test/browser/api/extHostDecorations.test.ts b/src/vs/workbench/test/browser/api/extHostDecorations.test.ts index 0c926b50410..4dc01fc51d3 100644 --- a/src/vs/workbench/test/browser/api/extHostDecorations.test.ts +++ b/src/vs/workbench/test/browser/api/extHostDecorations.test.ts @@ -25,14 +25,14 @@ suite('ExtHostDecorations', function () { providers.clear(); mainThreadShape = new class extends mock() { - $registerDecorationProvider(handle: number) { + override $registerDecorationProvider(handle: number) { providers.add(handle); } }; extHostDecorations = new ExtHostDecorations( new class extends mock() { - getProxy(): any { + override getProxy(): any { return mainThreadShape; } }, diff --git a/src/vs/workbench/test/browser/api/extHostDiagnostics.test.ts b/src/vs/workbench/test/browser/api/extHostDiagnostics.test.ts index 68fd8bca049..241e6413a23 100644 --- a/src/vs/workbench/test/browser/api/extHostDiagnostics.test.ts +++ b/src/vs/workbench/test/browser/api/extHostDiagnostics.test.ts @@ -18,10 +18,10 @@ import { nullExtensionDescription } from 'vs/workbench/services/extensions/commo suite('ExtHostDiagnostics', () => { class DiagnosticsShape extends mock() { - $changeMany(owner: string, entries: [UriComponents, IMarkerData[]][]): void { + override $changeMany(owner: string, entries: [UriComponents, IMarkerData[]][]): void { // } - $clear(owner: string): void { + override $clear(owner: string): void { // } } @@ -164,7 +164,7 @@ suite('ExtHostDiagnostics', () => { let lastEntries!: [UriComponents, IMarkerData[]][]; let collection = new DiagnosticCollection('test', 'test', 100, new class extends DiagnosticsShape { - $changeMany(owner: string, entries: [UriComponents, IMarkerData[]][]): void { + override $changeMany(owner: string, entries: [UriComponents, IMarkerData[]][]): void { lastEntries = entries; return super.$changeMany(owner, entries); } @@ -198,7 +198,7 @@ suite('ExtHostDiagnostics', () => { const emitter = new Emitter(); emitter.event(_ => eventCount += 1); const collection = new DiagnosticCollection('test', 'test', 100, new class extends DiagnosticsShape { - $changeMany() { + override $changeMany() { changeCount += 1; } }, emitter); @@ -263,7 +263,7 @@ suite('ExtHostDiagnostics', () => { let lastEntries!: [UriComponents, IMarkerData[]][]; let collection = new DiagnosticCollection('test', 'test', 250, new class extends DiagnosticsShape { - $changeMany(owner: string, entries: [UriComponents, IMarkerData[]][]): void { + override $changeMany(owner: string, entries: [UriComponents, IMarkerData[]][]): void { lastEntries = entries; return super.$changeMany(owner, entries); } @@ -350,7 +350,7 @@ suite('ExtHostDiagnostics', () => { test('diagnostics with related information', function (done) { let collection = new DiagnosticCollection('ddd', 'test', 100, new class extends DiagnosticsShape { - $changeMany(owner: string, entries: [UriComponents, IMarkerData[]][]) { + override $changeMany(owner: string, entries: [UriComponents, IMarkerData[]][]) { let [[, data]] = entries; assert.strictEqual(entries.length, 1); @@ -408,7 +408,7 @@ suite('ExtHostDiagnostics', () => { test('Error updating diagnostics from extension #60394', function () { let callCount = 0; let collection = new DiagnosticCollection('ddd', 'test', 100, new class extends DiagnosticsShape { - $changeMany(owner: string, entries: [UriComponents, IMarkerData[]][]) { + override $changeMany(owner: string, entries: [UriComponents, IMarkerData[]][]) { callCount += 1; } }, new Emitter()); diff --git a/src/vs/workbench/test/browser/api/extHostDocumentData.test.ts b/src/vs/workbench/test/browser/api/extHostDocumentData.test.ts index 4fc76b0dd1d..c1a5af90538 100644 --- a/src/vs/workbench/test/browser/api/extHostDocumentData.test.ts +++ b/src/vs/workbench/test/browser/api/extHostDocumentData.test.ts @@ -50,7 +50,7 @@ suite('ExtHostDocumentData', () => { test('save, when disposed', function () { let saved: URI; let data = new ExtHostDocumentData(new class extends mock() { - $trySaveDocument(uri: URI) { + override $trySaveDocument(uri: URI) { assert.ok(!saved); saved = uri; return Promise.resolve(true); diff --git a/src/vs/workbench/test/browser/api/extHostDocumentSaveParticipant.test.ts b/src/vs/workbench/test/browser/api/extHostDocumentSaveParticipant.test.ts index a89f12a7a19..b41dc067fb3 100644 --- a/src/vs/workbench/test/browser/api/extHostDocumentSaveParticipant.test.ts +++ b/src/vs/workbench/test/browser/api/extHostDocumentSaveParticipant.test.ts @@ -379,7 +379,7 @@ suite('ExtHostDocumentSaveParticipant', () => { test('Log failing listener', function () { let didLogSomething = false; let participant = new ExtHostDocumentSaveParticipant(new class extends NullLogService { - error(message: string | Error, ...args: any[]): void { + override error(message: string | Error, ...args: any[]): void { didLogSomething = true; } }, documents, mainThreadBulkEdits); diff --git a/src/vs/workbench/test/browser/api/extHostLanguageFeatures.test.ts b/src/vs/workbench/test/browser/api/extHostLanguageFeatures.test.ts index da09f925ada..2338d947e23 100644 --- a/src/vs/workbench/test/browser/api/extHostLanguageFeatures.test.ts +++ b/src/vs/workbench/test/browser/api/extHostLanguageFeatures.test.ts @@ -966,7 +966,7 @@ suite('ExtHostLanguageFeatures', function () { // --- format const NullWorkerService = new class extends mock() { - computeMoreMinimalEdits(resource: URI, edits: modes.TextEdit[] | null | undefined): Promise { + override computeMoreMinimalEdits(resource: URI, edits: modes.TextEdit[] | null | undefined): Promise { return Promise.resolve(withNullAsUndefined(edits)); } }; diff --git a/src/vs/workbench/test/browser/api/extHostMessagerService.test.ts b/src/vs/workbench/test/browser/api/extHostMessagerService.test.ts index 0c6ce4dc959..d0965fecdb1 100644 --- a/src/vs/workbench/test/browser/api/extHostMessagerService.test.ts +++ b/src/vs/workbench/test/browser/api/extHostMessagerService.test.ts @@ -117,7 +117,7 @@ suite('ExtHostMessageService', function () { suite('modal', () => { test('calls dialog service', async () => { const service = new MainThreadMessageService(null!, emptyNotificationService, emptyCommandService, new class extends mock() { - show(severity: Severity, message: string, buttons: string[]) { + override show(severity: Severity, message: string, buttons: string[]) { assert.strictEqual(severity, 1); assert.strictEqual(message, 'h'); assert.strictEqual(buttons.length, 2); @@ -132,7 +132,7 @@ suite('ExtHostMessageService', function () { test('returns undefined when cancelled', async () => { const service = new MainThreadMessageService(null!, emptyNotificationService, emptyCommandService, new class extends mock() { - show() { + override show() { return Promise.resolve({ choice: 1 }); } } as IDialogService); @@ -143,7 +143,7 @@ suite('ExtHostMessageService', function () { test('hides Cancel button when not needed', async () => { const service = new MainThreadMessageService(null!, emptyNotificationService, emptyCommandService, new class extends mock() { - show(severity: Severity, message: string, buttons: string[]) { + override show(severity: Severity, message: string, buttons: string[]) { assert.strictEqual(buttons.length, 1); return Promise.resolve({ choice: 0 }); } diff --git a/src/vs/workbench/test/browser/api/extHostNotebook.test.ts b/src/vs/workbench/test/browser/api/extHostNotebook.test.ts index e725f269c70..32fc3f3ac23 100644 --- a/src/vs/workbench/test/browser/api/extHostNotebook.test.ts +++ b/src/vs/workbench/test/browser/api/extHostNotebook.test.ts @@ -41,16 +41,16 @@ suite('NotebookCell#Document', function () { setup(async function () { rpcProtocol = new TestRPCProtocol(); rpcProtocol.set(MainContext.MainThreadCommands, new class extends mock() { - $registerCommand() { } + override $registerCommand() { } }); rpcProtocol.set(MainContext.MainThreadNotebook, new class extends mock() { - async $registerNotebookProvider() { } - async $unregisterNotebookProvider() { } + async override $registerNotebookProvider() { } + async override $unregisterNotebookProvider() { } }); extHostDocumentsAndEditors = new ExtHostDocumentsAndEditors(rpcProtocol, new NullLogService()); extHostDocuments = new ExtHostDocuments(rpcProtocol, extHostDocumentsAndEditors); const extHostStoragePaths = new class extends mock() { - workspaceValue() { + override workspaceValue() { return URI.from({ scheme: 'test', path: generateUuid() }); } }; diff --git a/src/vs/workbench/test/browser/api/extHostNotebookConcatDocument.test.ts b/src/vs/workbench/test/browser/api/extHostNotebookConcatDocument.test.ts index 3aacd9f7df6..9815e171628 100644 --- a/src/vs/workbench/test/browser/api/extHostNotebookConcatDocument.test.ts +++ b/src/vs/workbench/test/browser/api/extHostNotebookConcatDocument.test.ts @@ -38,16 +38,16 @@ suite('NotebookConcatDocument', function () { rpcProtocol = new TestRPCProtocol(); rpcProtocol.set(MainContext.MainThreadCommands, new class extends mock() { - $registerCommand() { } + override $registerCommand() { } }); rpcProtocol.set(MainContext.MainThreadNotebook, new class extends mock() { - async $registerNotebookProvider() { } - async $unregisterNotebookProvider() { } + async override $registerNotebookProvider() { } + async override $unregisterNotebookProvider() { } }); extHostDocumentsAndEditors = new ExtHostDocumentsAndEditors(rpcProtocol, new NullLogService()); extHostDocuments = new ExtHostDocuments(rpcProtocol, extHostDocumentsAndEditors); const extHostStoragePaths = new class extends mock() { - workspaceValue() { + override workspaceValue() { return URI.from({ scheme: 'test', path: generateUuid() }); } }; diff --git a/src/vs/workbench/test/browser/api/extHostNotebookKernel.test.ts b/src/vs/workbench/test/browser/api/extHostNotebookKernel.test.ts index 24afbcca749..0cb05595301 100644 --- a/src/vs/workbench/test/browser/api/extHostNotebookKernel.test.ts +++ b/src/vs/workbench/test/browser/api/extHostNotebookKernel.test.ts @@ -37,18 +37,18 @@ suite('NotebookKernel', function () { rpcProtocol = new TestRPCProtocol(); rpcProtocol.set(MainContext.MainThreadCommands, new class extends mock() { - $registerCommand() { } + override $registerCommand() { } }); rpcProtocol.set(MainContext.MainThreadNotebook, new class extends mock() { - async $registerNotebookProvider() { } - async $unregisterNotebookProvider() { } - async $registerNotebookKernelProvider() { } - async $unregisterNotebookKernelProvider() { } + async override $registerNotebookProvider() { } + async override $unregisterNotebookProvider() { } + async override $registerNotebookKernelProvider() { } + async override $unregisterNotebookKernelProvider() { } }); extHostDocumentsAndEditors = new ExtHostDocumentsAndEditors(rpcProtocol, new NullLogService()); extHostDocuments = new ExtHostDocuments(rpcProtocol, extHostDocumentsAndEditors); const extHostStoragePaths = new class extends mock() { - workspaceValue() { + override workspaceValue() { return URI.from({ scheme: 'test', path: generateUuid() }); } }; @@ -58,13 +58,13 @@ suite('NotebookKernel', function () { }); const kernels = [new class extends mock() { - id = 'first'; + override id = 'first'; }, new class extends mock() { - id = 'second'; + override id = 'second'; }]; let kernelReg = extHostNotebooks.registerNotebookKernelProvider(nullExtensionDescription, { viewType: 'test' }, new class extends mock() { - async provideKernels() { return kernels; } + async override provideKernels() { return kernels; } }); // init diff --git a/src/vs/workbench/test/browser/api/extHostTextEditor.test.ts b/src/vs/workbench/test/browser/api/extHostTextEditor.test.ts index ca9a7f7999d..9d69ae57537 100644 --- a/src/vs/workbench/test/browser/api/extHostTextEditor.test.ts +++ b/src/vs/workbench/test/browser/api/extHostTextEditor.test.ts @@ -44,7 +44,7 @@ suite('ExtHostTextEditor', () => { let applyCount = 0; let editor = new ExtHostTextEditor('edt1', new class extends mock() { - $tryApplyEdits(): Promise { + override $tryApplyEdits(): Promise { applyCount += 1; return Promise.resolve(true); } diff --git a/src/vs/workbench/test/browser/api/extHostTreeViews.test.ts b/src/vs/workbench/test/browser/api/extHostTreeViews.test.ts index 134e347dd65..6f722d17586 100644 --- a/src/vs/workbench/test/browser/api/extHostTreeViews.test.ts +++ b/src/vs/workbench/test/browser/api/extHostTreeViews.test.ts @@ -26,16 +26,16 @@ suite('ExtHostTreeView', function () { onRefresh = new Emitter<{ [treeItemHandle: string]: ITreeItem }>(); - async $registerTreeViewDataProvider(treeViewId: string): Promise { + async override $registerTreeViewDataProvider(treeViewId: string): Promise { } - $refresh(viewId: string, itemsToRefresh: { [treeItemHandle: string]: ITreeItem }): Promise { + override $refresh(viewId: string, itemsToRefresh: { [treeItemHandle: string]: ITreeItem }): Promise { return Promise.resolve(null).then(() => { this.onRefresh.fire(itemsToRefresh); }); } - $reveal(): Promise { + override $reveal(): Promise { return Promise.resolve(); } diff --git a/src/vs/workbench/test/browser/api/extHostWorkspace.test.ts b/src/vs/workbench/test/browser/api/extHostWorkspace.test.ts index 7305f39937e..f90643430be 100644 --- a/src/vs/workbench/test/browser/api/extHostWorkspace.test.ts +++ b/src/vs/workbench/test/browser/api/extHostWorkspace.test.ts @@ -590,7 +590,7 @@ suite('ExtHostWorkspace', function () { let mainThreadCalled = false; rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - $startFileSearch(includePattern: string, _includeFolder: UriComponents | null, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise { + override $startFileSearch(includePattern: string, _includeFolder: UriComponents | null, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise { mainThreadCalled = true; assert.strictEqual(includePattern, 'foo'); assert.strictEqual(_includeFolder, null); @@ -612,7 +612,7 @@ suite('ExtHostWorkspace', function () { let mainThreadCalled = false; rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - $startFileSearch(includePattern: string, _includeFolder: UriComponents | null, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise { + override $startFileSearch(includePattern: string, _includeFolder: UriComponents | null, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise { mainThreadCalled = true; assert.strictEqual(includePattern, 'glob/**'); assert.deepStrictEqual(_includeFolder ? URI.from(_includeFolder).toJSON() : null, URI.file('/other/folder').toJSON()); @@ -641,7 +641,7 @@ suite('ExtHostWorkspace', function () { let mainThreadCalled = false; rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - $startFileSearch(includePattern: string, _includeFolder: UriComponents | null, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise { + override $startFileSearch(includePattern: string, _includeFolder: UriComponents | null, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise { mainThreadCalled = true; assert.strictEqual(includePattern, 'glob/**'); assert.deepStrictEqual(_includeFolder, URI.file('/other/folder').toJSON()); @@ -662,7 +662,7 @@ suite('ExtHostWorkspace', function () { let mainThreadCalled = false; rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - $startFileSearch(includePattern: string, _includeFolder: UriComponents | null, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise { + override $startFileSearch(includePattern: string, _includeFolder: UriComponents | null, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise { mainThreadCalled = true; return Promise.resolve(null); } @@ -682,7 +682,7 @@ suite('ExtHostWorkspace', function () { let mainThreadCalled = false; rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - $startFileSearch(includePattern: string, _includeFolder: UriComponents | null, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise { + override $startFileSearch(includePattern: string, _includeFolder: UriComponents | null, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise { mainThreadCalled = true; assert(excludePatternOrDisregardExcludes, 'glob/**'); // Note that the base portion is ignored, see #52651 return Promise.resolve(null); @@ -701,7 +701,7 @@ suite('ExtHostWorkspace', function () { let mainThreadCalled = false; rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + async override $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { mainThreadCalled = true; assert.strictEqual(query.pattern, 'foo'); assert.strictEqual(folder, null); @@ -722,7 +722,7 @@ suite('ExtHostWorkspace', function () { let mainThreadCalled = false; rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + async override $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { mainThreadCalled = true; assert.strictEqual(query.pattern, 'foo'); assert.strictEqual(folder, null); @@ -743,7 +743,7 @@ suite('ExtHostWorkspace', function () { let mainThreadCalled = false; rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + async override $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { mainThreadCalled = true; assert.strictEqual(query.pattern, 'foo'); assert.deepStrictEqual(folder, URI.file('/other/folder').toJSON()); @@ -764,7 +764,7 @@ suite('ExtHostWorkspace', function () { let mainThreadCalled = false; rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + async override $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { mainThreadCalled = true; return null; } @@ -782,7 +782,7 @@ suite('ExtHostWorkspace', function () { let mainThreadCalled = false; rpcProtocol.set(MainContext.MainThreadWorkspace, new class extends mock() { - async $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { + async override $startTextSearch(query: IPatternInfo, folder: UriComponents | null, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise { mainThreadCalled = true; assert.strictEqual(query.pattern, 'foo'); assert.deepStrictEqual(folder, null); diff --git a/src/vs/workbench/test/browser/api/mainThreadCommands.test.ts b/src/vs/workbench/test/browser/api/mainThreadCommands.test.ts index 65dc8e42be3..3b2f85bdaff 100644 --- a/src/vs/workbench/test/browser/api/mainThreadCommands.test.ts +++ b/src/vs/workbench/test/browser/api/mainThreadCommands.test.ts @@ -51,13 +51,13 @@ suite('MainThreadCommands', function () { const commands = new MainThreadCommands( SingleProxyRPCProtocol(null), new class extends mock() { - executeCommand(id: string): Promise { + override executeCommand(id: string): Promise { runs.push(id); return Promise.resolve(undefined); } }, new class extends mock() { - activateByEvent(id: string) { + override activateByEvent(id: string) { activations.push(id); return Promise.resolve(); } diff --git a/src/vs/workbench/test/browser/api/mainThreadDiagnostics.test.ts b/src/vs/workbench/test/browser/api/mainThreadDiagnostics.test.ts index 6f28fccec7b..13d6510969d 100644 --- a/src/vs/workbench/test/browser/api/mainThreadDiagnostics.test.ts +++ b/src/vs/workbench/test/browser/api/mainThreadDiagnostics.test.ts @@ -38,7 +38,7 @@ suite('MainThreadDiagnostics', function () { }, markerService, new class extends mock() { - asCanonicalUri(uri: URI) { return uri; } + override asCanonicalUri(uri: URI) { return uri; } } ); diff --git a/src/vs/workbench/test/browser/api/mainThreadDocumentContentProviders.test.ts b/src/vs/workbench/test/browser/api/mainThreadDocumentContentProviders.test.ts index 44e7a8a7e08..526e1769199 100644 --- a/src/vs/workbench/test/browser/api/mainThreadDocumentContentProviders.test.ts +++ b/src/vs/workbench/test/browser/api/mainThreadDocumentContentProviders.test.ts @@ -22,13 +22,13 @@ suite('MainThreadDocumentContentProviders', function () { let providers = new MainThreadDocumentContentProviders(new TestRPCProtocol(), null!, null!, new class extends mock() { - getModel(_uri: URI) { + override getModel(_uri: URI) { assert.strictEqual(uri.toString(), _uri.toString()); return model; } }, new class extends mock() { - computeMoreMinimalEdits(_uri: URI, data: TextEdit[] | undefined) { + override computeMoreMinimalEdits(_uri: URI, data: TextEdit[] | undefined) { assert.strictEqual(model.getValue(), '1'); return Promise.resolve(data); } diff --git a/src/vs/workbench/test/browser/api/mainThreadDocumentsAndEditors.test.ts b/src/vs/workbench/test/browser/api/mainThreadDocumentsAndEditors.test.ts index c282692f857..70739001aa3 100644 --- a/src/vs/workbench/test/browser/api/mainThreadDocumentsAndEditors.test.ts +++ b/src/vs/workbench/test/browser/api/mainThreadDocumentsAndEditors.test.ts @@ -57,8 +57,8 @@ suite('MainThreadDocumentsAndEditors', () => { modelService = new ModelServiceImpl(configService, new TestTextResourcePropertiesService(configService), new TestThemeService(), new NullLogService(), undoRedoService); codeEditorService = new TestCodeEditorService(); textFileService = new class extends mock() { - isDirty() { return false; } - files = { + override isDirty() { return false; } + override files = { onDidSave: Event.None, onDidRevert: Event.None, onDidChangeDirty: Event.None @@ -68,14 +68,14 @@ suite('MainThreadDocumentsAndEditors', () => { const editorGroupService = new TestEditorGroupsService(); const fileService = new class extends mock() { - onDidRunOperation = Event.None; - onDidChangeFileSystemProviderCapabilities = Event.None; - onDidChangeFileSystemProviderRegistrations = Event.None; + override onDidRunOperation = Event.None; + override onDidChangeFileSystemProviderCapabilities = Event.None; + override onDidChangeFileSystemProviderRegistrations = Event.None; }; new MainThreadDocumentsAndEditors( SingleProxyRPCProtocol(new class extends mock() { - $acceptDocumentsAndEditorsDelta(delta: IDocumentsAndEditorsDelta) { deltas.push(delta); } + override $acceptDocumentsAndEditorsDelta(delta: IDocumentsAndEditorsDelta) { deltas.push(delta); } }), modelService, textFileService, @@ -87,9 +87,9 @@ suite('MainThreadDocumentsAndEditors', () => { null!, new class extends mock() implements IPanelService { declare readonly _serviceBrand: undefined; - onDidPanelOpen = Event.None; - onDidPanelClose = Event.None; - getActivePanel() { + override onDidPanelOpen = Event.None; + override onDidPanelClose = Event.None; + override getActivePanel() { return undefined; } }, @@ -97,7 +97,7 @@ suite('MainThreadDocumentsAndEditors', () => { new TestWorkingCopyFileService(), new UriIdentityService(fileService), new class extends mock() { - readText() { + override readText() { return Promise.resolve('clipboard_contents'); } }, diff --git a/src/vs/workbench/test/browser/api/mainThreadEditors.test.ts b/src/vs/workbench/test/browser/api/mainThreadEditors.test.ts index bd8224ef67d..b72ea54d694 100644 --- a/src/vs/workbench/test/browser/api/mainThreadEditors.test.ts +++ b/src/vs/workbench/test/browser/api/mainThreadEditors.test.ts @@ -100,44 +100,44 @@ suite('MainThreadEditors', () => { services.set(ILifecycleService, new TestLifecycleService()); services.set(IEditorGroupsService, new TestEditorGroupsService()); services.set(ITextFileService, new class extends mock() { - isDirty() { return false; } - files = { + override isDirty() { return false; } + override files = { onDidSave: Event.None, onDidRevert: Event.None, onDidChangeDirty: Event.None }; - create(operations: { resource: URI }[]) { + override create(operations: { resource: URI }[]) { for (const o of operations) { createdResources.add(o.resource); } return Promise.resolve(Object.create(null)); } - async getEncodedReadable(resource: URI, value?: string | ITextSnapshot): Promise { + async override getEncodedReadable(resource: URI, value?: string | ITextSnapshot): Promise { return undefined; } }); services.set(IWorkingCopyFileService, new class extends mock() { - onDidRunWorkingCopyFileOperation = Event.None; - createFolder(operations: ICreateOperation[]): any { + override onDidRunWorkingCopyFileOperation = Event.None; + override createFolder(operations: ICreateOperation[]): any { this.create(operations); } - create(operations: ICreateFileOperation[]) { + override create(operations: ICreateFileOperation[]) { for (const operation of operations) { createdResources.add(operation.resource); } return Promise.resolve(Object.create(null)); } - move(operations: IMoveOperation[]) { + override move(operations: IMoveOperation[]) { const { source, target } = operations[0].file; movedResources.set(source, target); return Promise.resolve(Object.create(null)); } - copy(operations: ICopyOperation[]) { + override copy(operations: ICopyOperation[]) { const { source, target } = operations[0].file; copiedResources.set(source, target); return Promise.resolve(Object.create(null)); } - delete(operations: IDeleteOperation[]) { + override delete(operations: IDeleteOperation[]) { for (const operation of operations) { deletedResources.add(operation.resource); } @@ -145,9 +145,9 @@ suite('MainThreadEditors', () => { } }); services.set(ITextModelService, new class extends mock() { - createModelReference(resource: URI): Promise> { + override createModelReference(resource: URI): Promise> { const textEditorModel = new class extends mock() { - textEditorModel = modelService.getModel(resource)!; + override textEditorModel = modelService.getModel(resource)!; }; textEditorModel.isReadonly = () => false; return Promise.resolve(new ImmortalReference(textEditorModel)); @@ -158,25 +158,25 @@ suite('MainThreadEditors', () => { }); services.set(IPanelService, new class extends mock() implements IPanelService { declare readonly _serviceBrand: undefined; - onDidPanelOpen = Event.None; - onDidPanelClose = Event.None; - getActivePanel() { + override onDidPanelOpen = Event.None; + override onDidPanelClose = Event.None; + override getActivePanel() { return undefined; } }); services.set(IUriIdentityService, new class extends mock() { - get extUri() { return extUri; } + override get extUri() { return extUri; } }); const instaService = new InstantiationService(services); const rpcProtocol = new TestRPCProtocol(); rpcProtocol.set(ExtHostContext.ExtHostDocuments, new class extends mock() { - $acceptModelChanged(): void { + override $acceptModelChanged(): void { } }); rpcProtocol.set(ExtHostContext.ExtHostDocumentsAndEditors, new class extends mock() { - $acceptDocumentsAndEditorsDelta(): void { + override $acceptDocumentsAndEditorsDelta(): void { } }); diff --git a/src/vs/workbench/test/browser/api/mainThreadTreeViews.test.ts b/src/vs/workbench/test/browser/api/mainThreadTreeViews.test.ts index 6b8365ec3bf..71e5d22fd5e 100644 --- a/src/vs/workbench/test/browser/api/mainThreadTreeViews.test.ts +++ b/src/vs/workbench/test/browser/api/mainThreadTreeViews.test.ts @@ -29,15 +29,15 @@ suite('MainThreadHostTreeView', function () { } class MockExtHostTreeViewsShape extends mock() { - async $getChildren(treeViewId: string, treeItemHandle?: string): Promise { + async override $getChildren(treeViewId: string, treeItemHandle?: string): Promise { return [{ handle: 'testItem1', collapsibleState: TreeItemCollapsibleState.Expanded, customProp: customValue }]; } - async $hasResolve(): Promise { + async override $hasResolve(): Promise { return false; } - $setVisible(): void { } + override $setVisible(): void { } } let container: ViewContainer; diff --git a/src/vs/workbench/test/browser/part.test.ts b/src/vs/workbench/test/browser/part.test.ts index 016bc8a65b9..60925fea20e 100644 --- a/src/vs/workbench/test/browser/part.test.ts +++ b/src/vs/workbench/test/browser/part.test.ts @@ -21,7 +21,7 @@ suite('Workbench parts', () => { minimumHeight: number = 50; maximumHeight: number = 50; - layout(width: number, height: number): void { + override layout(width: number, height: number): void { throw new Error('Method not implemented.'); } @@ -36,21 +36,21 @@ suite('Workbench parts', () => { super('myPart', { hasTitle: true }, new TestThemeService(), new TestStorageService(), new TestLayoutService()); } - createTitleArea(parent: HTMLElement): HTMLElement { + override createTitleArea(parent: HTMLElement): HTMLElement { assert.strictEqual(parent, this.expectedParent); return super.createTitleArea(parent)!; } - createContentArea(parent: HTMLElement): HTMLElement { + override createContentArea(parent: HTMLElement): HTMLElement { assert.strictEqual(parent, this.expectedParent); return super.createContentArea(parent)!; } - getMemento(scope: StorageScope, target: StorageTarget) { + override getMemento(scope: StorageScope, target: StorageTarget) { return super.getMemento(scope, target); } - saveState(): void { + override saveState(): void { return super.saveState(); } } @@ -61,7 +61,7 @@ suite('Workbench parts', () => { super('myPart2', { hasTitle: true }, new TestThemeService(), new TestStorageService(), new TestLayoutService()); } - createTitleArea(parent: HTMLElement): HTMLElement { + override createTitleArea(parent: HTMLElement): HTMLElement { const titleContainer = append(parent, $('div')); const titleLabel = append(titleContainer, $('span')); titleLabel.id = 'myPart.title'; @@ -70,7 +70,7 @@ suite('Workbench parts', () => { return titleContainer; } - createContentArea(parent: HTMLElement): HTMLElement { + override createContentArea(parent: HTMLElement): HTMLElement { const contentContainer = append(parent, $('div')); const contentSpan = append(contentContainer, $('span')); contentSpan.id = 'myPart.content'; @@ -86,11 +86,11 @@ suite('Workbench parts', () => { super('myPart2', { hasTitle: false }, new TestThemeService(), new TestStorageService(), new TestLayoutService()); } - createTitleArea(parent: HTMLElement): HTMLElement { + override createTitleArea(parent: HTMLElement): HTMLElement { return null!; } - createContentArea(parent: HTMLElement): HTMLElement { + override createContentArea(parent: HTMLElement): HTMLElement { const contentContainer = append(parent, $('div')); const contentSpan = append(contentContainer, $('span')); contentSpan.id = 'myPart.content'; diff --git a/src/vs/workbench/test/browser/parts/editor/breadcrumbModel.test.ts b/src/vs/workbench/test/browser/parts/editor/breadcrumbModel.test.ts index e9b6962a953..8e20b9b710c 100644 --- a/src/vs/workbench/test/browser/parts/editor/breadcrumbModel.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/breadcrumbModel.test.ts @@ -18,7 +18,7 @@ suite('Breadcrumb Model', function () { const workspaceService = new TestContextService(new Workspace('ffff', [new WorkspaceFolder({ uri: URI.parse('foo:/bar/baz/ws'), name: 'ws', index: 0 })])); const configService = new class extends TestConfigurationService { - getValue(...args: any[]) { + override getValue(...args: any[]) { if (args[0] === 'breadcrumbs.filePath') { return 'on'; } @@ -27,7 +27,7 @@ suite('Breadcrumb Model', function () { } return super.getValue(...args); } - updateValue() { + override updateValue() { return Promise.resolve(); } }; diff --git a/src/vs/workbench/test/browser/parts/editor/editorGroups.test.ts b/src/vs/workbench/test/browser/parts/editor/editorGroups.test.ts index 53971175040..5e2ae9b4a3e 100644 --- a/src/vs/workbench/test/browser/parts/editor/editorGroups.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/editorGroups.test.ts @@ -120,9 +120,9 @@ suite('Workbench editor groups', () => { super(); } getTypeId() { return 'testEditorInputForGroups'; } - async resolve(): Promise { return null!; } + async override resolve(): Promise { return null!; } - matches(other: TestEditorInput): boolean { + override matches(other: TestEditorInput): boolean { return other && this.id === other.id && other instanceof TestEditorInput; } @@ -143,9 +143,9 @@ suite('Workbench editor groups', () => { super(); } getTypeId() { return 'testEditorInputForGroups-nonSerializable'; } - async resolve(): Promise { return null; } + async override resolve(): Promise { return null; } - matches(other: NonSerializableTestEditorInput): boolean { + override matches(other: NonSerializableTestEditorInput): boolean { return other && this.id === other.id && other instanceof NonSerializableTestEditorInput; } } @@ -158,7 +158,7 @@ suite('Workbench editor groups', () => { super(); } getTypeId() { return 'testFileEditorInputForGroups'; } - async resolve(): Promise { return null; } + async override resolve(): Promise { return null; } setPreferredName(name: string): void { } setPreferredDescription(description: string): void { } setPreferredResource(resource: URI): void { } @@ -170,7 +170,7 @@ suite('Workbench editor groups', () => { setPreferredMode(mode: string) { } isResolved(): boolean { return false; } - matches(other: TestFileEditorInput): boolean { + override matches(other: TestFileEditorInput): boolean { return other && this.id === other.id && other instanceof TestFileEditorInput; } } diff --git a/src/vs/workbench/test/browser/parts/editor/editorInput.test.ts b/src/vs/workbench/test/browser/parts/editor/editorInput.test.ts index 73facb16edd..3d144f2ea4a 100644 --- a/src/vs/workbench/test/browser/parts/editor/editorInput.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/editorInput.test.ts @@ -14,7 +14,7 @@ suite('Workbench editor input', () => { readonly resource = undefined; getTypeId(): string { return ''; } - resolve(): any { return null; } + override resolve(): any { return null; } } test('EditorInput', () => { diff --git a/src/vs/workbench/test/browser/parts/editor/editorModel.test.ts b/src/vs/workbench/test/browser/parts/editor/editorModel.test.ts index a739759a32d..a478426e96c 100644 --- a/src/vs/workbench/test/browser/parts/editor/editorModel.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/editorModel.test.ts @@ -31,11 +31,11 @@ suite('Workbench editor model', () => { class MyEditorModel extends EditorModel { } class MyTextEditorModel extends BaseTextEditorModel { - createTextEditorModel(value: ITextBufferFactory, resource?: URI, preferredMode?: string) { + override createTextEditorModel(value: ITextBufferFactory, resource?: URI, preferredMode?: string) { return super.createTextEditorModel(value, resource, preferredMode); } - isReadonly(): boolean { + override isReadonly(): boolean { return false; } } diff --git a/src/vs/workbench/test/browser/parts/editor/editorPane.test.ts b/src/vs/workbench/test/browser/parts/editor/editorPane.test.ts index 5c74a02332d..1887aea99ee 100644 --- a/src/vs/workbench/test/browser/parts/editor/editorPane.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/editorPane.test.ts @@ -33,7 +33,7 @@ class TestEditor extends EditorPane { super('TestEditor', NullTelemetryService, NullThemeService, new TestStorageService()); } - getId(): string { return 'testEditor'; } + override getId(): string { return 'testEditor'; } layout(): void { } createEditor(): any { } } @@ -44,7 +44,7 @@ export class OtherTestEditor extends EditorPane { super('testOtherEditor', NullTelemetryService, NullThemeService, new TestStorageService()); } - getId(): string { return 'testOtherEditor'; } + override getId(): string { return 'testOtherEditor'; } layout(): void { } createEditor(): any { } @@ -69,7 +69,7 @@ class TestInput extends EditorInput { readonly resource = undefined; - getPreferredEditorId(ids: string[]) { + override getPreferredEditorId(ids: string[]) { return ids[1]; } @@ -77,7 +77,7 @@ class TestInput extends EditorInput { return ''; } - resolve(): any { + override resolve(): any { return null; } } @@ -90,7 +90,7 @@ class OtherTestInput extends EditorInput { return ''; } - resolve(): any { + override resolve(): any { return null; } } @@ -305,9 +305,9 @@ suite('Workbench EditorPane', () => { super(); } getTypeId() { return 'testEditorInputForMementoTest'; } - async resolve(): Promise { return null; } + async override resolve(): Promise { return null; } - matches(other: TestEditorInput): boolean { + override matches(other: TestEditorInput): boolean { return other && this.id === other.id && other instanceof TestEditorInput; } } @@ -343,9 +343,9 @@ suite('Workbench EditorPane', () => { super(); } getTypeId() { return 'testEditorInputForMementoTest'; } - async resolve(): Promise { return null; } + async override resolve(): Promise { return null; } - matches(other: TestEditorInput): boolean { + override matches(other: TestEditorInput): boolean { return other && this.id === other.id && other instanceof TestEditorInput; } } diff --git a/src/vs/workbench/test/browser/viewlet.test.ts b/src/vs/workbench/test/browser/viewlet.test.ts index d3b57ab52e9..1ef7b53d07b 100644 --- a/src/vs/workbench/test/browser/viewlet.test.ts +++ b/src/vs/workbench/test/browser/viewlet.test.ts @@ -16,7 +16,7 @@ suite('Viewlets', () => { super('id', null!, null!, null!, null!, null!, null!, null!, null!, null!); } - layout(dimension: any): void { + override layout(dimension: any): void { throw new Error('Method not implemented.'); } diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index 6bfa92cebd3..72cbf19d1a0 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -148,14 +148,14 @@ Registry.as(EditorExtensions.EditorInputFactories). export class TestTextResourceEditor extends TextResourceEditor { - protected createEditorControl(parent: HTMLElement, configuration: any): IEditor { + protected override createEditorControl(parent: HTMLElement, configuration: any): IEditor { return this.instantiationService.createInstance(TestCodeEditor, parent, configuration, {}); } } export class TestTextFileEditor extends TextFileEditor { - protected createEditorControl(parent: HTMLElement, configuration: any): IEditor { + protected override createEditorControl(parent: HTMLElement, configuration: any): IEditor { return this.instantiationService.createInstance(TestCodeEditor, parent, configuration, {}); } } @@ -312,7 +312,7 @@ export class TestTextFileService extends BrowserTextFileService { this.readStreamError = error; } - async readStream(resource: URI, options?: IReadTextFileOptions): Promise { + async override readStream(resource: URI, options?: IReadTextFileOptions): Promise { if (this.readStreamError) { const error = this.readStreamError; this.readStreamError = undefined; @@ -337,7 +337,7 @@ export class TestTextFileService extends BrowserTextFileService { this.writeError = error; } - async write(resource: URI, value: string | ITextSnapshot, options?: IWriteTextFileOptions): Promise { + async override write(resource: URI, value: string | ITextSnapshot, options?: IWriteTextFileOptions): Promise { if (this.writeError) { const error = this.writeError; this.writeError = undefined; @@ -352,7 +352,7 @@ export class TestTextFileService extends BrowserTextFileService { export class TestBrowserTextFileServiceWithEncodingOverrides extends BrowserTextFileService { private _testEncoding: TestEncodingOracle | undefined; - get encoding(): TestEncodingOracle { + override get encoding(): TestEncodingOracle { if (!this._testEncoding) { this._testEncoding = this._register(this.instantiationService.createInstance(TestEncodingOracle)); } @@ -363,7 +363,7 @@ export class TestBrowserTextFileServiceWithEncodingOverrides extends BrowserText export class TestEncodingOracle extends EncodingOracle { - protected get encodingOverrides(): IEncodingOverride[] { + protected override get encodingOverrides(): IEncodingOverride[] { return [ { extension: 'utf16le', encoding: UTF16le }, { extension: 'utf16be', encoding: UTF16be }, @@ -371,7 +371,7 @@ export class TestEncodingOracle extends EncodingOracle { ]; } - protected set encodingOverrides(overrides: IEncodingOverride[]) { } + protected override set encodingOverrides(overrides: IEncodingOverride[]) { } } class TestEnvironmentServiceWithArgs extends BrowserWorkbenchEnvironmentService { @@ -970,7 +970,7 @@ export class TestBackupFileService extends InMemoryBackupFileService { export class InMemoryTestBackupFileService extends BrowserBackupFileService { - readonly fileService: IFileService; + override readonly fileService: IFileService; private backupResourceJoiners: Function[]; private discardBackupJoiners: Function[]; @@ -1000,7 +1000,7 @@ export class InMemoryTestBackupFileService extends BrowserBackupFileService { return new Promise(resolve => this.discardBackupJoiners.push(resolve)); } - async backup(resource: URI, content?: ITextSnapshot, versionId?: number, meta?: any, token?: CancellationToken): Promise { + async override backup(resource: URI, content?: ITextSnapshot, versionId?: number, meta?: any, token?: CancellationToken): Promise { await super.backup(resource, content, versionId, meta, token); while (this.backupResourceJoiners.length) { @@ -1008,7 +1008,7 @@ export class InMemoryTestBackupFileService extends BrowserBackupFileService { } } - async discardBackup(resource: URI): Promise { + async override discardBackup(resource: URI): Promise { await super.discardBackup(resource); this.discardedBackups.push(resource); @@ -1122,7 +1122,7 @@ export class RemoteFileSystemProvider implements IFileSystemProvider { } export class TestInMemoryFileSystemProvider extends InMemoryFileSystemProvider implements IFileSystemProviderWithFileReadStreamCapability { - readonly capabilities: FileSystemProviderCapabilities = + override readonly capabilities: FileSystemProviderCapabilities = FileSystemProviderCapabilities.FileReadWrite | FileSystemProviderCapabilities.PathCaseSensitive | FileSystemProviderCapabilities.FileReadStream; @@ -1188,14 +1188,14 @@ export class TestHostService implements IHostService { export class TestFilesConfigurationService extends FilesConfigurationService { - onFilesConfigurationChange(configuration: any): void { + override onFilesConfigurationChange(configuration: any): void { super.onFilesConfigurationChange(configuration); } } export class TestReadonlyTextFileEditorModel extends TextFileEditorModel { - isReadonly(): boolean { + override isReadonly(): boolean { return true; } } @@ -1210,7 +1210,7 @@ export class TestEditorInput extends EditorInput { return this.typeId; } - resolve(): Promise { + override resolve(): Promise { return Promise.resolve(null); } } @@ -1225,17 +1225,17 @@ export function registerTestEditor(id: string, inputs: SyncDescriptor { + async override setInput(input: EditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { super.setInput(input, options, context, token); await input.resolve(); } - getId(): string { return id; } + override getId(): string { return id; } layout(): void { } createEditor(): void { } - get scopedContextKeyService() { + override get scopedContextKeyService() { return this._scopedContextKeyService; } } @@ -1347,8 +1347,8 @@ export class TestFileEditorInput extends EditorInput implements IFileEditorInput } getTypeId() { return this.typeId; } - resolve(): Promise { return !this.fails ? Promise.resolve(null) : Promise.reject(new Error('fails')); } - matches(other: EditorInput): boolean { return !!(other?.resource && this.resource.toString() === other.resource.toString() && other instanceof TestFileEditorInput && other.getTypeId() === this.typeId); } + override resolve(): Promise { return !this.fails ? Promise.resolve(null) : Promise.reject(new Error('fails')); } + override matches(other: EditorInput): boolean { return !!(other?.resource && this.resource.toString() === other.resource.toString() && other instanceof TestFileEditorInput && other.getTypeId() === this.typeId); } setPreferredResource(resource: URI): void { } setEncoding(encoding: string) { } getEncoding() { return undefined; } @@ -1361,40 +1361,40 @@ export class TestFileEditorInput extends EditorInput implements IFileEditorInput setFailToOpen(): void { this.fails = true; } - async save(groupId: GroupIdentifier, options?: ISaveOptions): Promise { + async override save(groupId: GroupIdentifier, options?: ISaveOptions): Promise { this.gotSaved = true; this.dirty = false; return this; } - async saveAs(groupId: GroupIdentifier, options?: ISaveOptions): Promise { + async override saveAs(groupId: GroupIdentifier, options?: ISaveOptions): Promise { this.gotSavedAs = true; return this; } - async revert(group: GroupIdentifier, options?: IRevertOptions): Promise { + async override revert(group: GroupIdentifier, options?: IRevertOptions): Promise { this.gotReverted = true; this.gotSaved = false; this.gotSavedAs = false; this.dirty = false; } setDirty(): void { this.dirty = true; } - isDirty(): boolean { + override isDirty(): boolean { return this.dirty; } - isReadonly(): boolean { + override isReadonly(): boolean { return false; } isResolved(): boolean { return false; } - dispose(): void { + override dispose(): void { super.dispose(); this.gotDisposed = true; } movedEditor: IMoveResult | undefined = undefined; - rename(): IMoveResult | undefined { return this.movedEditor; } + override rename(): IMoveResult | undefined { return this.movedEditor; } } export class TestEditorPart extends EditorPart { - saveState(): void { + override saveState(): void { return super.saveState(); } @@ -1451,11 +1451,11 @@ export class TestPathService implements IPathService { export class TestTextFileEditorModelManager extends TextFileEditorModelManager { - add(resource: URI, model: TextFileEditorModel): void { + override add(resource: URI, model: TextFileEditorModel): void { return super.add(resource, model); } - remove(resource: URI): void { + override remove(resource: URI): void { return super.remove(resource); } } diff --git a/src/vs/workbench/test/common/workbenchTestServices.ts b/src/vs/workbench/test/common/workbenchTestServices.ts index 2ac7cf5c29d..ee61ed1b479 100644 --- a/src/vs/workbench/test/common/workbenchTestServices.ts +++ b/src/vs/workbench/test/common/workbenchTestServices.ts @@ -121,7 +121,7 @@ export class TestContextService implements IWorkspaceContextService { export class TestStorageService extends InMemoryStorageService { - emitWillSaveState(reason: WillSaveStateReason): void { + override emitWillSaveState(reason: WillSaveStateReason): void { super.emitWillSaveState(reason); } } diff --git a/src/vs/workbench/test/electron-browser/api/extHostSearch.test.ts b/src/vs/workbench/test/electron-browser/api/extHostSearch.test.ts index 8689fe654de..f5b55c70feb 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostSearch.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostSearch.test.ts @@ -148,7 +148,7 @@ suite('ExtHostSearch', () => { this._pfs = mockPFS as any; } - protected createTextSearchManager(query: ITextQuery, provider: vscode.TextSearchProvider): TextSearchManager { + protected override createTextSearchManager(query: ITextQuery, provider: vscode.TextSearchProvider): TextSearchManager { return new NativeTextSearchManager(query, provider, this._pfs); } }; From 5904b7b686e9274631893d560fdbc55a5567f878 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Thu, 8 Apr 2021 10:33:02 -0700 Subject: [PATCH 072/115] chore: info.plist => Info.plist --- build/darwin/create-universal-app.js | 2 +- build/darwin/create-universal-app.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/darwin/create-universal-app.js b/build/darwin/create-universal-app.js index 126847c36e3..d455a5cef70 100644 --- a/build/darwin/create-universal-app.js +++ b/build/darwin/create-universal-app.js @@ -33,7 +33,7 @@ async function main() { 'Credits.rtf', 'CodeResources', 'fsevents.node', - 'info.plist', // TODO@deepak1556: regressed with 11.4.2 internal builds + 'Info.plist', // TODO@deepak1556: regressed with 11.4.2 internal builds '.npmrc' ], outAppPath, diff --git a/build/darwin/create-universal-app.ts b/build/darwin/create-universal-app.ts index 13a13e01cd2..b13e80100e6 100644 --- a/build/darwin/create-universal-app.ts +++ b/build/darwin/create-universal-app.ts @@ -38,7 +38,7 @@ async function main() { 'Credits.rtf', 'CodeResources', 'fsevents.node', - 'info.plist', // TODO@deepak1556: regressed with 11.4.2 internal builds + 'Info.plist', // TODO@deepak1556: regressed with 11.4.2 internal builds '.npmrc' ], outAppPath, From 86bf027920105f0a9af3de25fc3da3bf2648a104 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 10:34:28 -0700 Subject: [PATCH 073/115] Add a few more overrides in codebase For #120675 - Manually fix a few cases the automation missed - Fix cases where an injected service is incorrectly being re-declared in a subclass --- .../browser/services/bulkEditService.ts | 4 +- .../browser/parts/editor/textEditor.ts | 2 +- .../browser/parts/statusbar/statusbarPart.ts | 14 ++-- .../browser/parts/views/viewPaneContainer.ts | 4 +- src/vs/workbench/browser/viewlet.ts | 10 +-- .../extensions/browser/extensionEditor.ts | 8 +- .../contrib/files/browser/explorerViewlet.ts | 6 +- .../notebook/browser/diff/diffComponents.ts | 80 +++++++++---------- .../notebook/browser/notebookEditor.ts | 26 +++--- .../common/model/notebookCellTextModel.ts | 2 +- .../notebook/common/notebookEditorInput.ts | 22 ++--- .../notebook/test/testNotebookEditor.ts | 12 +-- .../contrib/remote/browser/remote.ts | 10 +-- .../contrib/remote/browser/tunnelView.ts | 18 ++--- .../contrib/terminal/browser/terminalView.ts | 14 ++-- .../contrib/timeline/browser/timelinePane.ts | 10 +-- .../webview/browser/baseWebviewElement.ts | 2 +- .../contrib/webview/browser/webviewElement.ts | 2 +- .../electron-browser/webviewElement.ts | 12 +-- .../electron-sandbox/iframeWebviewElement.ts | 10 +-- .../test/browser/fileWorkingCopy.test.ts | 2 +- .../test/browser/workbenchTestServices.ts | 2 +- 22 files changed, 136 insertions(+), 136 deletions(-) diff --git a/src/vs/editor/browser/services/bulkEditService.ts b/src/vs/editor/browser/services/bulkEditService.ts index 5a49c330f4c..340cd1c28ea 100644 --- a/src/vs/editor/browser/services/bulkEditService.ts +++ b/src/vs/editor/browser/services/bulkEditService.ts @@ -47,7 +47,7 @@ export class ResourceTextEdit extends ResourceEdit { readonly resource: URI, readonly textEdit: TextEdit, readonly versionId?: number, - readonly metadata?: WorkspaceEditMetadata + metadata?: WorkspaceEditMetadata ) { super(metadata); } @@ -58,7 +58,7 @@ export class ResourceFileEdit extends ResourceEdit { readonly oldResource: URI | undefined, readonly newResource: URI | undefined, readonly options?: WorkspaceFileEditOptions, - readonly metadata?: WorkspaceEditMetadata + metadata?: WorkspaceEditMetadata ) { super(metadata); } diff --git a/src/vs/workbench/browser/parts/editor/textEditor.ts b/src/vs/workbench/browser/parts/editor/textEditor.ts index 44553e4cde9..d3737140996 100644 --- a/src/vs/workbench/browser/parts/editor/textEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textEditor.ts @@ -62,7 +62,7 @@ export abstract class BaseTextEditor extends EditorPane implements ITextEditorPa @IInstantiationService instantiationService: IInstantiationService, @IStorageService storageService: IStorageService, @ITextResourceConfigurationService protected readonly textResourceConfigurationService: ITextResourceConfigurationService, - @IThemeService protected themeService: IThemeService, + @IThemeService themeService: IThemeService, @IEditorService protected editorService: IEditorService, @IEditorGroupsService protected editorGroupService: IEditorGroupsService ) { diff --git a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts index a20db72625f..504336d9615 100644 --- a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts +++ b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts @@ -360,7 +360,7 @@ class ToggleStatusbarEntryVisibilityAction extends Action { this.checked = !model.isHidden(id); } - async run(): Promise { + async override run(): Promise { if (this.model.isHidden(this.id)) { this.model.show(this.id); } else { @@ -375,7 +375,7 @@ class HideStatusbarEntryAction extends Action { super(id, localize('hide', "Hide '{0}'", name), undefined, true); } - async run(): Promise { + async override run(): Promise { this.model.hide(this.id); } } @@ -517,7 +517,7 @@ export class StatusbarPart extends Part implements IStatusbarService { } } - createContentArea(parent: HTMLElement): HTMLElement { + override createContentArea(parent: HTMLElement): HTMLElement { this.element = parent; // Track focus within container @@ -658,7 +658,7 @@ export class StatusbarPart extends Part implements IStatusbarService { return actions; } - updateStyles(): void { + override updateStyles(): void { super.updateStyles(); const container = assertIsDefined(this.getContainer()); @@ -704,7 +704,7 @@ export class StatusbarPart extends Part implements IStatusbarService { return itemContainer; } - layout(width: number, height: number): void { + override layout(width: number, height: number): void { super.layout(width, height); super.layoutContents(width, height); } @@ -736,7 +736,7 @@ class StatusBarCodiconLabel extends SimpleIconLabel { } } - set text(text: string) { + override set text(text: string) { // Progress: insert progress codicon as first element as needed // but keep it stable so that the animation does not reset @@ -940,7 +940,7 @@ class StatusbarEntryItem extends Disposable { } } - dispose(): void { + override dispose(): void { super.dispose(); dispose(this.foregroundListener); diff --git a/src/vs/workbench/browser/parts/views/viewPaneContainer.ts b/src/vs/workbench/browser/parts/views/viewPaneContainer.ts index 61ba8767f47..c7e4e635ae2 100644 --- a/src/vs/workbench/browser/parts/views/viewPaneContainer.ts +++ b/src/vs/workbench/browser/parts/views/viewPaneContainer.ts @@ -96,7 +96,7 @@ class ViewPaneDropOverlay extends Themable { private orientation: Orientation | undefined, private bounds: BoundingRect | undefined, protected location: ViewContainerLocation, - protected themeService: IThemeService, + themeService: IThemeService, ) { super(themeService); this.cleanupOverlayScheduler = this._register(new RunOnceScheduler(() => this.dispose(), 300)); @@ -381,7 +381,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer { @IContextMenuService protected contextMenuService: IContextMenuService, @ITelemetryService protected telemetryService: ITelemetryService, @IExtensionService protected extensionService: IExtensionService, - @IThemeService protected themeService: IThemeService, + @IThemeService themeService: IThemeService, @IStorageService protected storageService: IStorageService, @IWorkspaceContextService protected contextService: IWorkspaceContextService, @IViewDescriptorService protected viewDescriptorService: IViewDescriptorService, diff --git a/src/vs/workbench/browser/viewlet.ts b/src/vs/workbench/browser/viewlet.ts index 4d1fe97779c..31d4a000d14 100644 --- a/src/vs/workbench/browser/viewlet.ts +++ b/src/vs/workbench/browser/viewlet.ts @@ -22,12 +22,12 @@ export abstract class Viewlet extends PaneComposite implements IViewlet { constructor(id: string, @ITelemetryService telemetryService: ITelemetryService, - @IStorageService protected storageService: IStorageService, - @IInstantiationService protected instantiationService: IInstantiationService, + @IStorageService storageService: IStorageService, + @IInstantiationService instantiationService: IInstantiationService, @IThemeService themeService: IThemeService, - @IContextMenuService protected contextMenuService: IContextMenuService, - @IExtensionService protected extensionService: IExtensionService, - @IWorkspaceContextService protected contextService: IWorkspaceContextService, + @IContextMenuService contextMenuService: IContextMenuService, + @IExtensionService extensionService: IExtensionService, + @IWorkspaceContextService contextService: IWorkspaceContextService, @IWorkbenchLayoutService protected layoutService: IWorkbenchLayoutService, @IConfigurationService protected configurationService: IConfigurationService ) { diff --git a/src/vs/workbench/contrib/extensions/browser/extensionEditor.ts b/src/vs/workbench/contrib/extensions/browser/extensionEditor.ts index a960450d732..675fc7aef7c 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionEditor.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionEditor.ts @@ -209,7 +209,7 @@ export class ExtensionEditor extends EditorPane { @IInstantiationService private readonly instantiationService: IInstantiationService, @IViewletService private readonly viewletService: IViewletService, @IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService, - @IThemeService protected themeService: IThemeService, + @IThemeService themeService: IThemeService, @IKeybindingService private readonly keybindingService: IKeybindingService, @INotificationService private readonly notificationService: INotificationService, @IOpenerService private readonly openerService: IOpenerService, @@ -344,7 +344,7 @@ export class ExtensionEditor extends EditorPane { return disposables; } - async setInput(input: ExtensionsInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + override async setInput(input: ExtensionsInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { await super.setInput(input, options, context, token); if (this.template) { await this.updateTemplate(input, this.template, !!options?.preserveFocus); @@ -524,14 +524,14 @@ export class ExtensionEditor extends EditorPane { this.transientDisposables.add(this.extensionRecommendationsService.onDidChangeRecommendations(() => updateRecommendationFn())); } - clearInput(): void { + override clearInput(): void { this.contentDisposables.clear(); this.transientDisposables.clear(); super.clearInput(); } - focus(): void { + override focus(): void { this.activeElement?.focus(); } diff --git a/src/vs/workbench/contrib/files/browser/explorerViewlet.ts b/src/vs/workbench/contrib/files/browser/explorerViewlet.ts index 306248770a6..ebdde76ffdc 100644 --- a/src/vs/workbench/contrib/files/browser/explorerViewlet.ts +++ b/src/vs/workbench/contrib/files/browser/explorerViewlet.ts @@ -173,11 +173,11 @@ export class ExplorerViewPaneContainer extends ViewPaneContainer { constructor( @IWorkbenchLayoutService layoutService: IWorkbenchLayoutService, @ITelemetryService telemetryService: ITelemetryService, - @IWorkspaceContextService protected contextService: IWorkspaceContextService, - @IStorageService protected storageService: IStorageService, + @IWorkspaceContextService contextService: IWorkspaceContextService, + @IStorageService storageService: IStorageService, @IEditorGroupsService private readonly editorGroupService: IEditorGroupsService, @IConfigurationService configurationService: IConfigurationService, - @IInstantiationService protected instantiationService: IInstantiationService, + @IInstantiationService instantiationService: IInstantiationService, @IContextKeyService contextKeyService: IContextKeyService, @IThemeService themeService: IThemeService, @IContextMenuService contextMenuService: IContextMenuService, diff --git a/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts b/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts index 671298c7cf5..caf68ff2184 100644 --- a/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts +++ b/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts @@ -771,16 +771,16 @@ abstract class SingleSideDiffElement extends AbstractElementRenderer { readonly cell: SingleSideDiffElementViewModel, readonly templateData: CellDiffSingleSideRenderTemplate, readonly style: 'left' | 'right' | 'full', - protected readonly instantiationService: IInstantiationService, - protected readonly modeService: IModeService, - protected readonly modelService: IModelService, - protected readonly textModelService: ITextModelService, - protected readonly contextMenuService: IContextMenuService, - protected readonly keybindingService: IKeybindingService, - protected readonly notificationService: INotificationService, - protected readonly menuService: IMenuService, - protected readonly contextKeyService: IContextKeyService, - protected readonly configurationService: IConfigurationService, + instantiationService: IInstantiationService, + modeService: IModeService, + modelService: IModelService, + textModelService: ITextModelService, + contextMenuService: IContextMenuService, + keybindingService: IKeybindingService, + notificationService: INotificationService, + menuService: IMenuService, + contextKeyService: IContextKeyService, + configurationService: IConfigurationService, @@ -964,16 +964,16 @@ export class DeletedElement extends SingleSideDiffElement { readonly notebookEditor: INotebookTextDiffEditor, readonly cell: SingleSideDiffElementViewModel, readonly templateData: CellDiffSingleSideRenderTemplate, - @IModeService readonly modeService: IModeService, - @IModelService readonly modelService: IModelService, - @ITextModelService readonly textModelService: ITextModelService, - @IInstantiationService protected readonly instantiationService: IInstantiationService, - @IContextMenuService protected readonly contextMenuService: IContextMenuService, - @IKeybindingService protected readonly keybindingService: IKeybindingService, - @INotificationService protected readonly notificationService: INotificationService, - @IMenuService protected readonly menuService: IMenuService, - @IContextKeyService protected readonly contextKeyService: IContextKeyService, - @IConfigurationService protected readonly configurationService: IConfigurationService, + @IModeService modeService: IModeService, + @IModelService modelService: IModelService, + @ITextModelService textModelService: ITextModelService, + @IInstantiationService instantiationService: IInstantiationService, + @IContextMenuService contextMenuService: IContextMenuService, + @IKeybindingService keybindingService: IKeybindingService, + @INotificationService notificationService: INotificationService, + @IMenuService menuService: IMenuService, + @IContextKeyService contextKeyService: IContextKeyService, + @IConfigurationService configurationService: IConfigurationService, ) { super(notebookEditor, cell, templateData, 'left', instantiationService, modeService, modelService, textModelService, contextMenuService, keybindingService, notificationService, menuService, contextKeyService, configurationService); @@ -1116,16 +1116,16 @@ export class InsertElement extends SingleSideDiffElement { readonly notebookEditor: INotebookTextDiffEditor, readonly cell: SingleSideDiffElementViewModel, readonly templateData: CellDiffSingleSideRenderTemplate, - @IInstantiationService protected readonly instantiationService: IInstantiationService, - @IModeService readonly modeService: IModeService, - @IModelService readonly modelService: IModelService, - @ITextModelService readonly textModelService: ITextModelService, - @IContextMenuService protected readonly contextMenuService: IContextMenuService, - @IKeybindingService protected readonly keybindingService: IKeybindingService, - @INotificationService protected readonly notificationService: INotificationService, - @IMenuService protected readonly menuService: IMenuService, - @IContextKeyService protected readonly contextKeyService: IContextKeyService, - @IConfigurationService protected readonly configurationService: IConfigurationService, + @IInstantiationService instantiationService: IInstantiationService, + @IModeService modeService: IModeService, + @IModelService modelService: IModelService, + @ITextModelService textModelService: ITextModelService, + @IContextMenuService contextMenuService: IContextMenuService, + @IKeybindingService keybindingService: IKeybindingService, + @INotificationService notificationService: INotificationService, + @IMenuService menuService: IMenuService, + @IContextKeyService contextKeyService: IContextKeyService, + @IConfigurationService configurationService: IConfigurationService, ) { super(notebookEditor, cell, templateData, 'right', instantiationService, modeService, modelService, textModelService, contextMenuService, keybindingService, notificationService, menuService, contextKeyService, configurationService); } @@ -1271,16 +1271,16 @@ export class ModifiedElement extends AbstractElementRenderer { readonly notebookEditor: INotebookTextDiffEditor, readonly cell: SideBySideDiffElementViewModel, readonly templateData: CellDiffSideBySideRenderTemplate, - @IInstantiationService protected readonly instantiationService: IInstantiationService, - @IModeService readonly modeService: IModeService, - @IModelService readonly modelService: IModelService, - @ITextModelService readonly textModelService: ITextModelService, - @IContextMenuService protected readonly contextMenuService: IContextMenuService, - @IKeybindingService protected readonly keybindingService: IKeybindingService, - @INotificationService protected readonly notificationService: INotificationService, - @IMenuService protected readonly menuService: IMenuService, - @IContextKeyService protected readonly contextKeyService: IContextKeyService, - @IConfigurationService protected readonly configurationService: IConfigurationService, + @IInstantiationService instantiationService: IInstantiationService, + @IModeService modeService: IModeService, + @IModelService modelService: IModelService, + @ITextModelService textModelService: ITextModelService, + @IContextMenuService contextMenuService: IContextMenuService, + @IKeybindingService keybindingService: IKeybindingService, + @INotificationService notificationService: INotificationService, + @IMenuService menuService: IMenuService, + @IContextKeyService contextKeyService: IContextKeyService, + @IConfigurationService configurationService: IConfigurationService, ) { super(notebookEditor, cell, templateData, 'full', instantiationService, modeService, modelService, textModelService, contextMenuService, keybindingService, notificationService, menuService, contextKeyService, configurationService); } diff --git a/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts b/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts index 5994e19b720..a50dce30cee 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts @@ -44,7 +44,7 @@ export class NotebookEditor extends EditorPane { // todo@rebornix is there a reason that `super.fireOnDidFocus` isn't used? private readonly _onDidFocusWidget = this._register(new Emitter()); - get onDidFocus(): Event { return this._onDidFocusWidget.event; } + override get onDidFocus(): Event { return this._onDidFocusWidget.event; } private readonly _onDidChangeModel = this._register(new Emitter()); readonly onDidChangeModel: Event = this._onDidChangeModel.event; @@ -71,14 +71,14 @@ export class NotebookEditor extends EditorPane { } override get minimumWidth(): number { return 375; } - get maximumWidth(): number { return Number.POSITIVE_INFINITY; } + override get maximumWidth(): number { return Number.POSITIVE_INFINITY; } // these setters need to exist because this extends from EditorPane override set minimumWidth(value: number) { /*noop*/ } - set maximumWidth(value: number) { /*noop*/ } + override set maximumWidth(value: number) { /*noop*/ } //#region Editor Core - get scopedContextKeyService(): IContextKeyService | undefined { + override get scopedContextKeyService(): IContextKeyService | undefined { return this._widget.value?.scopedContextKeyService; } @@ -94,11 +94,11 @@ export class NotebookEditor extends EditorPane { return this._rootElement; } - getControl(): NotebookEditorWidget | undefined { + override getControl(): NotebookEditorWidget | undefined { return this._widget.value; } - setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { + override setEditorVisible(visible: boolean, group: IEditorGroup | undefined): void { super.setEditorVisible(visible, group); if (group) { this._groupListener.clear(); @@ -119,19 +119,19 @@ export class NotebookEditor extends EditorPane { } } - focus() { + override focus() { super.focus(); this._widget.value?.focus(); } - hasFocus(): boolean { + override hasFocus(): boolean { const activeElement = document.activeElement; const value = this._widget.value; return !!value && (DOM.isAncestor(activeElement, value.getDomNode() || DOM.isAncestor(activeElement, value.getOverflowContainerDomNode()))); } - async setInput(input: NotebookEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { + override async setInput(input: NotebookEditorInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise { clearMarks(input.resource); mark(input.resource, 'startTime'); const group = this.group!; @@ -250,7 +250,7 @@ export class NotebookEditor extends EditorPane { } } - clearInput(): void { + override clearInput(): void { if (this._widget.value) { this._saveEditorViewState(this.input); this._widget.value.onWillHide(); @@ -258,14 +258,14 @@ export class NotebookEditor extends EditorPane { super.clearInput(); } - setOptions(options: EditorOptions | undefined): void { + override setOptions(options: EditorOptions | undefined): void { if (options instanceof NotebookEditorOptions) { this._widget.value?.setOptions(options); } super.setOptions(options); } - protected saveState(): void { + protected override saveState(): void { this._saveEditorViewState(this.input); super.saveState(); } @@ -327,7 +327,7 @@ export class NotebookEditor extends EditorPane { //#endregion - dispose() { + override dispose() { super.dispose(); } diff --git a/src/vs/workbench/contrib/notebook/common/model/notebookCellTextModel.ts b/src/vs/workbench/contrib/notebook/common/model/notebookCellTextModel.ts index 14f1bae80d4..54332fc9be8 100644 --- a/src/vs/workbench/contrib/notebook/common/model/notebookCellTextModel.ts +++ b/src/vs/workbench/contrib/notebook/common/model/notebookCellTextModel.ts @@ -202,7 +202,7 @@ export class NotebookCellTextModel extends Disposable implements ICell { }; } - dispose() { + override dispose() { // Manually release reference to previous text buffer to avoid large leaks // in case someone leaks a CellTextModel reference const emptyDisposedTextBuffer = new PieceTreeTextBuffer([], '', '\n', false, false, true, true); diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorInput.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorInput.ts index 920d4f5f68e..3476f5b11aa 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorInput.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorInput.ts @@ -49,7 +49,7 @@ export class NotebookEditorInput extends EditorInput { this._name = labelService.getUriBasenameLabel(resource); } - dispose() { + override dispose() { this._editorModelReference?.dispose(); this._editorModelReference = null; super.dispose(); @@ -59,26 +59,26 @@ export class NotebookEditorInput extends EditorInput { return NotebookEditorInput.ID; } - getName(): string { + override getName(): string { return this._name; } - isDirty() { + override isDirty() { if (!this._editorModelReference) { return this._defaultDirtyState; } return this._editorModelReference.object.isDirty(); } - isUntitled(): boolean { + override isUntitled(): boolean { return this.resource.scheme === Schemas.untitled; } - isReadonly() { + override isReadonly() { return false; } - async save(group: GroupIdentifier, options?: ISaveOptions): Promise { + override async save(group: GroupIdentifier, options?: ISaveOptions): Promise { if (this._editorModelReference) { if (this.isUntitled()) { @@ -93,7 +93,7 @@ export class NotebookEditorInput extends EditorInput { return undefined; } - async saveAs(group: GroupIdentifier, options?: ISaveOptions): Promise { + override async saveAs(group: GroupIdentifier, options?: ISaveOptions): Promise { if (!this._editorModelReference) { return undefined; } @@ -134,7 +134,7 @@ export class NotebookEditorInput extends EditorInput { } // called when users rename a notebook document - rename(group: GroupIdentifier, target: URI): IMoveResult | undefined { + override rename(group: GroupIdentifier, target: URI): IMoveResult | undefined { if (this._editorModelReference) { const contributedNotebookProviders = this._notebookService.getContributedNotebookProviders(target); @@ -150,13 +150,13 @@ export class NotebookEditorInput extends EditorInput { return { editor: editorInput }; } - async revert(_group: GroupIdentifier, options?: IRevertOptions): Promise { + override async revert(_group: GroupIdentifier, options?: IRevertOptions): Promise { if (this._editorModelReference && this._editorModelReference.object.isDirty()) { await this._editorModelReference.object.revert(options); } } - async resolve(): Promise { + override async resolve(): Promise { if (!await this._notebookService.canResolve(this.viewType)) { return null; } @@ -181,7 +181,7 @@ export class NotebookEditorInput extends EditorInput { return this._editorModelReference.object; } - matches(otherInput: unknown): boolean { + override matches(otherInput: unknown): boolean { if (this === otherInput) { return true; } diff --git a/src/vs/workbench/contrib/notebook/test/testNotebookEditor.ts b/src/vs/workbench/contrib/notebook/test/testNotebookEditor.ts index a67a19ff23e..2fd8b1d813d 100644 --- a/src/vs/workbench/contrib/notebook/test/testNotebookEditor.ts +++ b/src/vs/workbench/contrib/notebook/test/testNotebookEditor.ts @@ -163,20 +163,20 @@ function _createTestNotebookEditor(instantiationService: TestInstantiationServic override dispose() { viewModel.dispose(); } - onDidChangeModel: Event = new Emitter().event; - get viewModel() { return viewModel; } + override onDidChangeModel: Event = new Emitter().event; + override get viewModel() { return viewModel; } override hasModel(): this is IActiveNotebookEditor { return !!this.viewModel; } override getFocus() { return viewModel.getFocus(); } override getSelections() { return viewModel.getSelections(); } override getViewIndex(cell: ICellViewModel) { return listViewInfoAccessor.getViewIndex(cell); } - getCellRangeFromViewRange(startIndex: number, endIndex: number) { return listViewInfoAccessor.getCellRangeFromViewRange(startIndex, endIndex); } - revealCellRangeInView() { } + override getCellRangeFromViewRange(startIndex: number, endIndex: number) { return listViewInfoAccessor.getCellRangeFromViewRange(startIndex, endIndex); } + override revealCellRangeInView() { } override setHiddenAreas(_ranges: ICellRange[]): boolean { return cellList.setHiddenAreas(_ranges, true); } - getActiveCell() { + override getActiveCell() { const elements = cellList.getFocusedElements(); if (elements && elements.length) { @@ -185,7 +185,7 @@ function _createTestNotebookEditor(instantiationService: TestInstantiationServic return undefined; } - hasOutputTextSelection() { + override hasOutputTextSelection() { return false; } }; diff --git a/src/vs/workbench/contrib/remote/browser/remote.ts b/src/vs/workbench/contrib/remote/browser/remote.ts index d8a68ff6633..27f391c8e01 100644 --- a/src/vs/workbench/contrib/remote/browser/remote.ts +++ b/src/vs/workbench/contrib/remote/browser/remote.ts @@ -386,11 +386,11 @@ class HelpPanel extends ViewPane { constructor( protected viewModel: IViewModel, options: IViewPaneOptions, - @IKeybindingService protected keybindingService: IKeybindingService, - @IContextMenuService protected contextMenuService: IContextMenuService, - @IContextKeyService protected contextKeyService: IContextKeyService, - @IConfigurationService protected configurationService: IConfigurationService, - @IInstantiationService protected readonly instantiationService: IInstantiationService, + @IKeybindingService keybindingService: IKeybindingService, + @IContextMenuService contextMenuService: IContextMenuService, + @IContextKeyService contextKeyService: IContextKeyService, + @IConfigurationService configurationService: IConfigurationService, + @IInstantiationService instantiationService: IInstantiationService, @IViewDescriptorService viewDescriptorService: IViewDescriptorService, @IOpenerService openerService: IOpenerService, @IQuickInputService protected quickInputService: IQuickInputService, diff --git a/src/vs/workbench/contrib/remote/browser/tunnelView.ts b/src/vs/workbench/contrib/remote/browser/tunnelView.ts index ed354e8d677..dcebb250784 100644 --- a/src/vs/workbench/contrib/remote/browser/tunnelView.ts +++ b/src/vs/workbench/contrib/remote/browser/tunnelView.ts @@ -681,11 +681,11 @@ export class TunnelPanel extends ViewPane { constructor( protected viewModel: ITunnelViewModel, options: IViewPaneOptions, - @IKeybindingService protected keybindingService: IKeybindingService, - @IContextMenuService protected contextMenuService: IContextMenuService, - @IContextKeyService protected contextKeyService: IContextKeyService, - @IConfigurationService protected configurationService: IConfigurationService, - @IInstantiationService protected readonly instantiationService: IInstantiationService, + @IKeybindingService keybindingService: IKeybindingService, + @IContextMenuService contextMenuService: IContextMenuService, + @IContextKeyService contextKeyService: IContextKeyService, + @IConfigurationService configurationService: IConfigurationService, + @IInstantiationService instantiationService: IInstantiationService, @IViewDescriptorService viewDescriptorService: IViewDescriptorService, @IOpenerService openerService: IOpenerService, @IQuickInputService protected quickInputService: IQuickInputService, @@ -726,7 +726,7 @@ export class TunnelPanel extends ViewPane { return this.remoteExplorerService.tunnelModel.forwarded.size + this.remoteExplorerService.tunnelModel.detected.size; } - protected renderBody(container: HTMLElement): void { + protected override renderBody(container: HTMLElement): void { super.renderBody(container); const panelContainer = dom.append(container, dom.$('.tree-explorer-viewlet-tree-view')); @@ -842,11 +842,11 @@ export class TunnelPanel extends ViewPane { })); } - shouldShowWelcome(): boolean { + override shouldShowWelcome(): boolean { return this.viewModel.isEmpty() && !this.isEditing; } - focus(): void { + override focus(): void { super.focus(); this.table.domFocus(); } @@ -926,7 +926,7 @@ export class TunnelPanel extends ViewPane { } } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.table.layout(height, width); } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 91ddb5992e8..2e601a36452 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -50,7 +50,7 @@ export class TerminalViewPane extends ViewPane { @IContextMenuService _contextMenuService: IContextMenuService, @IInstantiationService private readonly _instantiationService: IInstantiationService, @ITerminalService private readonly _terminalService: ITerminalService, - @IThemeService protected readonly themeService: IThemeService, + @IThemeService themeService: IThemeService, @ITelemetryService telemetryService: ITelemetryService, @INotificationService private readonly _notificationService: INotificationService, @IOpenerService openerService: IOpenerService, @@ -78,7 +78,7 @@ export class TerminalViewPane extends ViewPane { }); } - public renderBody(container: HTMLElement): void { + public override renderBody(container: HTMLElement): void { super.renderBody(container); this._parentDomElement = container; @@ -145,7 +145,7 @@ export class TerminalViewPane extends ViewPane { this._parentDomElement.append(this._tabsViewWrapper); } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this._bodyDimensions.width = width; @@ -154,7 +154,7 @@ export class TerminalViewPane extends ViewPane { this._terminalTabbedView.layout(width, height); } - public getActionViewItem(action: Action): IActionViewItem | undefined { + public override getActionViewItem(action: Action): IActionViewItem | undefined { if (action.id === TERMINAL_COMMAND_ID.SWITCH_TERMINAL) { return this._instantiationService.createInstance(SwitchTerminalActionViewItem, action); } @@ -162,7 +162,7 @@ export class TerminalViewPane extends ViewPane { return super.getActionViewItem(action); } - public focus() { + public override focus() { if (this._terminalService.connectionState === TerminalConnectionState.Connecting) { // If the terminal is waiting to reconnect to remote terminals, then there is no TerminalInstance yet that can // be focused. So wait for connection to finish, then focus. @@ -184,7 +184,7 @@ export class TerminalViewPane extends ViewPane { this._terminalService.getActiveInstance()?.focusWhenReady(); } - shouldShowWelcome(): boolean { + override shouldShowWelcome(): boolean { this._isWelcomeShowing = !this._terminalService.isProcessSupportRegistered && this._terminalService.terminalInstances.length === 0; return this._isWelcomeShowing; } @@ -222,7 +222,7 @@ class SwitchTerminalActionViewItem extends SelectActionViewItem { this._register(attachSelectBoxStyler(this.selectBox, this._themeService)); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); container.classList.add('switch-terminal'); this._register(attachStylerCallback(this._themeService, { selectBorder }, colors => { diff --git a/src/vs/workbench/contrib/timeline/browser/timelinePane.ts b/src/vs/workbench/contrib/timeline/browser/timelinePane.ts index a7050bd2aa6..441ccf059d0 100644 --- a/src/vs/workbench/contrib/timeline/browser/timelinePane.ts +++ b/src/vs/workbench/contrib/timeline/browser/timelinePane.ts @@ -239,12 +239,12 @@ export class TimelinePane extends ViewPane { constructor( options: IViewPaneOptions, - @IKeybindingService protected keybindingService: IKeybindingService, - @IContextMenuService protected contextMenuService: IContextMenuService, - @IContextKeyService protected contextKeyService: IContextKeyService, - @IConfigurationService protected configurationService: IConfigurationService, + @IKeybindingService keybindingService: IKeybindingService, + @IContextMenuService contextMenuService: IContextMenuService, + @IContextKeyService contextKeyService: IContextKeyService, + @IConfigurationService configurationService: IConfigurationService, @IViewDescriptorService viewDescriptorService: IViewDescriptorService, - @IInstantiationService protected readonly instantiationService: IInstantiationService, + @IInstantiationService instantiationService: IInstantiationService, @IEditorService protected editorService: IEditorService, @ICommandService protected commandService: ICommandService, @IProgressService private readonly progressService: IProgressService, diff --git a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts index c66e8283830..b289f7b9664 100644 --- a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts @@ -221,7 +221,7 @@ export abstract class BaseWebview extends Disposable { this._register(webviewThemeDataProvider.onThemeDataChanged(this.style, this)); } - dispose(): void { + override dispose(): void { if (this.element) { this.element.remove(); } diff --git a/src/vs/workbench/contrib/webview/browser/webviewElement.ts b/src/vs/workbench/contrib/webview/browser/webviewElement.ts index d3925d3bfac..84de52657cf 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewElement.ts @@ -128,7 +128,7 @@ export class IFrameWebview extends BaseWebview implements Web } } - public set html(value: string) { + public override set html(value: string) { super.html = this.preprocessHtml(value); } diff --git a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts index b31051b134b..f72cc17681f 100644 --- a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts @@ -186,7 +186,7 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme return element; } - public set contentOptions(options: WebviewContentOptions) { + public override set contentOptions(options: WebviewContentOptions) { this._myLogService.debug(`Webview(${this.id}): will set content options`); super.contentOptions = options; } @@ -197,7 +197,7 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme protected readonly extraContentOptions = {}; - public set html(value: string) { + public override set html(value: string) { this._myLogService.debug(`Webview(${this.id}): will set html`); super.html = rewriteVsCodeResourceUrls(this.id, value); @@ -266,7 +266,7 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme }); } - protected style(): void { + protected override style(): void { super.style(); this.styledFindWidget(); } @@ -345,15 +345,15 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme this._webviewFindWidget?.find(previous); } - public selectAll() { + public override selectAll() { this.element?.selectAll(); } - public copy() { + public override copy() { this.element?.copy(); } - public paste() { + public override paste() { this.element?.paste(); } diff --git a/src/vs/workbench/contrib/webview/electron-sandbox/iframeWebviewElement.ts b/src/vs/workbench/contrib/webview/electron-sandbox/iframeWebviewElement.ts index 3ed06082141..b102b0e937c 100644 --- a/src/vs/workbench/contrib/webview/electron-sandbox/iframeWebviewElement.ts +++ b/src/vs/workbench/contrib/webview/electron-sandbox/iframeWebviewElement.ts @@ -60,14 +60,14 @@ export class ElectronIframeWebview extends IFrameWebview { })); } - protected initElement(extension: WebviewExtensionDescription | undefined, options: WebviewOptions) { + protected override initElement(extension: WebviewExtensionDescription | undefined, options: WebviewOptions) { super.initElement(extension, options, { platform: 'electron', 'vscode-resource-origin': this.webviewResourceEndpoint, }); } - protected get webviewContentEndpoint(): string { + protected override get webviewContentEndpoint(): string { const endpoint = this._environmentService.webviewExternalEndpoint!.replace('{{uuid}}', this.id); if (endpoint[endpoint.length - 1] === '/') { return endpoint.slice(0, endpoint.length - 1); @@ -75,7 +75,7 @@ export class ElectronIframeWebview extends IFrameWebview { return endpoint; } - protected get webviewResourceEndpoint(): string { + protected override get webviewResourceEndpoint(): string { return `https://${this.id}.vscode-webview-test.com`; } @@ -85,11 +85,11 @@ export class ElectronIframeWebview extends IFrameWebview { }; } - protected async doPostMessage(channel: string, data?: any): Promise { + protected override async doPostMessage(channel: string, data?: any): Promise { this.element?.contentWindow!.postMessage({ channel, args: data }, '*'); } - protected preprocessHtml(value: string): string { + protected override preprocessHtml(value: string): string { return rewriteVsCodeResourceUrls(this.id, value); } } diff --git a/src/vs/workbench/services/workingCopy/test/browser/fileWorkingCopy.test.ts b/src/vs/workbench/services/workingCopy/test/browser/fileWorkingCopy.test.ts index 51332a172f9..725498a599b 100644 --- a/src/vs/workbench/services/workingCopy/test/browser/fileWorkingCopy.test.ts +++ b/src/vs/workbench/services/workingCopy/test/browser/fileWorkingCopy.test.ts @@ -64,7 +64,7 @@ export class TestFileWorkingCopyModel extends Disposable implements IFileWorking this.pushedStackElement = true; } - dispose(): void { + override dispose(): void { this._onWillDispose.fire(); super.dispose(); diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index 72cbf19d1a0..a3c3765e649 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -268,7 +268,7 @@ export class TestTextFileService extends BrowserTextFileService { private writeError: FileOperationError | undefined = undefined; constructor( - @IFileService protected fileService: IFileService, + @IFileService fileService: IFileService, @IUntitledTextEditorService untitledTextEditorService: IUntitledTextEditorService, @ILifecycleService lifecycleService: ILifecycleService, @IInstantiationService instantiationService: IInstantiationService, From e29e1f908a435cc8acf2563c10b24dbc20f83b98 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 10:52:13 -0700 Subject: [PATCH 074/115] Adding a few more overrides For #120675 - Manually fix a few more cases automation missed - Fix cases where an injected service is incorrectly being re-declared in a subclass --- src/vs/platform/userDataSync/common/globalStateSync.ts | 2 +- src/vs/platform/windows/electron-main/window.ts | 2 +- src/vs/workbench/browser/parts/compositePart.ts | 2 +- src/vs/workbench/browser/parts/titlebar/menubarControl.ts | 4 ++-- src/vs/workbench/contrib/comments/browser/commentsView.ts | 2 +- src/vs/workbench/contrib/debug/browser/callStackView.ts | 8 ++++---- .../workbench/contrib/debug/browser/loadedScriptsView.ts | 2 +- .../contrib/extensions/browser/extensionsViews.ts | 2 +- .../workbench/contrib/files/browser/views/explorerView.ts | 2 +- .../notebook/browser/diff/notebookTextDiffEditor.ts | 2 +- .../contrib/scm/browser/scmRepositoriesViewPane.ts | 4 ++-- src/vs/workbench/contrib/search/browser/searchView.ts | 2 +- .../contrib/searchEditor/browser/searchEditor.ts | 4 ++-- .../contrib/testing/browser/testingOutputPeek.ts | 2 +- .../contrib/workspace/browser/workspaceTrustTree.ts | 4 ++-- .../electron-sandbox/parts/titlebar/menubarControl.ts | 2 +- .../electron-sandbox/parts/titlebar/titlebarPart.ts | 2 +- .../extensions/electron-browser/extensionService.ts | 2 +- .../services/lifecycle/browser/lifecycleService.ts | 2 +- .../lifecycle/electron-sandbox/lifecycleService.ts | 2 +- .../services/quickinput/browser/quickInputService.ts | 2 +- .../services/workingCopy/common/fileWorkingCopy.ts | 4 ++-- .../electron-sandbox/workspaceEditingService.ts | 4 ++-- .../test/electron-browser/workbenchTestServices.ts | 6 +++--- 24 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/vs/platform/userDataSync/common/globalStateSync.ts b/src/vs/platform/userDataSync/common/globalStateSync.ts index a3a284efab6..8a519f72d64 100644 --- a/src/vs/platform/userDataSync/common/globalStateSync.ts +++ b/src/vs/platform/userDataSync/common/globalStateSync.ts @@ -81,7 +81,7 @@ export class GlobalStateSynchroniser extends AbstractSynchroniser implements IUs @IUserDataSyncStoreService userDataSyncStoreService: IUserDataSyncStoreService, @IUserDataSyncBackupStoreService userDataSyncBackupStoreService: IUserDataSyncBackupStoreService, @IUserDataSyncLogService logService: IUserDataSyncLogService, - @IEnvironmentService readonly environmentService: IEnvironmentService, + @IEnvironmentService environmentService: IEnvironmentService, @IUserDataSyncResourceEnablementService userDataSyncResourceEnablementService: IUserDataSyncResourceEnablementService, @ITelemetryService telemetryService: ITelemetryService, @IConfigurationService configurationService: IConfigurationService, diff --git a/src/vs/platform/windows/electron-main/window.ts b/src/vs/platform/windows/electron-main/window.ts index 35116e4814f..ae763ca99b0 100644 --- a/src/vs/platform/windows/electron-main/window.ts +++ b/src/vs/platform/windows/electron-main/window.ts @@ -1328,7 +1328,7 @@ export class CodeWindow extends Disposable implements ICodeWindow { return segments; } - dispose(): void { + override dispose(): void { super.dispose(); if (this.showTimeoutHandle) { diff --git a/src/vs/workbench/browser/parts/compositePart.ts b/src/vs/workbench/browser/parts/compositePart.ts index 9e27444ba5f..5906a9ea9da 100644 --- a/src/vs/workbench/browser/parts/compositePart.ts +++ b/src/vs/workbench/browser/parts/compositePart.ts @@ -75,7 +75,7 @@ export abstract class CompositePart extends Part { protected readonly storageService: IStorageService, private readonly telemetryService: ITelemetryService, protected readonly contextMenuService: IContextMenuService, - protected readonly layoutService: IWorkbenchLayoutService, + layoutService: IWorkbenchLayoutService, protected readonly keybindingService: IKeybindingService, protected readonly instantiationService: IInstantiationService, themeService: IThemeService, diff --git a/src/vs/workbench/browser/parts/titlebar/menubarControl.ts b/src/vs/workbench/browser/parts/titlebar/menubarControl.ts index 2804a0edaab..e46d6becdd3 100644 --- a/src/vs/workbench/browser/parts/titlebar/menubarControl.ts +++ b/src/vs/workbench/browser/parts/titlebar/menubarControl.ts @@ -312,11 +312,11 @@ export class CustomMenubarControl extends MenubarControl { @IStorageService storageService: IStorageService, @INotificationService notificationService: INotificationService, @IPreferencesService preferencesService: IPreferencesService, - @IWorkbenchEnvironmentService protected readonly environmentService: IWorkbenchEnvironmentService, + @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService, @IAccessibilityService accessibilityService: IAccessibilityService, @IThemeService private readonly themeService: IThemeService, @IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService, - @IHostService protected readonly hostService: IHostService, + @IHostService hostService: IHostService, @ICommandService commandService: ICommandService ) { super(menuService, workspacesService, contextKeyService, keybindingService, configurationService, labelService, updateService, storageService, notificationService, preferencesService, environmentService, accessibilityService, hostService, commandService); diff --git a/src/vs/workbench/contrib/comments/browser/commentsView.ts b/src/vs/workbench/contrib/comments/browser/commentsView.ts index 8d3b040f9b8..ae81e533508 100644 --- a/src/vs/workbench/contrib/comments/browser/commentsView.ts +++ b/src/vs/workbench/contrib/comments/browser/commentsView.ts @@ -44,7 +44,7 @@ export class CommentsPanel extends ViewPane { constructor( options: IViewPaneOptions, - @IInstantiationService readonly instantiationService: IInstantiationService, + @IInstantiationService instantiationService: IInstantiationService, @IViewDescriptorService viewDescriptorService: IViewDescriptorService, @IEditorService private readonly editorService: IEditorService, @IConfigurationService configurationService: IConfigurationService, diff --git a/src/vs/workbench/contrib/debug/browser/callStackView.ts b/src/vs/workbench/contrib/debug/browser/callStackView.ts index b4499108d7b..94c7b595f3c 100644 --- a/src/vs/workbench/contrib/debug/browser/callStackView.ts +++ b/src/vs/workbench/contrib/debug/browser/callStackView.ts @@ -138,7 +138,7 @@ export class CallStackView extends ViewPane { @IEditorService private readonly editorService: IEditorService, @IConfigurationService configurationService: IConfigurationService, @IMenuService menuService: IMenuService, - @IContextKeyService readonly contextKeyService: IContextKeyService, + @IContextKeyService contextKeyService: IContextKeyService, @IOpenerService openerService: IOpenerService, @IThemeService themeService: IThemeService, @ITelemetryService telemetryService: ITelemetryService @@ -211,7 +211,7 @@ export class CallStackView extends ViewPane { this.stateMessageLabel = dom.append(this.stateMessage, $('span.label')); } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this.element.classList.add('debug-pane'); container.classList.add('debug-call-stack'); @@ -366,12 +366,12 @@ export class CallStackView extends ViewPane { })); } - layoutBody(height: number, width: number): void { + override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.tree.layout(height, width); } - focus(): void { + override focus(): void { this.tree.domFocus(); } diff --git a/src/vs/workbench/contrib/debug/browser/loadedScriptsView.ts b/src/vs/workbench/contrib/debug/browser/loadedScriptsView.ts index c9733a43bd3..458e6f16f50 100644 --- a/src/vs/workbench/contrib/debug/browser/loadedScriptsView.ts +++ b/src/vs/workbench/contrib/debug/browser/loadedScriptsView.ts @@ -426,7 +426,7 @@ export class LoadedScriptsView extends ViewPane { @IViewDescriptorService viewDescriptorService: IViewDescriptorService, @IConfigurationService configurationService: IConfigurationService, @IEditorService private readonly editorService: IEditorService, - @IContextKeyService readonly contextKeyService: IContextKeyService, + @IContextKeyService contextKeyService: IContextKeyService, @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, @IDebugService private readonly debugService: IDebugService, @ILabelService private readonly labelService: ILabelService, diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsViews.ts b/src/vs/workbench/contrib/extensions/browser/extensionsViews.ts index 0ab5c5927ec..fc7c509e077 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsViews.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsViews.ts @@ -108,7 +108,7 @@ export class ExtensionsListView extends ViewPane { @INotificationService protected notificationService: INotificationService, @IKeybindingService keybindingService: IKeybindingService, @IContextMenuService contextMenuService: IContextMenuService, - @IInstantiationService protected instantiationService: IInstantiationService, + @IInstantiationService instantiationService: IInstantiationService, @IThemeService themeService: IThemeService, @IExtensionService private readonly extensionService: IExtensionService, @IExtensionsWorkbenchService protected extensionsWorkbenchService: IExtensionsWorkbenchService, diff --git a/src/vs/workbench/contrib/files/browser/views/explorerView.ts b/src/vs/workbench/contrib/files/browser/views/explorerView.ts index f8512b1715b..3238e107fb9 100644 --- a/src/vs/workbench/contrib/files/browser/views/explorerView.ts +++ b/src/vs/workbench/contrib/files/browser/views/explorerView.ts @@ -175,7 +175,7 @@ export class ExplorerView extends ViewPane { @IConfigurationService configurationService: IConfigurationService, @IDecorationsService private readonly decorationService: IDecorationsService, @ILabelService private readonly labelService: ILabelService, - @IThemeService protected themeService: IWorkbenchThemeService, + @IThemeService themeService: IWorkbenchThemeService, @IMenuService private readonly menuService: IMenuService, @ITelemetryService telemetryService: ITelemetryService, @IExplorerService private readonly explorerService: IExplorerService, diff --git a/src/vs/workbench/contrib/notebook/browser/diff/notebookTextDiffEditor.ts b/src/vs/workbench/contrib/notebook/browser/diff/notebookTextDiffEditor.ts index ef7e28ece69..fdace97a2fa 100644 --- a/src/vs/workbench/contrib/notebook/browser/diff/notebookTextDiffEditor.ts +++ b/src/vs/workbench/contrib/notebook/browser/diff/notebookTextDiffEditor.ts @@ -84,7 +84,7 @@ export class NotebookTextDiffEditor extends EditorPane implements INotebookTextD constructor( @IInstantiationService readonly instantiationService: IInstantiationService, - @IThemeService readonly themeService: IThemeService, + @IThemeService themeService: IThemeService, @IContextKeyService readonly contextKeyService: IContextKeyService, @INotebookEditorWorkerService readonly notebookEditorWorkerService: INotebookEditorWorkerService, @IConfigurationService private readonly configurationService: IConfigurationService, diff --git a/src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts index 85b35ceac5d..bfb89c415f4 100644 --- a/src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts @@ -43,8 +43,8 @@ export class SCMRepositoriesViewPane extends ViewPane { options: IViewPaneOptions, @ISCMService protected scmService: ISCMService, @ISCMViewService protected scmViewService: ISCMViewService, - @IKeybindingService protected keybindingService: IKeybindingService, - @IContextMenuService protected contextMenuService: IContextMenuService, + @IKeybindingService keybindingService: IKeybindingService, + @IContextMenuService contextMenuService: IContextMenuService, @IInstantiationService instantiationService: IInstantiationService, @IViewDescriptorService viewDescriptorService: IViewDescriptorService, @IContextKeyService contextKeyService: IContextKeyService, diff --git a/src/vs/workbench/contrib/search/browser/searchView.ts b/src/vs/workbench/contrib/search/browser/searchView.ts index db3dae14894..ff3b99b434d 100644 --- a/src/vs/workbench/contrib/search/browser/searchView.ts +++ b/src/vs/workbench/contrib/search/browser/searchView.ts @@ -158,7 +158,7 @@ export class SearchView extends ViewPane { @IConfigurationService configurationService: IConfigurationService, @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, @ISearchWorkbenchService private readonly searchWorkbenchService: ISearchWorkbenchService, - @IContextKeyService readonly contextKeyService: IContextKeyService, + @IContextKeyService contextKeyService: IContextKeyService, @IReplaceService private readonly replaceService: IReplaceService, @ITextFileService private readonly textFileService: ITextFileService, @IPreferencesService private readonly preferencesService: IPreferencesService, diff --git a/src/vs/workbench/contrib/searchEditor/browser/searchEditor.ts b/src/vs/workbench/contrib/searchEditor/browser/searchEditor.ts index 13012897c0d..96cdf07143e 100644 --- a/src/vs/workbench/contrib/searchEditor/browser/searchEditor.ts +++ b/src/vs/workbench/contrib/searchEditor/browser/searchEditor.ts @@ -98,8 +98,8 @@ export class SearchEditor extends BaseTextEditor { @IContextKeyService readonly contextKeyService: IContextKeyService, @IEditorProgressService readonly progressService: IEditorProgressService, @ITextResourceConfigurationService textResourceService: ITextResourceConfigurationService, - @IEditorGroupsService protected editorGroupService: IEditorGroupsService, - @IEditorService protected editorService: IEditorService, + @IEditorGroupsService editorGroupService: IEditorGroupsService, + @IEditorService editorService: IEditorService, @IConfigurationService protected configurationService: IConfigurationService, @IFileService private readonly fileService: IFileService ) { diff --git a/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts b/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts index 4a778721adb..53a647c5267 100644 --- a/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts +++ b/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts @@ -293,7 +293,7 @@ abstract class TestingOutputPeek extends PeekViewWidget { @IThemeService themeService: IThemeService, @IPeekViewService peekViewService: IPeekViewService, @IContextKeyService contextKeyService: IContextKeyService, - @IInstantiationService protected readonly instantiationService: IInstantiationService, + @IInstantiationService instantiationService: IInstantiationService, @ITextModelService protected readonly modelService: ITextModelService, ) { super(editor, { showFrame: false, showArrow: true, isResizeable: true, isAccessible: true, className: 'test-output-peek' }, instantiationService); diff --git a/src/vs/workbench/contrib/workspace/browser/workspaceTrustTree.ts b/src/vs/workbench/contrib/workspace/browser/workspaceTrustTree.ts index 71e235f4f82..45cff46da33 100644 --- a/src/vs/workbench/contrib/workspace/browser/workspaceTrustTree.ts +++ b/src/vs/workbench/contrib/workspace/browser/workspaceTrustTree.ts @@ -76,8 +76,8 @@ class WorkspaceTrustFolderSettingWidget extends AbstractListSettingWidget extends Disposable return this.disposed; } - dispose(): void { + override dispose(): void { this.logService.trace('[file working copy] dispose()', this.resource.toString(true)); // State diff --git a/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts b/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts index a6e8dac55e2..2a8cb865b01 100644 --- a/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts +++ b/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts @@ -49,9 +49,9 @@ export class NativeWorkspaceEditingService extends AbstractWorkspaceEditingServi @IFileService fileService: IFileService, @ITextFileService textFileService: ITextFileService, @IWorkspacesService workspacesService: IWorkspacesService, - @INativeWorkbenchEnvironmentService protected environmentService: INativeWorkbenchEnvironmentService, + @INativeWorkbenchEnvironmentService environmentService: INativeWorkbenchEnvironmentService, @IFileDialogService fileDialogService: IFileDialogService, - @IDialogService protected dialogService: IDialogService, + @IDialogService dialogService: IDialogService, @ILifecycleService private readonly lifecycleService: ILifecycleService, @ILabelService private readonly labelService: ILabelService, @IHostService hostService: IHostService, diff --git a/src/vs/workbench/test/electron-browser/workbenchTestServices.ts b/src/vs/workbench/test/electron-browser/workbenchTestServices.ts index dee830e269d..4e91640d39f 100644 --- a/src/vs/workbench/test/electron-browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/electron-browser/workbenchTestServices.ts @@ -73,7 +73,7 @@ export class TestTextFileService extends NativeTextFileService { private resolveTextContentError!: FileOperationError | null; constructor( - @IFileService protected fileService: IFileService, + @IFileService fileService: IFileService, @IUntitledTextEditorService untitledTextEditorService: IUntitledTextEditorService, @ILifecycleService lifecycleService: ILifecycleService, @IInstantiationService instantiationService: IInstantiationService, @@ -119,7 +119,7 @@ export class TestTextFileService extends NativeTextFileService { this.resolveTextContentError = error; } - async readStream(resource: URI, options?: IReadTextFileOptions): Promise { + override async readStream(resource: URI, options?: IReadTextFileOptions): Promise { if (this.resolveTextContentError) { const error = this.resolveTextContentError; this.resolveTextContentError = null; @@ -144,7 +144,7 @@ export class TestTextFileService extends NativeTextFileService { export class TestNativeTextFileServiceWithEncodingOverrides extends NativeTextFileService { private _testEncoding: TestEncodingOracle | undefined; - get encoding(): TestEncodingOracle { + override get encoding(): TestEncodingOracle { if (!this._testEncoding) { this._testEncoding = this._register(this.instantiationService.createInstance(TestEncodingOracle)); } From ae1452eea678f5266ef513f22dacebb90955d6c9 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 10:52:34 -0700 Subject: [PATCH 075/115] Add script to run build with noImplicitOverride --- package.json | 450 +++++++++++++++++++++++++-------------------------- 1 file changed, 225 insertions(+), 225 deletions(-) diff --git a/package.json b/package.json index 82ba6ba716f..42e74a4484f 100644 --- a/package.json +++ b/package.json @@ -1,227 +1,227 @@ { - "name": "code-oss-dev", - "version": "1.56.0", - "distro": "fca0eb45354a13177b2235c30af9b6b158ed9b15", - "author": { - "name": "Microsoft Corporation" - }, - "license": "MIT", - "main": "./out/main", - "private": true, - "scripts": { - "test": "mocha", - "test-browser": "node test/unit/browser/index.js", - "preinstall": "node build/npm/preinstall.js", - "postinstall": "node build/npm/postinstall.js", - "compile": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile", - "watch": "npm-run-all -lp watch-client watch-extensions watch-extension-media", - "watchd": "deemon yarn watch", - "watch-webd": "deemon yarn watch-web", - "kill-watchd": "deemon --kill yarn watch", - "kill-watch-webd": "deemon --kill yarn watch-web", - "restart-watchd": "deemon --restart yarn watch", - "restart-watch-webd": "deemon --restart yarn watch-web", - "watch-client": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-client", - "watch-clientd": "deemon yarn watch-client", - "kill-watch-clientd": "deemon --kill yarn watch-client", - "watch-extensions": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-extensions", - "watch-extension-media": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-extension-media", - "watch-extensionsd": "deemon yarn watch-extensions", - "kill-watch-extensionsd": "deemon --kill yarn watch-extensions", - "mocha": "mocha test/unit/node/all.js --delay", - "precommit": "node build/hygiene.js", - "gulp": "node --max_old_space_size=8192 ./node_modules/gulp/bin/gulp.js", - "electron": "node build/lib/electron", - "7z": "7z", - "update-grammars": "node build/npm/update-all-grammars.js", - "update-localization-extension": "node build/npm/update-localization-extension.js", - "smoketest": "cd test/smoke && yarn compile && node test/index.js", - "smoketest-no-compile": "cd test/smoke && node test/index.js", - "download-builtin-extensions": "node build/lib/builtInExtensions.js", - "download-builtin-extensions-cg": "node build/lib/builtInExtensionsCG.js", - "monaco-compile-check": "tsc -p src/tsconfig.monaco.json --noEmit", - "tsec-compile-check": "node node_modules/tsec/bin/tsec -p src/tsconfig.tsec.json", - "valid-layers-check": "node build/lib/layersChecker.js", - "strict-function-types-watch": "tsc --watch -p src/tsconfig.json --noEmit --strictFunctionTypes", - "update-distro": "node build/npm/update-distro.js", - "web": "node resources/web/code-web.js", - "compile-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-web", - "watch-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-web", - "eslint": "node build/eslint", - "electron-rebuild": "electron-rebuild --arch=arm64 --force --version=11.4.2", - "playwright-install": "node build/azure-pipelines/common/installPlaywright.js", - "compile-build": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-build", - "compile-extensions-build": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-extensions-build", - "minify-vscode": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode", - "minify-vscode-reh": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode-reh", - "minify-vscode-reh-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode-reh-web", - "hygiene": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js hygiene", - "core-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js core-ci", - "extensions-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js extensions-ci" - }, - "dependencies": { - "applicationinsights": "1.0.8", - "chokidar": "3.5.1", - "graceful-fs": "4.2.3", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.3", - "iconv-lite-umd": "0.6.8", - "jschardet": "2.3.0", - "keytar": "7.2.0", - "minimist": "^1.2.5", - "native-is-elevated": "0.4.3", - "native-keymap": "2.2.1", - "native-watchdog": "1.3.0", - "node-pty": "0.10.0-beta19", - "nsfw": "2.1.2", - "spdlog": "^0.11.1", - "sudo-prompt": "9.2.1", - "tas-client-umd": "0.1.4", - "v8-inspect-profiler": "^0.0.20", - "vscode-oniguruma": "1.3.1", - "vscode-proxy-agent": "^0.8.2", - "vscode-regexpp": "^3.1.0", - "vscode-ripgrep": "^1.11.1", - "vscode-sqlite3": "4.0.10", - "vscode-textmate": "5.2.0", - "xterm": "4.12.0-beta.20", - "xterm-addon-search": "0.9.0-beta.1", - "xterm-addon-unicode11": "0.3.0-beta.4", - "xterm-addon-webgl": "0.11.0-beta.7", - "yauzl": "^2.9.2", - "yazl": "^2.4.3" - }, - "devDependencies": { - "7zip": "0.0.6", - "@types/applicationinsights": "0.20.0", - "@types/chokidar": "2.1.3", - "@types/cookie": "^0.3.3", - "@types/copy-webpack-plugin": "^6.0.3", - "@types/cssnano": "^4.0.0", - "@types/debug": "4.1.5", - "@types/graceful-fs": "4.1.2", - "@types/gulp-postcss": "^8.0.0", - "@types/http-proxy-agent": "^2.0.1", - "@types/keytar": "^4.4.0", - "@types/minimist": "^1.2.1", - "@types/mocha": "^8.2.0", - "@types/node": "^12.19.9", - "@types/sinon": "^1.16.36", - "@types/trusted-types": "^1.0.6", - "@types/vscode-windows-registry": "^1.0.0", - "@types/webpack": "^4.41.25", - "@types/windows-foreground-love": "^0.3.0", - "@types/windows-mutex": "^0.4.0", - "@types/windows-process-tree": "^0.2.0", - "@types/winreg": "^1.2.30", - "@types/yauzl": "^2.9.1", - "@types/yazl": "^2.4.2", - "@typescript-eslint/eslint-plugin": "3.2.0", - "@typescript-eslint/parser": "^3.3.0", - "ansi-colors": "^3.2.3", - "asar": "^3.0.3", - "chromium-pickle-js": "^0.2.0", - "copy-webpack-plugin": "^6.0.3", - "cson-parser": "^1.3.3", - "css-loader": "^3.2.0", - "cssnano": "^4.1.11", - "debounce": "^1.0.0", - "deemon": "^1.4.0", - "electron": "11.4.2", - "electron-rebuild": "2.0.3", - "eslint": "6.8.0", - "eslint-plugin-jsdoc": "^19.1.0", - "event-stream": "3.3.4", - "fancy-log": "^1.3.3", - "fast-plist": "0.1.2", - "file-loader": "^4.2.0", - "glob": "^5.0.13", - "gulp": "^4.0.0", - "gulp-atom-electron": "^1.30.1", - "gulp-azure-storage": "^0.11.1", - "gulp-bom": "^3.0.0", - "gulp-buffer": "0.0.2", - "gulp-concat": "^2.6.1", - "gulp-eslint": "^5.0.0", - "gulp-filter": "^5.1.0", - "gulp-flatmap": "^1.0.2", - "gulp-gunzip": "^1.0.0", - "gulp-gzip": "^1.4.2", - "gulp-json-editor": "^2.5.0", - "gulp-plumber": "^1.2.0", - "gulp-postcss": "^9.0.0", - "gulp-remote-retry-src": "^0.6.0", - "gulp-rename": "^1.2.0", - "gulp-replace": "^0.5.4", - "gulp-shell": "^0.6.5", - "gulp-sourcemaps": "^3.0.0", - "gulp-tsb": "4.0.6", - "gulp-untar": "^0.0.7", - "gulp-vinyl-zip": "^2.1.2", - "husky": "^0.13.1", - "innosetup": "6.0.5", - "is": "^3.1.0", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", - "jsdom-no-contextify": "^3.1.0", - "lazy.js": "^0.4.2", - "merge-options": "^1.0.1", - "mime": "^1.4.1", - "minimatch": "^3.0.4", - "minimist": "^1.2.5", - "mkdirp": "^1.0.4", - "mocha": "^8.2.1", - "mocha-junit-reporter": "^2.0.0", - "mocha-multi-reporters": "^1.5.1", - "npm-run-all": "^4.1.5", - "opn": "^6.0.0", - "optimist": "0.3.5", - "p-all": "^1.0.0", - "playwright": "1.8.0", - "pump": "^1.0.1", - "queue": "3.0.6", - "rcedit": "^1.1.0", - "request": "^2.85.0", - "rimraf": "^2.2.8", - "sinon": "^1.17.2", - "source-map": "0.6.1", - "source-map-support": "^0.3.2", - "style-loader": "^1.0.0", - "ts-loader": "^6.2.1", - "tsec": "0.1.4", - "typescript": "^4.3.0-dev.20210407", - "typescript-formatter": "7.1.0", - "underscore": "^1.8.2", - "vinyl": "^2.0.0", - "vinyl-fs": "^3.0.0", - "vscode-debugprotocol": "1.46.0", - "vscode-nls-dev": "^3.3.1", - "vscode-telemetry-extractor": "^1.7.0", - "webpack": "^4.43.0", - "webpack-cli": "^3.3.12", - "webpack-stream": "^5.2.1", - "xml2js": "^0.4.17", - "yaserver": "^0.2.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/microsoft/vscode.git" - }, - "bugs": { - "url": "https://github.com/microsoft/vscode/issues" - }, - "optionalDependencies": { - "vscode-windows-ca-certs": "^0.3.0", - "vscode-windows-registry": "1.0.3", - "windows-foreground-love": "0.2.0", - "windows-mutex": "0.3.0", - "windows-process-tree": "0.2.4" - }, - "resolutions": { - "elliptic": "^6.5.3", - "nwmatcher": "^1.4.4" - } + "name": "code-oss-dev", + "version": "1.56.0", + "distro": "fca0eb45354a13177b2235c30af9b6b158ed9b15", + "author": { + "name": "Microsoft Corporation" + }, + "license": "MIT", + "main": "./out/main", + "private": true, + "scripts": { + "test": "mocha", + "test-browser": "node test/unit/browser/index.js", + "preinstall": "node build/npm/preinstall.js", + "postinstall": "node build/npm/postinstall.js", + "compile": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile", + "watch": "npm-run-all -lp watch-client watch-extensions watch-extension-media", + "watchd": "deemon yarn watch", + "watch-webd": "deemon yarn watch-web", + "kill-watchd": "deemon --kill yarn watch", + "kill-watch-webd": "deemon --kill yarn watch-web", + "restart-watchd": "deemon --restart yarn watch", + "restart-watch-webd": "deemon --restart yarn watch-web", + "watch-client": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-client", + "watch-clientd": "deemon yarn watch-client", + "kill-watch-clientd": "deemon --kill yarn watch-client", + "watch-extensions": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-extensions", + "watch-extension-media": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-extension-media", + "watch-extensionsd": "deemon yarn watch-extensions", + "kill-watch-extensionsd": "deemon --kill yarn watch-extensions", + "mocha": "mocha test/unit/node/all.js --delay", + "precommit": "node build/hygiene.js", + "gulp": "node --max_old_space_size=8192 ./node_modules/gulp/bin/gulp.js", + "electron": "node build/lib/electron", + "7z": "7z", + "update-grammars": "node build/npm/update-all-grammars.js", + "update-localization-extension": "node build/npm/update-localization-extension.js", + "smoketest": "cd test/smoke && yarn compile && node test/index.js", + "smoketest-no-compile": "cd test/smoke && node test/index.js", + "download-builtin-extensions": "node build/lib/builtInExtensions.js", + "download-builtin-extensions-cg": "node build/lib/builtInExtensionsCG.js", + "monaco-compile-check": "tsc -p src/tsconfig.monaco.json --noEmit", + "tsec-compile-check": "node node_modules/tsec/bin/tsec -p src/tsconfig.tsec.json", + "valid-layers-check": "node build/lib/layersChecker.js", + "no-implicit-override-watch": "tsc --watch -p src/tsconfig.json --noEmit --noImplicitOverride", + "update-distro": "node build/npm/update-distro.js", + "web": "node resources/web/code-web.js", + "compile-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-web", + "watch-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-web", + "eslint": "node build/eslint", + "electron-rebuild": "electron-rebuild --arch=arm64 --force --version=11.4.2", + "playwright-install": "node build/azure-pipelines/common/installPlaywright.js", + "compile-build": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-build", + "compile-extensions-build": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-extensions-build", + "minify-vscode": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode", + "minify-vscode-reh": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode-reh", + "minify-vscode-reh-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode-reh-web", + "hygiene": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js hygiene", + "core-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js core-ci", + "extensions-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js extensions-ci" + }, + "dependencies": { + "applicationinsights": "1.0.8", + "chokidar": "3.5.1", + "graceful-fs": "4.2.3", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "iconv-lite-umd": "0.6.8", + "jschardet": "2.3.0", + "keytar": "7.2.0", + "minimist": "^1.2.5", + "native-is-elevated": "0.4.3", + "native-keymap": "2.2.1", + "native-watchdog": "1.3.0", + "node-pty": "0.10.0-beta19", + "nsfw": "2.1.2", + "spdlog": "^0.11.1", + "sudo-prompt": "9.2.1", + "tas-client-umd": "0.1.4", + "v8-inspect-profiler": "^0.0.20", + "vscode-oniguruma": "1.3.1", + "vscode-proxy-agent": "^0.8.2", + "vscode-regexpp": "^3.1.0", + "vscode-ripgrep": "^1.11.1", + "vscode-sqlite3": "4.0.10", + "vscode-textmate": "5.2.0", + "xterm": "4.12.0-beta.20", + "xterm-addon-search": "0.9.0-beta.1", + "xterm-addon-unicode11": "0.3.0-beta.4", + "xterm-addon-webgl": "0.11.0-beta.7", + "yauzl": "^2.9.2", + "yazl": "^2.4.3" + }, + "devDependencies": { + "7zip": "0.0.6", + "@types/applicationinsights": "0.20.0", + "@types/chokidar": "2.1.3", + "@types/cookie": "^0.3.3", + "@types/copy-webpack-plugin": "^6.0.3", + "@types/cssnano": "^4.0.0", + "@types/debug": "4.1.5", + "@types/graceful-fs": "4.1.2", + "@types/gulp-postcss": "^8.0.0", + "@types/http-proxy-agent": "^2.0.1", + "@types/keytar": "^4.4.0", + "@types/minimist": "^1.2.1", + "@types/mocha": "^8.2.0", + "@types/node": "^12.19.9", + "@types/sinon": "^1.16.36", + "@types/trusted-types": "^1.0.6", + "@types/vscode-windows-registry": "^1.0.0", + "@types/webpack": "^4.41.25", + "@types/windows-foreground-love": "^0.3.0", + "@types/windows-mutex": "^0.4.0", + "@types/windows-process-tree": "^0.2.0", + "@types/winreg": "^1.2.30", + "@types/yauzl": "^2.9.1", + "@types/yazl": "^2.4.2", + "@typescript-eslint/eslint-plugin": "3.2.0", + "@typescript-eslint/parser": "^3.3.0", + "ansi-colors": "^3.2.3", + "asar": "^3.0.3", + "chromium-pickle-js": "^0.2.0", + "copy-webpack-plugin": "^6.0.3", + "cson-parser": "^1.3.3", + "css-loader": "^3.2.0", + "cssnano": "^4.1.11", + "debounce": "^1.0.0", + "deemon": "^1.4.0", + "electron": "11.4.2", + "electron-rebuild": "2.0.3", + "eslint": "6.8.0", + "eslint-plugin-jsdoc": "^19.1.0", + "event-stream": "3.3.4", + "fancy-log": "^1.3.3", + "fast-plist": "0.1.2", + "file-loader": "^4.2.0", + "glob": "^5.0.13", + "gulp": "^4.0.0", + "gulp-atom-electron": "^1.30.1", + "gulp-azure-storage": "^0.11.1", + "gulp-bom": "^3.0.0", + "gulp-buffer": "0.0.2", + "gulp-concat": "^2.6.1", + "gulp-eslint": "^5.0.0", + "gulp-filter": "^5.1.0", + "gulp-flatmap": "^1.0.2", + "gulp-gunzip": "^1.0.0", + "gulp-gzip": "^1.4.2", + "gulp-json-editor": "^2.5.0", + "gulp-plumber": "^1.2.0", + "gulp-postcss": "^9.0.0", + "gulp-remote-retry-src": "^0.6.0", + "gulp-rename": "^1.2.0", + "gulp-replace": "^0.5.4", + "gulp-shell": "^0.6.5", + "gulp-sourcemaps": "^3.0.0", + "gulp-tsb": "4.0.6", + "gulp-untar": "^0.0.7", + "gulp-vinyl-zip": "^2.1.2", + "husky": "^0.13.1", + "innosetup": "6.0.5", + "is": "^3.1.0", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.0", + "jsdom-no-contextify": "^3.1.0", + "lazy.js": "^0.4.2", + "merge-options": "^1.0.1", + "mime": "^1.4.1", + "minimatch": "^3.0.4", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "mocha": "^8.2.1", + "mocha-junit-reporter": "^2.0.0", + "mocha-multi-reporters": "^1.5.1", + "npm-run-all": "^4.1.5", + "opn": "^6.0.0", + "optimist": "0.3.5", + "p-all": "^1.0.0", + "playwright": "1.8.0", + "pump": "^1.0.1", + "queue": "3.0.6", + "rcedit": "^1.1.0", + "request": "^2.85.0", + "rimraf": "^2.2.8", + "sinon": "^1.17.2", + "source-map": "0.6.1", + "source-map-support": "^0.3.2", + "style-loader": "^1.0.0", + "ts-loader": "^6.2.1", + "tsec": "0.1.4", + "typescript": "^4.3.0-dev.20210407", + "typescript-formatter": "7.1.0", + "underscore": "^1.8.2", + "vinyl": "^2.0.0", + "vinyl-fs": "^3.0.0", + "vscode-debugprotocol": "1.46.0", + "vscode-nls-dev": "^3.3.1", + "vscode-telemetry-extractor": "^1.7.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-stream": "^5.2.1", + "xml2js": "^0.4.17", + "yaserver": "^0.2.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/microsoft/vscode.git" + }, + "bugs": { + "url": "https://github.com/microsoft/vscode/issues" + }, + "optionalDependencies": { + "vscode-windows-ca-certs": "^0.3.0", + "vscode-windows-registry": "1.0.3", + "windows-foreground-love": "0.2.0", + "windows-mutex": "0.3.0", + "windows-process-tree": "0.2.4" + }, + "resolutions": { + "elliptic": "^6.5.3", + "nwmatcher": "^1.4.4" + } } From 13f4f052582bcec3d6c6c6a70d995c9dee2cac13 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 11:18:24 -0700 Subject: [PATCH 076/115] Fix spacing --- package.json | 450 +++++++++++++++++++++++++-------------------------- 1 file changed, 225 insertions(+), 225 deletions(-) diff --git a/package.json b/package.json index 42e74a4484f..7f94f3f4a47 100644 --- a/package.json +++ b/package.json @@ -1,227 +1,227 @@ { - "name": "code-oss-dev", - "version": "1.56.0", - "distro": "fca0eb45354a13177b2235c30af9b6b158ed9b15", - "author": { - "name": "Microsoft Corporation" - }, - "license": "MIT", - "main": "./out/main", - "private": true, - "scripts": { - "test": "mocha", - "test-browser": "node test/unit/browser/index.js", - "preinstall": "node build/npm/preinstall.js", - "postinstall": "node build/npm/postinstall.js", - "compile": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile", - "watch": "npm-run-all -lp watch-client watch-extensions watch-extension-media", - "watchd": "deemon yarn watch", - "watch-webd": "deemon yarn watch-web", - "kill-watchd": "deemon --kill yarn watch", - "kill-watch-webd": "deemon --kill yarn watch-web", - "restart-watchd": "deemon --restart yarn watch", - "restart-watch-webd": "deemon --restart yarn watch-web", - "watch-client": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-client", - "watch-clientd": "deemon yarn watch-client", - "kill-watch-clientd": "deemon --kill yarn watch-client", - "watch-extensions": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-extensions", - "watch-extension-media": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-extension-media", - "watch-extensionsd": "deemon yarn watch-extensions", - "kill-watch-extensionsd": "deemon --kill yarn watch-extensions", - "mocha": "mocha test/unit/node/all.js --delay", - "precommit": "node build/hygiene.js", - "gulp": "node --max_old_space_size=8192 ./node_modules/gulp/bin/gulp.js", - "electron": "node build/lib/electron", - "7z": "7z", - "update-grammars": "node build/npm/update-all-grammars.js", - "update-localization-extension": "node build/npm/update-localization-extension.js", - "smoketest": "cd test/smoke && yarn compile && node test/index.js", - "smoketest-no-compile": "cd test/smoke && node test/index.js", - "download-builtin-extensions": "node build/lib/builtInExtensions.js", - "download-builtin-extensions-cg": "node build/lib/builtInExtensionsCG.js", - "monaco-compile-check": "tsc -p src/tsconfig.monaco.json --noEmit", - "tsec-compile-check": "node node_modules/tsec/bin/tsec -p src/tsconfig.tsec.json", - "valid-layers-check": "node build/lib/layersChecker.js", - "no-implicit-override-watch": "tsc --watch -p src/tsconfig.json --noEmit --noImplicitOverride", - "update-distro": "node build/npm/update-distro.js", - "web": "node resources/web/code-web.js", - "compile-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-web", - "watch-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-web", - "eslint": "node build/eslint", - "electron-rebuild": "electron-rebuild --arch=arm64 --force --version=11.4.2", - "playwright-install": "node build/azure-pipelines/common/installPlaywright.js", - "compile-build": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-build", - "compile-extensions-build": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-extensions-build", - "minify-vscode": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode", - "minify-vscode-reh": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode-reh", - "minify-vscode-reh-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode-reh-web", - "hygiene": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js hygiene", - "core-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js core-ci", - "extensions-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js extensions-ci" - }, - "dependencies": { - "applicationinsights": "1.0.8", - "chokidar": "3.5.1", - "graceful-fs": "4.2.3", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.3", - "iconv-lite-umd": "0.6.8", - "jschardet": "2.3.0", - "keytar": "7.2.0", - "minimist": "^1.2.5", - "native-is-elevated": "0.4.3", - "native-keymap": "2.2.1", - "native-watchdog": "1.3.0", - "node-pty": "0.10.0-beta19", - "nsfw": "2.1.2", - "spdlog": "^0.11.1", - "sudo-prompt": "9.2.1", - "tas-client-umd": "0.1.4", - "v8-inspect-profiler": "^0.0.20", - "vscode-oniguruma": "1.3.1", - "vscode-proxy-agent": "^0.8.2", - "vscode-regexpp": "^3.1.0", - "vscode-ripgrep": "^1.11.1", - "vscode-sqlite3": "4.0.10", - "vscode-textmate": "5.2.0", - "xterm": "4.12.0-beta.20", - "xterm-addon-search": "0.9.0-beta.1", - "xterm-addon-unicode11": "0.3.0-beta.4", - "xterm-addon-webgl": "0.11.0-beta.7", - "yauzl": "^2.9.2", - "yazl": "^2.4.3" - }, - "devDependencies": { - "7zip": "0.0.6", - "@types/applicationinsights": "0.20.0", - "@types/chokidar": "2.1.3", - "@types/cookie": "^0.3.3", - "@types/copy-webpack-plugin": "^6.0.3", - "@types/cssnano": "^4.0.0", - "@types/debug": "4.1.5", - "@types/graceful-fs": "4.1.2", - "@types/gulp-postcss": "^8.0.0", - "@types/http-proxy-agent": "^2.0.1", - "@types/keytar": "^4.4.0", - "@types/minimist": "^1.2.1", - "@types/mocha": "^8.2.0", - "@types/node": "^12.19.9", - "@types/sinon": "^1.16.36", - "@types/trusted-types": "^1.0.6", - "@types/vscode-windows-registry": "^1.0.0", - "@types/webpack": "^4.41.25", - "@types/windows-foreground-love": "^0.3.0", - "@types/windows-mutex": "^0.4.0", - "@types/windows-process-tree": "^0.2.0", - "@types/winreg": "^1.2.30", - "@types/yauzl": "^2.9.1", - "@types/yazl": "^2.4.2", - "@typescript-eslint/eslint-plugin": "3.2.0", - "@typescript-eslint/parser": "^3.3.0", - "ansi-colors": "^3.2.3", - "asar": "^3.0.3", - "chromium-pickle-js": "^0.2.0", - "copy-webpack-plugin": "^6.0.3", - "cson-parser": "^1.3.3", - "css-loader": "^3.2.0", - "cssnano": "^4.1.11", - "debounce": "^1.0.0", - "deemon": "^1.4.0", - "electron": "11.4.2", - "electron-rebuild": "2.0.3", - "eslint": "6.8.0", - "eslint-plugin-jsdoc": "^19.1.0", - "event-stream": "3.3.4", - "fancy-log": "^1.3.3", - "fast-plist": "0.1.2", - "file-loader": "^4.2.0", - "glob": "^5.0.13", - "gulp": "^4.0.0", - "gulp-atom-electron": "^1.30.1", - "gulp-azure-storage": "^0.11.1", - "gulp-bom": "^3.0.0", - "gulp-buffer": "0.0.2", - "gulp-concat": "^2.6.1", - "gulp-eslint": "^5.0.0", - "gulp-filter": "^5.1.0", - "gulp-flatmap": "^1.0.2", - "gulp-gunzip": "^1.0.0", - "gulp-gzip": "^1.4.2", - "gulp-json-editor": "^2.5.0", - "gulp-plumber": "^1.2.0", - "gulp-postcss": "^9.0.0", - "gulp-remote-retry-src": "^0.6.0", - "gulp-rename": "^1.2.0", - "gulp-replace": "^0.5.4", - "gulp-shell": "^0.6.5", - "gulp-sourcemaps": "^3.0.0", - "gulp-tsb": "4.0.6", - "gulp-untar": "^0.0.7", - "gulp-vinyl-zip": "^2.1.2", - "husky": "^0.13.1", - "innosetup": "6.0.5", - "is": "^3.1.0", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", - "jsdom-no-contextify": "^3.1.0", - "lazy.js": "^0.4.2", - "merge-options": "^1.0.1", - "mime": "^1.4.1", - "minimatch": "^3.0.4", - "minimist": "^1.2.5", - "mkdirp": "^1.0.4", - "mocha": "^8.2.1", - "mocha-junit-reporter": "^2.0.0", - "mocha-multi-reporters": "^1.5.1", - "npm-run-all": "^4.1.5", - "opn": "^6.0.0", - "optimist": "0.3.5", - "p-all": "^1.0.0", - "playwright": "1.8.0", - "pump": "^1.0.1", - "queue": "3.0.6", - "rcedit": "^1.1.0", - "request": "^2.85.0", - "rimraf": "^2.2.8", - "sinon": "^1.17.2", - "source-map": "0.6.1", - "source-map-support": "^0.3.2", - "style-loader": "^1.0.0", - "ts-loader": "^6.2.1", - "tsec": "0.1.4", - "typescript": "^4.3.0-dev.20210407", - "typescript-formatter": "7.1.0", - "underscore": "^1.8.2", - "vinyl": "^2.0.0", - "vinyl-fs": "^3.0.0", - "vscode-debugprotocol": "1.46.0", - "vscode-nls-dev": "^3.3.1", - "vscode-telemetry-extractor": "^1.7.0", - "webpack": "^4.43.0", - "webpack-cli": "^3.3.12", - "webpack-stream": "^5.2.1", - "xml2js": "^0.4.17", - "yaserver": "^0.2.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/microsoft/vscode.git" - }, - "bugs": { - "url": "https://github.com/microsoft/vscode/issues" - }, - "optionalDependencies": { - "vscode-windows-ca-certs": "^0.3.0", - "vscode-windows-registry": "1.0.3", - "windows-foreground-love": "0.2.0", - "windows-mutex": "0.3.0", - "windows-process-tree": "0.2.4" - }, - "resolutions": { - "elliptic": "^6.5.3", - "nwmatcher": "^1.4.4" - } + "name": "code-oss-dev", + "version": "1.56.0", + "distro": "fca0eb45354a13177b2235c30af9b6b158ed9b15", + "author": { + "name": "Microsoft Corporation" + }, + "license": "MIT", + "main": "./out/main", + "private": true, + "scripts": { + "test": "mocha", + "test-browser": "node test/unit/browser/index.js", + "preinstall": "node build/npm/preinstall.js", + "postinstall": "node build/npm/postinstall.js", + "compile": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile", + "watch": "npm-run-all -lp watch-client watch-extensions watch-extension-media", + "watchd": "deemon yarn watch", + "watch-webd": "deemon yarn watch-web", + "kill-watchd": "deemon --kill yarn watch", + "kill-watch-webd": "deemon --kill yarn watch-web", + "restart-watchd": "deemon --restart yarn watch", + "restart-watch-webd": "deemon --restart yarn watch-web", + "watch-client": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-client", + "watch-clientd": "deemon yarn watch-client", + "kill-watch-clientd": "deemon --kill yarn watch-client", + "watch-extensions": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-extensions", + "watch-extension-media": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-extension-media", + "watch-extensionsd": "deemon yarn watch-extensions", + "kill-watch-extensionsd": "deemon --kill yarn watch-extensions", + "mocha": "mocha test/unit/node/all.js --delay", + "precommit": "node build/hygiene.js", + "gulp": "node --max_old_space_size=8192 ./node_modules/gulp/bin/gulp.js", + "electron": "node build/lib/electron", + "7z": "7z", + "update-grammars": "node build/npm/update-all-grammars.js", + "update-localization-extension": "node build/npm/update-localization-extension.js", + "smoketest": "cd test/smoke && yarn compile && node test/index.js", + "smoketest-no-compile": "cd test/smoke && node test/index.js", + "download-builtin-extensions": "node build/lib/builtInExtensions.js", + "download-builtin-extensions-cg": "node build/lib/builtInExtensionsCG.js", + "monaco-compile-check": "tsc -p src/tsconfig.monaco.json --noEmit", + "tsec-compile-check": "node node_modules/tsec/bin/tsec -p src/tsconfig.tsec.json", + "valid-layers-check": "node build/lib/layersChecker.js", + "no-implicit-override-watch": "tsc --watch -p src/tsconfig.json --noEmit --noImplicitOverride", + "update-distro": "node build/npm/update-distro.js", + "web": "node resources/web/code-web.js", + "compile-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-web", + "watch-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js watch-web", + "eslint": "node build/eslint", + "electron-rebuild": "electron-rebuild --arch=arm64 --force --version=11.4.2", + "playwright-install": "node build/azure-pipelines/common/installPlaywright.js", + "compile-build": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-build", + "compile-extensions-build": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile-extensions-build", + "minify-vscode": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode", + "minify-vscode-reh": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode-reh", + "minify-vscode-reh-web": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js minify-vscode-reh-web", + "hygiene": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js hygiene", + "core-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js core-ci", + "extensions-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js extensions-ci" + }, + "dependencies": { + "applicationinsights": "1.0.8", + "chokidar": "3.5.1", + "graceful-fs": "4.2.3", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "iconv-lite-umd": "0.6.8", + "jschardet": "2.3.0", + "keytar": "7.2.0", + "minimist": "^1.2.5", + "native-is-elevated": "0.4.3", + "native-keymap": "2.2.1", + "native-watchdog": "1.3.0", + "node-pty": "0.10.0-beta19", + "nsfw": "2.1.2", + "spdlog": "^0.11.1", + "sudo-prompt": "9.2.1", + "tas-client-umd": "0.1.4", + "v8-inspect-profiler": "^0.0.20", + "vscode-oniguruma": "1.3.1", + "vscode-proxy-agent": "^0.8.2", + "vscode-regexpp": "^3.1.0", + "vscode-ripgrep": "^1.11.1", + "vscode-sqlite3": "4.0.10", + "vscode-textmate": "5.2.0", + "xterm": "4.12.0-beta.20", + "xterm-addon-search": "0.9.0-beta.1", + "xterm-addon-unicode11": "0.3.0-beta.4", + "xterm-addon-webgl": "0.11.0-beta.7", + "yauzl": "^2.9.2", + "yazl": "^2.4.3" + }, + "devDependencies": { + "7zip": "0.0.6", + "@types/applicationinsights": "0.20.0", + "@types/chokidar": "2.1.3", + "@types/cookie": "^0.3.3", + "@types/copy-webpack-plugin": "^6.0.3", + "@types/cssnano": "^4.0.0", + "@types/debug": "4.1.5", + "@types/graceful-fs": "4.1.2", + "@types/gulp-postcss": "^8.0.0", + "@types/http-proxy-agent": "^2.0.1", + "@types/keytar": "^4.4.0", + "@types/minimist": "^1.2.1", + "@types/mocha": "^8.2.0", + "@types/node": "^12.19.9", + "@types/sinon": "^1.16.36", + "@types/trusted-types": "^1.0.6", + "@types/vscode-windows-registry": "^1.0.0", + "@types/webpack": "^4.41.25", + "@types/windows-foreground-love": "^0.3.0", + "@types/windows-mutex": "^0.4.0", + "@types/windows-process-tree": "^0.2.0", + "@types/winreg": "^1.2.30", + "@types/yauzl": "^2.9.1", + "@types/yazl": "^2.4.2", + "@typescript-eslint/eslint-plugin": "3.2.0", + "@typescript-eslint/parser": "^3.3.0", + "ansi-colors": "^3.2.3", + "asar": "^3.0.3", + "chromium-pickle-js": "^0.2.0", + "copy-webpack-plugin": "^6.0.3", + "cson-parser": "^1.3.3", + "css-loader": "^3.2.0", + "cssnano": "^4.1.11", + "debounce": "^1.0.0", + "deemon": "^1.4.0", + "electron": "11.4.2", + "electron-rebuild": "2.0.3", + "eslint": "6.8.0", + "eslint-plugin-jsdoc": "^19.1.0", + "event-stream": "3.3.4", + "fancy-log": "^1.3.3", + "fast-plist": "0.1.2", + "file-loader": "^4.2.0", + "glob": "^5.0.13", + "gulp": "^4.0.0", + "gulp-atom-electron": "^1.30.1", + "gulp-azure-storage": "^0.11.1", + "gulp-bom": "^3.0.0", + "gulp-buffer": "0.0.2", + "gulp-concat": "^2.6.1", + "gulp-eslint": "^5.0.0", + "gulp-filter": "^5.1.0", + "gulp-flatmap": "^1.0.2", + "gulp-gunzip": "^1.0.0", + "gulp-gzip": "^1.4.2", + "gulp-json-editor": "^2.5.0", + "gulp-plumber": "^1.2.0", + "gulp-postcss": "^9.0.0", + "gulp-remote-retry-src": "^0.6.0", + "gulp-rename": "^1.2.0", + "gulp-replace": "^0.5.4", + "gulp-shell": "^0.6.5", + "gulp-sourcemaps": "^3.0.0", + "gulp-tsb": "4.0.6", + "gulp-untar": "^0.0.7", + "gulp-vinyl-zip": "^2.1.2", + "husky": "^0.13.1", + "innosetup": "6.0.5", + "is": "^3.1.0", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.0", + "jsdom-no-contextify": "^3.1.0", + "lazy.js": "^0.4.2", + "merge-options": "^1.0.1", + "mime": "^1.4.1", + "minimatch": "^3.0.4", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "mocha": "^8.2.1", + "mocha-junit-reporter": "^2.0.0", + "mocha-multi-reporters": "^1.5.1", + "npm-run-all": "^4.1.5", + "opn": "^6.0.0", + "optimist": "0.3.5", + "p-all": "^1.0.0", + "playwright": "1.8.0", + "pump": "^1.0.1", + "queue": "3.0.6", + "rcedit": "^1.1.0", + "request": "^2.85.0", + "rimraf": "^2.2.8", + "sinon": "^1.17.2", + "source-map": "0.6.1", + "source-map-support": "^0.3.2", + "style-loader": "^1.0.0", + "ts-loader": "^6.2.1", + "tsec": "0.1.4", + "typescript": "^4.3.0-dev.20210407", + "typescript-formatter": "7.1.0", + "underscore": "^1.8.2", + "vinyl": "^2.0.0", + "vinyl-fs": "^3.0.0", + "vscode-debugprotocol": "1.46.0", + "vscode-nls-dev": "^3.3.1", + "vscode-telemetry-extractor": "^1.7.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-stream": "^5.2.1", + "xml2js": "^0.4.17", + "yaserver": "^0.2.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/microsoft/vscode.git" + }, + "bugs": { + "url": "https://github.com/microsoft/vscode/issues" + }, + "optionalDependencies": { + "vscode-windows-ca-certs": "^0.3.0", + "vscode-windows-registry": "1.0.3", + "windows-foreground-love": "0.2.0", + "windows-mutex": "0.3.0", + "windows-process-tree": "0.2.4" + }, + "resolutions": { + "elliptic": "^6.5.3", + "nwmatcher": "^1.4.4" + } } From 8ec2bceec990ca8139c8f113e9371fc395111ef2 Mon Sep 17 00:00:00 2001 From: John Murray Date: Thu, 8 Apr 2021 19:25:00 +0100 Subject: [PATCH 077/115] fix #120776 remove stray words from `contextualTitle` description. (#120777) --- src/vs/workbench/api/browser/viewsExtensionPoint.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/api/browser/viewsExtensionPoint.ts b/src/vs/workbench/api/browser/viewsExtensionPoint.ts index 6ff83ca7c28..d6170756865 100644 --- a/src/vs/workbench/api/browser/viewsExtensionPoint.ts +++ b/src/vs/workbench/api/browser/viewsExtensionPoint.ts @@ -133,7 +133,7 @@ const viewDescriptor: IJSONSchema = { type: 'string' }, contextualTitle: { - description: localize('vscode.extension.contributes.view.contextualTitle', "Human-readable context for when the view is moved out of its original location. By default, the view's container name will be used. Will be shown"), + description: localize('vscode.extension.contributes.view.contextualTitle', "Human-readable context for when the view is moved out of its original location. By default, the view's container name will be used."), type: 'string' }, visibility: { From 2f26adffbe22fd32bb811c464fc34dfa70ce8501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Moreno?= Date: Thu, 8 Apr 2021 20:50:55 +0200 Subject: [PATCH 078/115] fixes #120786 --- src/vs/base/parts/quickinput/browser/media/quickInput.css | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/vs/base/parts/quickinput/browser/media/quickInput.css b/src/vs/base/parts/quickinput/browser/media/quickInput.css index 31f0b073023..341495c9ec4 100644 --- a/src/vs/base/parts/quickinput/browser/media/quickInput.css +++ b/src/vs/base/parts/quickinput/browser/media/quickInput.css @@ -20,6 +20,7 @@ display: flex; margin-left: 4px; flex: 1; + height: 24px; } .quick-input-left-action-bar.monaco-action-bar .actions-container { @@ -35,12 +36,10 @@ display: flex; margin-right: 4px; flex: 1; + height: 24px; } .quick-input-titlebar .monaco-action-bar .action-label.codicon { - margin: 0; - width: 19px; - height: 100%; background-position: center; background-repeat: no-repeat; } From 618f06314e69b4477c6e2dd34ec354214326784e Mon Sep 17 00:00:00 2001 From: meganrogge Date: Thu, 8 Apr 2021 12:24:05 -0700 Subject: [PATCH 079/115] change terminal tab height for uniformity --- src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 3f6bc216d09..14ff60b09a1 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -35,7 +35,7 @@ export class TerminalTabsWidget extends WorkbenchObjectTree { ) { super('TerminalTabsTree', container, { - getHeight: () => 24, + getHeight: () => 22, getTemplateId: () => 'terminal.tabs' }, [new TerminalTabsRenderer()], From 437f2383b9275c0c916aca7d80e748b853968ef5 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 8 Apr 2021 12:44:17 -0700 Subject: [PATCH 080/115] Add icon to terminal tabs --- .../contrib/terminal/browser/media/terminal.css | 3 +++ .../terminal/browser/terminalTabsWidget.ts | 16 +++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/media/terminal.css b/src/vs/workbench/contrib/terminal/browser/media/terminal.css index 21e23a00a39..3e495be752c 100644 --- a/src/vs/workbench/contrib/terminal/browser/media/terminal.css +++ b/src/vs/workbench/contrib/terminal/browser/media/terminal.css @@ -197,3 +197,6 @@ padding: 0 22px 0 6px; } +.monaco-workbench .tabs-widget .codicon { + vertical-align: text-bottom; +} diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts index 14ff60b09a1..88e74db22da 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsWidget.ts @@ -16,7 +16,7 @@ import { ITerminalInstance, ITerminalService, ITerminalTab } from 'vs/workbench/ import { localize } from 'vs/nls'; import * as dom from 'vs/base/browser/dom'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { Codicon } from 'vs/base/common/codicons'; +import { IconLabel } from 'vs/base/browser/ui/iconLabel/iconLabel'; const $ = dom.$; @@ -125,8 +125,10 @@ class TerminalTabsRenderer implements ITreeRenderer 1) { label = `Terminals (${item.terminalInstances.length})`; } } else { - label = item.title; + label = `$(${item.icon.id}) ${item.title}`; } - template.labelElement.textContent = label; - template.labelElement.title = label; + template.label.setLabel(label); } disposeTemplate(templateData: ITerminalTabEntryTemplate): void { @@ -152,7 +154,7 @@ class TerminalTabsRenderer implements ITreeRenderer Date: Thu, 8 Apr 2021 12:52:55 -0700 Subject: [PATCH 081/115] Don't warmup markdown preview when input is collapsed Fixes #120845 --- .../contrib/viewportCustomMarkdown/viewportCustomMarkdown.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/viewportCustomMarkdown/viewportCustomMarkdown.ts b/src/vs/workbench/contrib/notebook/browser/contrib/viewportCustomMarkdown/viewportCustomMarkdown.ts index e9b2b76305c..6b279733434 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/viewportCustomMarkdown/viewportCustomMarkdown.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/viewportCustomMarkdown/viewportCustomMarkdown.ts @@ -32,7 +32,7 @@ class NotebookClipboardContribution extends Disposable implements INotebookEdito cellRangesToIndexes(visibleRanges).forEach(index => { const cell = this._notebookEditor.viewModel?.viewCells[index]; - if (cell?.cellKind === CellKind.Markdown && cell?.editState === CellEditState.Preview) { + if (cell?.cellKind === CellKind.Markdown && cell?.editState === CellEditState.Preview && !cell.metadata?.inputCollapsed) { this._notebookEditor.createMarkdownPreview(cell); } else if (cell?.cellKind === CellKind.Code) { const viewCell = (cell as CodeCellViewModel); From f689971195a16af457d831ba37dbd6f9d60e6ab8 Mon Sep 17 00:00:00 2001 From: Raymond Zhao Date: Wed, 7 Apr 2021 14:35:03 -0700 Subject: [PATCH 082/115] Mark Emmet trusted --- extensions/emmet/package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/extensions/emmet/package.json b/extensions/emmet/package.json index fd5f31ecc84..11f1689649a 100644 --- a/extensions/emmet/package.json +++ b/extensions/emmet/package.json @@ -454,5 +454,8 @@ "image-size": "^0.5.2", "vscode-emmet-helper": "^2.3.0", "vscode-languageserver-textdocument": "^1.0.1" + }, + "workspaceTrust": { + "request": "never" } } From 7c26f27d906f5ce9322299d7a54e7657ddcbb693 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Thu, 8 Apr 2021 22:26:54 +0200 Subject: [PATCH 083/115] #120860 Implement trusted workspace settings --- .../common/configurationModels.ts | 86 +++++---- .../common/configurationRegistry.ts | 8 +- .../test/common/configurationModels.test.ts | 34 ++-- .../api/common/configurationExtensionPoint.ts | 6 +- .../configuration/browser/configuration.ts | 166 +++++++++++----- .../browser/configurationService.ts | 181 ++++++++++++------ .../configuration/common/configuration.ts | 11 ++ .../common/configurationModels.ts | 17 +- .../test/common/configurationModels.test.ts | 27 +-- .../browser/api/extHostConfiguration.test.ts | 2 +- 10 files changed, 351 insertions(+), 187 deletions(-) diff --git a/src/vs/platform/configuration/common/configurationModels.ts b/src/vs/platform/configuration/common/configurationModels.ts index 5993f0fddde..3988fd347ec 100644 --- a/src/vs/platform/configuration/common/configurationModels.ts +++ b/src/vs/platform/configuration/common/configurationModels.ts @@ -214,42 +214,53 @@ export class DefaultConfigurationModel extends ConfigurationModel { } } +export interface ConfigurationParseOptions { + scopes: ConfigurationScope[] | undefined; + excludeUnsafeConfigurations?: boolean; +} + export class ConfigurationModelParser { private _raw: any = null; private _configurationModel: ConfigurationModel | null = null; + private _excludedUnsafeConfigurations: string[] = []; private _parseErrors: any[] = []; - constructor(protected readonly _name: string, private _scopes?: ConfigurationScope[]) { } + constructor(protected readonly _name: string) { } get configurationModel(): ConfigurationModel { return this._configurationModel || new ConfigurationModel(); } + get excludedUnsafeConfigurations(): string[] { + return this._excludedUnsafeConfigurations; + } + get errors(): any[] { return this._parseErrors; } - public parseContent(content: string | null | undefined): void { + public parse(content: string | null | undefined, options?: ConfigurationParseOptions): void { if (!types.isUndefinedOrNull(content)) { const raw = this.doParseContent(content); - this.parseRaw(raw); + this.parseRaw(raw, options); } } - public parseRaw(raw: any): void { - this._raw = raw; - const configurationModel = this.doParseRaw(raw); - this._configurationModel = new ConfigurationModel(configurationModel.contents, configurationModel.keys, configurationModel.overrides); - } - - public parse(): void { + public reparse(options: ConfigurationParseOptions): void { if (this._raw) { - this.parseRaw(this._raw); + this.parseRaw(this._raw, options); } } - protected doParseContent(content: string): any { + public parseRaw(raw: any, options?: ConfigurationParseOptions): void { + this._raw = raw; + const { contents, keys, overrides, unsafeConfigurations } = this.doParseRaw(raw, options); + this._configurationModel = new ConfigurationModel(contents, keys, overrides); + this._excludedUnsafeConfigurations = unsafeConfigurations || []; + } + + private doParseContent(content: string): any { let raw: any = {}; let currentProperty: string | null = null; let currentParent: any = []; @@ -306,42 +317,49 @@ export class ConfigurationModelParser { return raw; } - protected doParseRaw(raw: any): IConfigurationModel { - if (this._scopes) { - const configurationProperties = Registry.as(Extensions.Configuration).getConfigurationProperties(); - raw = this.filterByScope(raw, configurationProperties, true, this._scopes); - } + protected doParseRaw(raw: any, options?: ConfigurationParseOptions): IConfigurationModel & { unsafeConfigurations?: string[] } { + const configurationProperties = Registry.as(Extensions.Configuration).getConfigurationProperties(); + const filtered = this.filter(raw, configurationProperties, true, options); + raw = filtered.raw; const contents = toValuesTree(raw, message => console.error(`Conflict in settings file ${this._name}: ${message}`)); const keys = Object.keys(raw); const overrides: IOverrides[] = toOverrides(raw, message => console.error(`Conflict in settings file ${this._name}: ${message}`)); - return { contents, keys, overrides }; + return { contents, keys, overrides, unsafeConfigurations: filtered.unsafeConfigurations }; } - private filterByScope(properties: any, configurationProperties: { [qualifiedKey: string]: IConfigurationPropertySchema }, filterOverriddenProperties: boolean, scopes: ConfigurationScope[]): {} { - const result: any = {}; + private filter(properties: any, configurationProperties: { [qualifiedKey: string]: IConfigurationPropertySchema | undefined }, filterOverriddenProperties: boolean, options?: ConfigurationParseOptions): { raw: {}, unsafeConfigurations: string[] } { + if (!options?.scopes && !options?.excludeUnsafeConfigurations) { + return { raw: properties, unsafeConfigurations: [] }; + } + const raw: any = {}; + const unsafeConfigurations: string[] = []; for (let key in properties) { if (OVERRIDE_PROPERTY_PATTERN.test(key) && filterOverriddenProperties) { - result[key] = this.filterByScope(properties[key], configurationProperties, false, scopes); + const result = this.filter(properties[key], configurationProperties, false, options); + raw[key] = result.raw; + unsafeConfigurations.push(...result.unsafeConfigurations); } else { - const scope = this.getScope(key, configurationProperties); + const propertySchema = configurationProperties[key]; + const scope = propertySchema ? typeof propertySchema.scope !== 'undefined' ? propertySchema.scope : ConfigurationScope.WINDOW : undefined; // Load unregistered configurations always. - if (scope === undefined || scopes.indexOf(scope) !== -1) { - result[key] = properties[key]; + if (scope === undefined || options.scopes === undefined || options.scopes.includes(scope)) { + if (options.excludeUnsafeConfigurations && propertySchema?.requiresTrustedWorkspace) { + unsafeConfigurations.push(key); + } else { + raw[key] = properties[key]; + } } } } - return result; + return { raw, unsafeConfigurations }; } - private getScope(key: string, configurationProperties: { [qualifiedKey: string]: IConfigurationPropertySchema }): ConfigurationScope | undefined { - const propertySchema = configurationProperties[key]; - return propertySchema ? typeof propertySchema.scope !== 'undefined' ? propertySchema.scope : ConfigurationScope.WINDOW : undefined; - } } export class UserSettings extends Disposable { private readonly parser: ConfigurationModelParser; + private readonly parseOptions: ConfigurationParseOptions; protected readonly _onDidChange: Emitter = this._register(new Emitter()); readonly onDidChange: Event = this._onDidChange.event; @@ -352,7 +370,8 @@ export class UserSettings extends Disposable { private readonly fileService: IFileService ) { super(); - this.parser = new ConfigurationModelParser(this.userSettingsResource.toString(), this.scopes); + this.parser = new ConfigurationModelParser(this.userSettingsResource.toString()); + this.parseOptions = { scopes: this.scopes }; this._register(this.fileService.watch(extUri.dirname(this.userSettingsResource))); // Also listen to the resource incase the resource is a symlink - https://github.com/microsoft/vscode/issues/118134 this._register(this.fileService.watch(this.userSettingsResource)); @@ -362,15 +381,15 @@ export class UserSettings extends Disposable { async loadConfiguration(): Promise { try { const content = await this.fileService.readFile(this.userSettingsResource); - this.parser.parseContent(content.value.toString() || '{}'); + this.parser.parse(content.value.toString() || '{}', this.parseOptions); return this.parser.configurationModel; } catch (e) { return new ConfigurationModel(); } } - reprocess(): ConfigurationModel { - this.parser.parse(); + reparse(): ConfigurationModel { + this.parser.reparse(this.parseOptions); return this.parser.configurationModel; } } @@ -802,5 +821,4 @@ export class AllKeysConfigurationChangeEvent extends ConfigurationChangeEvent { constructor(configuration: Configuration, workspace: Workspace, public source: ConfigurationTarget, public sourceConfig: any) { super({ keys: configuration.allKeys(), overrides: [] }, undefined, configuration, workspace); } - } diff --git a/src/vs/platform/configuration/common/configurationRegistry.ts b/src/vs/platform/configuration/common/configurationRegistry.ts index 7504cb721b3..d4a53e68587 100644 --- a/src/vs/platform/configuration/common/configurationRegistry.ts +++ b/src/vs/platform/configuration/common/configurationRegistry.ts @@ -110,6 +110,7 @@ export const enum ConfigurationScope { export interface IConfigurationPropertySchema extends IJSONSchema { scope?: ConfigurationScope; + requiresTrustedWorkspace?: boolean; included?: boolean; tags?: string[]; /** @@ -136,6 +137,7 @@ export interface IConfigurationNode { properties?: { [path: string]: IConfigurationPropertySchema; }; allOf?: IConfigurationNode[]; scope?: ConfigurationScope; + requiresTrustedWorkspace?: boolean; extensionInfo?: IConfigurationExtensionInfo; } @@ -297,8 +299,9 @@ class ConfigurationRegistry implements IConfigurationRegistry { this.updateOverridePropertyPatternKey(); } - private validateAndRegisterProperties(configuration: IConfigurationNode, validate: boolean = true, scope: ConfigurationScope = ConfigurationScope.WINDOW): string[] { + private validateAndRegisterProperties(configuration: IConfigurationNode, validate: boolean = true, scope: ConfigurationScope = ConfigurationScope.WINDOW, requiresTrustedWorkspace?: boolean): string[] { scope = types.isUndefinedOrNull(configuration.scope) ? scope : configuration.scope; + requiresTrustedWorkspace = types.isUndefinedOrNull(configuration.requiresTrustedWorkspace) ? types.isUndefined(requiresTrustedWorkspace) ? false : requiresTrustedWorkspace : configuration.requiresTrustedWorkspace; let propertyKeys: string[] = []; let properties = configuration.properties; if (properties) { @@ -318,6 +321,7 @@ class ConfigurationRegistry implements IConfigurationRegistry { property.scope = undefined; // No scope for overridable properties `[${identifier}]` } else { property.scope = types.isUndefinedOrNull(property.scope) ? scope : property.scope; + property.requiresTrustedWorkspace = types.isUndefinedOrNull(property.requiresTrustedWorkspace) ? requiresTrustedWorkspace : property.requiresTrustedWorkspace; } // Add to properties maps @@ -341,7 +345,7 @@ class ConfigurationRegistry implements IConfigurationRegistry { let subNodes = configuration.allOf; if (subNodes) { for (let node of subNodes) { - propertyKeys.push(...this.validateAndRegisterProperties(node, validate, scope)); + propertyKeys.push(...this.validateAndRegisterProperties(node, validate, scope, requiresTrustedWorkspace)); } } return propertyKeys; diff --git a/src/vs/platform/configuration/test/common/configurationModels.test.ts b/src/vs/platform/configuration/test/common/configurationModels.test.ts index 97b4a40cc91..544fd32e573 100644 --- a/src/vs/platform/configuration/test/common/configurationModels.test.ts +++ b/src/vs/platform/configuration/test/common/configurationModels.test.ts @@ -242,10 +242,10 @@ suite('CustomConfigurationModel', () => { test('simple merge using models', () => { let base = new ConfigurationModelParser('base'); - base.parseContent(JSON.stringify({ 'a': 1, 'b': 2 })); + base.parse(JSON.stringify({ 'a': 1, 'b': 2 })); let add = new ConfigurationModelParser('add'); - add.parseContent(JSON.stringify({ 'a': 3, 'c': 4 })); + add.parse(JSON.stringify({ 'a': 3, 'c': 4 })); let result = base.configurationModel.merge(add.configurationModel); assert.deepStrictEqual(result.contents, { 'a': 3, 'b': 2, 'c': 4 }); @@ -253,14 +253,14 @@ suite('CustomConfigurationModel', () => { test('simple merge with an undefined contents', () => { let base = new ConfigurationModelParser('base'); - base.parseContent(JSON.stringify({ 'a': 1, 'b': 2 })); + base.parse(JSON.stringify({ 'a': 1, 'b': 2 })); let add = new ConfigurationModelParser('add'); let result = base.configurationModel.merge(add.configurationModel); assert.deepStrictEqual(result.contents, { 'a': 1, 'b': 2 }); base = new ConfigurationModelParser('base'); add = new ConfigurationModelParser('add'); - add.parseContent(JSON.stringify({ 'a': 1, 'b': 2 })); + add.parse(JSON.stringify({ 'a': 1, 'b': 2 })); result = base.configurationModel.merge(add.configurationModel); assert.deepStrictEqual(result.contents, { 'a': 1, 'b': 2 }); @@ -272,25 +272,25 @@ suite('CustomConfigurationModel', () => { test('Recursive merge using config models', () => { let base = new ConfigurationModelParser('base'); - base.parseContent(JSON.stringify({ 'a': { 'b': 1 } })); + base.parse(JSON.stringify({ 'a': { 'b': 1 } })); let add = new ConfigurationModelParser('add'); - add.parseContent(JSON.stringify({ 'a': { 'b': 2 } })); + add.parse(JSON.stringify({ 'a': { 'b': 2 } })); let result = base.configurationModel.merge(add.configurationModel); assert.deepStrictEqual(result.contents, { 'a': { 'b': 2 } }); }); test('Test contents while getting an existing property', () => { let testObject = new ConfigurationModelParser('test'); - testObject.parseContent(JSON.stringify({ 'a': 1 })); + testObject.parse(JSON.stringify({ 'a': 1 })); assert.deepStrictEqual(testObject.configurationModel.getValue('a'), 1); - testObject.parseContent(JSON.stringify({ 'a': { 'b': 1 } })); + testObject.parse(JSON.stringify({ 'a': { 'b': 1 } })); assert.deepStrictEqual(testObject.configurationModel.getValue('a'), { 'b': 1 }); }); test('Test contents are undefined for non existing properties', () => { const testObject = new ConfigurationModelParser('test'); - testObject.parseContent(JSON.stringify({ + testObject.parse(JSON.stringify({ awesome: true })); @@ -305,7 +305,7 @@ suite('CustomConfigurationModel', () => { test('Test configWithOverrides gives all content merged with overrides', () => { const testObject = new ConfigurationModelParser('test'); - testObject.parseContent(JSON.stringify({ 'a': 1, 'c': 1, '[b]': { 'a': 2 } })); + testObject.parse(JSON.stringify({ 'a': 1, 'c': 1, '[b]': { 'a': 2 } })); assert.deepStrictEqual(testObject.configurationModel.override('b').contents, { 'a': 2, 'c': 1, '[b]': { 'a': 2 } }); }); @@ -318,17 +318,17 @@ suite('CustomConfigurationModel', () => { test('Test update with empty data', () => { const testObject = new ConfigurationModelParser('test'); - testObject.parseContent(''); + testObject.parse(''); assert.deepStrictEqual(testObject.configurationModel.contents, Object.create(null)); assert.deepStrictEqual(testObject.configurationModel.keys, []); - testObject.parseContent(null!); + testObject.parse(null!); assert.deepStrictEqual(testObject.configurationModel.contents, Object.create(null)); assert.deepStrictEqual(testObject.configurationModel.keys, []); - testObject.parseContent(undefined!); + testObject.parse(undefined!); assert.deepStrictEqual(testObject.configurationModel.contents, Object.create(null)); assert.deepStrictEqual(testObject.configurationModel.keys, []); @@ -380,7 +380,7 @@ suite('Configuration', () => { test('Test update value', () => { const parser = new ConfigurationModelParser('test'); - parser.parseContent(JSON.stringify({ 'a': 1 })); + parser.parse(JSON.stringify({ 'a': 1 })); const testObject: Configuration = new Configuration(parser.configurationModel, new ConfigurationModel()); testObject.updateValue('a', 2); @@ -390,7 +390,7 @@ suite('Configuration', () => { test('Test update value after inspect', () => { const parser = new ConfigurationModelParser('test'); - parser.parseContent(JSON.stringify({ 'a': 1 })); + parser.parse(JSON.stringify({ 'a': 1 })); const testObject: Configuration = new Configuration(parser.configurationModel, new ConfigurationModel()); testObject.inspect('a', {}, undefined); @@ -503,7 +503,7 @@ suite('Configuration', () => { function parseConfigurationModel(content: any): ConfigurationModel { const parser = new ConfigurationModelParser('test'); - parser.parseContent(JSON.stringify(content)); + parser.parse(JSON.stringify(content)); return parser.configurationModel; } @@ -951,6 +951,6 @@ suite('AllKeysConfigurationChangeEvent', () => { function toConfigurationModel(obj: any): ConfigurationModel { const parser = new ConfigurationModelParser('test'); - parser.parseContent(JSON.stringify(obj)); + parser.parse(JSON.stringify(obj)); return parser.configurationModel; } diff --git a/src/vs/workbench/api/common/configurationExtensionPoint.ts b/src/vs/workbench/api/common/configurationExtensionPoint.ts index 21c2fb7b350..a07dbd301ad 100644 --- a/src/vs/workbench/api/common/configurationExtensionPoint.ts +++ b/src/vs/workbench/api/common/configurationExtensionPoint.ts @@ -181,10 +181,10 @@ configurationExtPoint.setHandler((extensions, { added, removed }) => { for (let extension of added) { const configurations: IConfigurationNode[] = []; const value = extension.value; - if (!Array.isArray(value)) { - configurations.push(...handleConfiguration(value, extension)); - } else { + if (Array.isArray(value)) { value.forEach(v => configurations.push(...handleConfiguration(v, extension))); + } else { + configurations.push(...handleConfiguration(value, extension)); } extensionConfigurations.set(ExtensionIdentifier.toKey(extension.description.identifier), configurations); addedConfigurations.push(...configurations); diff --git a/src/vs/workbench/services/configuration/browser/configuration.ts b/src/vs/workbench/services/configuration/browser/configuration.ts index d4ce3c91f3f..b084476d31d 100644 --- a/src/vs/workbench/services/configuration/browser/configuration.ts +++ b/src/vs/workbench/services/configuration/browser/configuration.ts @@ -9,7 +9,7 @@ import * as errors from 'vs/base/common/errors'; import { Disposable, IDisposable, dispose, toDisposable, MutableDisposable, combinedDisposable, DisposableStore } from 'vs/base/common/lifecycle'; import { RunOnceScheduler } from 'vs/base/common/async'; import { FileChangeType, FileChangesEvent, IFileService, whenProviderRegistered, FileOperationError, FileOperationResult } from 'vs/platform/files/common/files'; -import { ConfigurationModel, ConfigurationModelParser, UserSettings } from 'vs/platform/configuration/common/configurationModels'; +import { ConfigurationModel, ConfigurationModelParser, ConfigurationParseOptions, UserSettings } from 'vs/platform/configuration/common/configurationModels'; import { WorkspaceConfigurationModelParser, StandaloneConfigurationModelParser } from 'vs/workbench/services/configuration/common/configurationModels'; import { TASKS_CONFIGURATION_KEY, FOLDER_SETTINGS_NAME, LAUNCH_CONFIGURATION_KEY, IConfigurationCache, ConfigurationKey, REMOTE_MACHINE_SCOPES, FOLDER_SCOPES, WORKSPACE_SCOPES } from 'vs/workbench/services/configuration/common/configuration'; import { IStoredWorkspaceFolder, IWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces'; @@ -23,6 +23,11 @@ import { hash } from 'vs/base/common/hash'; import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentity'; import { ILogService } from 'vs/platform/log/common/log'; import { IStringDictionary } from 'vs/base/common/collections'; +import { WorkspaceTrustState } from 'vs/platform/workspace/common/workspaceTrust'; + +function hasToExcludeUnsafeConfigurations(workspaceTrustState: WorkspaceTrustState): boolean { + return workspaceTrustState !== WorkspaceTrustState.Trusted; +} export class UserConfiguration extends Disposable { @@ -32,17 +37,20 @@ export class UserConfiguration extends Disposable { private readonly userConfiguration: MutableDisposable = this._register(new MutableDisposable()); private readonly reloadConfigurationScheduler: RunOnceScheduler; + private readonly configurationParseOptions: ConfigurationParseOptions; + get hasTasksLoaded(): boolean { return this.userConfiguration.value instanceof FileServiceBasedConfiguration; } constructor( private readonly userSettingsResource: URI, - private readonly scopes: ConfigurationScope[] | undefined, + scopes: ConfigurationScope[] | undefined, private readonly fileService: IFileService, private readonly uriIdentityService: IUriIdentityService, private readonly logService: ILogService, ) { super(); - this.userConfiguration.value = new UserSettings(this.userSettingsResource, this.scopes, uriIdentityService.extUri, this.fileService); + this.configurationParseOptions = { scopes, excludeUnsafeConfigurations: false }; + this.userConfiguration.value = new UserSettings(this.userSettingsResource, scopes, uriIdentityService.extUri, this.fileService); this._register(this.userConfiguration.value.onDidChange(() => this.reloadConfigurationScheduler.schedule())); this.reloadConfigurationScheduler = this._register(new RunOnceScheduler(() => this.reload().then(configurationModel => this._onDidChangeConfiguration.fire(configurationModel)), 50)); } @@ -58,7 +66,7 @@ export class UserConfiguration extends Disposable { const folder = this.uriIdentityService.extUri.dirname(this.userSettingsResource); const standAloneConfigurationResources: [string, URI][] = [TASKS_CONFIGURATION_KEY].map(name => ([name, this.uriIdentityService.extUri.joinPath(folder, `${name}.json`)])); - const fileServiceBasedConfiguration = new FileServiceBasedConfiguration(folder.toString(), this.userSettingsResource, standAloneConfigurationResources, this.scopes, this.fileService, this.uriIdentityService, this.logService); + const fileServiceBasedConfiguration = new FileServiceBasedConfiguration(folder.toString(), this.userSettingsResource, standAloneConfigurationResources, this.configurationParseOptions, this.fileService, this.uriIdentityService, this.logService); const configurationModel = await fileServiceBasedConfiguration.loadConfiguration(); this.userConfiguration.value = fileServiceBasedConfiguration; @@ -70,8 +78,8 @@ export class UserConfiguration extends Disposable { return configurationModel; } - reprocess(): ConfigurationModel { - return this.userConfiguration.value!.reprocess(); + reparse(): ConfigurationModel { + return this.userConfiguration.value!.reparse(this.configurationParseOptions); } } @@ -79,6 +87,7 @@ class FileServiceBasedConfiguration extends Disposable { private readonly allResources: URI[]; private _folderSettingsModelParser: ConfigurationModelParser; + private _folderSettingsParseOptions: ConfigurationParseOptions; private _standAloneConfigurations: ConfigurationModel[]; private _cache: ConfigurationModel; @@ -89,7 +98,7 @@ class FileServiceBasedConfiguration extends Disposable { name: string, private readonly settingsResource: URI, private readonly standAloneConfigurationResources: [string, URI][], - private readonly scopes: ConfigurationScope[] | undefined, + configurationParseOptions: ConfigurationParseOptions, private readonly fileService: IFileService, private readonly uriIdentityService: IUriIdentityService, private readonly logService: ILogService, @@ -102,7 +111,8 @@ class FileServiceBasedConfiguration extends Disposable { this.fileService.watch(resource) )))); - this._folderSettingsModelParser = new ConfigurationModelParser(name, this.scopes); + this._folderSettingsModelParser = new ConfigurationModelParser(name); + this._folderSettingsParseOptions = configurationParseOptions; this._standAloneConfigurations = []; this._cache = new ConfigurationModel(); @@ -144,17 +154,17 @@ class FileServiceBasedConfiguration extends Disposable { // reset this._standAloneConfigurations = []; - this._folderSettingsModelParser.parseContent(''); + this._folderSettingsModelParser.parse('', this._folderSettingsParseOptions); // parse if (settingsContent !== undefined) { - this._folderSettingsModelParser.parseContent(settingsContent); + this._folderSettingsModelParser.parse(settingsContent, this._folderSettingsParseOptions); } for (let index = 0; index < standAloneConfigurationContents.length; index++) { const contents = standAloneConfigurationContents[index][1]; if (contents !== undefined) { const standAloneConfigurationModelParser = new StandaloneConfigurationModelParser(this.standAloneConfigurationResources[index][1].toString(), this.standAloneConfigurationResources[index][0]); - standAloneConfigurationModelParser.parseContent(contents); + standAloneConfigurationModelParser.parse(contents); this._standAloneConfigurations.push(standAloneConfigurationModelParser.configurationModel); } } @@ -165,9 +175,14 @@ class FileServiceBasedConfiguration extends Disposable { return this._cache; } - reprocess(): ConfigurationModel { + getExcludedUnsafeSettings(): string[] { + return this._folderSettingsModelParser.excludedUnsafeConfigurations; + } + + reparse(configurationParseOptions: ConfigurationParseOptions): ConfigurationModel { const oldContents = this._folderSettingsModelParser.configurationModel.contents; - this._folderSettingsModelParser.parse(); + this._folderSettingsParseOptions = configurationParseOptions; + this._folderSettingsModelParser.reparse(this._folderSettingsParseOptions); if (!equals(oldContents, this._folderSettingsModelParser.configurationModel.contents)) { this.consolidate(); } @@ -249,8 +264,8 @@ export class RemoteUserConfiguration extends Disposable { return this._userConfiguration.reload(); } - reprocess(): ConfigurationModel { - return this._userConfiguration.reprocess(); + reparse(): ConfigurationModel { + return this._userConfiguration.reparse(); } private onDidUserConfigurationChange(configurationModel: ConfigurationModel): void { @@ -277,6 +292,7 @@ export class RemoteUserConfiguration extends Disposable { class FileServiceBasedRemoteUserConfiguration extends Disposable { private readonly parser: ConfigurationModelParser; + private readonly parseOptions: ConfigurationParseOptions; private readonly reloadConfigurationScheduler: RunOnceScheduler; protected readonly _onDidChangeConfiguration: Emitter = this._register(new Emitter()); readonly onDidChangeConfiguration: Event = this._onDidChangeConfiguration.event; @@ -286,13 +302,14 @@ class FileServiceBasedRemoteUserConfiguration extends Disposable { constructor( private readonly configurationResource: URI, - private readonly scopes: ConfigurationScope[] | undefined, + scopes: ConfigurationScope[] | undefined, private readonly fileService: IFileService, private readonly uriIdentityService: IUriIdentityService, ) { super(); - this.parser = new ConfigurationModelParser(this.configurationResource.toString(), this.scopes); + this.parser = new ConfigurationModelParser(this.configurationResource.toString()); + this.parseOptions = { scopes }; this._register(fileService.onDidFilesChange(e => this.handleFileEvents(e))); this.reloadConfigurationScheduler = this._register(new RunOnceScheduler(() => this.reload().then(configurationModel => this._onDidChangeConfiguration.fire(configurationModel)), 50)); this._register(toDisposable(() => { @@ -334,15 +351,15 @@ class FileServiceBasedRemoteUserConfiguration extends Disposable { async reload(): Promise { try { const content = await this.resolveContent(); - this.parser.parseContent(content); + this.parser.parse(content, this.parseOptions); return this.parser.configurationModel; } catch (e) { return new ConfigurationModel(); } } - reprocess(): ConfigurationModel { - this.parser.parse(); + reparse(): ConfigurationModel { + this.parser.reparse(this.parseOptions); return this.parser.configurationModel; } @@ -381,6 +398,7 @@ class CachedRemoteUserConfiguration extends Disposable { private readonly key: ConfigurationKey; private readonly parser: ConfigurationModelParser; + private readonly parseOptions: ConfigurationParseOptions; private configurationModel: ConfigurationModel; constructor( @@ -390,7 +408,8 @@ class CachedRemoteUserConfiguration extends Disposable { ) { super(); this.key = { type: 'user', key: remoteAuthority }; - this.parser = new ConfigurationModelParser('CachedRemoteUserConfiguration', scopes); + this.parser = new ConfigurationModelParser('CachedRemoteUserConfiguration'); + this.parseOptions = { scopes }; this.configurationModel = new ConfigurationModel(); } @@ -402,8 +421,8 @@ class CachedRemoteUserConfiguration extends Disposable { return this.reload(); } - reprocess(): ConfigurationModel { - this.parser.parse(); + reparse(): ConfigurationModel { + this.parser.reparse(this.parseOptions); this.configurationModel = this.parser.configurationModel; return this.configurationModel; } @@ -413,7 +432,7 @@ class CachedRemoteUserConfiguration extends Disposable { const content = await this.configurationCache.read(this.key); const parsed: { content: string } = JSON.parse(content); if (parsed.content) { - this.parser.parseContent(parsed.content); + this.parser.parse(parsed.content, this.parseOptions); this.configurationModel = this.parser.configurationModel; } } catch (e) { /* Ignore error */ } @@ -436,6 +455,7 @@ export class WorkspaceConfiguration extends Disposable { private _workspaceConfiguration: CachedWorkspaceConfiguration | FileServiceBasedWorkspaceConfiguration; private _workspaceConfigurationDisposables = this._register(new DisposableStore()); private _workspaceIdentifier: IWorkspaceIdentifier | null = null; + private _workspaceTrustState: WorkspaceTrustState | null = null; private readonly _onDidUpdateConfiguration: Emitter = this._register(new Emitter()); public readonly onDidUpdateConfiguration: Event = this._onDidUpdateConfiguration.event; @@ -451,8 +471,9 @@ export class WorkspaceConfiguration extends Disposable { this._workspaceConfiguration = this._cachedConfiguration = new CachedWorkspaceConfiguration(configurationCache); } - async initialize(workspaceIdentifier: IWorkspaceIdentifier): Promise { + async initialize(workspaceIdentifier: IWorkspaceIdentifier, workspaceTrustState: WorkspaceTrustState): Promise { this._workspaceIdentifier = workspaceIdentifier; + this._workspaceTrustState = workspaceTrustState; if (!this._initialized) { if (this.configurationCache.needsCaching(this._workspaceIdentifier.configPath)) { this._workspaceConfiguration = this._cachedConfiguration; @@ -466,7 +487,7 @@ export class WorkspaceConfiguration extends Disposable { async reload(): Promise { if (this._workspaceIdentifier) { - await this._workspaceConfiguration.load(this._workspaceIdentifier); + await this._workspaceConfiguration.load(this._workspaceIdentifier, { scopes: WORKSPACE_SCOPES, excludeUnsafeConfigurations: this.hasToExcludeUnsafeConfigurations() }); } } @@ -486,16 +507,25 @@ export class WorkspaceConfiguration extends Disposable { return this._workspaceConfiguration.getWorkspaceSettings(); } - reprocessWorkspaceSettings(): ConfigurationModel { - this._workspaceConfiguration.reprocessWorkspaceSettings(); + updateWorkspaceTrustState(workspaceTrustState: WorkspaceTrustState): ConfigurationModel { + this._workspaceTrustState = workspaceTrustState; + return this.reparseWorkspaceSettings(); + } + + reparseWorkspaceSettings(): ConfigurationModel { + this._workspaceConfiguration.reparseWorkspaceSettings({ scopes: WORKSPACE_SCOPES, excludeUnsafeConfigurations: this.hasToExcludeUnsafeConfigurations() }); return this.getConfiguration(); } + getExcludedUnsafeSettings(): string[] { + return this._workspaceConfiguration.getExcludedUnsafeSettings(); + } + private async waitAndInitialize(workspaceIdentifier: IWorkspaceIdentifier): Promise { await whenProviderRegistered(workspaceIdentifier.configPath, this._fileService); if (!(this._workspaceConfiguration instanceof FileServiceBasedWorkspaceConfiguration)) { const fileServiceBasedWorkspaceConfiguration = this._register(new FileServiceBasedWorkspaceConfiguration(this._fileService)); - await fileServiceBasedWorkspaceConfiguration.load(workspaceIdentifier); + await fileServiceBasedWorkspaceConfiguration.load(workspaceIdentifier, { scopes: WORKSPACE_SCOPES, excludeUnsafeConfigurations: this.hasToExcludeUnsafeConfigurations() }); this.doInitialize(fileServiceBasedWorkspaceConfiguration); this.onDidWorkspaceConfigurationChange(false); } @@ -508,6 +538,10 @@ export class WorkspaceConfiguration extends Disposable { this._initialized = true; } + private hasToExcludeUnsafeConfigurations(): boolean | undefined { + return this._workspaceTrustState !== null ? hasToExcludeUnsafeConfigurations(this._workspaceTrustState) : undefined; + } + private async onDidWorkspaceConfigurationChange(reload: boolean): Promise { if (reload) { await this.reload(); @@ -555,7 +589,7 @@ class FileServiceBasedWorkspaceConfiguration extends Disposable { return content.value.toString(); } - async load(workspaceIdentifier: IWorkspaceIdentifier): Promise { + async load(workspaceIdentifier: IWorkspaceIdentifier, configurationParseOptions: ConfigurationParseOptions): Promise { if (!this._workspaceIdentifier || this._workspaceIdentifier.id !== workspaceIdentifier.id) { this._workspaceIdentifier = workspaceIdentifier; this.workspaceConfigurationModelParser = new WorkspaceConfigurationModelParser(this._workspaceIdentifier.id); @@ -571,7 +605,7 @@ class FileServiceBasedWorkspaceConfiguration extends Disposable { errors.onUnexpectedError(error); } } - this.workspaceConfigurationModelParser.parseContent(contents); + this.workspaceConfigurationModelParser.parse(contents, configurationParseOptions); this.consolidate(); } @@ -587,12 +621,16 @@ class FileServiceBasedWorkspaceConfiguration extends Disposable { return this.workspaceSettings; } - reprocessWorkspaceSettings(): ConfigurationModel { - this.workspaceConfigurationModelParser.reprocessWorkspaceSettings(); + reparseWorkspaceSettings(configurationParseOptions: ConfigurationParseOptions): ConfigurationModel { + this.workspaceConfigurationModelParser.reparseWorkspaceSettings(configurationParseOptions); this.consolidate(); return this.getWorkspaceSettings(); } + getExcludedUnsafeSettings(): string[] { + return this.workspaceConfigurationModelParser.excludedUnsafeConfigurations; + } + private consolidate(): void { this.workspaceSettings = this.workspaceConfigurationModelParser.settingsModel.merge(this.workspaceConfigurationModelParser.launchModel, this.workspaceConfigurationModelParser.tasksModel); } @@ -624,14 +662,14 @@ class CachedWorkspaceConfiguration { this.workspaceSettings = new ConfigurationModel(); } - async load(workspaceIdentifier: IWorkspaceIdentifier): Promise { + async load(workspaceIdentifier: IWorkspaceIdentifier, configurationParseOptions: ConfigurationParseOptions): Promise { try { const key = this.getKey(workspaceIdentifier); const contents = await this.configurationCache.read(key); const parsed: { content: string } = JSON.parse(contents); if (parsed.content) { this.workspaceConfigurationModelParser = new WorkspaceConfigurationModelParser(key.key); - this.workspaceConfigurationModelParser.parseContent(parsed.content); + this.workspaceConfigurationModelParser.parse(parsed.content, configurationParseOptions); this.consolidate(); } } catch (e) { @@ -654,12 +692,16 @@ class CachedWorkspaceConfiguration { return this.workspaceSettings; } - reprocessWorkspaceSettings(): ConfigurationModel { - this.workspaceConfigurationModelParser.reprocessWorkspaceSettings(); + reparseWorkspaceSettings(configurationParseOptions: ConfigurationParseOptions): ConfigurationModel { + this.workspaceConfigurationModelParser.reparseWorkspaceSettings(configurationParseOptions); this.consolidate(); return this.getWorkspaceSettings(); } + getExcludedUnsafeSettings(): string[] { + return this.workspaceConfigurationModelParser.excludedUnsafeConfigurations; + } + private consolidate(): void { this.workspaceSettings = this.workspaceConfigurationModelParser.settingsModel.merge(this.workspaceConfigurationModelParser.launchModel, this.workspaceConfigurationModelParser.tasksModel); } @@ -689,6 +731,7 @@ class CachedFolderConfiguration { readonly onDidChange = Event.None; private _folderSettingsModelParser: ConfigurationModelParser; + private _folderSettingsParseOptions: ConfigurationParseOptions; private _standAloneConfigurations: ConfigurationModel[]; private configurationModel: ConfigurationModel; private readonly key: ConfigurationKey; @@ -696,11 +739,12 @@ class CachedFolderConfiguration { constructor( folder: URI, configFolderRelativePath: string, + configurationParseOptions: ConfigurationParseOptions, private readonly configurationCache: IConfigurationCache, - scopes: ConfigurationScope[], ) { this.key = { type: 'folder', key: hash(join(folder.path, configFolderRelativePath)).toString(16) }; - this._folderSettingsModelParser = new ConfigurationModelParser('CachedFolderConfiguration', scopes); + this._folderSettingsModelParser = new ConfigurationModelParser('CachedFolderConfiguration'); + this._folderSettingsParseOptions = configurationParseOptions; this._standAloneConfigurations = []; this.configurationModel = new ConfigurationModel(); } @@ -712,10 +756,10 @@ class CachedFolderConfiguration { if (configurationContents) { for (const key of Object.keys(configurationContents)) { if (key === FOLDER_SETTINGS_NAME) { - this._folderSettingsModelParser.parseContent(configurationContents[key]); + this._folderSettingsModelParser.parse(configurationContents[key], this._folderSettingsParseOptions); } else { const standAloneConfigurationModelParser = new StandaloneConfigurationModelParser(key, key); - standAloneConfigurationModelParser.parseContent(configurationContents[key]); + standAloneConfigurationModelParser.parse(configurationContents[key]); this._standAloneConfigurations.push(standAloneConfigurationModelParser.configurationModel); } } @@ -743,8 +787,13 @@ class CachedFolderConfiguration { } } - reprocess(): ConfigurationModel { - this._folderSettingsModelParser.parse(); + getExcludedUnsafeSettings(): string[] { + return this._folderSettingsModelParser.excludedUnsafeConfigurations; + } + + reparse(configurationParseOptions: ConfigurationParseOptions): ConfigurationModel { + this._folderSettingsParseOptions = configurationParseOptions; + this._folderSettingsModelParser.reparse(this._folderSettingsParseOptions); this.consolidate(); return this.configurationModel; } @@ -764,6 +813,7 @@ export class FolderConfiguration extends Disposable { readonly onDidChange: Event = this._onDidChange.event; private folderConfiguration: CachedFolderConfiguration | FileServiceBasedConfiguration; + private readonly scopes: ConfigurationScope[]; private readonly configurationFolder: URI; private cachedFolderConfiguration: CachedFolderConfiguration; @@ -771,6 +821,7 @@ export class FolderConfiguration extends Disposable { readonly workspaceFolder: IWorkspaceFolder, configFolderRelativePath: string, private readonly workbenchState: WorkbenchState, + private workspaceTrustState: WorkspaceTrustState, fileService: IFileService, uriIdentityService: IUriIdentityService, logService: ILogService, @@ -778,19 +829,19 @@ export class FolderConfiguration extends Disposable { ) { super(); - const scopes = WorkbenchState.WORKSPACE === this.workbenchState ? FOLDER_SCOPES : WORKSPACE_SCOPES; + this.scopes = WorkbenchState.WORKSPACE === this.workbenchState ? FOLDER_SCOPES : WORKSPACE_SCOPES; this.configurationFolder = uriIdentityService.extUri.joinPath(workspaceFolder.uri, configFolderRelativePath); - this.cachedFolderConfiguration = new CachedFolderConfiguration(workspaceFolder.uri, configFolderRelativePath, configurationCache, scopes); + this.cachedFolderConfiguration = new CachedFolderConfiguration(workspaceFolder.uri, configFolderRelativePath, { scopes: this.scopes, excludeUnsafeConfigurations: this.hasToExcludeUnsafeConfigurations() }, configurationCache); if (this.configurationCache.needsCaching(workspaceFolder.uri)) { this.folderConfiguration = this.cachedFolderConfiguration; whenProviderRegistered(workspaceFolder.uri, fileService) .then(() => { - this.folderConfiguration = this._register(this.createFileServiceBasedConfiguration(scopes, fileService, uriIdentityService, logService)); + this.folderConfiguration = this._register(this.createFileServiceBasedConfiguration(fileService, uriIdentityService, logService)); this._register(this.folderConfiguration.onDidChange(e => this.onDidFolderConfigurationChange())); this.onDidFolderConfigurationChange(); }); } else { - this.folderConfiguration = this._register(this.createFileServiceBasedConfiguration(scopes, fileService, uriIdentityService, logService)); + this.folderConfiguration = this._register(this.createFileServiceBasedConfiguration(fileService, uriIdentityService, logService)); this._register(this.folderConfiguration.onDidChange(e => this.onDidFolderConfigurationChange())); } } @@ -799,21 +850,34 @@ export class FolderConfiguration extends Disposable { return this.folderConfiguration.loadConfiguration(); } - reprocess(): ConfigurationModel { - const configurationModel = this.folderConfiguration.reprocess(); + updateWorkspaceTrustState(workspaceTrustState: WorkspaceTrustState): ConfigurationModel { + this.workspaceTrustState = workspaceTrustState; + return this.reparse(); + } + + reparse(): ConfigurationModel { + const configurationModel = this.folderConfiguration.reparse({ scopes: this.scopes, excludeUnsafeConfigurations: this.hasToExcludeUnsafeConfigurations() }); this.updateCache(); return configurationModel; } + getExcludedUnsafeSettings(): string[] { + return this.folderConfiguration.getExcludedUnsafeSettings(); + } + + private hasToExcludeUnsafeConfigurations(): boolean { + return hasToExcludeUnsafeConfigurations(this.workspaceTrustState); + } + private onDidFolderConfigurationChange(): void { this.updateCache(); this._onDidChange.fire(); } - private createFileServiceBasedConfiguration(scopes: ConfigurationScope[], fileService: IFileService, uriIdentityService: IUriIdentityService, logService: ILogService) { + private createFileServiceBasedConfiguration(fileService: IFileService, uriIdentityService: IUriIdentityService, logService: ILogService) { const settingsResource = uriIdentityService.extUri.joinPath(this.configurationFolder, `${FOLDER_SETTINGS_NAME}.json`); const standAloneConfigurationResources: [string, URI][] = [TASKS_CONFIGURATION_KEY, LAUNCH_CONFIGURATION_KEY].map(name => ([name, uriIdentityService.extUri.joinPath(this.configurationFolder, `${name}.json`)])); - return new FileServiceBasedConfiguration(this.configurationFolder.toString(), settingsResource, standAloneConfigurationResources, scopes, fileService, uriIdentityService, logService); + return new FileServiceBasedConfiguration(this.configurationFolder.toString(), settingsResource, standAloneConfigurationResources, { scopes: this.scopes, excludeUnsafeConfigurations: this.hasToExcludeUnsafeConfigurations() }, fileService, uriIdentityService, logService); } private async updateCache(): Promise { diff --git a/src/vs/workbench/services/configuration/browser/configurationService.ts b/src/vs/workbench/services/configuration/browser/configurationService.ts index cd98feb38fe..f90fcf97780 100644 --- a/src/vs/workbench/services/configuration/browser/configurationService.ts +++ b/src/vs/workbench/services/configuration/browser/configurationService.ts @@ -12,7 +12,7 @@ import { Queue, Barrier, runWhenIdle, Promises } from 'vs/base/common/async'; import { IJSONContributionRegistry, Extensions as JSONExtensions } from 'vs/platform/jsonschemas/common/jsonContributionRegistry'; import { IWorkspaceContextService, Workspace as BaseWorkspace, WorkbenchState, IWorkspaceFolder, IWorkspaceFoldersChangeEvent, WorkspaceFolder, toWorkspaceFolder, isWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; import { ConfigurationModel, DefaultConfigurationModel, ConfigurationChangeEvent, AllKeysConfigurationChangeEvent, mergeChanges } from 'vs/platform/configuration/common/configurationModels'; -import { IConfigurationChangeEvent, ConfigurationTarget, IConfigurationOverrides, keyFromOverrideIdentifier, isConfigurationOverrides, IConfigurationData, IConfigurationValue, IConfigurationChange, ConfigurationTargetToString } from 'vs/platform/configuration/common/configuration'; +import { IConfigurationChangeEvent, ConfigurationTarget, IConfigurationOverrides, keyFromOverrideIdentifier, isConfigurationOverrides, IConfigurationData, IConfigurationValue, IConfigurationChange, ConfigurationTargetToString, IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { Configuration } from 'vs/workbench/services/configuration/common/configurationModels'; import { FOLDER_CONFIG_FOLDER_NAME, defaultSettingsSchemaId, userSettingsSchemaId, workspaceSettingsSchemaId, folderSettingsSchemaId, IConfigurationCache, machineSettingsSchemaId, LOCAL_MACHINE_SCOPES, IWorkbenchConfigurationService } from 'vs/workbench/services/configuration/common/configuration'; import { Registry } from 'vs/platform/registry/common/platform'; @@ -32,6 +32,8 @@ import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle import { ILogService } from 'vs/platform/log/common/log'; import { toErrorMessage } from 'vs/base/common/errorMessage'; import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentity'; +import { IWorkspaceTrustService, WorkspaceTrustState } from 'vs/platform/workspace/common/workspaceTrust'; +import { delta, distinct } from 'vs/base/common/arrays'; class Workspace extends BaseWorkspace { initialized: boolean = false; @@ -58,18 +60,25 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat private readonly fileService: IFileService; private readonly uriIdentityService: IUriIdentityService; - protected readonly _onDidChangeConfiguration: Emitter = this._register(new Emitter()); + private readonly _onDidChangeConfiguration: Emitter = this._register(new Emitter()); public readonly onDidChangeConfiguration: Event = this._onDidChangeConfiguration.event; - protected readonly _onDidChangeWorkspaceFolders: Emitter = this._register(new Emitter()); + private readonly _onDidChangeWorkspaceFolders: Emitter = this._register(new Emitter()); public readonly onDidChangeWorkspaceFolders: Event = this._onDidChangeWorkspaceFolders.event; - protected readonly _onDidChangeWorkspaceName: Emitter = this._register(new Emitter()); + private readonly _onDidChangeWorkspaceName: Emitter = this._register(new Emitter()); public readonly onDidChangeWorkspaceName: Event = this._onDidChangeWorkspaceName.event; - protected readonly _onDidChangeWorkbenchState: Emitter = this._register(new Emitter()); + private readonly _onDidChangeWorkbenchState: Emitter = this._register(new Emitter()); public readonly onDidChangeWorkbenchState: Event = this._onDidChangeWorkbenchState.event; + private readonly _onDidChangeUnsafeWorkspaceSettings = this._register(new Emitter>()); + public readonly onDidChangeUnsafeWorkspaceSettings = this._onDidChangeUnsafeWorkspaceSettings.event; + + private workspaceTrustState: WorkspaceTrustState = WorkspaceTrustState.Trusted; + private _unSafeWorkspaceSettings: string[] = []; + get unSafeWorkspaceSettings() { return this._unSafeWorkspaceSettings; } + private readonly configurationRegistry: IConfigurationRegistry; // TODO@sandeep debt with cyclic dependencies @@ -390,6 +399,34 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat mark('code/didInitWorkspaceService'); } + updateWorkspaceTrustState(workspaceTrustState: WorkspaceTrustState): void { + if (this.workspaceTrustState !== workspaceTrustState) { + this.workspaceTrustState = workspaceTrustState; + const data = this._configuration.toData(); + const folderConfigurationModels: (ConfigurationModel | undefined)[] = []; + for (const folder of this.workspace.folders) { + const folderConfiguration = this.cachedFolderConfigs.get(folder.uri); + let configurationModel: ConfigurationModel | undefined; + if (folderConfiguration) { + configurationModel = folderConfiguration.updateWorkspaceTrustState(this.workspaceTrustState); + this._configuration.updateFolderConfiguration(folder.uri, configurationModel); + } + folderConfigurationModels.push(configurationModel); + } + if (this.getWorkbenchState() === WorkbenchState.FOLDER) { + if (folderConfigurationModels[0]) { + this._configuration.updateWorkspaceConfiguration(folderConfigurationModels[0]); + } + } else { + this._configuration.updateWorkspaceConfiguration(this.workspaceConfiguration.updateWorkspaceTrustState(this.workspaceTrustState)); + } + const keys = this.updateUnsafeWorkpsaceSettings(); + if (keys.length) { + this.triggerConfigurationChange({ keys, overrides: [] }, { data, workspace: this.workspace }, ConfigurationTarget.WORKSPACE); + } + } + } + acquireInstantiationService(instantiationService: IInstantiationService): void { this.configurationEditingService = instantiationService.createInstance(ConfigurationEditingService); this.jsonEditingService = instantiationService.createInstance(JSONEditingService); @@ -401,7 +438,7 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat } } - private createWorkspace(arg: IWorkspaceInitializationPayload): Promise { + private async createWorkspace(arg: IWorkspaceInitializationPayload): Promise { if (isWorkspaceIdentifier(arg)) { return this.createMultiFolderWorkspace(arg); } @@ -413,22 +450,20 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat return this.createEmptyWorkspace(arg); } - private createMultiFolderWorkspace(workspaceIdentifier: IWorkspaceIdentifier): Promise { - return this.workspaceConfiguration.initialize({ id: workspaceIdentifier.id, configPath: workspaceIdentifier.configPath }) - .then(() => { - const workspaceConfigPath = workspaceIdentifier.configPath; - const workspaceFolders = toWorkspaceFolders(this.workspaceConfiguration.getFolders(), workspaceConfigPath, this.uriIdentityService.extUri); - const workspaceId = workspaceIdentifier.id; - const workspace = new Workspace(workspaceId, workspaceFolders, workspaceConfigPath, uri => this.uriIdentityService.extUri.ignorePathCasing(uri)); - workspace.initialized = this.workspaceConfiguration.initialized; - return workspace; - }); + private async createMultiFolderWorkspace(workspaceIdentifier: IWorkspaceIdentifier): Promise { + await this.workspaceConfiguration.initialize({ id: workspaceIdentifier.id, configPath: workspaceIdentifier.configPath }, this.workspaceTrustState); + const workspaceConfigPath = workspaceIdentifier.configPath; + const workspaceFolders = toWorkspaceFolders(this.workspaceConfiguration.getFolders(), workspaceConfigPath, this.uriIdentityService.extUri); + const workspaceId = workspaceIdentifier.id; + const workspace = new Workspace(workspaceId, workspaceFolders, workspaceConfigPath, uri => this.uriIdentityService.extUri.ignorePathCasing(uri)); + workspace.initialized = this.workspaceConfiguration.initialized; + return workspace; } - private createSingleFolderWorkspace(singleFolderWorkspaceIdentifier: ISingleFolderWorkspaceIdentifier): Promise { + private createSingleFolderWorkspace(singleFolderWorkspaceIdentifier: ISingleFolderWorkspaceIdentifier): Workspace { const workspace = new Workspace(singleFolderWorkspaceIdentifier.id, [toWorkspaceFolder(singleFolderWorkspaceIdentifier.uri)], null, uri => this.uriIdentityService.extUri.ignorePathCasing(uri)); workspace.initialized = true; - return Promise.resolve(workspace); + return workspace; } private createEmptyWorkspace(emptyWorkspaceIdentifier: IEmptyWorkspaceIdentifier): Promise { @@ -505,9 +540,9 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat return result; } - private initializeConfiguration(): Promise { - return this.initializeUserConfiguration() - .then(({ local, remote }) => this.loadConfiguration(local, remote)); + private async initializeConfiguration(): Promise { + const { local, remote } = await this.initializeUserConfiguration(); + await this.loadConfiguration(local, remote); } private initializeUserConfiguration(): Promise<{ local: ConfigurationModel, remote: ConfigurationModel }> { @@ -553,29 +588,29 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat return this.onWorkspaceFolderConfigurationChanged(folder); } - private loadConfiguration(userConfigurationModel: ConfigurationModel, remoteUserConfigurationModel: ConfigurationModel): Promise { + private async loadConfiguration(userConfigurationModel: ConfigurationModel, remoteUserConfigurationModel: ConfigurationModel): Promise { // reset caches this.cachedFolderConfigs = new ResourceMap(); const folders = this.workspace.folders; - return this.loadFolderConfigurations(folders) - .then((folderConfigurations) => { + const folderConfigurations = await this.loadFolderConfigurations(folders); - let workspaceConfiguration = this.getWorkspaceConfigurationModel(folderConfigurations); - const folderConfigurationModels = new ResourceMap(); - folderConfigurations.forEach((folderConfiguration, index) => folderConfigurationModels.set(folders[index].uri, folderConfiguration)); + let workspaceConfiguration = this.getWorkspaceConfigurationModel(folderConfigurations); + const folderConfigurationModels = new ResourceMap(); + folderConfigurations.forEach((folderConfiguration, index) => folderConfigurationModels.set(folders[index].uri, folderConfiguration)); - const currentConfiguration = this._configuration; - this._configuration = new Configuration(this.defaultConfiguration, userConfigurationModel, remoteUserConfigurationModel, workspaceConfiguration, folderConfigurationModels, new ConfigurationModel(), new ResourceMap(), this.workspace); + const currentConfiguration = this._configuration; + this._configuration = new Configuration(this.defaultConfiguration, userConfigurationModel, remoteUserConfigurationModel, workspaceConfiguration, folderConfigurationModels, new ConfigurationModel(), new ResourceMap(), this.workspace); - if (this.initialized) { - const change = this._configuration.compare(currentConfiguration); - this.triggerConfigurationChange(change, { data: currentConfiguration.toData(), workspace: this.workspace }, ConfigurationTarget.WORKSPACE); - } else { - this._onDidChangeConfiguration.fire(new AllKeysConfigurationChangeEvent(this._configuration, this.workspace, ConfigurationTarget.WORKSPACE, this.getTargetConfiguration(ConfigurationTarget.WORKSPACE))); - this.initialized = true; - } - }); + if (this.initialized) { + const change = this._configuration.compare(currentConfiguration); + this.triggerConfigurationChange(change, { data: currentConfiguration.toData(), workspace: this.workspace }, ConfigurationTarget.WORKSPACE); + } else { + this._onDidChangeConfiguration.fire(new AllKeysConfigurationChangeEvent(this._configuration, this.workspace, ConfigurationTarget.WORKSPACE, this.getTargetConfiguration(ConfigurationTarget.WORKSPACE))); + this.initialized = true; + } + + this.updateUnsafeWorkpsaceSettings(); } private getWorkspaceConfigurationModel(folderConfigurations: ConfigurationModel[]): ConfigurationModel { @@ -595,25 +630,26 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat const previousData = this._configuration.toData(); const change = this._configuration.compareAndUpdateDefaultConfiguration(this.defaultConfiguration, keys); if (this.remoteUserConfiguration) { - this._configuration.updateLocalUserConfiguration(this.localUserConfiguration.reprocess()); - this._configuration.updateRemoteUserConfiguration(this.remoteUserConfiguration.reprocess()); + this._configuration.updateLocalUserConfiguration(this.localUserConfiguration.reparse()); + this._configuration.updateRemoteUserConfiguration(this.remoteUserConfiguration.reparse()); } if (this.getWorkbenchState() === WorkbenchState.FOLDER) { const folderConfiguration = this.cachedFolderConfigs.get(this.workspace.folders[0].uri); if (folderConfiguration) { - this._configuration.updateWorkspaceConfiguration(folderConfiguration.reprocess()); - this._configuration.updateFolderConfiguration(this.workspace.folders[0].uri, folderConfiguration.reprocess()); + this._configuration.updateWorkspaceConfiguration(folderConfiguration.reparse()); + this._configuration.updateFolderConfiguration(this.workspace.folders[0].uri, folderConfiguration.reparse()); } } else { - this._configuration.updateWorkspaceConfiguration(this.workspaceConfiguration.reprocessWorkspaceSettings()); + this._configuration.updateWorkspaceConfiguration(this.workspaceConfiguration.reparseWorkspaceSettings()); for (const folder of this.workspace.folders) { const folderConfiguration = this.cachedFolderConfigs.get(folder.uri); if (folderConfiguration) { - this._configuration.updateFolderConfiguration(folder.uri, folderConfiguration.reprocess()); + this._configuration.updateFolderConfiguration(folder.uri, folderConfiguration.reparse()); } } } this.triggerConfigurationChange(change, { data: previousData, workspace: this.workspace }, ConfigurationTarget.DEFAULT); + this.updateUnsafeWorkpsaceSettings(); } } @@ -651,6 +687,24 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat } } + private updateUnsafeWorkpsaceSettings(): string[] { + let unsafeWorkspaceSettings = []; + if (this.getWorkbenchState() === WorkbenchState.WORKSPACE) { + unsafeWorkspaceSettings.push(...this.workspaceConfiguration.getExcludedUnsafeSettings()); + } + for (const folderConfig of this.cachedFolderConfigs.values()) { + unsafeWorkspaceSettings.push(...folderConfig.getExcludedUnsafeSettings()); + } + unsafeWorkspaceSettings = distinct(unsafeWorkspaceSettings).sort((a, b) => a.localeCompare(b)); + const { removed, added } = delta(unsafeWorkspaceSettings, this._unSafeWorkspaceSettings, (a, b) => a.localeCompare(b)); + const changed = [...removed, ...added]; + if (changed.length) { + this._unSafeWorkspaceSettings = unsafeWorkspaceSettings; + this._onDidChangeUnsafeWorkspaceSettings.fire(this.unSafeWorkspaceSettings); + } + return changed; + } + private async updateWorkspaceConfiguration(workspaceFolders: WorkspaceFolder[], configuration: ConfigurationModel): Promise { const previous = { data: this._configuration.toData(), workspace: this.workspace }; const change = this._configuration.compareAndUpdateWorkspaceConfiguration(configuration); @@ -663,20 +717,20 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat } else { this.triggerConfigurationChange(change, previous, ConfigurationTarget.WORKSPACE); } + this.updateUnsafeWorkpsaceSettings(); } - private onWorkspaceFolderConfigurationChanged(folder: IWorkspaceFolder): Promise { - return this.loadFolderConfigurations([folder]) - .then(([folderConfiguration]) => { - const previous = { data: this._configuration.toData(), workspace: this.workspace }; - const folderConfiguraitonChange = this._configuration.compareAndUpdateFolderConfiguration(folder.uri, folderConfiguration); - if (this.getWorkbenchState() === WorkbenchState.FOLDER) { - const workspaceConfigurationChange = this._configuration.compareAndUpdateWorkspaceConfiguration(folderConfiguration); - this.triggerConfigurationChange(mergeChanges(folderConfiguraitonChange, workspaceConfigurationChange), previous, ConfigurationTarget.WORKSPACE); - } else { - this.triggerConfigurationChange(folderConfiguraitonChange, previous, ConfigurationTarget.WORKSPACE_FOLDER); - } - }); + private async onWorkspaceFolderConfigurationChanged(folder: IWorkspaceFolder): Promise { + const [folderConfiguration] = await this.loadFolderConfigurations([folder]); + const previous = { data: this._configuration.toData(), workspace: this.workspace }; + const folderConfiguraitonChange = this._configuration.compareAndUpdateFolderConfiguration(folder.uri, folderConfiguration); + if (this.getWorkbenchState() === WorkbenchState.FOLDER) { + const workspaceConfigurationChange = this._configuration.compareAndUpdateWorkspaceConfiguration(folderConfiguration); + this.triggerConfigurationChange(mergeChanges(folderConfiguraitonChange, workspaceConfigurationChange), previous, ConfigurationTarget.WORKSPACE); + } else { + this.triggerConfigurationChange(folderConfiguraitonChange, previous, ConfigurationTarget.WORKSPACE_FOLDER); + } + this.updateUnsafeWorkpsaceSettings(); } private async onFoldersChanged(): Promise { @@ -706,7 +760,7 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat return Promise.all([...folders.map(folder => { let folderConfiguration = this.cachedFolderConfigs.get(folder.uri); if (!folderConfiguration) { - folderConfiguration = new FolderConfiguration(folder, FOLDER_CONFIG_FOLDER_NAME, this.getWorkbenchState(), this.fileService, this.uriIdentityService, this.logService, this.configurationCache); + folderConfiguration = new FolderConfiguration(folder, FOLDER_CONFIG_FOLDER_NAME, this.getWorkbenchState(), this.workspaceTrustState, this.fileService, this.uriIdentityService, this.logService, this.configurationCache); this._register(folderConfiguration.onDidChange(() => this.onWorkspaceFolderConfigurationChanged(folder))); this.cachedFolderConfigs.set(folder.uri, this._register(folderConfiguration)); } @@ -860,6 +914,17 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat } } +class ConfigurationWorkspaceTrustContribution extends Disposable implements IWorkbenchContribution { + constructor( + @IWorkspaceTrustService workspaceTrustService: IWorkspaceTrustService, + @IConfigurationService configurationService: WorkspaceService + ) { + super(); + configurationService.updateWorkspaceTrustState(workspaceTrustService.getWorkspaceTrustState()); + this._register(workspaceTrustService.onDidChangeTrustState(e => configurationService.updateWorkspaceTrustState(workspaceTrustService.getWorkspaceTrustState()))); + } +} + class RegisterConfigurationSchemasContribution extends Disposable implements IWorkbenchContribution { constructor( @IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService, @@ -900,4 +965,6 @@ class RegisterConfigurationSchemasContribution extends Disposable implements IWo } } -Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(RegisterConfigurationSchemasContribution, LifecyclePhase.Restored); +const workbenchContributionsRegistry = Registry.as(WorkbenchExtensions.Workbench); +workbenchContributionsRegistry.registerWorkbenchContribution(RegisterConfigurationSchemasContribution, LifecyclePhase.Restored); +workbenchContributionsRegistry.registerWorkbenchContribution(ConfigurationWorkspaceTrustContribution, LifecyclePhase.Restored); diff --git a/src/vs/workbench/services/configuration/common/configuration.ts b/src/vs/workbench/services/configuration/common/configuration.ts index f7769371de5..9fc95cfbeea 100644 --- a/src/vs/workbench/services/configuration/common/configuration.ts +++ b/src/vs/workbench/services/configuration/common/configuration.ts @@ -7,6 +7,7 @@ import { ConfigurationScope } from 'vs/platform/configuration/common/configurati import { URI } from 'vs/base/common/uri'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { refineServiceDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from 'vs/base/common/event'; export const FOLDER_CONFIG_FOLDER_NAME = '.vscode'; export const FOLDER_SETTINGS_NAME = 'settings'; @@ -47,6 +48,16 @@ export interface IConfigurationCache { export const IWorkbenchConfigurationService = refineServiceDecorator(IConfigurationService); export interface IWorkbenchConfigurationService extends IConfigurationService { + /** + * List of unsafe workspace settings found in current workspace + */ + readonly unSafeWorkspaceSettings: ReadonlyArray; + + /** + * Event that triggers when the list of unsafe workspace settings changes + */ + readonly onDidChangeUnsafeWorkspaceSettings: Event>; + /** * A promise that resolves when the remote configuration is loaded in a remote window. * The promise is resolved immediately if the window is not remote. diff --git a/src/vs/workbench/services/configuration/common/configurationModels.ts b/src/vs/workbench/services/configuration/common/configurationModels.ts index c2ee0980e88..cc441fccb92 100644 --- a/src/vs/workbench/services/configuration/common/configurationModels.ts +++ b/src/vs/workbench/services/configuration/common/configurationModels.ts @@ -5,12 +5,11 @@ import { equals } from 'vs/base/common/objects'; import { toValuesTree, IConfigurationModel, IConfigurationOverrides, IConfigurationValue, IConfigurationChange } from 'vs/platform/configuration/common/configuration'; -import { Configuration as BaseConfiguration, ConfigurationModelParser, ConfigurationModel } from 'vs/platform/configuration/common/configurationModels'; +import { Configuration as BaseConfiguration, ConfigurationModelParser, ConfigurationModel, ConfigurationParseOptions } from 'vs/platform/configuration/common/configurationModels'; import { IStoredWorkspaceFolder } from 'vs/platform/workspaces/common/workspaces'; import { Workspace } from 'vs/platform/workspace/common/workspace'; import { ResourceMap } from 'vs/base/common/map'; import { URI } from 'vs/base/common/uri'; -import { WORKSPACE_SCOPES } from 'vs/workbench/services/configuration/common/configuration'; import { OVERRIDE_PROPERTY_PATTERN, overrideIdentifierFromKey } from 'vs/platform/configuration/common/configurationRegistry'; export class WorkspaceConfigurationModelParser extends ConfigurationModelParser { @@ -22,7 +21,7 @@ export class WorkspaceConfigurationModelParser extends ConfigurationModelParser constructor(name: string) { super(name); - this._settingsModelParser = new ConfigurationModelParser(name, WORKSPACE_SCOPES); + this._settingsModelParser = new ConfigurationModelParser(name); this._launchModel = new ConfigurationModel(); this._tasksModel = new ConfigurationModel(); } @@ -43,16 +42,16 @@ export class WorkspaceConfigurationModelParser extends ConfigurationModelParser return this._tasksModel; } - reprocessWorkspaceSettings(): void { - this._settingsModelParser.parse(); + reparseWorkspaceSettings(configurationParseOptions: ConfigurationParseOptions): void { + this._settingsModelParser.reparse(configurationParseOptions); } - protected override doParseRaw(raw: any): IConfigurationModel { + protected override doParseRaw(raw: any, configurationParseOptions?: ConfigurationParseOptions): IConfigurationModel { this._folders = (raw['folders'] || []) as IStoredWorkspaceFolder[]; - this._settingsModelParser.parseRaw(raw['settings']); + this._settingsModelParser.parseRaw(raw['settings'], configurationParseOptions); this._launchModel = this.createConfigurationModelFrom(raw, 'launch'); this._tasksModel = this.createConfigurationModelFrom(raw, 'tasks'); - return super.doParseRaw(raw); + return super.doParseRaw(raw, configurationParseOptions); } private createConfigurationModelFrom(raw: any, key: string): ConfigurationModel { @@ -74,7 +73,7 @@ export class StandaloneConfigurationModelParser extends ConfigurationModelParser super(name); } - protected override doParseRaw(raw: any): IConfigurationModel { + protected override doParseRaw(raw: any, configurationParseOptions?: ConfigurationParseOptions): IConfigurationModel { const contents = toValuesTree(raw, message => console.error(`Conflict in settings file ${this._name}: ${message}`)); const scopedContents = Object.create(null); scopedContents[this.scope] = contents; diff --git a/src/vs/workbench/services/configuration/test/common/configurationModels.test.ts b/src/vs/workbench/services/configuration/test/common/configurationModels.test.ts index 74fecfd1931..228cc13113a 100644 --- a/src/vs/workbench/services/configuration/test/common/configurationModels.test.ts +++ b/src/vs/workbench/services/configuration/test/common/configurationModels.test.ts @@ -5,7 +5,7 @@ import * as assert from 'assert'; import { Registry } from 'vs/platform/registry/common/platform'; import { StandaloneConfigurationModelParser, Configuration } from 'vs/workbench/services/configuration/common/configurationModels'; -import { ConfigurationModelParser, ConfigurationModel } from 'vs/platform/configuration/common/configurationModels'; +import { ConfigurationModelParser, ConfigurationModel, ConfigurationParseOptions } from 'vs/platform/configuration/common/configurationModels'; import { IConfigurationRegistry, Extensions as ConfigurationExtensions, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; import { ResourceMap } from 'vs/base/common/map'; import { WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; @@ -49,9 +49,9 @@ suite('FolderSettingsModelParser', () => { }); test('parse all folder settings', () => { - const testObject = new ConfigurationModelParser('settings', [ConfigurationScope.RESOURCE, ConfigurationScope.WINDOW]); + const testObject = new ConfigurationModelParser('settings'); - testObject.parseContent(JSON.stringify({ 'FolderSettingsModelParser.window': 'window', 'FolderSettingsModelParser.resource': 'resource', 'FolderSettingsModelParser.application': 'application', 'FolderSettingsModelParser.machine': 'executable' })); + testObject.parse(JSON.stringify({ 'FolderSettingsModelParser.window': 'window', 'FolderSettingsModelParser.resource': 'resource', 'FolderSettingsModelParser.application': 'application', 'FolderSettingsModelParser.machine': 'executable' }), { scopes: [ConfigurationScope.RESOURCE, ConfigurationScope.WINDOW] }); const expected = Object.create(null); expected['FolderSettingsModelParser'] = Object.create(null); @@ -61,9 +61,9 @@ suite('FolderSettingsModelParser', () => { }); test('parse resource folder settings', () => { - const testObject = new ConfigurationModelParser('settings', [ConfigurationScope.RESOURCE]); + const testObject = new ConfigurationModelParser('settings'); - testObject.parseContent(JSON.stringify({ 'FolderSettingsModelParser.window': 'window', 'FolderSettingsModelParser.resource': 'resource', 'FolderSettingsModelParser.application': 'application', 'FolderSettingsModelParser.machine': 'executable' })); + testObject.parse(JSON.stringify({ 'FolderSettingsModelParser.window': 'window', 'FolderSettingsModelParser.resource': 'resource', 'FolderSettingsModelParser.application': 'application', 'FolderSettingsModelParser.machine': 'executable' }), { scopes: [ConfigurationScope.RESOURCE] }); const expected = Object.create(null); expected['FolderSettingsModelParser'] = Object.create(null); @@ -72,9 +72,9 @@ suite('FolderSettingsModelParser', () => { }); test('parse resource and resource language settings', () => { - const testObject = new ConfigurationModelParser('settings', [ConfigurationScope.RESOURCE, ConfigurationScope.LANGUAGE_OVERRIDABLE]); + const testObject = new ConfigurationModelParser('settings'); - testObject.parseContent(JSON.stringify({ '[json]': { 'FolderSettingsModelParser.window': 'window', 'FolderSettingsModelParser.resource': 'resource', 'FolderSettingsModelParser.resourceLanguage': 'resourceLanguage', 'FolderSettingsModelParser.application': 'application', 'FolderSettingsModelParser.machine': 'executable' } })); + testObject.parse(JSON.stringify({ '[json]': { 'FolderSettingsModelParser.window': 'window', 'FolderSettingsModelParser.resource': 'resource', 'FolderSettingsModelParser.resourceLanguage': 'resourceLanguage', 'FolderSettingsModelParser.application': 'application', 'FolderSettingsModelParser.machine': 'executable' } }), { scopes: [ConfigurationScope.RESOURCE, ConfigurationScope.LANGUAGE_OVERRIDABLE] }); const expected = Object.create(null); expected['FolderSettingsModelParser'] = Object.create(null); @@ -83,10 +83,11 @@ suite('FolderSettingsModelParser', () => { assert.deepStrictEqual(testObject.configurationModel.overrides, [{ 'contents': expected, 'identifiers': ['json'], 'keys': ['FolderSettingsModelParser.resource', 'FolderSettingsModelParser.resourceLanguage'] }]); }); - test('reprocess folder settings excludes application and machine setting', () => { - const testObject = new ConfigurationModelParser('settings', [ConfigurationScope.RESOURCE, ConfigurationScope.WINDOW]); + test('reparse folder settings excludes application and machine setting', () => { + const parseOptions: ConfigurationParseOptions = { scopes: [ConfigurationScope.RESOURCE, ConfigurationScope.WINDOW] }; + const testObject = new ConfigurationModelParser('settings'); - testObject.parseContent(JSON.stringify({ 'FolderSettingsModelParser.resource': 'resource', 'FolderSettingsModelParser.anotherApplicationSetting': 'executable' })); + testObject.parse(JSON.stringify({ 'FolderSettingsModelParser.resource': 'resource', 'FolderSettingsModelParser.anotherApplicationSetting': 'executable' }), parseOptions); let expected = Object.create(null); expected['FolderSettingsModelParser'] = Object.create(null); @@ -112,7 +113,7 @@ suite('FolderSettingsModelParser', () => { } }); - testObject.parse(); + testObject.reparse(parseOptions); expected = Object.create(null); expected['FolderSettingsModelParser'] = Object.create(null); @@ -127,7 +128,7 @@ suite('StandaloneConfigurationModelParser', () => { test('parse tasks stand alone configuration model', () => { const testObject = new StandaloneConfigurationModelParser('tasks', 'tasks'); - testObject.parseContent(JSON.stringify({ 'version': '1.1.1', 'tasks': [] })); + testObject.parse(JSON.stringify({ 'version': '1.1.1', 'tasks': [] })); const expected = Object.create(null); expected['tasks'] = Object.create(null); @@ -204,6 +205,6 @@ suite('Workspace Configuration', () => { function toConfigurationModel(obj: any): ConfigurationModel { const parser = new ConfigurationModelParser('test'); - parser.parseContent(JSON.stringify(obj)); + parser.parse(JSON.stringify(obj)); return parser.configurationModel; } diff --git a/src/vs/workbench/test/browser/api/extHostConfiguration.test.ts b/src/vs/workbench/test/browser/api/extHostConfiguration.test.ts index 08a15f45ed2..73453f39275 100644 --- a/src/vs/workbench/test/browser/api/extHostConfiguration.test.ts +++ b/src/vs/workbench/test/browser/api/extHostConfiguration.test.ts @@ -732,7 +732,7 @@ suite('ExtHostConfiguration', function () { function toConfigurationModel(obj: any): ConfigurationModel { const parser = new ConfigurationModelParser('test'); - parser.parseContent(JSON.stringify(obj)); + parser.parse(JSON.stringify(obj)); return parser.configurationModel; } From 1c27a2851752f1fcdaf266127752081048499934 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 13:34:13 -0700 Subject: [PATCH 084/115] Fix rewriting old-school vscode-resource uris Fixes #120863 This centralizes the rewriting into `baseWebviewElement`, which lets us share more code between desktop and web (and hoepfully makes the behavior of the two consistent) --- src/main.js | 3 --- src/vs/base/common/network.ts | 5 ---- .../webview/browser/baseWebviewElement.ts | 22 ++++++++++++++- .../contrib/webview/browser/pre/host.js | 4 --- .../contrib/webview/browser/pre/main.js | 6 +++-- .../contrib/webview/browser/webviewElement.ts | 21 --------------- .../electron-browser/pre/electron-index.js | 3 --- .../electron-browser/webviewElement.ts | 9 +------ .../electron-sandbox/iframeWebviewElement.ts | 10 ------- .../electron-sandbox/resourceLoading.ts | 27 ------------------- 10 files changed, 26 insertions(+), 84 deletions(-) delete mode 100644 src/vs/workbench/contrib/webview/electron-sandbox/resourceLoading.ts diff --git a/src/main.js b/src/main.js index 5f63ccbe2e0..1e3b9896dce 100644 --- a/src/main.js +++ b/src/main.js @@ -61,9 +61,6 @@ protocol.registerSchemesAsPrivileged([ { scheme: 'vscode-webview', privileges: { standard: true, secure: true, supportFetchAPI: true, corsEnabled: true, allowServiceWorkers: true, } - }, { - scheme: 'vscode-webview-resource', - privileges: { secure: true, standard: true, supportFetchAPI: true, corsEnabled: true } }, { scheme: 'vscode-file', diff --git a/src/vs/base/common/network.ts b/src/vs/base/common/network.ts index 31ee24034ec..cff5d95d3d6 100644 --- a/src/vs/base/common/network.ts +++ b/src/vs/base/common/network.ts @@ -73,11 +73,6 @@ export namespace Schemas { */ export const vscodeWebview = 'vscode-webview'; - /** - * Scheme used for loading resources inside of webviews. - */ - export const vscodeWebviewResource = 'vscode-webview-resource'; - /** * Scheme used for extension pages */ diff --git a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts index b289f7b9664..41a939ea2c8 100644 --- a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts @@ -317,13 +317,32 @@ export abstract class BaseWebview extends Disposable { } public set html(value: string) { + const rewrittenHtml = this.rewriteVsCodeResourceUrls(value); this.doUpdateContent({ - html: value, + html: rewrittenHtml, options: this.content.options, state: this.content.state, }); } + protected abstract get webviewResourceEndpoint(): string; + + private rewriteVsCodeResourceUrls(value: string): string { + return value + .replace(/(["'])(?:vscode-resource):(\/\/([^\s\/'"]+?)(?=\/))?([^\s'"]+?)(["'])/gi, (match, startQuote, _1, scheme, path, endQuote) => { + if (scheme) { + return `${startQuote}${this.webviewResourceEndpoint}/vscode-resource/${scheme}${path}${endQuote}`; + } + return `${startQuote}${this.webviewResourceEndpoint}/vscode-resource/file${path}${endQuote}`; + }) + .replace(/(["'])(?:vscode-webview-resource):(\/\/[^\s\/'"]+\/([^\s\/'"]+?)(?=\/))?([^\s'"]+?)(["'])/gi, (match, startQuote, _1, scheme, path, endQuote) => { + if (scheme) { + return `${startQuote}${this.webviewResourceEndpoint}/vscode-resource/${scheme}${path}${endQuote}`; + } + return `${startQuote}${this.webviewResourceEndpoint}/vscode-resource/file${path}${endQuote}`; + }); + } + public set contentOptions(options: WebviewContentOptions) { this._logService.debug(`Webview(${this.id}): will update content options`); @@ -364,6 +383,7 @@ export abstract class BaseWebview extends Disposable { contents: this.content.html, options: this.content.options, state: this.content.state, + resourceEndpoint: this.webviewResourceEndpoint, ...this.extraContentOptions }); } diff --git a/src/vs/workbench/contrib/webview/browser/pre/host.js b/src/vs/workbench/contrib/webview/browser/pre/host.js index 43ef1d02922..c4664b34273 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/host.js +++ b/src/vs/workbench/contrib/webview/browser/pre/host.js @@ -110,10 +110,6 @@ useParentPostMessage: false, onIframeLoaded: (/** @type {HTMLIFrameElement} */ frame) => { unloadMonitor.onIframeLoaded(frame); - }, - rewriteCSP: (csp, endpoint) => { - const endpointUrl = new URL(endpoint); - return csp.replace(/(vscode-webview-resource|vscode-resource):(?=(\s|;|$))/g, endpointUrl.origin); } }; diff --git a/src/vs/workbench/contrib/webview/browser/pre/main.js b/src/vs/workbench/contrib/webview/browser/pre/main.js index edd0befa40b..b6c94f175b7 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/main.js +++ b/src/vs/workbench/contrib/webview/browser/pre/main.js @@ -11,7 +11,6 @@ * focusIframeOnCreate?: boolean, * ready?: Promise, * onIframeLoaded?: (iframe: HTMLIFrameElement) => void, - * rewriteCSP: (existingCSP: string, endpoint?: string) => string, * onElectron?: boolean, * useParentPostMessage: boolean, * }} WebviewHost @@ -495,7 +494,10 @@ host.postMessage('no-csp-found'); } else { try { - csp.setAttribute('content', host.rewriteCSP(csp.getAttribute('content'), data.endpoint)); + // Attempt to rewrite CSPs that hardcode old-style resource endpoint + const endpointUrl = new URL(data.resourceEndpoint); + const newCsp = csp.getAttribute('content').replace(/(vscode-webview-resource|vscode-resource):(?=(\s|;|$))/g, endpointUrl.origin); + csp.setAttribute('content', newCsp); } catch (e) { console.error(`Could not rewrite csp: ${e}`); } diff --git a/src/vs/workbench/contrib/webview/browser/webviewElement.ts b/src/vs/workbench/contrib/webview/browser/webviewElement.ts index 84de52657cf..fe31f78258d 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewElement.ts @@ -128,29 +128,8 @@ export class IFrameWebview extends BaseWebview implements Web } } - public override set html(value: string) { - super.html = this.preprocessHtml(value); - } - - protected preprocessHtml(value: string): string { - return value - .replace(/(["'])(?:vscode-resource):(\/\/([^\s\/'"]+?)(?=\/))?([^\s'"]+?)(["'])/gi, (match, startQuote, _1, scheme, path, endQuote) => { - if (scheme) { - return `${startQuote}${this.webviewResourceEndpoint}/vscode-resource/${scheme}${path}${endQuote}`; - } - return `${startQuote}${this.webviewResourceEndpoint}/vscode-resource/file${path}${endQuote}`; - }) - .replace(/(["'])(?:vscode-webview-resource):(\/\/[^\s\/'"]+\/([^\s\/'"]+?)(?=\/))?([^\s'"]+?)(["'])/gi, (match, startQuote, _1, scheme, path, endQuote) => { - if (scheme) { - return `${startQuote}${this.webviewResourceEndpoint}/vscode-resource/${scheme}${path}${endQuote}`; - } - return `${startQuote}${this.webviewResourceEndpoint}/vscode-resource/file${path}${endQuote}`; - }); - } - protected get extraContentOptions(): any { return { - endpoint: this.webviewContentEndpoint, confirmBeforeClose: this._confirmBeforeClose, }; } diff --git a/src/vs/workbench/contrib/webview/electron-browser/pre/electron-index.js b/src/vs/workbench/contrib/webview/electron-browser/pre/electron-index.js index 735478b391a..56cf7e50d88 100644 --- a/src/vs/workbench/contrib/webview/electron-browser/pre/electron-index.js +++ b/src/vs/workbench/contrib/webview/electron-browser/pre/electron-index.js @@ -21,9 +21,6 @@ ipcRenderer.on(channel, handler); }, focusIframeOnCreate: true, - rewriteCSP: (csp) => { - return csp.replace(/vscode-resource:(?=(\s|;|$))/g, 'vscode-webview-resource:'); - }, isInDevelopmentMode: false }; diff --git a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts index f72cc17681f..0187758d402 100644 --- a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts @@ -26,7 +26,6 @@ import { WebviewThemeDataProvider } from 'vs/workbench/contrib/webview/browser/t import { Webview, WebviewContentOptions, WebviewExtensionDescription, WebviewOptions } from 'vs/workbench/contrib/webview/browser/webview'; import { WebviewFindDelegate, WebviewFindWidget } from 'vs/workbench/contrib/webview/browser/webviewFindWidget'; import { WebviewIgnoreMenuShortcutsManager } from 'vs/workbench/contrib/webview/electron-browser/webviewIgnoreMenuShortcutsManager'; -import { rewriteVsCodeResourceUrls } from 'vs/workbench/contrib/webview/electron-sandbox/resourceLoading'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; export class ElectronWebviewBasedWebview extends BaseWebview implements Webview, WebviewFindDelegate { @@ -191,18 +190,12 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme super.contentOptions = options; } - private get webviewResourceEndpoint(): string { + protected override get webviewResourceEndpoint(): string { return `https://${this.id}.vscode-webview-test.com`; } protected readonly extraContentOptions = {}; - public override set html(value: string) { - this._myLogService.debug(`Webview(${this.id}): will set html`); - - super.html = rewriteVsCodeResourceUrls(this.id, value); - } - public mountTo(parent: HTMLElement) { if (!this.element) { return; diff --git a/src/vs/workbench/contrib/webview/electron-sandbox/iframeWebviewElement.ts b/src/vs/workbench/contrib/webview/electron-sandbox/iframeWebviewElement.ts index b102b0e937c..42496232629 100644 --- a/src/vs/workbench/contrib/webview/electron-sandbox/iframeWebviewElement.ts +++ b/src/vs/workbench/contrib/webview/electron-sandbox/iframeWebviewElement.ts @@ -17,7 +17,6 @@ import { WebviewMessageChannels } from 'vs/workbench/contrib/webview/browser/bas import { WebviewThemeDataProvider } from 'vs/workbench/contrib/webview/browser/themeing'; import { WebviewContentOptions, WebviewExtensionDescription, WebviewOptions } from 'vs/workbench/contrib/webview/browser/webview'; import { IFrameWebview } from 'vs/workbench/contrib/webview/browser/webviewElement'; -import { rewriteVsCodeResourceUrls } from 'vs/workbench/contrib/webview/electron-sandbox/resourceLoading'; import { WindowIgnoreMenuShortcutsManager } from 'vs/workbench/contrib/webview/electron-sandbox/windowIgnoreMenuShortcutsManager'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; @@ -79,17 +78,8 @@ export class ElectronIframeWebview extends IFrameWebview { return `https://${this.id}.vscode-webview-test.com`; } - protected override get extraContentOptions() { - return { - endpoint: this.webviewContentEndpoint, - }; - } - protected override async doPostMessage(channel: string, data?: any): Promise { this.element?.contentWindow!.postMessage({ channel, args: data }, '*'); } - protected override preprocessHtml(value: string): string { - return rewriteVsCodeResourceUrls(this.id, value); - } } diff --git a/src/vs/workbench/contrib/webview/electron-sandbox/resourceLoading.ts b/src/vs/workbench/contrib/webview/electron-sandbox/resourceLoading.ts deleted file mode 100644 index 6c120ef8a62..00000000000 --- a/src/vs/workbench/contrib/webview/electron-sandbox/resourceLoading.ts +++ /dev/null @@ -1,27 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { Schemas } from 'vs/base/common/network'; - -/** - * Try to rewrite `vscode-resource:` urls in html - */ -export function rewriteVsCodeResourceUrls( - id: string, - html: string, -): string { - return html - .replace(/(["'])vscode-resource:(\/\/([^\s\/'"]+?)(?=\/))?([^\s'"]+?)(["'])/gi, (_match, startQuote, _1, scheme, path, endQuote) => { - if (scheme) { - return `${startQuote}${Schemas.vscodeWebviewResource}://${id}/${scheme}${path}${endQuote}`; - } - if (!path.startsWith('//')) { - // Add an empty authority if we don't already have one - path = '//' + path; - } - return `${startQuote}${Schemas.vscodeWebviewResource}://${id}/file${path}${endQuote}`; - }); -} - From bc506127abf3d89e5b24c3982ee258f4a0807c4e Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 13:46:32 -0700 Subject: [PATCH 085/115] Temporarily restore vscode-webview-resource constant Mistakenly checked in removal while Looking into removing this constant entirely --- src/vs/base/common/network.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/vs/base/common/network.ts b/src/vs/base/common/network.ts index cff5d95d3d6..31ee24034ec 100644 --- a/src/vs/base/common/network.ts +++ b/src/vs/base/common/network.ts @@ -73,6 +73,11 @@ export namespace Schemas { */ export const vscodeWebview = 'vscode-webview'; + /** + * Scheme used for loading resources inside of webviews. + */ + export const vscodeWebviewResource = 'vscode-webview-resource'; + /** * Scheme used for extension pages */ From 614dd5174f9cca04838d08f705525c29745cebe3 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Thu, 8 Apr 2021 13:58:15 -0700 Subject: [PATCH 086/115] testing: fix explorer view --- src/vs/workbench/contrib/testing/browser/media/testing.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vs/workbench/contrib/testing/browser/media/testing.css b/src/vs/workbench/contrib/testing/browser/media/testing.css index 21892dc75a9..02669c967ec 100644 --- a/src/vs/workbench/contrib/testing/browser/media/testing.css +++ b/src/vs/workbench/contrib/testing/browser/media/testing.css @@ -123,6 +123,7 @@ .testing-filter-action-bar { flex-shrink: 0; margin: 4px 12px; + height: auto; } .testing-filter-action-item { From 852375649cdd06a253959d1a4244e09ddf067f6b Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 13:59:33 -0700 Subject: [PATCH 087/115] Remove extra whitespace Mistakenly added as part of #120654 Doesn't seem to cause issues in the current builds but breaks our electron 12 build --- .../platform/webview/electron-main/webviewProtocolProvider.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts b/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts index f1944445569..6eb785812e3 100644 --- a/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts +++ b/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts @@ -41,8 +41,8 @@ export class WebviewProtocolProvider extends Disposable { const entry = WebviewProtocolProvider.validWebviewFilePaths.get(uri.path); if (typeof entry === 'string') { const relativeResourcePath = uri.path.startsWith('/electron-browser') - ? `vs/workbench/contrib/webview/electron-browser/pre/${entry} ` - : `vs/workbench/contrib/webview/browser/pre/${entry} `; + ? `vs/workbench/contrib/webview/electron-browser/pre/${entry}` + : `vs/workbench/contrib/webview/browser/pre/${entry}`; const url = FileAccess.asFileUri(relativeResourcePath, require); return callback(decodeURIComponent(url.fsPath)); From 3622dafdc01d098fc0e4705dc154cd4aedb0d75a Mon Sep 17 00:00:00 2001 From: Eric Amodio Date: Thu, 8 Apr 2021 19:24:53 -0400 Subject: [PATCH 088/115] Adds new proposed api for scm input validation --- src/vs/vscode.proposed.d.ts | 12 +++++++- src/vs/workbench/api/browser/mainThreadSCM.ts | 20 ++++++++++++- .../workbench/api/common/extHost.protocol.ts | 3 ++ src/vs/workbench/api/common/extHostSCM.ts | 12 ++++++++ .../contrib/scm/browser/scmViewPane.ts | 28 +++++++++++++++++-- src/vs/workbench/contrib/scm/common/scm.ts | 6 ++++ .../contrib/scm/common/scmService.ts | 20 +++++++++++-- 7 files changed, 94 insertions(+), 7 deletions(-) diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 4288785699b..28465f58328 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -727,11 +727,21 @@ declare module 'vscode' { */ export interface SourceControlInputBox { + /** + * Sets focus to the input. + */ + focus(): void; + + /** + * Shows a transient contextual message on the input. + */ + showValidationMessage(message: string, type: SourceControlInputBoxValidationType): void; + /** * A validation function for the input box. It's possible to change * the validation provider simply by setting this property to a different function. */ - validateInput?(value: string, cursorPosition: number): ProviderResult; + validateInput?(value: string, cursorPosition: number): ProviderResult; } //#endregion diff --git a/src/vs/workbench/api/browser/mainThreadSCM.ts b/src/vs/workbench/api/browser/mainThreadSCM.ts index 0c23ea4ad64..791f1d0c378 100644 --- a/src/vs/workbench/api/browser/mainThreadSCM.ts +++ b/src/vs/workbench/api/browser/mainThreadSCM.ts @@ -6,7 +6,7 @@ import { URI, UriComponents } from 'vs/base/common/uri'; import { Event, Emitter } from 'vs/base/common/event'; import { IDisposable, DisposableStore, combinedDisposable } from 'vs/base/common/lifecycle'; -import { ISCMService, ISCMRepository, ISCMProvider, ISCMResource, ISCMResourceGroup, ISCMResourceDecorations, IInputValidation, ISCMViewService } from 'vs/workbench/contrib/scm/common/scm'; +import { ISCMService, ISCMRepository, ISCMProvider, ISCMResource, ISCMResourceGroup, ISCMResourceDecorations, IInputValidation, ISCMViewService, InputValidationType } from 'vs/workbench/contrib/scm/common/scm'; import { ExtHostContext, MainThreadSCMShape, ExtHostSCMShape, SCMProviderFeatures, SCMRawResourceSplices, SCMGroupFeatures, MainContext, IExtHostContext } from '../common/extHost.protocol'; import { Command } from 'vs/editor/common/modes'; import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers'; @@ -424,6 +424,24 @@ export class MainThreadSCM implements MainThreadSCMShape { repository.input.visible = visible; } + $setInputBoxFocus(sourceControlHandle: number): void { + const repository = this._repositories.get(sourceControlHandle); + if (!repository) { + return; + } + + repository.input.setFocus(); + } + + $showValidationMessage(sourceControlHandle: number, message: string, type: InputValidationType) { + const repository = this._repositories.get(sourceControlHandle); + if (!repository) { + return; + } + + repository.input.showValidationMessage(message, type); + } + $setValidationProviderIsEnabled(sourceControlHandle: number, enabled: boolean): void { const repository = this._repositories.get(sourceControlHandle); diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index da43bd57865..83fd9e2e4b5 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -62,6 +62,7 @@ import { WorkspaceTrustRequestOptions, WorkspaceTrustStateChangeEvent } from 'vs import { ISerializableEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable'; import { IShellLaunchConfig, IShellLaunchConfigDto, ITerminalDimensions, ITerminalEnvironment, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal'; import { ITerminalProfile } from 'vs/workbench/contrib/terminal/common/terminal'; +import { InputValidationType } from 'vs/workbench/contrib/scm/common/scm'; export interface IEnvironment { isExtensionDevelopmentDebug: boolean; @@ -1037,6 +1038,8 @@ export interface MainThreadSCMShape extends IDisposable { $setInputBoxValue(sourceControlHandle: number, value: string): void; $setInputBoxPlaceholder(sourceControlHandle: number, placeholder: string): void; $setInputBoxVisibility(sourceControlHandle: number, visible: boolean): void; + $setInputBoxFocus(sourceControlHandle: number): void; + $showValidationMessage(sourceControlHandle: number, message: string, type: InputValidationType): void; $setValidationProviderIsEnabled(sourceControlHandle: number, enabled: boolean): void; } diff --git a/src/vs/workbench/api/common/extHostSCM.ts b/src/vs/workbench/api/common/extHostSCM.ts index 058061633e8..2faa67c51f8 100644 --- a/src/vs/workbench/api/common/extHostSCM.ts +++ b/src/vs/workbench/api/common/extHostSCM.ts @@ -259,6 +259,18 @@ export class ExtHostSCMInputBox implements vscode.SourceControlInputBox { // noop } + focus(): void { + if (!this._visible) { + this.visible = true; + } + + this._proxy.$setInputBoxFocus(this._sourceControlHandle); + } + + showValidationMessage(message: string, type: vscode.SourceControlInputBoxValidationType) { + this._proxy.$showValidationMessage(this._sourceControlHandle, message, type as any); + } + $onInputBoxValueChange(value: string): void { this.updateValue(value); } diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts index 104d7d0f511..acb095e1d90 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts @@ -1438,6 +1438,11 @@ registerAction2(CollapseAllRepositoriesAction); registerAction2(ExpandAllRepositoriesAction); class SCMInputWidget extends Disposable { + private static readonly ValidationTimeouts: { [severity: number]: number } = { + [InputValidationType.Information]: 15000, + [InputValidationType.Warning]: 18000, + [InputValidationType.Error]: 20000 + }; private readonly defaultInputFontFamily = DEFAULT_FONT_FAMILY; @@ -1452,6 +1457,7 @@ class SCMInputWidget extends Disposable { private validation: IInputValidation | undefined; private validationDisposable: IDisposable = Disposable.None; + private _validationTimer: any; // This is due to "Setup height change listener on next tick" above // https://github.com/microsoft/vscode/issues/108067 @@ -1509,8 +1515,7 @@ class SCMInputWidget extends Disposable { const offset = position && textModel.getOffsetAt(position); const value = textModel.getValue(); - this.validation = await input.validateInput(value, offset || 0); - this.renderValidation(); + this.setValidation(await input.validateInput(value, offset || 0)); }; const triggerValidation = () => validationDelayer.trigger(validate); @@ -1536,6 +1541,8 @@ class SCMInputWidget extends Disposable { this.inputEditor.setPosition(position); this.inputEditor.revealPositionInCenterIfOutsideViewport(position); })); + this.repositoryDisposables.add(input.onDidChangeFocus(() => this.inputEditor.focus())); + this.repositoryDisposables.add(input.onDidChangeValidationMessage((e) => this.setValidation(e, { focus: true, timeout: true }))); // Keep API in sync with model, update placeholder visibility and validate const updatePlaceholderVisibility = () => this.placeholderTextContainer.classList.toggle('hidden', textModel.getValueLength() > 0); @@ -1594,6 +1601,23 @@ class SCMInputWidget extends Disposable { } } + private setValidation(validation: IInputValidation | undefined, options?: { focus?: boolean; timeout?: boolean }) { + if (this._validationTimer) { + clearTimeout(this._validationTimer); + this._validationTimer = 0; + } + + this.validation = validation; + if (options?.focus) { + this.inputEditor.focus(); + } + this.renderValidation(); + + if (validation && options?.timeout) { + this._validationTimer = setTimeout(() => this.setValidation(undefined), SCMInputWidget.ValidationTimeouts[validation.type]); + } + } + constructor( container: HTMLElement, overflowWidgetsDomNode: HTMLElement, diff --git a/src/vs/workbench/contrib/scm/common/scm.ts b/src/vs/workbench/contrib/scm/common/scm.ts index f9e77fdb961..66d80a359af 100644 --- a/src/vs/workbench/contrib/scm/common/scm.ts +++ b/src/vs/workbench/contrib/scm/common/scm.ts @@ -110,6 +110,12 @@ export interface ISCMInput { visible: boolean; readonly onDidChangeVisibility: Event; + setFocus(): void; + readonly onDidChangeFocus: Event; + + showValidationMessage(message: string, type: InputValidationType): void; + readonly onDidChangeValidationMessage: Event; + showNextHistoryValue(): void; showPreviousHistoryValue(): void; } diff --git a/src/vs/workbench/contrib/scm/common/scmService.ts b/src/vs/workbench/contrib/scm/common/scmService.ts index 48af74fb989..a57d65a1aa4 100644 --- a/src/vs/workbench/contrib/scm/common/scmService.ts +++ b/src/vs/workbench/contrib/scm/common/scmService.ts @@ -5,7 +5,7 @@ import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { Event, Emitter } from 'vs/base/common/event'; -import { ISCMService, ISCMProvider, ISCMInput, ISCMRepository, IInputValidator, ISCMInputChangeEvent, SCMInputChangeReason } from './scm'; +import { ISCMService, ISCMProvider, ISCMInput, ISCMRepository, IInputValidator, ISCMInputChangeEvent, SCMInputChangeReason, InputValidationType, IInputValidation } from './scm'; import { ILogService } from 'vs/platform/log/common/log'; import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; @@ -48,8 +48,22 @@ class SCMInput implements ISCMInput { } private readonly _onDidChangeVisibility = new Emitter(); - readonly onDidChangeVisibility: Event = this._onDidChangeVisibility - .event; + readonly onDidChangeVisibility: Event = this._onDidChangeVisibility.event; + + setFocus(): void { + this._onDidChangeFocus.fire(); + } + + private readonly _onDidChangeFocus = new Emitter(); + readonly onDidChangeFocus: Event = this._onDidChangeFocus.event; + + showValidationMessage(message: string, type: InputValidationType): void { + this._onDidChangeValidationMessage.fire({ message: message, type: type }); + } + + private readonly _onDidChangeValidationMessage = new Emitter(); + readonly onDidChangeValidationMessage: Event = this._onDidChangeValidationMessage.event; + private _validateInput: IInputValidator = () => Promise.resolve(undefined); From f5ea03079ab6deca9c095391b68ba6e8138448fa Mon Sep 17 00:00:00 2001 From: rebornix Date: Thu, 8 Apr 2021 16:35:39 -0700 Subject: [PATCH 089/115] turn off logging for notebook. --- .../contrib/notebook/browser/contrib/troubleshoot/layout.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/troubleshoot/layout.ts b/src/vs/workbench/contrib/notebook/browser/contrib/troubleshoot/layout.ts index aab2922b20e..b2e8c57a96d 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/troubleshoot/layout.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/troubleshoot/layout.ts @@ -16,7 +16,7 @@ export class TroubleshootController extends Disposable implements INotebookEdito private readonly _localStore = this._register(new DisposableStore()); private _cellStateListeners: IDisposable[] = []; - private _logging: boolean = true; + private _logging: boolean = false; constructor(private readonly _notebookEditor: INotebookEditor) { super(); From 84391165c30df9906501b7b64df6fa5881ba6b78 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 16:48:42 -0700 Subject: [PATCH 090/115] Pass in correct project root for notebook cells --- .../src/typescriptServiceClient.ts | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts index a56c6d77f75..430813d3ad6 100644 --- a/extensions/typescript-language-features/src/typescriptServiceClient.ts +++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts @@ -710,16 +710,20 @@ export default class TypeScriptServiceClient extends Disposable implements IType return undefined; } - if (resource.scheme === fileSchemes.file || resource.scheme === fileSchemes.untitled) { - for (const root of roots.sort((a, b) => a.uri.fsPath.length - b.uri.fsPath.length)) { - if (resource.fsPath.startsWith(root.uri.fsPath + path.sep)) { - return root.uri.fsPath; + switch (resource.scheme) { + case fileSchemes.file: + case fileSchemes.untitled: + case fileSchemes.vscodeNotebookCell: + for (const root of roots.sort((a, b) => a.uri.fsPath.length - b.uri.fsPath.length)) { + if (resource.fsPath.startsWith(root.uri.fsPath + path.sep)) { + return root.uri.fsPath; + } } - } - return roots[0].uri.fsPath; - } + return roots[0].uri.fsPath; - return undefined; + default: + return undefined; + } } public execute(command: keyof TypeScriptRequests, args: any, token: vscode.CancellationToken, config?: ExecConfig): Promise> { From 044a99585c328a492fd9599aebbe03940a8675d4 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 16:59:59 -0700 Subject: [PATCH 091/115] Make sure we use the webviewResourceRoot on for computing cspSource Fixes #120879 --- .../environment/electron-sandbox/environmentService.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/services/environment/electron-sandbox/environmentService.ts b/src/vs/workbench/services/environment/electron-sandbox/environmentService.ts index 351214221f7..889902b99b1 100644 --- a/src/vs/workbench/services/environment/electron-sandbox/environmentService.ts +++ b/src/vs/workbench/services/environment/electron-sandbox/environmentService.ts @@ -73,7 +73,7 @@ export class NativeWorkbenchEnvironmentService extends AbstractNativeEnvironment @memoize get webviewResourceRoot(): string { - // On desktop, this endpoint is only used for the service worker to identify resouce loads and + // On desktop, this endpoint is only used for the service worker to identify resource loads and // should never actually be requested. // // Required due to https://github.com/electron/electron/issues/28528 @@ -81,7 +81,10 @@ export class NativeWorkbenchEnvironmentService extends AbstractNativeEnvironment } @memoize - get webviewCspSource(): string { return `${Schemas.vscodeWebviewResource}:`; } + get webviewCspSource(): string { + const uri = URI.parse(this.webviewResourceRoot.replace('{{uuid}}', '*')); + return `${uri.scheme}://${uri.authority}`; + } @memoize get skipReleaseNotes(): boolean { return !!this.args['skip-release-notes']; } From 9c9e188aa0b45e6db5834e23600057a16b5eaf48 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 17:08:08 -0700 Subject: [PATCH 092/115] Don't use 'self' for image editor csp On desktop, we now serve webview resources from a different origin than the webview itself. This means we no longer can use `'self'` in our CSP as shorthand and instead should always use the provided `cspSource` --- extensions/image-preview/src/preview.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions/image-preview/src/preview.ts b/extensions/image-preview/src/preview.ts index f4b589e0fb8..6d61c9898ae 100644 --- a/extensions/image-preview/src/preview.ts +++ b/extensions/image-preview/src/preview.ts @@ -212,6 +212,7 @@ class Preview extends Disposable { const nonce = Date.now().toString(); + const cspSource = this.webviewEditor.webview.cspSource; return /* html */` @@ -225,7 +226,7 @@ class Preview extends Disposable { - + From de9887d9e0eaf402250d2735b3db5dc340184b74 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 17:10:25 -0700 Subject: [PATCH 093/115] Remove vscode-webview-resource path normalization logic We should now handle normalization before `loadLocalResource` is invoked and should never see a `vscode-webview-resource` uri being passed in --- src/vs/base/common/network.ts | 5 ---- .../platform/webview/common/resourceLoader.ts | 30 ++----------------- .../platform/windows/electron-main/window.ts | 2 +- 3 files changed, 3 insertions(+), 34 deletions(-) diff --git a/src/vs/base/common/network.ts b/src/vs/base/common/network.ts index 31ee24034ec..cff5d95d3d6 100644 --- a/src/vs/base/common/network.ts +++ b/src/vs/base/common/network.ts @@ -73,11 +73,6 @@ export namespace Schemas { */ export const vscodeWebview = 'vscode-webview'; - /** - * Scheme used for loading resources inside of webviews. - */ - export const vscodeWebviewResource = 'vscode-webview-resource'; - /** * Scheme used for extension pages */ diff --git a/src/vs/platform/webview/common/resourceLoader.ts b/src/vs/platform/webview/common/resourceLoader.ts index 06f243e40aa..3e4c7c0dd22 100644 --- a/src/vs/platform/webview/common/resourceLoader.ts +++ b/src/vs/platform/webview/common/resourceLoader.ts @@ -176,41 +176,15 @@ function getResourceToLoad( requestUri: URI, roots: ReadonlyArray ): URI | undefined { - const normalizedPath = normalizeRequestPath(requestUri); - for (const root of roots) { - if (containsResource(root, normalizedPath)) { - return normalizedPath; + if (containsResource(root, requestUri)) { + return requestUri; } } return undefined; } -function normalizeRequestPath(requestUri: URI) { - if (requestUri.scheme === Schemas.vscodeWebviewResource) { - // The `vscode-webview-resource` scheme has the following format: - // - // vscode-webview-resource://id/scheme//authority?/path - // - - // Encode requestUri.path so that URI.parse can properly parse special characters like '#', '?', etc. - const resourceUri = URI.parse(encodeURIComponent(requestUri.path).replace(/%2F/gi, '/').replace(/^\/([a-z0-9\-]+)(\/{1,2})/i, (_: string, scheme: string, sep: string) => { - if (sep.length === 1) { - return `${scheme}:///`; // Add empty authority. - } else { - return `${scheme}://`; // Url has own authority. - } - })); - return resourceUri.with({ - query: requestUri.query, - fragment: requestUri.fragment - }); - } else { - return requestUri; - } -} - function containsResource(root: URI, resource: URI): boolean { let rootPath = root.fsPath + (root.fsPath.endsWith(sep) ? '' : sep); let resourceFsPath = resource.fsPath; diff --git a/src/vs/platform/windows/electron-main/window.ts b/src/vs/platform/windows/electron-main/window.ts index ae763ca99b0..c7c9dfff9fe 100644 --- a/src/vs/platform/windows/electron-main/window.ts +++ b/src/vs/platform/windows/electron-main/window.ts @@ -425,7 +425,7 @@ export class CodeWindow extends Disposable implements ICodeWindow { }); // Block all SVG requests from unsupported origins - const supportedSvgSchemes = new Set([Schemas.file, Schemas.vscodeFileResource, Schemas.vscodeRemoteResource, Schemas.vscodeWebviewResource, 'devtools']); + const supportedSvgSchemes = new Set([Schemas.file, Schemas.vscodeFileResource, Schemas.vscodeRemoteResource, 'devtools']); // TODO: handle webview origin this._win.webContents.session.webRequest.onBeforeRequest((details, callback) => { const uri = URI.parse(details.url); if (uri.path.endsWith('.svg')) { From 8a9183998978d60fee833e04235a5a53d8db5ed6 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 17:24:00 -0700 Subject: [PATCH 094/115] Move webview resource loading from `platform` to `workbench` These functions are now only needed on the renderer side, not on the main process --- src/vs/platform/webview/common/webviewManagerService.ts | 2 ++ src/vs/platform/webview/electron-main/webviewMainService.ts | 3 +-- .../platform/webview/electron-main/webviewProtocolProvider.ts | 2 +- src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts | 2 +- .../contrib/webview/browser/resourceLoading.ts} | 3 --- .../contrib/webview/electron-browser/webviewElement.ts | 2 +- 6 files changed, 6 insertions(+), 8 deletions(-) rename src/vs/{platform/webview/common/resourceLoader.ts => workbench/contrib/webview/browser/resourceLoading.ts} (99%) diff --git a/src/vs/platform/webview/common/webviewManagerService.ts b/src/vs/platform/webview/common/webviewManagerService.ts index 192d4734051..a2fac061eea 100644 --- a/src/vs/platform/webview/common/webviewManagerService.ts +++ b/src/vs/platform/webview/common/webviewManagerService.ts @@ -7,6 +7,8 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation' export const IWebviewManagerService = createDecorator('webviewManagerService'); +export const webviewPartitionId = 'webview'; + export interface WebviewWebContentsId { readonly webContentsId: number; } diff --git a/src/vs/platform/webview/electron-main/webviewMainService.ts b/src/vs/platform/webview/electron-main/webviewMainService.ts index 074df4dc93e..1665474ecff 100644 --- a/src/vs/platform/webview/electron-main/webviewMainService.ts +++ b/src/vs/platform/webview/electron-main/webviewMainService.ts @@ -6,8 +6,7 @@ import { session, WebContents, webContents } from 'electron'; import { Disposable } from 'vs/base/common/lifecycle'; import { ITunnelService } from 'vs/platform/remote/common/tunnel'; -import { webviewPartitionId } from 'vs/platform/webview/common/resourceLoader'; -import { IWebviewManagerService, WebviewWebContentsId, WebviewWindowId } from 'vs/platform/webview/common/webviewManagerService'; +import { IWebviewManagerService, webviewPartitionId, WebviewWebContentsId, WebviewWindowId } from 'vs/platform/webview/common/webviewManagerService'; import { WebviewProtocolProvider } from 'vs/platform/webview/electron-main/webviewProtocolProvider'; import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows'; diff --git a/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts b/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts index 6eb785812e3..db8288cb524 100644 --- a/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts +++ b/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts @@ -7,7 +7,7 @@ import { protocol, session } from 'electron'; import { Disposable } from 'vs/base/common/lifecycle'; import { FileAccess, Schemas } from 'vs/base/common/network'; import { URI } from 'vs/base/common/uri'; -import { webviewPartitionId } from 'vs/platform/webview/common/resourceLoader'; +import { webviewPartitionId } from 'vs/platform/webview/common/webviewManagerService'; export class WebviewProtocolProvider extends Disposable { diff --git a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts index 41a939ea2c8..73375521228 100644 --- a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts @@ -19,8 +19,8 @@ import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remot import { ITunnelService } from 'vs/platform/remote/common/tunnel'; import { IRequestService } from 'vs/platform/request/common/request'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { loadLocalResource, readFileStream, WebviewResourceResponse } from 'vs/platform/webview/common/resourceLoader'; import { WebviewPortMappingManager } from 'vs/platform/webview/common/webviewPortMapping'; +import { loadLocalResource, readFileStream, WebviewResourceResponse } from 'vs/workbench/contrib/webview/browser/resourceLoading'; import { WebviewThemeDataProvider } from 'vs/workbench/contrib/webview/browser/themeing'; import { areWebviewContentOptionsEqual, WebviewContentOptions, WebviewExtensionDescription, WebviewMessageReceivedEvent, WebviewOptions } from 'vs/workbench/contrib/webview/browser/webview'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; diff --git a/src/vs/platform/webview/common/resourceLoader.ts b/src/vs/workbench/contrib/webview/browser/resourceLoading.ts similarity index 99% rename from src/vs/platform/webview/common/resourceLoader.ts rename to src/vs/workbench/contrib/webview/browser/resourceLoading.ts index 3e4c7c0dd22..9729a32e47c 100644 --- a/src/vs/platform/webview/common/resourceLoader.ts +++ b/src/vs/workbench/contrib/webview/browser/resourceLoading.ts @@ -16,9 +16,6 @@ import { IRemoteConnectionData } from 'vs/platform/remote/common/remoteAuthority import { IRequestService } from 'vs/platform/request/common/request'; import { getWebviewContentMimeType } from 'vs/platform/webview/common/mimeTypes'; - -export const webviewPartitionId = 'webview'; - export namespace WebviewResourceResponse { export enum Type { Success, Failed, AccessDenied, NotModified } diff --git a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts index 0187758d402..4a46bde28b1 100644 --- a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts @@ -20,7 +20,7 @@ import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remot import { ITunnelService } from 'vs/platform/remote/common/tunnel'; import { IRequestService } from 'vs/platform/request/common/request'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { webviewPartitionId } from 'vs/platform/webview/common/resourceLoader'; +import { webviewPartitionId } from 'vs/platform/webview/common/webviewManagerService'; import { BaseWebview, WebviewMessageChannels } from 'vs/workbench/contrib/webview/browser/baseWebviewElement'; import { WebviewThemeDataProvider } from 'vs/workbench/contrib/webview/browser/themeing'; import { Webview, WebviewContentOptions, WebviewExtensionDescription, WebviewOptions } from 'vs/workbench/contrib/webview/browser/webview'; From 2d7ddf5a381864f8cad06fcc8bcdd5f28cf8cacc Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 17:33:14 -0700 Subject: [PATCH 095/115] Remove extra indirection around `loadLocalResource` `loadLocalResource` is now only used from a single calling path, so it does not need to allow passing in a custom file service implementation --- .../webview/browser/baseWebviewElement.ts | 6 +- .../webview/browser/resourceLoading.ts | 75 ++++--------------- 2 files changed, 15 insertions(+), 66 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts index 73375521228..af25d4ac6f1 100644 --- a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts @@ -20,7 +20,7 @@ import { ITunnelService } from 'vs/platform/remote/common/tunnel'; import { IRequestService } from 'vs/platform/request/common/request'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { WebviewPortMappingManager } from 'vs/platform/webview/common/webviewPortMapping'; -import { loadLocalResource, readFileStream, WebviewResourceResponse } from 'vs/workbench/contrib/webview/browser/resourceLoading'; +import { loadLocalResource, WebviewResourceResponse } from 'vs/workbench/contrib/webview/browser/resourceLoading'; import { WebviewThemeDataProvider } from 'vs/workbench/contrib/webview/browser/themeing'; import { areWebviewContentOptionsEqual, WebviewContentOptions, WebviewExtensionDescription, WebviewMessageReceivedEvent, WebviewOptions } from 'vs/workbench/contrib/webview/browser/webview'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; @@ -491,9 +491,7 @@ export abstract class BaseWebview extends Disposable { roots: this.content.options.localResourceRoots || [], remoteConnectionData, rewriteUri, - }, { - readFileStream: (resource, etag) => readFileStream(this._fileService, resource, etag), - }, this._requestService, this._logService, CancellationToken.None); + }, this._fileService, this._requestService, this._logService, CancellationToken.None); switch (result.type) { case WebviewResourceResponse.Type.Success: diff --git a/src/vs/workbench/contrib/webview/browser/resourceLoading.ts b/src/vs/workbench/contrib/webview/browser/resourceLoading.ts index 9729a32e47c..8fb1498c4c9 100644 --- a/src/vs/workbench/contrib/webview/browser/resourceLoading.ts +++ b/src/vs/workbench/contrib/webview/browser/resourceLoading.ts @@ -43,53 +43,6 @@ export namespace WebviewResourceResponse { export type StreamResponse = StreamSuccess | typeof Failed | typeof AccessDenied | NotModified; } -export namespace WebviewFileReadResponse { - export enum Type { Success, NotModified } - - export class StreamSuccess { - readonly type = Type.Success; - - constructor( - public readonly stream: VSBufferReadableStream, - public readonly etag: string | undefined - ) { } - } - - export const NotModified = { type: Type.NotModified } as const; - - export type Response = StreamSuccess | typeof NotModified; -} - -/** - * Wraps a call to `IFileService.readFileStream` and converts the result to a `WebviewFileReadResponse.Response` - */ -export async function readFileStream( - fileService: IFileService, - resource: URI, - etag: string | undefined, -): Promise { - try { - const result = await fileService.readFileStream(resource, { etag }); - return new WebviewFileReadResponse.StreamSuccess(result.value, result.etag); - } catch (e) { - if (e instanceof FileOperationError) { - const result = e.fileOperationResult; - - // NotModified status is expected and can be handled gracefully - if (result === FileOperationResult.FILE_NOT_MODIFIED_SINCE) { - return WebviewFileReadResponse.NotModified; - } - } - - // Otherwise the error is unexpected. Re-throw and let caller handle it - throw e; - } -} - -export interface WebviewResourceFileReader { - readFileStream(resource: URI, etag: string | undefined): Promise; -} - export async function loadLocalResource( requestUri: URI, ifNoneMatch: string | undefined, @@ -99,7 +52,7 @@ export async function loadLocalResource( remoteConnectionData?: IRemoteConnectionData | null; rewriteUri?: (uri: URI) => URI, }, - fileReader: WebviewResourceFileReader, + fileService: IFileService, requestService: IRequestService, logService: ILogService, token: CancellationToken, @@ -147,21 +100,19 @@ export async function loadLocalResource( } try { - const contents = await fileReader.readFileStream(resourceToLoad, ifNoneMatch); - logService.debug(`loadLocalResource - Loaded using fileReader. requestUri=${requestUri}`); - - switch (contents.type) { - case WebviewFileReadResponse.Type.Success: - return new WebviewResourceResponse.StreamSuccess(contents.stream, contents.etag, mime); - - case WebviewFileReadResponse.Type.NotModified: - return new WebviewResourceResponse.NotModified(mime); - - default: - logService.error(`loadLocalResource - Unknown file read response`); - return WebviewResourceResponse.Failed; - } + const result = await fileService.readFileStream(resourceToLoad, { etag: ifNoneMatch }); + return new WebviewResourceResponse.StreamSuccess(result.value, result.etag, mime); } catch (err) { + if (err instanceof FileOperationError) { + const result = err.fileOperationResult; + + // NotModified status is expected and can be handled gracefully + if (result === FileOperationResult.FILE_NOT_MODIFIED_SINCE) { + return new WebviewResourceResponse.NotModified(mime); + } + } + + // Otherwise the error is unexpected. logService.debug(`loadLocalResource - Error using fileReader. requestUri=${requestUri}`); console.log(err); From 595c14a8d30f0056a24b95977e51ba6f742e9b96 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 17:46:50 -0700 Subject: [PATCH 096/115] Inline `rewriteUri` into `loadLocalResource` We now have a single caller to `loadLocalResource` so it makes sense to inline the uri rewriting logic --- .../webview/browser/baseWebviewElement.ts | 25 ++--------------- .../webview/browser/resourceLoading.ts | 28 +++++++++++++------ 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts index af25d4ac6f1..e5f221bd98a 100644 --- a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts @@ -8,7 +8,6 @@ import { streamToBuffer } from 'vs/base/common/buffer'; import { CancellationToken } from 'vs/base/common/cancellation'; import { Emitter } from 'vs/base/common/event'; import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { Schemas } from 'vs/base/common/network'; import { URI } from 'vs/base/common/uri'; import { localize } from 'vs/nls'; import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; @@ -466,32 +465,12 @@ export abstract class BaseWebview extends Disposable { try { const remoteAuthority = this._environmentService.remoteAuthority; const remoteConnectionData = remoteAuthority ? this._remoteAuthorityResolverService.getConnectionData(remoteAuthority) : null; - const extensionLocation = this.extension?.location; - - // If we are loading a file resource from a remote extension, rewrite the uri to go remote - let rewriteUri: undefined | ((uri: URI) => URI); - if (extensionLocation?.scheme === Schemas.vscodeRemote) { - rewriteUri = (uri) => { - if (uri.scheme === Schemas.file && extensionLocation?.scheme === Schemas.vscodeRemote) { - return URI.from({ - scheme: Schemas.vscodeRemote, - authority: extensionLocation.authority, - path: '/vscode-resource', - query: JSON.stringify({ - requestResourcePath: uri.path - }) - }); - } - return uri; - }; - } const result = await loadLocalResource(uri, ifNoneMatch, { - extensionLocation: extensionLocation, + extensionLocation: this.extension?.location, roots: this.content.options.localResourceRoots || [], remoteConnectionData, - rewriteUri, - }, this._fileService, this._requestService, this._logService, CancellationToken.None); + }, this._fileService, this._requestService, this._logService, CancellationToken.None); // TODO: cancellation switch (result.type) { case WebviewResourceResponse.Type.Success: diff --git a/src/vs/workbench/contrib/webview/browser/resourceLoading.ts b/src/vs/workbench/contrib/webview/browser/resourceLoading.ts index 8fb1498c4c9..0a1acd43635 100644 --- a/src/vs/workbench/contrib/webview/browser/resourceLoading.ts +++ b/src/vs/workbench/contrib/webview/browser/resourceLoading.ts @@ -50,7 +50,6 @@ export async function loadLocalResource( extensionLocation: URI | undefined; roots: ReadonlyArray; remoteConnectionData?: IRemoteConnectionData | null; - rewriteUri?: (uri: URI) => URI, }, fileService: IFileService, requestService: IRequestService, @@ -59,7 +58,7 @@ export async function loadLocalResource( ): Promise { logService.debug(`loadLocalResource - being. requestUri=${requestUri}`); - let resourceToLoad = getResourceToLoad(requestUri, options.roots); + const resourceToLoad = getResourceToLoad(requestUri, options.roots, options.extensionLocation); logService.debug(`loadLocalResource - found resource to load. requestUri=${requestUri}, resourceToLoad=${resourceToLoad}`); @@ -69,11 +68,6 @@ export async function loadLocalResource( const mime = getWebviewContentMimeType(requestUri); // Use the original path for the mime - // Perform extra normalization if needed - if (options.rewriteUri) { - resourceToLoad = options.rewriteUri(resourceToLoad); - } - if (resourceToLoad.scheme === Schemas.http || resourceToLoad.scheme === Schemas.https) { const headers: IHeaders = {}; if (ifNoneMatch) { @@ -122,17 +116,33 @@ export async function loadLocalResource( function getResourceToLoad( requestUri: URI, - roots: ReadonlyArray + roots: ReadonlyArray, + extensionLocation: URI | undefined, ): URI | undefined { for (const root of roots) { if (containsResource(root, requestUri)) { - return requestUri; + return normalizeResourcePath(requestUri, extensionLocation); } } return undefined; } +function normalizeResourcePath(resource: URI, extensionLocation: URI | undefined): URI { + // If we are loading a file resource from a webview created by a remote extension, rewrite the uri to go remote + if (resource.scheme === Schemas.file && extensionLocation?.scheme === Schemas.vscodeRemote) { + return URI.from({ + scheme: Schemas.vscodeRemote, + authority: extensionLocation.authority, + path: '/vscode-resource', + query: JSON.stringify({ + requestResourcePath: resource.path + }) + }); + } + return resource; +} + function containsResource(root: URI, resource: URI): boolean { let rootPath = root.fsPath + (root.fsPath.endsWith(sep) ? '' : sep); let resourceFsPath = resource.fsPath; From d5b46d6e56c286bee88f8e64a1787758a1354769 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 18:32:59 -0700 Subject: [PATCH 097/115] Use transfer for sending resource buffer from webview to service worker --- .../contrib/webview/browser/pre/main.js | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/pre/main.js b/src/vs/workbench/contrib/webview/browser/pre/main.js index b6c94f175b7..daeb46e7a9c 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/main.js +++ b/src/vs/workbench/contrib/webview/browser/pre/main.js @@ -254,12 +254,25 @@ }); }); }; - forwardFromHostToWorker('did-load-resource'); - forwardFromHostToWorker('did-load-localhost'); + + host.onMessage('did-load-resource', (_event, data) => { + navigator.serviceWorker.ready.then(registration => { + registration.active.postMessage({ channel: 'did-load-resource', data }, data.data?.buffer ? [data.data.buffer] : []); + }); + }); + + host.onMessage('did-load-localhost', (_event, data) => { + navigator.serviceWorker.ready.then(registration => { + registration.active.postMessage({ channel: 'did-load-localhost', data }); + }); + }); navigator.serviceWorker.addEventListener('message', event => { - if (['load-resource', 'load-localhost'].includes(event.data.channel)) { - host.postMessage(event.data.channel, event.data); + switch (event.data.channel) { + case 'load-resource': + case 'load-localhost': + host.postMessage(event.data.channel, event.data); + return; } }); }); From 923fbc8c2a37bee251c427be766f07cb44457fe2 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 18:49:49 -0700 Subject: [PATCH 098/115] Cancel resource load when the webview is disposed of --- .../contrib/webview/browser/baseWebviewElement.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts index e5f221bd98a..29b3100c87e 100644 --- a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts @@ -5,7 +5,7 @@ import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; import { streamToBuffer } from 'vs/base/common/buffer'; -import { CancellationToken } from 'vs/base/common/cancellation'; +import { CancellationTokenSource } from 'vs/base/common/cancellation'; import { Emitter } from 'vs/base/common/event'; import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; import { URI } from 'vs/base/common/uri'; @@ -88,6 +88,8 @@ export abstract class BaseWebview extends Disposable { private readonly _portMappingManager: WebviewPortMappingManager; + private readonly _resourceLoadingCts = this._register(new CancellationTokenSource()); + private readonly _fileService: IFileService; private readonly _logService: ILogService; private readonly _remoteAuthorityResolverService: IRemoteAuthorityResolverService; @@ -228,6 +230,8 @@ export abstract class BaseWebview extends Disposable { this._onDidDispose.fire(); + this._resourceLoadingCts.dispose(true); + super.dispose(); } @@ -470,7 +474,7 @@ export abstract class BaseWebview extends Disposable { extensionLocation: this.extension?.location, roots: this.content.options.localResourceRoots || [], remoteConnectionData, - }, this._fileService, this._requestService, this._logService, CancellationToken.None); // TODO: cancellation + }, this._fileService, this._requestService, this._logService, this._resourceLoadingCts.token); switch (result.type) { case WebviewResourceResponse.Type.Success: From 3fc15fb34aa288089390b3b09686178effeffd18 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 18:53:42 -0700 Subject: [PATCH 099/115] Remove unused function --- src/vs/workbench/contrib/webview/browser/pre/main.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/pre/main.js b/src/vs/workbench/contrib/webview/browser/pre/main.js index daeb46e7a9c..612a3050ec9 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/main.js +++ b/src/vs/workbench/contrib/webview/browser/pre/main.js @@ -247,14 +247,6 @@ resolveWorkerReady(); }); - const forwardFromHostToWorker = (channel) => { - host.onMessage(channel, (_event, data) => { - navigator.serviceWorker.ready.then(registration => { - registration.active.postMessage({ channel, data }); - }); - }); - }; - host.onMessage('did-load-resource', (_event, data) => { navigator.serviceWorker.ready.then(registration => { registration.active.postMessage({ channel: 'did-load-resource', data }, data.data?.buffer ? [data.data.buffer] : []); From 6b5122bb0671b7bc710105098e30613ccaf39297 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 19:20:05 -0700 Subject: [PATCH 100/115] Add typings --- src/vs/workbench/contrib/webview/browser/pre/main.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/vs/workbench/contrib/webview/browser/pre/main.js b/src/vs/workbench/contrib/webview/browser/pre/main.js index 612a3050ec9..dc83abd8953 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/main.js +++ b/src/vs/workbench/contrib/webview/browser/pre/main.js @@ -199,7 +199,17 @@ let pendingMessages = []; const initData = { + /** @type {number | undefined} */ initialScrollProgress: undefined, + + /** @type {{ [key: string]: string }} */ + styles: undefined, + + /** @type {string | undefined} */ + activeTheme: undefined, + + /** @type {string | undefined} */ + themeName: undefined, }; function fatalError(/** @type {string} */ message) { From 02e5ed5280fa9c663da003945c337176e678aae2 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 19:24:35 -0700 Subject: [PATCH 101/115] Avoid calling `applyStyle` again if the style has not changed --- src/vs/workbench/contrib/webview/browser/pre/main.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/pre/main.js b/src/vs/workbench/contrib/webview/browser/pre/main.js index dc83abd8953..66e5de6ebc7 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/main.js +++ b/src/vs/workbench/contrib/webview/browser/pre/main.js @@ -195,6 +195,8 @@ // state let firstLoad = true; let loadTimeout; + let styleVersion = 0; + /** @type {Array<{ readonly message: any, transfer?: ArrayBuffer[] }>} */ let pendingMessages = []; @@ -531,6 +533,8 @@ } host.onMessage('styles', (_event, data) => { + ++styleVersion; + initData.styles = data.styles; initData.activeTheme = data.activeTheme; initData.themeName = data.themeName; @@ -575,6 +579,8 @@ const options = data.options; const newDocument = toContentHtml(data); + const initialStyleVersion = styleVersion; + const frame = getActiveFrame(); const wasFirstLoad = firstLoad; // keep current scrollY around and use later @@ -632,7 +638,7 @@ contentDocument.close(); hookupOnLoadHandlers(newFrame); - if (contentDocument) { + if (initialStyleVersion !== styleVersion) { applyStyles(contentDocument, contentDocument.body); } }, 0); @@ -678,7 +684,9 @@ document.body.removeChild(oldActiveFrame); } // Styles may have changed since we created the element. Make sure we re-style - applyStyles(newFrame.contentDocument, newFrame.contentDocument.body); + if (initialStyleVersion !== styleVersion) { + applyStyles(newFrame.contentDocument, newFrame.contentDocument.body); + } newFrame.setAttribute('id', 'active-frame'); newFrame.style.visibility = 'visible'; if (host.focusIframeOnCreate) { From 4b5ef6887254cc1e7c07f7128aa017abcbe21760 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 19:35:04 -0700 Subject: [PATCH 102/115] Use cloneNode to inject default styles --- .../workbench/contrib/webview/browser/pre/main.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/pre/main.js b/src/vs/workbench/contrib/webview/browser/pre/main.js index 66e5de6ebc7..31c7e8d49f4 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/main.js +++ b/src/vs/workbench/contrib/webview/browser/pre/main.js @@ -58,7 +58,9 @@ const vscodePostMessageFuncName = '__vscode_post_message__'; - const defaultCssRules = ` + const defaultStyles = document.createElement('style'); + defaultStyles.id = '_defaultStyles'; + defaultStyles.textContent = ` html { scrollbar-color: var(--vscode-scrollbarSlider-background) var(--vscode-editor-background); } @@ -489,7 +491,7 @@ } }); - // apply default script + // Inject default script if (options.allowScripts) { const defaultScript = newDocument.createElement('script'); defaultScript.id = '_vscodeApiScript'; @@ -497,11 +499,8 @@ newDocument.head.prepend(defaultScript); } - // apply default styles - const defaultStyles = newDocument.createElement('style'); - defaultStyles.id = '_defaultStyles'; - defaultStyles.textContent = defaultCssRules; - newDocument.head.prepend(defaultStyles); + // Inject default styles + newDocument.head.prepend(defaultStyles.cloneNode(true)); applyStyles(newDocument, newDocument.body); From ed655c2d2ed51b25237d2864f8f4a279352b53be Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Thu, 8 Apr 2021 19:56:24 -0700 Subject: [PATCH 103/115] Fix split json editor underline Fix #120876 --- .../workbench/contrib/preferences/browser/media/preferences.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/vs/workbench/contrib/preferences/browser/media/preferences.css b/src/vs/workbench/contrib/preferences/browser/media/preferences.css index 89e322320c5..0e755b2fa0d 100644 --- a/src/vs/workbench/contrib/preferences/browser/media/preferences.css +++ b/src/vs/workbench/contrib/preferences/browser/media/preferences.css @@ -51,6 +51,8 @@ .settings-tabs-widget > .monaco-action-bar .action-item .action-label { display: block; + border-radius: initial; + background: none !important; } .settings-tabs-widget > .monaco-action-bar .action-item .action-label.folder-settings { From ecb45f5207c126ff5083ba8a746ddd5fbcc126d0 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 20:05:22 -0700 Subject: [PATCH 104/115] Move shared webview focus implementation into base class --- .../webview/browser/baseWebviewElement.ts | 52 +++++++++++++++++ .../contrib/webview/browser/webviewElement.ts | 55 ++---------------- .../electron-browser/webviewElement.ts | 56 ++----------------- 3 files changed, 60 insertions(+), 103 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts index 29b3100c87e..55910cf0bee 100644 --- a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; +import { ThrottledDelayer } from 'vs/base/common/async'; import { streamToBuffer } from 'vs/base/common/buffer'; import { CancellationTokenSource } from 'vs/base/common/cancellation'; import { Emitter } from 'vs/base/common/event'; @@ -98,6 +99,8 @@ export abstract class BaseWebview extends Disposable { private readonly _tunnelService: ITunnelService; protected readonly _environmentService: IWorkbenchEnvironmentService; + private readonly _focusDelayer = this._register(new ThrottledDelayer(10)); + constructor( public readonly id: string, private readonly options: WebviewOptions, @@ -528,4 +531,53 @@ export abstract class BaseWebview extends Disposable { location: redirect }); } + + public focus(): void { + this.doFocus(); + + // Handle focus change programmatically (do not rely on event from ) + this.handleFocusChange(true); + } + + protected doFocus() { + if (!this.element) { + return; + } + + // Clear the existing focus first if not already on the webview. + // This is required because the next part where we set the focus is async. + if (document.activeElement && document.activeElement instanceof HTMLElement && document.activeElement !== this.element) { + // Don't blur if on the webview because this will also happen async and may unset the focus + // after the focus trigger fires below. + document.activeElement.blur(); + } + + // Workaround for https://github.com/microsoft/vscode/issues/75209 + // Electron's webview.focus is async so for a sequence of actions such as: + // + // 1. Open webview + // 1. Show quick pick from command palette + // + // We end up focusing the webview after showing the quick pick, which causes + // the quick pick to instantly dismiss. + // + // Workaround this by debouncing the focus and making sure we are not focused on an input + // when we try to re-focus. + this._focusDelayer.trigger(async () => { + if (!this.isFocused || !this.element) { + return; + } + if (document.activeElement && document.activeElement?.tagName !== 'BODY') { + return; + } + try { + this.elementFocusImpl(); + } catch { + // noop + } + this._send('focus'); + }); + } + + protected abstract elementFocusImpl(): void; } diff --git a/src/vs/workbench/contrib/webview/browser/webviewElement.ts b/src/vs/workbench/contrib/webview/browser/webviewElement.ts index fe31f78258d..2077463f139 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewElement.ts @@ -23,9 +23,6 @@ export class IFrameWebview extends BaseWebview implements Web private _confirmBeforeClose: string; - private readonly _focusDelayer = this._register(new ThrottledDelayer(10)); - private _elementFocusImpl!: (options?: FocusOptions | undefined) => void; - constructor( id: string, options: WebviewOptions, @@ -87,7 +84,6 @@ export class IFrameWebview extends BaseWebview implements Web element.style.width = '100%'; element.style.height = '100%'; - this._elementFocusImpl = () => element.contentWindow?.focus(); element.focus = () => { this.doFocus(); }; @@ -95,6 +91,10 @@ export class IFrameWebview extends BaseWebview implements Web return element; } + protected elementFocusImpl() { + this.element?.contentWindow?.focus(); + } + protected initElement(extension: WebviewExtensionDescription | undefined, options: WebviewOptions, extraParams?: object) { const params = { id: this.id, @@ -162,51 +162,4 @@ export class IFrameWebview extends BaseWebview implements Web } }); } - - public focus(): void { - this.doFocus(); - - // Handle focus change programmatically (do not rely on event from ) - this.handleFocusChange(true); - } - - private doFocus() { - if (!this.element) { - return; - } - - // Clear the existing focus first if not already on the webview. - // This is required because the next part where we set the focus is async. - if (document.activeElement && document.activeElement instanceof HTMLElement && document.activeElement !== this.element) { - // Don't blur if on the webview because this will also happen async and may unset the focus - // after the focus trigger fires below. - document.activeElement.blur(); - } - - // Workaround for https://github.com/microsoft/vscode/issues/75209 - // Electron's webview.focus is async so for a sequence of actions such as: - // - // 1. Open webview - // 1. Show quick pick from command palette - // - // We end up focusing the webview after showing the quick pick, which causes - // the quick pick to instantly dismiss. - // - // Workaround this by debouncing the focus and making sure we are not focused on an input - // when we try to re-focus. - this._focusDelayer.trigger(async () => { - if (!this.isFocused || !this.element) { - return; - } - if (document.activeElement && document.activeElement?.tagName !== 'BODY') { - return; - } - try { - this._elementFocusImpl(); - } catch { - // noop - } - this._send('focus'); - }); - } } diff --git a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts index 4a46bde28b1..a6e2cfb2931 100644 --- a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts @@ -5,7 +5,6 @@ import { FindInPageOptions, WebviewTag } from 'electron'; import { addDisposableListener } from 'vs/base/browser/dom'; -import { ThrottledDelayer } from 'vs/base/common/async'; import { Emitter, Event } from 'vs/base/common/event'; import { once } from 'vs/base/common/functional'; import { IDisposable } from 'vs/base/common/lifecycle'; @@ -45,9 +44,6 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme private _webviewFindWidget: WebviewFindWidget | undefined; private _findStarted: boolean = false; - private readonly _focusDelayer = this._register(new ThrottledDelayer(10)); - private _elementFocusImpl!: (options?: FocusOptions | undefined) => void; - constructor( id: string, options: WebviewOptions, @@ -168,7 +164,6 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme // Wait the end of the ctor when all listeners have been hooked up. const element = document.createElement('webview'); - this._elementFocusImpl = element.focus.bind(element); element.focus = () => { this.doFocus(); }; @@ -185,6 +180,10 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme return element; } + protected elementFocusImpl() { + this.element?.focus(); + } + public override set contentOptions(options: WebviewContentOptions) { this._myLogService.debug(`Webview(${this.id}): will set content options`); super.contentOptions = options; @@ -212,53 +211,6 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme this.element?.send(channel, data); } - public focus(): void { - this.doFocus(); - - // Handle focus change programmatically (do not rely on event from ) - this.handleFocusChange(true); - } - - private doFocus() { - if (!this.element) { - return; - } - - // Clear the existing focus first if not already on the webview. - // This is required because the next part where we set the focus is async. - if (document.activeElement && document.activeElement instanceof HTMLElement && document.activeElement !== this.element) { - // Don't blur if on the webview because this will also happen async and may unset the focus - // after the focus trigger fires below. - document.activeElement.blur(); - } - - // Workaround for https://github.com/microsoft/vscode/issues/75209 - // Electron's webview.focus is async so for a sequence of actions such as: - // - // 1. Open webview - // 1. Show quick pick from command palette - // - // We end up focusing the webview after showing the quick pick, which causes - // the quick pick to instantly dismiss. - // - // Workaround this by debouncing the focus and making sure we are not focused on an input - // when we try to re-focus. - this._focusDelayer.trigger(async () => { - if (!this.isFocused || !this.element) { - return; - } - if (document.activeElement && document.activeElement?.tagName !== 'BODY') { - return; - } - try { - this._elementFocusImpl(); - } catch { - // noop - } - this._send('focus'); - }); - } - protected override style(): void { super.style(); this.styledFindWidget(); From 989c39e178f7bcabfe0613ba86839904b4d84f79 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 20:06:28 -0700 Subject: [PATCH 105/115] Remove commented code --- src/vs/workbench/contrib/webview/browser/pre/main.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/pre/main.js b/src/vs/workbench/contrib/webview/browser/pre/main.js index 31c7e8d49f4..7f487b878e0 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/main.js +++ b/src/vs/workbench/contrib/webview/browser/pre/main.js @@ -223,10 +223,6 @@ /** @type {Promise} */ const workerReady = new Promise(async (resolveWorkerReady) => { - // if (onElectron) { - // return resolveWorkerReady(); - // } - if (!areServiceWorkersEnabled()) { fatalError('Service Workers are not enabled in browser. Webviews will not work.'); return resolveWorkerReady(); From 9708fb15ff9ce6b65a757bac3c28307a612c7889 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 20:50:36 -0700 Subject: [PATCH 106/115] Fix markdown cells being re-rendered twice on edit After editing a cell, we were incorrectly rendering a cell twice. This is caused by `this.textModel` becoming undefined in `MarkdownCellViewModel` --- .../notebook/browser/notebookEditorWidget.ts | 2 +- .../browser/view/renderers/backLayerWebView.ts | 18 +++++++++--------- .../browser/view/renderers/webviewPreloads.ts | 1 + .../browser/viewModel/markdownCellViewModel.ts | 4 ++-- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts b/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts index a86eeef7dae..92c747208ba 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts @@ -2170,7 +2170,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor } const cellTop = this._list.getAbsoluteTopOfElement(cell); - await this._webview.showMarkdownPreview(cell.id, cell.handle, cell.getText(), cellTop, cell.version); + await this._webview.showMarkdownPreview(cell.id, cell.handle, cell.getText(), cellTop, cell.contentHash); } async unhideMarkdownPreviews(cells: readonly MarkdownCellViewModel[]) { diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts index b8dbec50a9e..61cc38bd3bb 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts @@ -370,7 +370,7 @@ export class BackLayerWebView extends Disposable { element: HTMLElement; webview: WebviewElement | undefined = undefined; insetMapping: Map> = new Map(); - readonly markdownPreviewMapping = new Map(); + readonly markdownPreviewMapping = new Map(); hiddenInsetMapping: Set = new Set(); reversedInsetMapping: Map = new Map(); localResourceRootsCache: URI[] | undefined = undefined; @@ -1149,7 +1149,7 @@ var requirejs = (function() { }); } - private async createMarkdownPreview(cellId: string, cellHandle: number, content: string, cellTop: number, contentVersion: number) { + private async createMarkdownPreview(cellId: string, cellHandle: number, content: string, cellTop: number, contentHash: number) { if (this._disposed) { return; } @@ -1160,7 +1160,7 @@ var requirejs = (function() { } const initialTop = cellTop; - this.markdownPreviewMapping.set(cellId, { version: contentVersion, visible: true }); + this.markdownPreviewMapping.set(cellId, { contentHash, visible: true }); this._sendMessageToWebview({ type: 'createMarkdownPreview', @@ -1171,13 +1171,13 @@ var requirejs = (function() { }); } - async showMarkdownPreview(cellId: string, cellHandle: number, content: string, cellTop: number, contentVersion: number) { + async showMarkdownPreview(cellId: string, cellHandle: number, content: string, cellTop: number, contentHash: number) { if (this._disposed) { return; } if (!this.markdownPreviewMapping.has(cellId)) { - return this.createMarkdownPreview(cellId, cellHandle, content, cellTop, contentVersion); + return this.createMarkdownPreview(cellId, cellHandle, content, cellTop, contentHash); } const entry = this.markdownPreviewMapping.get(cellId); @@ -1186,19 +1186,19 @@ var requirejs = (function() { return; } - if (entry.version !== contentVersion || !entry.visible) { + if (entry.contentHash !== contentHash || !entry.visible) { this._sendMessageToWebview({ type: 'showMarkdownPreview', id: cellId, handle: cellHandle, // If the content has not changed, we still want to make sure the // preview is visible but don't need to send anything over - content: entry.version === contentVersion ? undefined : content, + content: entry.contentHash === contentHash ? undefined : content, top: cellTop }); } - entry.version = contentVersion; + entry.contentHash = contentHash; entry.visible = true; } @@ -1298,7 +1298,7 @@ var requirejs = (function() { }); for (const cell of cells) { - this.markdownPreviewMapping.set(cell.cellId, { version: 0, visible: false }); + this.markdownPreviewMapping.set(cell.cellId, { contentHash: 0, visible: false }); } this._sendMessageToWebview({ diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts index 8c2d56617b6..706bbc4c539 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts @@ -531,6 +531,7 @@ function webviewPreloads() { break; case 'showMarkdownPreview': { + console.log('showMarkdownPreview'); const data = event.data; const cellContainer = document.getElementById(data.id); diff --git a/src/vs/workbench/contrib/notebook/browser/viewModel/markdownCellViewModel.ts b/src/vs/workbench/contrib/notebook/browser/viewModel/markdownCellViewModel.ts index 37d73fca82c..e8e8556a0ed 100644 --- a/src/vs/workbench/contrib/notebook/browser/viewModel/markdownCellViewModel.ts +++ b/src/vs/workbench/contrib/notebook/browser/viewModel/markdownCellViewModel.ts @@ -90,8 +90,8 @@ export class MarkdownCellViewModel extends BaseCellViewModel implements ICellVie this._onDidChangeState.fire({ cellIsHoveredChanged: true }); } - public get version(): number { - return this.textModel?.getVersionId() ?? 0; + public get contentHash(): number { + return this.model.getHashValue(); } constructor( From 3c89afbbc4351d6880dea41f467c1fe19a7584d0 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 21:27:30 -0700 Subject: [PATCH 107/115] Pull in newer markdown-it katex version --- extensions/notebook-markdown-extensions/yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/notebook-markdown-extensions/yarn.lock b/extensions/notebook-markdown-extensions/yarn.lock index 591eff686e5..de1dfe361d3 100644 --- a/extensions/notebook-markdown-extensions/yarn.lock +++ b/extensions/notebook-markdown-extensions/yarn.lock @@ -4,7 +4,7 @@ "@iktakahiro/markdown-it-katex@https://github.com/mjbvz/markdown-it-katex.git": version "4.0.1" - resolved "https://github.com/mjbvz/markdown-it-katex.git#d3f98b077a40bc4ee9b42689df33feec62cdfbca" + resolved "https://github.com/mjbvz/markdown-it-katex.git#f8074af4cb3625d02399dfa9b1d0b3e6cf552dd8" dependencies: katex "^0.13.0" From d5e4bdc814b2610ae51035b4bfd0a9d051aeb49f Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 21:29:45 -0700 Subject: [PATCH 108/115] Remove unused import --- src/vs/workbench/contrib/webview/browser/webviewElement.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vs/workbench/contrib/webview/browser/webviewElement.ts b/src/vs/workbench/contrib/webview/browser/webviewElement.ts index 2077463f139..f44d9430877 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewElement.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import { addDisposableListener } from 'vs/base/browser/dom'; -import { ThrottledDelayer } from 'vs/base/common/async'; import { IDisposable } from 'vs/base/common/lifecycle'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IFileService } from 'vs/platform/files/common/files'; From 08c3c088ba8e0dfaf9b6c9df64e33d6176070752 Mon Sep 17 00:00:00 2001 From: Miguel Solorio Date: Thu, 8 Apr 2021 21:47:15 -0700 Subject: [PATCH 109/115] Polish getting started layout --- .../gettingStarted/browser/gettingStarted.css | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.css b/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.css index c8e42ea77dc..20671dc3dce 100644 --- a/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.css +++ b/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.css @@ -55,9 +55,14 @@ font-weight: 200; } +.monaco-workbench .part.editor > .content .gettingStartedContainer .categories-left > div:first-child, +.monaco-workbench .part.editor > .content .gettingStartedContainer .categories-right > div:first-child { + margin-bottom: 32px; +} + .monaco-workbench .part.editor > .content .gettingStartedContainer h2 { font-weight: 200; - margin-top: 17px; + margin-top: 0; margin-bottom: 5px; font-size: 1.5em; line-height: initial; @@ -104,6 +109,7 @@ display: flex; justify-content: center; flex-direction: column; + margin-bottom: 32px; } .monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained .gettingStartedSlide.categories .header { @@ -196,11 +202,12 @@ } .monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category { - width: 92%; + width: 100%; + max-width: 320px; font-size: 13px; box-sizing: border-box; line-height: normal; - margin: 8px; + margin: 8px 8px 12px; padding: 6px 12px 6px; left: 1px; text-align: left; From 062e89fa19804051a4f22206ccd05c12b7b204a7 Mon Sep 17 00:00:00 2001 From: Tyler James Leonhardt Date: Thu, 8 Apr 2021 22:00:27 -0700 Subject: [PATCH 110/115] Don't scroll to top when removing entries from recently opened (#120404) Fixes #76193 --- src/vs/base/parts/quickinput/browser/quickInput.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/vs/base/parts/quickinput/browser/quickInput.ts b/src/vs/base/parts/quickinput/browser/quickInput.ts index 23607482003..52d7088de07 100644 --- a/src/vs/base/parts/quickinput/browser/quickInput.ts +++ b/src/vs/base/parts/quickinput/browser/quickInput.ts @@ -1388,8 +1388,12 @@ export class QuickInputController extends Disposable { const index = input.items.indexOf(event.item); if (index !== -1) { const items = input.items.slice(); - items.splice(index, 1); + const removed = items.splice(index, 1); + const activeItems = input.activeItems.filter((ai) => ai !== removed[0]); input.items = items; + if (activeItems) { + input.activeItems = activeItems; + } } } })), From 13944bac07e0c58bb4cce8da2ca1bb13a4409dd0 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 22:05:30 -0700 Subject: [PATCH 111/115] Pick up new katex version --- extensions/notebook-markdown-extensions/yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/notebook-markdown-extensions/yarn.lock b/extensions/notebook-markdown-extensions/yarn.lock index de1dfe361d3..58952667358 100644 --- a/extensions/notebook-markdown-extensions/yarn.lock +++ b/extensions/notebook-markdown-extensions/yarn.lock @@ -4,7 +4,7 @@ "@iktakahiro/markdown-it-katex@https://github.com/mjbvz/markdown-it-katex.git": version "4.0.1" - resolved "https://github.com/mjbvz/markdown-it-katex.git#f8074af4cb3625d02399dfa9b1d0b3e6cf552dd8" + resolved "https://github.com/mjbvz/markdown-it-katex.git#e88925a7cb3fd593a14ed117fb43627c4ba910b6" dependencies: katex "^0.13.0" From 479d3fcbed4d4d7a1a50f8cb87e1ffc3a3c8ba6b Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 8 Apr 2021 22:06:00 -0700 Subject: [PATCH 112/115] Remove log --- .../contrib/notebook/browser/view/renderers/webviewPreloads.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts index 706bbc4c539..8c2d56617b6 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts @@ -531,7 +531,6 @@ function webviewPreloads() { break; case 'showMarkdownPreview': { - console.log('showMarkdownPreview'); const data = event.data; const cellContainer = document.getElementById(data.id); From ec972e8acc0f1f3853ec54994a69bafacf6fc844 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 9 Apr 2021 08:02:04 +0200 Subject: [PATCH 113/115] ts - fix some override errors (#120675) --- src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts | 5 ++++- src/vs/editor/contrib/quickAccess/gotoSymbolQuickAccess.ts | 7 +++++-- src/vs/platform/log/common/logIpc.ts | 3 --- src/vs/platform/quickinput/browser/commandsQuickAccess.ts | 6 +++++- .../platform/update/electron-main/updateService.darwin.ts | 2 -- .../platform/update/electron-main/updateService.linux.ts | 2 -- src/vs/platform/update/electron-main/updateService.snap.ts | 2 -- .../platform/update/electron-main/updateService.win32.ts | 2 -- src/vs/workbench/browser/parts/compositeBarActions.ts | 4 +++- .../workbench/browser/parts/editor/noTabsTitleControl.ts | 2 +- src/vs/workbench/browser/parts/editor/tabsTitleControl.ts | 2 +- src/vs/workbench/browser/parts/editor/titleControl.ts | 2 -- src/vs/workbench/common/editor/diffEditorInput.ts | 4 ++-- .../contrib/webview/electron-browser/webviewService.ts | 1 - src/vs/workbench/electron-browser/desktop.main.ts | 2 +- .../electron-sandbox/parts/titlebar/titlebarPart.ts | 6 +++++- .../accessibility/electron-sandbox/accessibilityService.ts | 2 -- .../workbench/services/backup/browser/backupFileService.ts | 2 -- .../services/dialogs/electron-sandbox/fileDialogService.ts | 2 -- .../test/browser/extensionEnablementService.test.ts | 2 +- .../services/lifecycle/browser/lifecycleService.ts | 2 -- .../lifecycle/electron-sandbox/lifecycleService.ts | 2 -- src/vs/workbench/services/textfile/common/textfiles.ts | 6 +++++- .../textfile/electron-sandbox/nativeTextFileService.ts | 6 +++++- src/vs/workbench/services/url/browser/urlService.ts | 2 -- .../services/workspaces/browser/workspaceEditingService.ts | 2 -- .../workspaces/electron-sandbox/workspaceEditingService.ts | 2 -- .../test/browser/api/extHostConfiguration.test.ts | 2 +- src/vs/workbench/test/browser/api/extHostWorkspace.test.ts | 2 +- .../test/browser/api/mainThreadDocumentsAndEditors.test.ts | 1 - .../workbench/test/browser/api/mainThreadEditors.test.ts | 1 - .../test/electron-browser/workbenchTestServices.ts | 2 -- 32 files changed, 40 insertions(+), 50 deletions(-) diff --git a/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts b/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts index 98092a5cbf3..c7f9e2b890a 100644 --- a/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts +++ b/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts @@ -42,16 +42,19 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem { private _onDidChangeVisibility = this._register(new Emitter()); readonly onDidChangeVisibility = this._onDidChangeVisibility.event; + protected override readonly options: IDropdownMenuActionViewItemOptions; + constructor( action: IAction, menuActionsOrProvider: readonly IAction[] | IActionProvider, contextMenuProvider: IContextMenuProvider, - protected options: IDropdownMenuActionViewItemOptions = {} + options: IDropdownMenuActionViewItemOptions = Object.create(null) ) { super(null, action, options); this.menuActionsOrProvider = menuActionsOrProvider; this.contextMenuProvider = contextMenuProvider; + this.options = options; if (this.options.actionRunner) { this.actionRunner = this.options.actionRunner; diff --git a/src/vs/editor/contrib/quickAccess/gotoSymbolQuickAccess.ts b/src/vs/editor/contrib/quickAccess/gotoSymbolQuickAccess.ts index 96c0a9be6e9..c2c0e0d4368 100644 --- a/src/vs/editor/contrib/quickAccess/gotoSymbolQuickAccess.ts +++ b/src/vs/editor/contrib/quickAccess/gotoSymbolQuickAccess.ts @@ -35,10 +35,13 @@ export abstract class AbstractGotoSymbolQuickAccessProvider extends AbstractEdit static SCOPE_PREFIX = ':'; static PREFIX_BY_CATEGORY = `${AbstractGotoSymbolQuickAccessProvider.PREFIX}${AbstractGotoSymbolQuickAccessProvider.SCOPE_PREFIX}`; - constructor(protected options: IGotoSymbolQuickAccessProviderOptions = Object.create(null)) { + protected override readonly options: IGotoSymbolQuickAccessProviderOptions; + + constructor(options: IGotoSymbolQuickAccessProviderOptions = Object.create(null)) { super(options); - options.canAcceptInBackground = true; + this.options = options; + this.options.canAcceptInBackground = true; } protected provideWithoutTextEditor(picker: IQuickPick): IDisposable { diff --git a/src/vs/platform/log/common/logIpc.ts b/src/vs/platform/log/common/logIpc.ts index 1f82b95d223..789b3e02a24 100644 --- a/src/vs/platform/log/common/logIpc.ts +++ b/src/vs/platform/log/common/logIpc.ts @@ -115,8 +115,6 @@ export class LoggerChannel implements IServerChannel { export class LoggerChannelClient extends AbstractLoggerService implements ILoggerService { - declare readonly _serviceBrand: undefined; - constructor(logLevel: LogLevel, onDidChangeLogLevel: Event, private readonly channel: IChannel) { super(logLevel, onDidChangeLogLevel); } @@ -170,7 +168,6 @@ class Logger extends AbstractMessageLogger { } export class FollowerLogService extends LogService implements ILogService { - declare readonly _serviceBrand: undefined; constructor(private parent: LogLevelChannelClient, logService: ILogService) { super(logService); diff --git a/src/vs/platform/quickinput/browser/commandsQuickAccess.ts b/src/vs/platform/quickinput/browser/commandsQuickAccess.ts index a1d27c5aca2..96210a56e38 100644 --- a/src/vs/platform/quickinput/browser/commandsQuickAccess.ts +++ b/src/vs/platform/quickinput/browser/commandsQuickAccess.ts @@ -39,8 +39,10 @@ export abstract class AbstractCommandsQuickAccessProvider extends PickerQuickAcc private readonly commandsHistory = this._register(this.instantiationService.createInstance(CommandsHistory)); + protected override readonly options: ICommandsQuickAccessOptions; + constructor( - protected options: ICommandsQuickAccessOptions, + options: ICommandsQuickAccessOptions, @IInstantiationService private readonly instantiationService: IInstantiationService, @IKeybindingService private readonly keybindingService: IKeybindingService, @ICommandService private readonly commandService: ICommandService, @@ -48,6 +50,8 @@ export abstract class AbstractCommandsQuickAccessProvider extends PickerQuickAcc @INotificationService private readonly notificationService: INotificationService ) { super(AbstractCommandsQuickAccessProvider.PREFIX, options); + + this.options = options; } protected async getPicks(filter: string, disposables: DisposableStore, token: CancellationToken): Promise> { diff --git a/src/vs/platform/update/electron-main/updateService.darwin.ts b/src/vs/platform/update/electron-main/updateService.darwin.ts index b21f4e8650e..8a057282a37 100644 --- a/src/vs/platform/update/electron-main/updateService.darwin.ts +++ b/src/vs/platform/update/electron-main/updateService.darwin.ts @@ -19,8 +19,6 @@ import { IProductService } from 'vs/platform/product/common/productService'; export class DarwinUpdateService extends AbstractUpdateService { - declare readonly _serviceBrand: undefined; - private readonly disposables = new DisposableStore(); @memoize private get onRawError(): Event { return Event.fromNodeEventEmitter(electron.autoUpdater, 'error', (_, message) => message); } diff --git a/src/vs/platform/update/electron-main/updateService.linux.ts b/src/vs/platform/update/electron-main/updateService.linux.ts index d6472f634b3..27d5d4d4f22 100644 --- a/src/vs/platform/update/electron-main/updateService.linux.ts +++ b/src/vs/platform/update/electron-main/updateService.linux.ts @@ -17,8 +17,6 @@ import { INativeHostMainService } from 'vs/platform/native/electron-main/nativeH export class LinuxUpdateService extends AbstractUpdateService { - declare readonly _serviceBrand: undefined; - constructor( @ILifecycleMainService lifecycleMainService: ILifecycleMainService, @IConfigurationService configurationService: IConfigurationService, diff --git a/src/vs/platform/update/electron-main/updateService.snap.ts b/src/vs/platform/update/electron-main/updateService.snap.ts index ed4f008351e..505adb5dd38 100644 --- a/src/vs/platform/update/electron-main/updateService.snap.ts +++ b/src/vs/platform/update/electron-main/updateService.snap.ts @@ -134,8 +134,6 @@ abstract class AbstractUpdateService2 implements IUpdateService { export class SnapUpdateService extends AbstractUpdateService2 { - declare readonly _serviceBrand: undefined; - constructor( private snap: string, private snapRevision: string, diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts index ef9c6505407..f033ed74001 100644 --- a/src/vs/platform/update/electron-main/updateService.win32.ts +++ b/src/vs/platform/update/electron-main/updateService.win32.ts @@ -49,8 +49,6 @@ function getUpdateType(): UpdateType { export class Win32UpdateService extends AbstractUpdateService { - declare readonly _serviceBrand: undefined; - private availableUpdate: IAvailableUpdate | undefined; @memoize diff --git a/src/vs/workbench/browser/parts/compositeBarActions.ts b/src/vs/workbench/browser/parts/compositeBarActions.ts index 44c66a7bf78..9d9a5d1b854 100644 --- a/src/vs/workbench/browser/parts/compositeBarActions.ts +++ b/src/vs/workbench/browser/parts/compositeBarActions.ts @@ -132,7 +132,7 @@ export class ActivityActionViewItem extends BaseActionViewItem { protected container!: HTMLElement; protected label!: HTMLElement; protected badge!: HTMLElement; - protected options!: IActivityActionViewItemOptions; + protected override readonly options: IActivityActionViewItemOptions; private badgeContent: HTMLElement | undefined; private readonly badgeDisposable = this._register(new MutableDisposable()); @@ -145,6 +145,8 @@ export class ActivityActionViewItem extends BaseActionViewItem { ) { super(null, action, options); + this.options = options; + this._register(this.themeService.onDidColorThemeChange(this.onThemeChange, this)); this._register(action.onDidChangeActivity(this.updateActivity, this)); this._register(action.onDidChangeBadge(this.updateBadge, this)); diff --git a/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts b/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts index 1ee028532b3..8d3ae15eecb 100644 --- a/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts +++ b/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts @@ -195,7 +195,7 @@ export class NoTabsTitleControl extends TitleControl { } } - updateStyles(): void { + override updateStyles(): void { this.redraw(); } diff --git a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts index 72cc9654835..2d64cc3f46b 100644 --- a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts +++ b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts @@ -570,7 +570,7 @@ export class TabsTitleControl extends TitleControl { } } - updateStyles(): void { + override updateStyles(): void { this.redraw(); } diff --git a/src/vs/workbench/browser/parts/editor/titleControl.ts b/src/vs/workbench/browser/parts/editor/titleControl.ts index ba961779f19..e2d0ed9a806 100644 --- a/src/vs/workbench/browser/parts/editor/titleControl.ts +++ b/src/vs/workbench/browser/parts/editor/titleControl.ts @@ -386,8 +386,6 @@ export abstract class TitleControl extends Themable { abstract updateOptions(oldOptions: IEditorPartOptions, newOptions: IEditorPartOptions): void; - abstract updateStyles(): void; - abstract layout(dimensions: ITitleControlDimensions): Dimension; abstract getHeight(): IEditorGroupTitleHeight; diff --git a/src/vs/workbench/common/editor/diffEditorInput.ts b/src/vs/workbench/common/editor/diffEditorInput.ts index 1c5506e8cd0..5ef11614f2f 100644 --- a/src/vs/workbench/common/editor/diffEditorInput.ts +++ b/src/vs/workbench/common/editor/diffEditorInput.ts @@ -26,8 +26,8 @@ export class DiffEditorInput extends SideBySideEditorInput { private cachedModel: DiffEditorModel | undefined = undefined; constructor( - protected name: string | undefined, - protected description: string | undefined, + name: string | undefined, + description: string | undefined, public readonly originalInput: EditorInput, public readonly modifiedInput: EditorInput, private readonly forceOpenAsBinary: boolean | undefined, diff --git a/src/vs/workbench/contrib/webview/electron-browser/webviewService.ts b/src/vs/workbench/contrib/webview/electron-browser/webviewService.ts index 0c47969aa80..9d839838af5 100644 --- a/src/vs/workbench/contrib/webview/electron-browser/webviewService.ts +++ b/src/vs/workbench/contrib/webview/electron-browser/webviewService.ts @@ -12,7 +12,6 @@ import { ElectronIframeWebview } from 'vs/workbench/contrib/webview/electron-san import { ElectronWebviewBasedWebview } from 'vs/workbench/contrib/webview/electron-browser/webviewElement'; export class ElectronWebviewService extends WebviewService { - declare readonly _serviceBrand: undefined; constructor( @IInstantiationService instantiationService: IInstantiationService, diff --git a/src/vs/workbench/electron-browser/desktop.main.ts b/src/vs/workbench/electron-browser/desktop.main.ts index 95822977cef..6530c427e8c 100644 --- a/src/vs/workbench/electron-browser/desktop.main.ts +++ b/src/vs/workbench/electron-browser/desktop.main.ts @@ -25,7 +25,7 @@ class DesktopMain extends SharedDesktopMain { gracefulify(fs); } - protected joinOpen(instantiationService: IInstantiationService): void { + protected override joinOpen(instantiationService: IInstantiationService): void { // Driver if (this.configuration.driver) { diff --git a/src/vs/workbench/electron-sandbox/parts/titlebar/titlebarPart.ts b/src/vs/workbench/electron-sandbox/parts/titlebar/titlebarPart.ts index 7e1c2ade7e9..3096c69dcef 100644 --- a/src/vs/workbench/electron-sandbox/parts/titlebar/titlebarPart.ts +++ b/src/vs/workbench/electron-sandbox/parts/titlebar/titlebarPart.ts @@ -44,11 +44,13 @@ export class TitlebarPart extends BrowserTitleBarPart { override get minimumHeight(): number { return isMacintosh ? this.getMacTitlebarSize() / getZoomFactor() : super.minimumHeight; } override get maximumHeight(): number { return this.minimumHeight; } + protected override readonly environmentService: INativeWorkbenchEnvironmentService; + constructor( @IContextMenuService contextMenuService: IContextMenuService, @IConfigurationService configurationService: IConfigurationService, @IEditorService editorService: IEditorService, - @INativeWorkbenchEnvironmentService protected readonly environmentService: INativeWorkbenchEnvironmentService, + @INativeWorkbenchEnvironmentService environmentService: INativeWorkbenchEnvironmentService, @IWorkspaceContextService contextService: IWorkspaceContextService, @IInstantiationService instantiationService: IInstantiationService, @IThemeService themeService: IThemeService, @@ -62,6 +64,8 @@ export class TitlebarPart extends BrowserTitleBarPart { @INativeHostService private readonly nativeHostService: INativeHostService ) { super(contextMenuService, configurationService, editorService, environmentService, contextService, instantiationService, themeService, labelService, storageService, layoutService, menuService, contextKeyService, hostService, productService); + + this.environmentService = environmentService; } private onUpdateAppIconDragBehavior(): void { diff --git a/src/vs/workbench/services/accessibility/electron-sandbox/accessibilityService.ts b/src/vs/workbench/services/accessibility/electron-sandbox/accessibilityService.ts index 236f9c238bf..904af85d728 100644 --- a/src/vs/workbench/services/accessibility/electron-sandbox/accessibilityService.ts +++ b/src/vs/workbench/services/accessibility/electron-sandbox/accessibilityService.ts @@ -26,8 +26,6 @@ type AccessibilityMetricsClassification = { export class NativeAccessibilityService extends AccessibilityService implements IAccessibilityService { - declare readonly _serviceBrand: undefined; - private didSendTelemetry = false; private shouldAlwaysUnderlineAccessKeys: boolean | undefined = undefined; diff --git a/src/vs/workbench/services/backup/browser/backupFileService.ts b/src/vs/workbench/services/backup/browser/backupFileService.ts index cdc7d84d247..dc113f9c44a 100644 --- a/src/vs/workbench/services/backup/browser/backupFileService.ts +++ b/src/vs/workbench/services/backup/browser/backupFileService.ts @@ -14,8 +14,6 @@ import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace export class BrowserBackupFileService extends BackupFileService { - declare readonly _serviceBrand: undefined; - constructor( @IWorkspaceContextService contextService: IWorkspaceContextService, @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService, diff --git a/src/vs/workbench/services/dialogs/electron-sandbox/fileDialogService.ts b/src/vs/workbench/services/dialogs/electron-sandbox/fileDialogService.ts index 3398150a56e..368c1619aa7 100644 --- a/src/vs/workbench/services/dialogs/electron-sandbox/fileDialogService.ts +++ b/src/vs/workbench/services/dialogs/electron-sandbox/fileDialogService.ts @@ -25,8 +25,6 @@ import { IPathService } from 'vs/workbench/services/path/common/pathService'; export class FileDialogService extends AbstractFileDialogService implements IFileDialogService { - declare readonly _serviceBrand: undefined; - constructor( @IHostService hostService: IHostService, @IWorkspaceContextService contextService: IWorkspaceContextService, diff --git a/src/vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test.ts b/src/vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test.ts index 2b4f25bff73..bf3f07ff1b7 100644 --- a/src/vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test.ts +++ b/src/vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test.ts @@ -66,7 +66,7 @@ export class TestExtensionEnablementService extends ExtensionEnablementService { instantiationService.get(ILifecycleService) || instantiationService.stub(ILifecycleService, new TestLifecycleService()), instantiationService.get(INotificationService) || instantiationService.stub(INotificationService, new TestNotificationService()), instantiationService.get(IHostService), - new class extends mock() { isDisabledByBisect() { return false; } }, + new class extends mock() { override isDisabledByBisect() { return false; } }, instantiationService.get(IWorkspaceTrustService) || instantiationService.stub(IWorkspaceTrustService, new TestWorkspaceTrustService()) ); } diff --git a/src/vs/workbench/services/lifecycle/browser/lifecycleService.ts b/src/vs/workbench/services/lifecycle/browser/lifecycleService.ts index 0616d8cdf4f..83924726d45 100644 --- a/src/vs/workbench/services/lifecycle/browser/lifecycleService.ts +++ b/src/vs/workbench/services/lifecycle/browser/lifecycleService.ts @@ -13,8 +13,6 @@ import { addDisposableListener } from 'vs/base/browser/dom'; export class BrowserLifecycleService extends AbstractLifecycleService { - declare readonly _serviceBrand: undefined; - private beforeUnloadDisposable: IDisposable | undefined = undefined; private expectedUnload = false; diff --git a/src/vs/workbench/services/lifecycle/electron-sandbox/lifecycleService.ts b/src/vs/workbench/services/lifecycle/electron-sandbox/lifecycleService.ts index 5713efe1eda..47dc6d84ae7 100644 --- a/src/vs/workbench/services/lifecycle/electron-sandbox/lifecycleService.ts +++ b/src/vs/workbench/services/lifecycle/electron-sandbox/lifecycleService.ts @@ -25,8 +25,6 @@ export class NativeLifecycleService extends AbstractLifecycleService { private static readonly BEFORE_SHUTDOWN_WARNING_DELAY = 5000; private static readonly WILL_SHUTDOWN_WARNING_DELAY = 5000; - declare readonly _serviceBrand: undefined; - private shutdownReason: ShutdownReason | undefined; constructor( diff --git a/src/vs/workbench/services/textfile/common/textfiles.ts b/src/vs/workbench/services/textfile/common/textfiles.ts index 6a2f37551c8..ff99cedd1ea 100644 --- a/src/vs/workbench/services/textfile/common/textfiles.ts +++ b/src/vs/workbench/services/textfile/common/textfiles.ts @@ -147,12 +147,16 @@ export class TextFileOperationError extends FileOperationError { return obj instanceof Error && !isUndefinedOrNull((obj as TextFileOperationError).textFileOperationResult); } + override readonly options?: IReadTextFileOptions & IWriteTextFileOptions; + constructor( message: string, public textFileOperationResult: TextFileOperationResult, - public options?: IReadTextFileOptions & IWriteTextFileOptions + options?: IReadTextFileOptions & IWriteTextFileOptions ) { super(message, FileOperationResult.FILE_OTHER_ERROR); + + this.options = options; } } diff --git a/src/vs/workbench/services/textfile/electron-sandbox/nativeTextFileService.ts b/src/vs/workbench/services/textfile/electron-sandbox/nativeTextFileService.ts index 80930d5fd4c..e25485c4539 100644 --- a/src/vs/workbench/services/textfile/electron-sandbox/nativeTextFileService.ts +++ b/src/vs/workbench/services/textfile/electron-sandbox/nativeTextFileService.ts @@ -33,13 +33,15 @@ import { Promises } from 'vs/base/common/async'; export class NativeTextFileService extends AbstractTextFileService { + protected override readonly environmentService: INativeWorkbenchEnvironmentService; + constructor( @IFileService fileService: IFileService, @IUntitledTextEditorService untitledTextEditorService: IUntitledTextEditorService, @ILifecycleService lifecycleService: ILifecycleService, @IInstantiationService instantiationService: IInstantiationService, @IModelService modelService: IModelService, - @INativeWorkbenchEnvironmentService protected environmentService: INativeWorkbenchEnvironmentService, + @INativeWorkbenchEnvironmentService environmentService: INativeWorkbenchEnvironmentService, @IDialogService dialogService: IDialogService, @IFileDialogService fileDialogService: IFileDialogService, @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService, @@ -54,6 +56,8 @@ export class NativeTextFileService extends AbstractTextFileService { @ILogService logService: ILogService ) { super(fileService, untitledTextEditorService, lifecycleService, instantiationService, modelService, environmentService, dialogService, fileDialogService, textResourceConfigurationService, filesConfigurationService, textModelService, codeEditorService, pathService, workingCopyFileService, uriIdentityService, modeService, logService); + + this.environmentService = environmentService; } protected override registerListeners(): void { diff --git a/src/vs/workbench/services/url/browser/urlService.ts b/src/vs/workbench/services/url/browser/urlService.ts index 9d3ef46d01f..bb54701dd47 100644 --- a/src/vs/workbench/services/url/browser/urlService.ts +++ b/src/vs/workbench/services/url/browser/urlService.ts @@ -38,8 +38,6 @@ export interface IURLCallbackProvider { export class BrowserURLService extends AbstractURLService { - declare readonly _serviceBrand: undefined; - private provider: IURLCallbackProvider | undefined; constructor( diff --git a/src/vs/workbench/services/workspaces/browser/workspaceEditingService.ts b/src/vs/workbench/services/workspaces/browser/workspaceEditingService.ts index 6af823c7957..0bbe557c798 100644 --- a/src/vs/workbench/services/workspaces/browser/workspaceEditingService.ts +++ b/src/vs/workbench/services/workspaces/browser/workspaceEditingService.ts @@ -23,8 +23,6 @@ import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/ur export class BrowserWorkspaceEditingService extends AbstractWorkspaceEditingService { - declare readonly _serviceBrand: undefined; - constructor( @IJSONEditingService jsonEditingService: IJSONEditingService, @IWorkspaceContextService contextService: WorkspaceService, diff --git a/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts b/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts index 2a8cb865b01..c0de8e7ac93 100644 --- a/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts +++ b/src/vs/workbench/services/workspaces/electron-sandbox/workspaceEditingService.ts @@ -34,8 +34,6 @@ import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/ur export class NativeWorkspaceEditingService extends AbstractWorkspaceEditingService { - declare readonly _serviceBrand: undefined; - constructor( @IJSONEditingService jsonEditingService: IJSONEditingService, @IWorkspaceContextService contextService: WorkspaceService, diff --git a/src/vs/workbench/test/browser/api/extHostConfiguration.test.ts b/src/vs/workbench/test/browser/api/extHostConfiguration.test.ts index 73453f39275..99888cc64c3 100644 --- a/src/vs/workbench/test/browser/api/extHostConfiguration.test.ts +++ b/src/vs/workbench/test/browser/api/extHostConfiguration.test.ts @@ -31,7 +31,7 @@ suite('ExtHostConfiguration', function () { } function createExtHostWorkspace(): ExtHostWorkspace { - return new ExtHostWorkspace(new TestRPCProtocol(), new class extends mock() { }, new class extends mock() { getCapabilities() { return isLinux ? FileSystemProviderCapabilities.PathCaseSensitive : undefined; } }, new NullLogService()); + return new ExtHostWorkspace(new TestRPCProtocol(), new class extends mock() { }, new class extends mock() { override getCapabilities() { return isLinux ? FileSystemProviderCapabilities.PathCaseSensitive : undefined; } }, new NullLogService()); } function createExtHostConfiguration(contents: any = Object.create(null), shape?: MainThreadConfigurationShape) { diff --git a/src/vs/workbench/test/browser/api/extHostWorkspace.test.ts b/src/vs/workbench/test/browser/api/extHostWorkspace.test.ts index f90643430be..a70427a872c 100644 --- a/src/vs/workbench/test/browser/api/extHostWorkspace.test.ts +++ b/src/vs/workbench/test/browser/api/extHostWorkspace.test.ts @@ -29,7 +29,7 @@ function createExtHostWorkspace(mainContext: IMainContext, data: IWorkspaceData, const result = new ExtHostWorkspace( new ExtHostRpcService(mainContext), new class extends mock() { workspace = data; }, - new class extends mock() { getCapabilities() { return isLinux ? FileSystemProviderCapabilities.PathCaseSensitive : undefined; } }, + new class extends mock() { override getCapabilities() { return isLinux ? FileSystemProviderCapabilities.PathCaseSensitive : undefined; } }, logService, ); result.$initializeWorkspace(data, WorkspaceTrustState.Trusted); diff --git a/src/vs/workbench/test/browser/api/mainThreadDocumentsAndEditors.test.ts b/src/vs/workbench/test/browser/api/mainThreadDocumentsAndEditors.test.ts index 70739001aa3..35ce024f37b 100644 --- a/src/vs/workbench/test/browser/api/mainThreadDocumentsAndEditors.test.ts +++ b/src/vs/workbench/test/browser/api/mainThreadDocumentsAndEditors.test.ts @@ -86,7 +86,6 @@ suite('MainThreadDocumentsAndEditors', () => { editorGroupService, null!, new class extends mock() implements IPanelService { - declare readonly _serviceBrand: undefined; override onDidPanelOpen = Event.None; override onDidPanelClose = Event.None; override getActivePanel() { diff --git a/src/vs/workbench/test/browser/api/mainThreadEditors.test.ts b/src/vs/workbench/test/browser/api/mainThreadEditors.test.ts index b72ea54d694..4dde707b992 100644 --- a/src/vs/workbench/test/browser/api/mainThreadEditors.test.ts +++ b/src/vs/workbench/test/browser/api/mainThreadEditors.test.ts @@ -157,7 +157,6 @@ suite('MainThreadEditors', () => { }); services.set(IPanelService, new class extends mock() implements IPanelService { - declare readonly _serviceBrand: undefined; override onDidPanelOpen = Event.None; override onDidPanelClose = Event.None; override getActivePanel() { diff --git a/src/vs/workbench/test/electron-browser/workbenchTestServices.ts b/src/vs/workbench/test/electron-browser/workbenchTestServices.ts index 4e91640d39f..5db6bc7035a 100644 --- a/src/vs/workbench/test/electron-browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/electron-browser/workbenchTestServices.ts @@ -284,8 +284,6 @@ export class TestServiceAccessor { export class TestNativePathService extends TestPathService { - declare readonly _serviceBrand: undefined; - constructor() { super(URI.file(homedir())); } From f8c7dd64a4c8fbdb8e3be0012e59575e50deeb3a Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 9 Apr 2021 08:28:21 +0200 Subject: [PATCH 114/115] tests - ensure preload promises are all resolved --- test/unit/electron/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/unit/electron/index.js b/test/unit/electron/index.js index 3991d0a0bd0..2e7e6442c72 100644 --- a/test/unit/electron/index.js +++ b/test/unit/electron/index.js @@ -146,6 +146,9 @@ app.on('ready', () => { }; }); + // No-op since invoke the IPC as part of IIFE in the preload. + ipcMain.handle('vscode:fetchShellEnv', event => { }); + const win = new BrowserWindow({ height: 600, width: 800, @@ -154,6 +157,7 @@ app.on('ready', () => { preload: path.join(__dirname, '..', '..', '..', 'src', 'vs', 'base', 'parts', 'sandbox', 'electron-browser', 'preload.js'), // ensure similar environment as VSCode as tests may depend on this additionalArguments: [`--vscode-window-config=vscode:test-vscode-window-config`], nodeIntegration: true, + contextIsolation: false, enableWebSQL: false, enableRemoteModule: false, spellcheck: false, From 65a8d0905e3564c418699f77abec869fab23b2bb Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Fri, 9 Apr 2021 09:13:21 +0200 Subject: [PATCH 115/115] update ref viewlet --- product.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product.json b/product.json index 71d9b32f1e6..79267cd4652 100644 --- a/product.json +++ b/product.json @@ -63,7 +63,7 @@ }, { "name": "ms-vscode.references-view", - "version": "0.0.77", + "version": "0.0.78", "repo": "https://github.com/microsoft/vscode-references-view", "metadata": { "id": "dc489f46-520d-4556-ae85-1f9eab3c412d",