diff --git a/src/tsconfig.strictNullChecks.json b/src/tsconfig.strictNullChecks.json index 213b8f5b20d..d62bc6c2fd8 100644 --- a/src/tsconfig.strictNullChecks.json +++ b/src/tsconfig.strictNullChecks.json @@ -22,11 +22,18 @@ "./vs/base/browser/mouseEvent.ts", "./vs/base/browser/touch.ts", "./vs/base/browser/ui/aria/aria.ts", + "./vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts", "./vs/base/browser/ui/button/button.ts", + "./vs/base/browser/ui/centered/centeredViewLayout.ts", "./vs/base/browser/ui/contextview/contextview.ts", "./vs/base/browser/ui/countBadge/countBadge.ts", + "./vs/base/browser/ui/grid/gridview.ts", + "./vs/base/browser/ui/highlightedlabel/highlightedLabel.ts", + "./vs/base/browser/ui/iconLabel/iconLabel.ts", "./vs/base/browser/ui/keybindingLabel/keybindingLabel.ts", "./vs/base/browser/ui/list/list.ts", + "./vs/base/browser/ui/list/rangeMap.ts", + "./vs/base/browser/ui/list/rowCache.ts", "./vs/base/browser/ui/list/splice.ts", "./vs/base/browser/ui/octiconLabel/octiconLabel.mock.ts", "./vs/base/browser/ui/octiconLabel/octiconLabel.ts", @@ -40,6 +47,7 @@ "./vs/base/browser/ui/scrollbar/scrollbarState.ts", "./vs/base/browser/ui/scrollbar/scrollbarVisibilityController.ts", "./vs/base/browser/ui/scrollbar/verticalScrollbar.ts", + "./vs/base/browser/ui/splitview/panelview.ts", "./vs/base/browser/ui/splitview/splitview.ts", "./vs/base/browser/ui/tree/tree.ts", "./vs/base/browser/ui/widget.ts", @@ -65,6 +73,7 @@ "./vs/base/parts/ipc/node/ipc.ts", "./vs/base/parts/ipc/test/node/testService.ts", "./vs/base/parts/quickopen/common/quickOpen.ts", + "./vs/base/test/browser/ui/grid/util.ts", "./vs/base/test/common/json.test.ts", "./vs/base/test/common/jsonEdit.test.ts", "./vs/base/test/common/jsonFormatter.test.ts", @@ -244,6 +253,7 @@ "./vs/editor/contrib/codeAction/codeAction.ts", "./vs/editor/contrib/codeAction/codeActionTrigger.ts", "./vs/editor/contrib/colorPicker/color.ts", + "./vs/editor/contrib/colorPicker/colorDetector.ts", "./vs/editor/contrib/colorPicker/colorPickerModel.ts", "./vs/editor/contrib/comment/blockCommentCommand.ts", "./vs/editor/contrib/comment/comment.ts", @@ -399,7 +409,9 @@ "./vs/platform/quickOpen/common/quickOpen.ts", "./vs/platform/quickinput/common/quickInput.ts", "./vs/platform/registry/common/platform.ts", + "./vs/platform/request/electron-main/requestService.ts", "./vs/platform/request/node/request.ts", + "./vs/platform/request/node/requestService.ts", "./vs/platform/search/common/search.ts", "./vs/platform/state/common/state.ts", "./vs/platform/statusbar/common/statusbar.ts", diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index 3ad8440553d..38bb0c0d511 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -560,7 +560,7 @@ export class Dimension { this.height = height; } - static equals(a: Dimension, b: Dimension): boolean { + static equals(a: Dimension | undefined, b: Dimension | undefined): boolean { if (a === b) { return true; } diff --git a/src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts b/src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts index 4a2b7396a9e..0ad53cd67d5 100644 --- a/src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts +++ b/src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts @@ -118,7 +118,7 @@ export class BreadcrumbsWidget { this._freeNodes.length = 0; } - layout(dim: dom.Dimension): void { + layout(dim: dom.Dimension | undefined): void { if (dom.Dimension.equals(dim, this._dimension)) { return; } @@ -277,8 +277,8 @@ export class BreadcrumbsWidget { } setItems(items: BreadcrumbsItem[]): void { - let prefix: number; - let removed: BreadcrumbsItem[]; + let prefix: number | undefined; + let removed: BreadcrumbsItem[] = []; try { prefix = commonPrefixLength(this._items, items, (a, b) => a.equals(b)); removed = this._items.splice(prefix, this._items.length - prefix, ...items.slice(prefix)); @@ -302,17 +302,21 @@ export class BreadcrumbsWidget { // case a: more nodes -> remove them while (start < this._nodes.length) { const free = this._nodes.pop(); - this._freeNodes.push(free); - free.remove(); + if (free) { + this._freeNodes.push(free); + free.remove(); + } } // case b: more items -> render them for (; start < this._items.length; start++) { let item = this._items[start]; let node = this._freeNodes.length > 0 ? this._freeNodes.pop() : document.createElement('div'); - this._renderItem(item, node); - this._domNode.appendChild(node); - this._nodes.push(node); + if (node) { + this._renderItem(item, node); + this._domNode.appendChild(node); + this._nodes.push(node); + } } this.layout(undefined); } @@ -327,7 +331,7 @@ export class BreadcrumbsWidget { } private _onClick(event: IMouseEvent): void { - for (let el = event.target; el; el = el.parentElement) { + for (let el: HTMLElement | null = event.target; el; el = el.parentElement) { let idx = this._nodes.indexOf(el as any); if (idx >= 0) { this._focus(idx, event); diff --git a/src/vs/base/browser/ui/centered/centeredViewLayout.ts b/src/vs/base/browser/ui/centered/centeredViewLayout.ts index 03b876df89b..0da0a7f3b11 100644 --- a/src/vs/base/browser/ui/centered/centeredViewLayout.ts +++ b/src/vs/base/browser/ui/centered/centeredViewLayout.ts @@ -50,12 +50,12 @@ export interface ICenteredViewStyles extends ISplitViewStyles { export class CenteredViewLayout { - private splitView: SplitView; + private splitView?: SplitView; private width: number = 0; private height: number = 0; private style: ICenteredViewStyles; private didLayout = false; - private emptyViews: ISplitViewView[]; + private emptyViews: ISplitViewView[] | undefined; private splitViewDisposables: IDisposable[] = []; constructor(private container: HTMLElement, private view: IView, public readonly state: CenteredViewState = GOLDEN_RATIO) { @@ -84,6 +84,9 @@ export class CenteredViewLayout { } private resizeMargins(): void { + if (!this.splitView) { + return; + } this.splitView.resizeView(0, this.state.leftMarginRatio * this.width); this.splitView.resizeView(2, this.state.rightMarginRatio * this.width); } @@ -94,7 +97,7 @@ export class CenteredViewLayout { styles(style: ICenteredViewStyles): void { this.style = style; - if (this.splitView) { + if (this.splitView && this.emptyViews) { this.splitView.style(this.style); this.emptyViews[0].element.style.backgroundColor = this.style.background.toString(); this.emptyViews[1].element.style.backgroundColor = this.style.background.toString(); @@ -115,8 +118,10 @@ export class CenteredViewLayout { }); this.splitViewDisposables.push(this.splitView.onDidSashChange(() => { - this.state.leftMarginRatio = this.splitView.getViewSize(0) / this.width; - this.state.rightMarginRatio = this.splitView.getViewSize(2) / this.width; + if (this.splitView) { + this.state.leftMarginRatio = this.splitView.getViewSize(0) / this.width; + this.state.rightMarginRatio = this.splitView.getViewSize(2) / this.width; + } })); this.splitViewDisposables.push(this.splitView.onDidSashReset(() => { this.state.leftMarginRatio = GOLDEN_RATIO.leftMarginRatio; @@ -130,9 +135,13 @@ export class CenteredViewLayout { this.splitView.addView(this.emptyViews[0], this.state.leftMarginRatio * this.width, 0); this.splitView.addView(this.emptyViews[1], this.state.rightMarginRatio * this.width, 2); } else { - this.container.removeChild(this.splitView.el); + if (this.splitView) { + this.container.removeChild(this.splitView.el); + } this.splitViewDisposables = dispose(this.splitViewDisposables); - this.splitView.dispose(); + if (this.splitView) { + this.splitView.dispose(); + } this.splitView = undefined; this.emptyViews = undefined; this.container.appendChild(this.view.element); diff --git a/src/vs/base/browser/ui/grid/gridview.ts b/src/vs/base/browser/ui/grid/gridview.ts index 531575bb123..2892dde50a9 100644 --- a/src/vs/base/browser/ui/grid/gridview.ts +++ b/src/vs/base/browser/ui/grid/gridview.ts @@ -560,7 +560,7 @@ export class GridView implements IDisposable { get maximumWidth(): number { return this.root.maximumHeight; } get maximumHeight(): number { return this.root.maximumHeight; } - private _onDidChange = new Relay<{ width: number; height: number; }>(); + private _onDidChange = new Relay<{ width: number; height: number; } | undefined>(); readonly onDidChange = this._onDidChange.event; constructor(options: IGridViewOptions = {}) { diff --git a/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts b/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts index 58e154c751e..c6f06f0f9c0 100644 --- a/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts +++ b/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts @@ -90,8 +90,8 @@ export class HighlightedLabel implements IDisposable { } dispose() { - this.text = null; - this.highlights = null; + this.text = null!; // StrictNullOverride: nulling out ok in dispose + this.highlights = null!; // StrictNullOverride: nulling out ok in dispose } static escapeNewLines(text: string, highlights: IHighlight[]): string { diff --git a/src/vs/base/browser/ui/list/listWidget.ts b/src/vs/base/browser/ui/list/listWidget.ts index 5754251a97d..48114650609 100644 --- a/src/vs/base/browser/ui/list/listWidget.ts +++ b/src/vs/base/browser/ui/list/listWidget.ts @@ -751,7 +751,7 @@ function getContiguousRangeContaining(range: number[], value: number): number[] return []; } - const result = []; + const result: number[] = []; let i = index - 1; while (i >= 0 && range[i] === value - (index - i)) { result.push(range[i--]); @@ -771,7 +771,7 @@ function getContiguousRangeContaining(range: number[], value: number): number[] * betweem them (OR). */ function disjunction(one: number[], other: number[]): number[] { - const result = []; + const result: number[] = []; let i = 0, j = 0; while (i < one.length || j < other.length) { @@ -799,7 +799,7 @@ function disjunction(one: number[], other: number[]): number[] { * complement between them (XOR). */ function relativeComplement(one: number[], other: number[]): number[] { - const result = []; + const result: number[] = []; let i = 0, j = 0; while (i < one.length || j < other.length) { diff --git a/src/vs/base/browser/ui/list/rangeMap.ts b/src/vs/base/browser/ui/list/rangeMap.ts index 3c4d78563b9..d70ddf174ea 100644 --- a/src/vs/base/browser/ui/list/rangeMap.ts +++ b/src/vs/base/browser/ui/list/rangeMap.ts @@ -188,6 +188,6 @@ export class RangeMap { } dispose() { - this.groups = null; + this.groups = null!; // StrictNullOverride: nulling out ok in dispose } } \ No newline at end of file diff --git a/src/vs/base/browser/ui/list/rowCache.ts b/src/vs/base/browser/ui/list/rowCache.ts index 756b1f9a678..b7007c2fc0f 100644 --- a/src/vs/base/browser/ui/list/rowCache.ts +++ b/src/vs/base/browser/ui/list/rowCache.ts @@ -8,14 +8,16 @@ import { IDisposable } from 'vs/base/common/lifecycle'; import { $, removeClass } from 'vs/base/browser/dom'; export interface IRow { - domNode: HTMLElement; + domNode: HTMLElement | null; templateId: string; templateData: any; } function removeFromParent(element: HTMLElement): void { try { - element.parentElement.removeChild(element); + if (element.parentElement) { + element.parentElement.removeChild(element); + } } catch (e) { // this will throw if this happens due to a blur event, nasty business } @@ -57,8 +59,10 @@ export class RowCache implements IDisposable { private releaseRow(row: IRow): void { const { domNode, templateId } = row; - removeClass(domNode, 'scrolling'); - removeFromParent(domNode); + if (domNode) { + removeClass(domNode, 'scrolling'); + removeFromParent(domNode); + } const cache = this.getTemplateCache(templateId); cache.push(row); @@ -95,6 +99,6 @@ export class RowCache implements IDisposable { dispose(): void { this.garbageCollect(); this.cache.clear(); - this.renderers = null; + this.renderers = null!; // StrictNullOverride: nulling out ok in dispose } } \ No newline at end of file diff --git a/src/vs/base/browser/ui/splitview/panelview.ts b/src/vs/base/browser/ui/splitview/panelview.ts index 4364bf1432d..8ce998140a0 100644 --- a/src/vs/base/browser/ui/splitview/panelview.ts +++ b/src/vs/base/browser/ui/splitview/panelview.ts @@ -264,7 +264,7 @@ class PanelDraggable extends Disposable { } private onDragStart(e: DragEvent): void { - if (!this.dnd.canDrag(this.panel)) { + if (!this.dnd.canDrag(this.panel) || !e.dataTransfer) { e.preventDefault(); e.stopPropagation(); return; @@ -272,7 +272,7 @@ class PanelDraggable extends Disposable { e.dataTransfer.effectAllowed = 'move'; - const dragImage = append(document.body, $('.monaco-panel-drag-image', {}, this.panel.draggableElement.textContent)); + const dragImage = append(document.body, $('.monaco-panel-drag-image', {}, this.panel.draggableElement.textContent || '')); e.dataTransfer.setDragImage(dragImage, -10, -10); setTimeout(() => document.body.removeChild(dragImage), 0); @@ -371,7 +371,7 @@ interface IPanelItem { export class PanelView extends Disposable { - private dnd: IPanelDndController | null; + private dnd: IPanelDndController | undefined; private dndContext: IDndContext = { draggable: null }; private el: HTMLElement; private panelItems: IPanelItem[] = []; diff --git a/src/vs/base/browser/ui/tree/indexTreeModel.ts b/src/vs/base/browser/ui/tree/indexTreeModel.ts index 47f1c37607a..b55256c330f 100644 --- a/src/vs/base/browser/ui/tree/indexTreeModel.ts +++ b/src/vs/base/browser/ui/tree/indexTreeModel.ts @@ -406,7 +406,7 @@ export class IndexTreeModel implements ITreeModel): number[] { - const location = []; + const location: number[] = []; while (node.parent) { location.push(node.parent.children.indexOf(node)); diff --git a/src/vs/base/node/ps.ts b/src/vs/base/node/ps.ts index d11f9a8dc45..af7e3cf162a 100644 --- a/src/vs/base/node/ps.ts +++ b/src/vs/base/node/ps.ts @@ -194,7 +194,7 @@ export function listProcesses(rootPid: number): Promise { if (process.platform === 'linux') { // Flatten rootItem to get a list of all VSCode processes let processes = [rootItem]; - const pids = []; + const pids: number[] = []; while (processes.length) { const process = processes.shift(); pids.push(process.pid); diff --git a/src/vs/base/node/stats.ts b/src/vs/base/node/stats.ts index a65797e127a..fbf895ea0a6 100644 --- a/src/vs/base/node/stats.ts +++ b/src/vs/base/node/stats.ts @@ -5,7 +5,7 @@ import { readdir, stat, exists, readFile } from 'fs'; import { join } from 'path'; -import { parse } from 'vs/base/common/json'; +import { parse, ParseError } from 'vs/base/common/json'; export interface WorkspaceStatItem { name: string; @@ -37,7 +37,7 @@ export function collectLaunchConfigs(folder: string): Promise messages.push(msg)); await timeout(0); diff --git a/src/vs/base/parts/quickopen/common/quickOpenScorer.ts b/src/vs/base/parts/quickopen/common/quickOpenScorer.ts index 841974aaade..ace8984e735 100644 --- a/src/vs/base/parts/quickopen/common/quickOpenScorer.ts +++ b/src/vs/base/parts/quickopen/common/quickOpenScorer.ts @@ -61,8 +61,8 @@ export function score(target: string, query: string, queryLower: string, fuzzy: } function doScore(query: string, queryLower: string, queryLength: number, target: string, targetLower: string, targetLength: number): [number, number[]] { - const scores = []; - const matches = []; + const scores: number[] = []; + const matches: number[] = []; // // Build Scorer Matrix: @@ -121,7 +121,7 @@ function doScore(query: string, queryLower: string, queryLength: number, target: } // Restore Positions (starting from bottom right of matrix) - const positions = []; + const positions: number[] = []; let queryIndex = queryLength - 1; let targetIndex = targetLength - 1; while (queryIndex >= 0 && targetIndex >= 0) { diff --git a/src/vs/base/test/browser/ui/tree/indexTreeModel.test.ts b/src/vs/base/test/browser/ui/tree/indexTreeModel.test.ts index 53d2add5df4..07431d166b8 100644 --- a/src/vs/base/test/browser/ui/tree/indexTreeModel.test.ts +++ b/src/vs/base/test/browser/ui/tree/indexTreeModel.test.ts @@ -24,14 +24,14 @@ function toArray(list: ITreeNode[]): T[] { suite('IndexTreeModel', function () { test('ctor', () => { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new IndexTreeModel(toSpliceable(list)); assert(model); assert.equal(list.length, 0); }); test('insert', () => { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new IndexTreeModel(toSpliceable(list)); model.splice([0], 0, Iterator.fromArray([ @@ -53,7 +53,7 @@ suite('IndexTreeModel', function () { }); test('deep insert', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new IndexTreeModel(toSpliceable(list)); model.splice([0], 0, Iterator.fromArray([ @@ -90,7 +90,7 @@ suite('IndexTreeModel', function () { }); test('deep insert collapsed', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new IndexTreeModel(toSpliceable(list)); model.splice([0], 0, Iterator.fromArray([ @@ -118,7 +118,7 @@ suite('IndexTreeModel', function () { }); test('delete', () => { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new IndexTreeModel(toSpliceable(list)); model.splice([0], 0, Iterator.fromArray([ @@ -143,7 +143,7 @@ suite('IndexTreeModel', function () { }); test('nested delete', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new IndexTreeModel(toSpliceable(list)); model.splice([0], 0, Iterator.fromArray([ @@ -177,7 +177,7 @@ suite('IndexTreeModel', function () { }); test('deep delete', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new IndexTreeModel(toSpliceable(list)); model.splice([0], 0, Iterator.fromArray([ @@ -205,7 +205,7 @@ suite('IndexTreeModel', function () { }); test('hidden delete', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new IndexTreeModel(toSpliceable(list)); model.splice([0], 0, Iterator.fromArray([ @@ -230,7 +230,7 @@ suite('IndexTreeModel', function () { }); test('collapse', () => { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new IndexTreeModel(toSpliceable(list)); model.splice([0], 0, Iterator.fromArray([ @@ -261,7 +261,7 @@ suite('IndexTreeModel', function () { }); test('expand', () => { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new IndexTreeModel(toSpliceable(list)); model.splice([0], 0, Iterator.fromArray([ @@ -301,7 +301,7 @@ suite('IndexTreeModel', function () { }); test('collapse should recursively adjust visible count', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new IndexTreeModel(toSpliceable(list)); model.splice([0], 0, Iterator.fromArray([ @@ -334,7 +334,7 @@ suite('IndexTreeModel', function () { }); test('simple filter', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const filter = new class implements ITreeFilter { filter(element: number): TreeVisibility { return element % 2 === 0 ? TreeVisibility.Visible : TreeVisibility.Hidden; @@ -368,7 +368,7 @@ suite('IndexTreeModel', function () { }); test('recursive filter on initial model', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const filter = new class implements ITreeFilter { filter(element: number): TreeVisibility { return element === 0 ? TreeVisibility.Recurse : TreeVisibility.Hidden; @@ -390,7 +390,7 @@ suite('IndexTreeModel', function () { }); test('refilter', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; let shouldFilter = false; const filter = new class implements ITreeFilter { filter(element: number): TreeVisibility { @@ -429,7 +429,7 @@ suite('IndexTreeModel', function () { }); test('recursive filter', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; let query = new RegExp(''); const filter = new class implements ITreeFilter { filter(element: string): TreeVisibility { @@ -475,7 +475,7 @@ suite('IndexTreeModel', function () { }); test('recursive filter with collapse', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; let query = new RegExp(''); const filter = new class implements ITreeFilter { filter(element: string): TreeVisibility { @@ -521,7 +521,7 @@ suite('IndexTreeModel', function () { }); test('recursive filter while collapsed', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; let query = new RegExp(''); const filter = new class implements ITreeFilter { filter(element: string): TreeVisibility { @@ -576,7 +576,7 @@ suite('IndexTreeModel', function () { suite('getNodeLocation', function () { test('simple', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new IndexTreeModel(toSpliceable(list)); model.splice([0], 0, Iterator.fromArray([ @@ -600,7 +600,7 @@ suite('IndexTreeModel', function () { }); test('with filter', function () { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const filter = new class implements ITreeFilter { filter(element: number): TreeVisibility { return element % 2 === 0 ? TreeVisibility.Visible : TreeVisibility.Hidden; diff --git a/src/vs/base/test/browser/ui/tree/objectTreeModel.test.ts b/src/vs/base/test/browser/ui/tree/objectTreeModel.test.ts index 4fc0edf0f12..6aac4a6ad68 100644 --- a/src/vs/base/test/browser/ui/tree/objectTreeModel.test.ts +++ b/src/vs/base/test/browser/ui/tree/objectTreeModel.test.ts @@ -24,7 +24,7 @@ function toArray(list: ITreeNode[]): T[] { suite('ObjectTreeModel', function () { test('ctor', () => { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new ObjectTreeModel(toSpliceable(list)); assert(model); assert.equal(list.length, 0); @@ -32,7 +32,7 @@ suite('ObjectTreeModel', function () { }); test('flat', () => { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new ObjectTreeModel(toSpliceable(list)); model.setChildren(null, Iterator.fromArray([ @@ -59,7 +59,7 @@ suite('ObjectTreeModel', function () { }); test('nested', () => { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new ObjectTreeModel(toSpliceable(list)); model.setChildren(null, Iterator.fromArray([ @@ -95,7 +95,7 @@ suite('ObjectTreeModel', function () { }); test('setChildren on collapsed node', () => { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new ObjectTreeModel(toSpliceable(list)); model.setChildren(null, Iterator.fromArray([ @@ -116,7 +116,7 @@ suite('ObjectTreeModel', function () { }); test('setChildren on expanded, unrevealed node', () => { - const list = [] as ITreeNode[]; + const list: ITreeNode[] = []; const model = new ObjectTreeModel(toSpliceable(list)); model.setChildren(null, [ diff --git a/src/vs/base/test/common/async.test.ts b/src/vs/base/test/common/async.test.ts index 834b2545c28..23cb2ec8eca 100644 --- a/src/vs/base/test/common/async.test.ts +++ b/src/vs/base/test/common/async.test.ts @@ -53,7 +53,7 @@ suite('Async', () => { // Cancelling a sync cancelable promise will fire the cancelled token. // Also, every `then` callback runs in another execution frame. test('CancelablePromise execution order (sync)', function () { - const order = []; + const order: string[] = []; const cancellablePromise = async.createCancelablePromise(token => { order.push('in callback'); @@ -75,7 +75,7 @@ suite('Async', () => { // Cancelling an async cancelable promise is just the same as a sync cancellable promise. test('CancelablePromise execution order (async)', function () { - const order = []; + const order: string[] = []; const cancellablePromise = async.createCancelablePromise(token => { order.push('in callback'); diff --git a/src/vs/code/electron-main/windows.ts b/src/vs/code/electron-main/windows.ts index 66189159370..1b954752d0d 100644 --- a/src/vs/code/electron-main/windows.ts +++ b/src/vs/code/electron-main/windows.ts @@ -830,7 +830,7 @@ export class WindowsManager implements IWindowsMainService { } private doExtractPathsFromAPI(openConfig: IOpenConfiguration): IPathToOpen[] { - const pathsToOpen = []; + const pathsToOpen: IPathToOpen[] = []; const cli = openConfig.cli; let parseOptions: IPathParseOptions = { gotoLineMode: cli && cli.goto, forceOpenWorkspaceAsFile: openConfig.forceOpenWorkspaceAsFile }; for (const pathToOpen of openConfig.urisToOpen) { @@ -868,7 +868,7 @@ export class WindowsManager implements IWindowsMainService { } private doExtractPathsFromCLI(cli: ParsedArgs): IPath[] { - const pathsToOpen = []; + const pathsToOpen: IPathToOpen[] = []; const parseOptions: IPathParseOptions = { ignoreFileNotFound: true, gotoLineMode: cli.goto }; // folder uris diff --git a/src/vs/editor/contrib/colorPicker/colorDetector.ts b/src/vs/editor/contrib/colorPicker/colorDetector.ts index 9b08ce87aac..a4628ec508e 100644 --- a/src/vs/editor/contrib/colorPicker/colorDetector.ts +++ b/src/vs/editor/contrib/colorPicker/colorDetector.ts @@ -30,8 +30,8 @@ export class ColorDetector implements IEditorContribution { private _globalToDispose: IDisposable[] = []; private _localToDispose: IDisposable[] = []; - private _computePromise: CancelablePromise; - private _timeoutTimer: TimeoutTimer; + private _computePromise: CancelablePromise | null; + private _timeoutTimer: TimeoutTimer | null; private _decorationsIds: string[] = []; private _colorDatas = new Map(); @@ -108,11 +108,8 @@ export class ColorDetector implements IEditorContribution { return; } const model = this._editor.getModel(); - // if (!model) { - // return; - // } - if (!ColorProviderRegistry.has(model)) { + if (!model || !ColorProviderRegistry.has(model)) { return; } @@ -129,7 +126,13 @@ export class ColorDetector implements IEditorContribution { } private beginCompute(): void { - this._computePromise = createCancelablePromise(token => getColors(this._editor.getModel(), token)); + this._computePromise = createCancelablePromise(token => { + const model = this._editor.getModel(); + if (!model) { + return Promise.resolve([]); + } + return getColors(model, token); + }); this._computePromise.then((colorInfos) => { this.updateDecorations(colorInfos); this.updateColorDecorators(colorInfos); @@ -226,7 +229,12 @@ export class ColorDetector implements IEditorContribution { } getColorData(position: Position): IColorData | null { - const decorations = this._editor.getModel() + const model = this._editor.getModel(); + if (!model) { + return null; + } + + const decorations = model .getDecorationsInRange(Range.fromPositions(position, position)) .filter(d => this._colorDatas.has(d.id)); diff --git a/src/vs/editor/contrib/goToDefinition/goToDefinitionMouse.ts b/src/vs/editor/contrib/goToDefinition/goToDefinitionMouse.ts index eec514c2b15..5a85fbe403f 100644 --- a/src/vs/editor/contrib/goToDefinition/goToDefinitionMouse.ts +++ b/src/vs/editor/contrib/goToDefinition/goToDefinitionMouse.ts @@ -23,7 +23,7 @@ import { editorActiveLinkForeground } from 'vs/platform/theme/common/colorRegist import { EditorState, CodeEditorStateFlag } from 'vs/editor/browser/core/editorState'; import { DefinitionAction, DefinitionActionConfig } from './goToDefinitionCommands'; import { ClickLinkGesture, ClickLinkMouseEvent, ClickLinkKeyboardEvent } from 'vs/editor/contrib/goToDefinition/clickLinkGesture'; -import { IWordAtPosition, IModelDeltaDecoration, ITextModel } from 'vs/editor/common/model'; +import { IWordAtPosition, IModelDeltaDecoration, ITextModel, IFoundBracket } from 'vs/editor/common/model'; import { Position } from 'vs/editor/common/core/position'; class GotoDefinitionWithMouseEditorContribution implements editorCommon.IEditorContribution { @@ -205,7 +205,7 @@ class GotoDefinitionWithMouseEditorContribution implements editorCommon.IEditorC private getPreviewRangeBasedOnBrackets(textEditorModel: ITextModel, startLineNumber: number) { const maxLineNumber = Math.min(textEditorModel.getLineCount(), startLineNumber + GotoDefinitionWithMouseEditorContribution.MAX_SOURCE_PREVIEW_LINES); - const brackets = []; + const brackets: IFoundBracket[] = []; let ignoreFirstEmpty = true; let currentBracket = textEditorModel.findNextBracket(new Position(startLineNumber, 1)); diff --git a/src/vs/platform/diagnostics/electron-main/diagnosticsService.ts b/src/vs/platform/diagnostics/electron-main/diagnosticsService.ts index e16dc49b2e2..94cba280d74 100644 --- a/src/vs/platform/diagnostics/electron-main/diagnosticsService.ts +++ b/src/vs/platform/diagnostics/electron-main/diagnosticsService.ts @@ -85,10 +85,10 @@ export class DiagnosticsService implements IDiagnosticsService { getPerformanceInfo(info: IMainProcessInfo): Promise { return listProcesses(info.mainPID).then(rootProcess => { - const workspaceInfoMessages = []; + const workspaceInfoMessages: string[] = []; // Workspace Stats - const workspaceStatPromises = []; + const workspaceStatPromises: Promise[] = []; if (info.windows.some(window => window.folderURIs && window.folderURIs.length > 0)) { info.windows.forEach(window => { if (window.folderURIs.length === 0) { @@ -173,7 +173,7 @@ export class DiagnosticsService implements IDiagnosticsService { console.log(this.formatProcessList(info, rootProcess)); // Workspace Stats - const workspaceStatPromises = []; + const workspaceStatPromises: Promise[] = []; if (info.windows.some(window => window.folderURIs && window.folderURIs.length > 0)) { console.log(''); console.log('Workspace Stats: '); diff --git a/src/vs/platform/driver/electron-browser/driver.ts b/src/vs/platform/driver/electron-browser/driver.ts index f09c8b4b9ec..7847ac043a0 100644 --- a/src/vs/platform/driver/electron-browser/driver.ts +++ b/src/vs/platform/driver/electron-browser/driver.ts @@ -22,7 +22,7 @@ function serializeElement(element: Element, recursive: boolean): IElement { attributes[attr.name] = attr.value; } - const children = []; + const children: IElement[] = []; if (recursive) { for (let i = 0; i < element.children.length; i++) { @@ -119,7 +119,7 @@ class WindowDriver implements IWindowDriver { const element = document.querySelector(selector); if (element !== document.activeElement) { - const chain = []; + const chain: string[] = []; let el = document.activeElement; while (el) { diff --git a/src/vs/platform/driver/electron-main/driver.ts b/src/vs/platform/driver/electron-main/driver.ts index f308e1471f4..ff392b24669 100644 --- a/src/vs/platform/driver/electron-main/driver.ts +++ b/src/vs/platform/driver/electron-main/driver.ts @@ -109,7 +109,7 @@ export class Driver implements IDriver, IWindowDriverRegistry { const resolvedKeybinding = new USLayoutResolvedKeybinding(noModifiedKeybinding, OS); const keyCode = resolvedKeybinding.getElectronAccelerator(); - const modifiers = []; + const modifiers: string[] = []; if (keybinding.ctrlKey) { modifiers.push('ctrl'); diff --git a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts index 6930c70087b..240c532f9a2 100644 --- a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts +++ b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts @@ -628,8 +628,8 @@ export class ExtensionGalleryService implements IExtensionGalleryService { .withFilter(FilterType.ExtensionName, ...extensionNames); return this.queryGallery(query, token).then(result => { - const dependencies = []; - const ids = []; + const dependencies: IGalleryExtension[] = []; + const ids: string[] = []; for (let index = 0; index < result.galleryExtensions.length; index++) { const rawExtension = result.galleryExtensions[index]; diff --git a/src/vs/platform/extensionManagement/node/extensionManagementService.ts b/src/vs/platform/extensionManagement/node/extensionManagementService.ts index 42dfd9148b2..1c60d7b0334 100644 --- a/src/vs/platform/extensionManagement/node/extensionManagementService.ts +++ b/src/vs/platform/extensionManagement/node/extensionManagementService.ts @@ -655,7 +655,7 @@ export class ExtensionManagementService extends Disposable implements IExtension return []; } const packedExtensions = installed.filter(i => extension.manifest.extensionPack.some(id => areSameExtensions({ id }, i.galleryIdentifier))); - const packOfPackedExtensions = []; + const packOfPackedExtensions: ILocalExtension[] = []; for (const packedExtension of packedExtensions) { packOfPackedExtensions.push(...this.getAllPackExtensionsToUninstall(packedExtension, installed, checked)); } @@ -827,7 +827,7 @@ export class ExtensionManagementService extends Disposable implements IExtension private filterUninstalled(...ids: string[]): Promise { return this.withUninstalledExtensions(allUninstalled => { - const uninstalled = []; + const uninstalled: string[] = []; for (const id of ids) { if (!!allUninstalled[id]) { uninstalled.push(id); diff --git a/src/vs/platform/request/node/requestService.ts b/src/vs/platform/request/node/requestService.ts index fe394ac1555..d8e9bfdde46 100644 --- a/src/vs/platform/request/node/requestService.ts +++ b/src/vs/platform/request/node/requestService.ts @@ -20,9 +20,9 @@ export class RequestService implements IRequestService { _serviceBrand: any; - private proxyUrl: string; + private proxyUrl?: string; private strictSSL: boolean; - private authorization: string; + private authorization?: string; private disposables: IDisposable[] = []; constructor( @@ -35,7 +35,7 @@ export class RequestService implements IRequestService { private configure(config: IHTTPConfiguration) { this.proxyUrl = config.http && config.http.proxy; - this.strictSSL = config.http && config.http.proxyStrictSSL; + this.strictSSL = !!(config.http && config.http.proxyStrictSSL); this.authorization = config.http && config.http.proxyAuthorization; } @@ -43,7 +43,7 @@ export class RequestService implements IRequestService { this.logService.trace('RequestService#request', options.url); const { proxyUrl, strictSSL } = this; - const agentPromise = options.agent ? Promise.resolve(options.agent) : Promise.resolve(getProxyAgent(options.url, { proxyUrl, strictSSL })); + const agentPromise = options.agent ? Promise.resolve(options.agent) : Promise.resolve(getProxyAgent(options.url || '', { proxyUrl, strictSSL })); return agentPromise.then(agent => { options.agent = agent; diff --git a/src/vs/platform/theme/test/electron-browser/colorRegistry.releaseTest.ts b/src/vs/platform/theme/test/electron-browser/colorRegistry.releaseTest.ts index 8be585ab3a7..b9bcc8db83e 100644 --- a/src/vs/platform/theme/test/electron-browser/colorRegistry.releaseTest.ts +++ b/src/vs/platform/theme/test/electron-browser/colorRegistry.releaseTest.ts @@ -35,7 +35,7 @@ interface DescriptionDiff { export const forceColorLoad = [editorMarkerNavigationError, overviewRulerModifiedForeground, STATUS_BAR_DEBUGGING_BACKGROUND, debugExceptionWidgetBackground, debugToolBarBackground, buttonBackground, embeddedEditorBackground]; -export const experimental = []; // 'settings.modifiedItemForeground', 'editorUnnecessary.foreground' ]; +export const experimental: string[] = []; // 'settings.modifiedItemForeground', 'editorUnnecessary.foreground' ]; suite('Color Registry', function () { diff --git a/src/vs/workbench/api/browser/viewsExtensionPoint.ts b/src/vs/workbench/api/browser/viewsExtensionPoint.ts index 3ddad042b08..296f5b46f77 100644 --- a/src/vs/workbench/api/browser/viewsExtensionPoint.ts +++ b/src/vs/workbench/api/browser/viewsExtensionPoint.ts @@ -111,7 +111,7 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution { container = this.viewContainersRegistry.get(EXPLORER); } const registeredViews = ViewsRegistry.getViews(container); - const viewIds = []; + const viewIds: string[] = []; const viewDescriptors = coalesce(entry.value.map((item, index) => { // validate if (viewIds.indexOf(item.id) !== -1) { diff --git a/src/vs/workbench/api/electron-browser/mainThreadTreeViews.ts b/src/vs/workbench/api/electron-browser/mainThreadTreeViews.ts index ef702f42e53..50a345b39bb 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadTreeViews.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadTreeViews.ts @@ -133,7 +133,7 @@ class TreeViewDataProvider implements ITreeViewDataProvider { } private postGetChildren(elements: ITreeItem[]): ITreeItem[] { - const result = []; + const result: ITreeItem[] = []; if (elements) { for (const element of elements) { this.itemsMap.set(element.handle, element); diff --git a/src/vs/workbench/browser/parts/titlebar/menubarControl.ts b/src/vs/workbench/browser/parts/titlebar/menubarControl.ts index 492d1ef3b3f..41b6122cbc9 100644 --- a/src/vs/workbench/browser/parts/titlebar/menubarControl.ts +++ b/src/vs/workbench/browser/parts/titlebar/menubarControl.ts @@ -694,7 +694,7 @@ export class MenubarControl extends Disposable { this.insertActionsBefore(action, target); if (action instanceof SubmenuItemAction) { const submenu = this.menuService.createMenu(action.item.submenu, this.contextKeyService); - const submenuActions = []; + const submenuActions: SubmenuAction[] = []; updateActions(submenu, submenuActions); target.push(new SubmenuAction(action.label, submenuActions)); } else { diff --git a/src/vs/workbench/browser/parts/views/customView.ts b/src/vs/workbench/browser/parts/views/customView.ts index b2c0e44e3ee..1634b525406 100644 --- a/src/vs/workbench/browser/parts/views/customView.ts +++ b/src/vs/workbench/browser/parts/views/customView.ts @@ -351,7 +351,7 @@ export class CustomTreeViewer extends Disposable implements ITreeViewer { getOptimalWidth(): number { if (this.tree) { const parentNode = this.tree.getHTMLElement(); - const childNodes = [].slice.call(parentNode.querySelectorAll('.outline-item-label > a')); + const childNodes = ([] as Element[]).slice.call(parentNode.querySelectorAll('.outline-item-label > a')); return DOM.getLargestChildWidth(parentNode, childNodes); } return 0; diff --git a/src/vs/workbench/parts/comments/common/commentModel.ts b/src/vs/workbench/parts/comments/common/commentModel.ts index 4c96d404f98..64d0efd2cfa 100644 --- a/src/vs/workbench/parts/comments/common/commentModel.ts +++ b/src/vs/workbench/parts/comments/common/commentModel.ts @@ -127,7 +127,7 @@ export class CommentsModel { } private groupByResource(commentThreads: CommentThread[]): ResourceWithCommentThreads[] { - const resourceCommentThreads = [] as ResourceWithCommentThreads[]; + const resourceCommentThreads: ResourceWithCommentThreads[] = []; const commentThreadsByResource = new Map(); for (const group of groupBy(commentThreads, CommentsModel._compareURIs)) { commentThreadsByResource.set(group[0].resource, new ResourceWithCommentThreads(URI.parse(group[0].resource), group)); diff --git a/src/vs/workbench/parts/comments/electron-browser/commentService.ts b/src/vs/workbench/parts/comments/electron-browser/commentService.ts index 3eece77e45c..e802d811794 100644 --- a/src/vs/workbench/parts/comments/electron-browser/commentService.ts +++ b/src/vs/workbench/parts/comments/electron-browser/commentService.ts @@ -135,7 +135,7 @@ export class CommentService extends Disposable implements ICommentService { } getComments(resource: URI): Promise { - const result = []; + const result: Promise[] = []; for (const handle of keys(this._commentProviders)) { const provider = this._commentProviders.get(handle); if ((provider).provideDocumentComments) { diff --git a/src/vs/workbench/parts/comments/electron-browser/commentsEditorContribution.ts b/src/vs/workbench/parts/comments/electron-browser/commentsEditorContribution.ts index 8027233c499..dc21abb9fff 100644 --- a/src/vs/workbench/parts/comments/electron-browser/commentsEditorContribution.ts +++ b/src/vs/workbench/parts/comments/electron-browser/commentsEditorContribution.ts @@ -512,7 +512,7 @@ export class ReviewController implements IEditorContribution { }); }); - const commentingRanges = []; + const commentingRanges: IRange[] = []; this._commentInfos.forEach(info => { commentingRanges.push(...info.commentingRanges); }); diff --git a/src/vs/workbench/parts/debug/browser/breakpointsView.ts b/src/vs/workbench/parts/debug/browser/breakpointsView.ts index 3f470d812b4..3c648070600 100644 --- a/src/vs/workbench/parts/debug/browser/breakpointsView.ts +++ b/src/vs/workbench/parts/debug/browser/breakpointsView.ts @@ -619,7 +619,7 @@ export function getBreakpointMessageAndClassName(debugService: IDebugService, br } if (breakpoint.logMessage || breakpoint.condition || breakpoint.hitCondition) { - const messages = []; + const messages: string[] = []; if (breakpoint.logMessage) { if (session && !session.capabilities.supportsLogPoints) { return { diff --git a/src/vs/workbench/parts/experiments/test/electron-browser/experimentService.test.ts b/src/vs/workbench/parts/experiments/test/electron-browser/experimentService.test.ts index 55472aabcf8..d0bd3cb2f9f 100644 --- a/src/vs/workbench/parts/experiments/test/electron-browser/experimentService.test.ts +++ b/src/vs/workbench/parts/experiments/test/electron-browser/experimentService.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; -import { ExperimentService, ExperimentActionType, ExperimentState } from 'vs/workbench/parts/experiments/node/experimentService'; +import { ExperimentService, ExperimentActionType, ExperimentState, IExperiment } from 'vs/workbench/parts/experiments/node/experimentService'; import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { TestLifecycleService } from 'vs/workbench/test/workbenchTestServices'; @@ -122,7 +122,7 @@ suite('Experiment Service', () => { }; testObject = instantiationService.createInstance(TestExperimentService); - const tests = []; + const tests: TPromise[] = []; tests.push(testObject.getExperimentById('experiment1')); tests.push(testObject.getExperimentById('experiment2')); tests.push(testObject.getExperimentById('experiment3')); @@ -546,7 +546,7 @@ suite('Experiment Service', () => { testObject = instantiationService.createInstance(TestExperimentService); - const tests = []; + const tests: TPromise[] = []; tests.push(testObject.getExperimentById('experiment1')); tests.push(testObject.getExperimentById('experiment2')); tests.push(testObject.getExperimentById('experiment3')); diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts index 31ba8d61884..e3bc078e9ef 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts @@ -319,7 +319,7 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe const regEx = new RegExp(EXTENSION_IDENTIFIER_PATTERN); - const invalidExtensions = []; + const invalidExtensions: string[] = []; let message = ''; const regexFilter = (ids: string[]) => { diff --git a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts index fac339e0e34..9ca44f3c798 100644 --- a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts +++ b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts @@ -615,7 +615,7 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService, } private syncWithGallery(): Promise { - const ids = [], names = []; + const ids: string[] = [], names: string[] = []; for (const installed of this.installed) { if (installed.type === LocalExtensionType.User) { if (installed.uuid) { @@ -626,7 +626,7 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService, } } - const promises = []; + const promises: Promise>[] = []; if (ids.length) { promises.push(this.queryGallery({ ids, pageSize: ids.length })); } diff --git a/src/vs/workbench/parts/files/electron-browser/views/explorerView.ts b/src/vs/workbench/parts/files/electron-browser/views/explorerView.ts index e3bffa51f9a..099168e9c8d 100644 --- a/src/vs/workbench/parts/files/electron-browser/views/explorerView.ts +++ b/src/vs/workbench/parts/files/electron-browser/views/explorerView.ts @@ -473,7 +473,7 @@ export class ExplorerView extends TreeViewsViewletPanel implements IExplorerView public getOptimalWidth(): number { const parentNode = this.explorerViewer.getHTMLElement(); - const childNodes = [].slice.call(parentNode.querySelectorAll('.explorer-item .label-name')); // select all file labels + const childNodes = ([] as Element[]).slice.call(parentNode.querySelectorAll('.explorer-item .label-name')); // select all file labels return DOM.getLargestChildWidth(parentNode, childNodes); } diff --git a/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts b/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts index 021e1fb525d..01b06015935 100644 --- a/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts +++ b/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts @@ -787,7 +787,7 @@ class ActionsColumn extends Column { render(keybindingItemEntry: IKeybindingItemEntry): void { this.actionBar.clear(); - const actions = []; + const actions: IAction[] = []; if (keybindingItemEntry.keybindingItem.keybinding) { actions.push(this.createEditAction(keybindingItemEntry)); } else { diff --git a/src/vs/workbench/parts/preferences/browser/settingsTree.ts b/src/vs/workbench/parts/preferences/browser/settingsTree.ts index 6de41e6defb..5224b1cd0a8 100644 --- a/src/vs/workbench/parts/preferences/browser/settingsTree.ts +++ b/src/vs/workbench/parts/preferences/browser/settingsTree.ts @@ -598,7 +598,7 @@ export class SettingsRenderer implements ITreeRenderer { private renderGroupTitleTemplate(container: HTMLElement): IGroupTitleTemplate { DOM.addClass(container, 'group-title'); - const toDispose = []; + const toDispose: IDisposable[] = []; const template: IGroupTitleTemplate = { parent: container, toDispose @@ -624,7 +624,7 @@ export class SettingsRenderer implements ITreeRenderer { const deprecationWarningElement = DOM.append(container, $('.setting-item-deprecation-message')); - const toDispose = []; + const toDispose: IDisposable[] = []; const toolbarContainer = DOM.append(container, $('.setting-toolbar-container')); const toolbar = this.renderSettingToolbar(toolbarContainer); @@ -775,7 +775,7 @@ export class SettingsRenderer implements ITreeRenderer { const deprecationWarningElement = DOM.append(container, $('.setting-item-deprecation-message')); - const toDispose = []; + const toDispose: IDisposable[] = []; const checkbox = new Checkbox({ actionClassName: 'setting-value-checkbox', isChecked: true, title: '', inputActiveOptionBorder: null }); controlElement.appendChild(checkbox.domNode); toDispose.push(checkbox); @@ -966,7 +966,7 @@ export class SettingsRenderer implements ITreeRenderer { } private renderNewExtensionsTemplate(container: HTMLElement): ISettingNewExtensionsTemplate { - const toDispose = []; + const toDispose: IDisposable[] = []; container.classList.add('setting-item-new-extensions'); diff --git a/src/vs/workbench/parts/preferences/browser/settingsTreeModels.ts b/src/vs/workbench/parts/preferences/browser/settingsTreeModels.ts index a449db5aa11..c48c4e88020 100644 --- a/src/vs/workbench/parts/preferences/browser/settingsTreeModels.ts +++ b/src/vs/workbench/parts/preferences/browser/settingsTreeModels.ts @@ -137,7 +137,7 @@ export class SettingsTreeSettingElement extends SettingsTreeElement { const { isConfigured, inspected, targetSelector } = inspectResult; const displayValue = isConfigured ? inspected[targetSelector] : inspected.default; - const overriddenScopeList = []; + const overriddenScopeList: string[] = []; if (targetSelector === 'user' && typeof inspected.workspace !== 'undefined') { overriddenScopeList.push(localize('workspace', "Workspace")); } @@ -281,7 +281,7 @@ export class SettingsTreeModel { element.parent = parent; element.level = this.getDepth(element); - const children = []; + const children: SettingsTreeGroupChild[] = []; if (tocEntry.settings) { const settingChildren = tocEntry.settings.map(s => this.createSettingsTreeSettingElement(s, element)) .filter(el => el.setting.deprecationMessage ? el.isConfigured : true); diff --git a/src/vs/workbench/parts/preferences/electron-browser/settingsEditor2.ts b/src/vs/workbench/parts/preferences/electron-browser/settingsEditor2.ts index a5abd5e68ad..8a715332f87 100644 --- a/src/vs/workbench/parts/preferences/electron-browser/settingsEditor2.ts +++ b/src/vs/workbench/parts/preferences/electron-browser/settingsEditor2.ts @@ -898,7 +898,7 @@ export class SettingsEditor2 extends BaseEditor { // Warn for settings not included in layout if (settingsResult.leftoverSettings.size && !this.hasWarnedMissingSettings) { - const settingKeyList = []; + const settingKeyList: string[] = []; settingsResult.leftoverSettings.forEach(s => { settingKeyList.push(s.key); }); diff --git a/src/vs/workbench/parts/search/browser/openAnythingHandler.ts b/src/vs/workbench/parts/search/browser/openAnythingHandler.ts index a7c98574b4c..757fe864db8 100644 --- a/src/vs/workbench/parts/search/browser/openAnythingHandler.ts +++ b/src/vs/workbench/parts/search/browser/openAnythingHandler.ts @@ -121,7 +121,7 @@ export class OpenAnythingHandler extends QuickOpenHandler { } // Combine results. - const mergedResults = [].concat(...results.map(r => r.entries)); + const mergedResults: QuickOpenEntry[] = [].concat(...results.map(r => r.entries)); // Sort const compare = (elementA: QuickOpenEntry, elementB: QuickOpenEntry) => compareItemsByScore(elementA, elementB, query, true, QuickOpenItemAccessor, this.scorerCache); diff --git a/src/vs/workbench/parts/search/browser/replaceService.ts b/src/vs/workbench/parts/search/browser/replaceService.ts index 92aa7ab0116..54ff7977da3 100644 --- a/src/vs/workbench/parts/search/browser/replaceService.ts +++ b/src/vs/workbench/parts/search/browser/replaceService.ts @@ -18,7 +18,7 @@ import { IProgressRunner } from 'vs/platform/progress/common/progress'; import { ITextModelService, ITextModelContentProvider } from 'vs/editor/common/services/resolverService'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { ScrollType } from 'vs/editor/common/editorCommon'; -import { ITextModel } from 'vs/editor/common/model'; +import { ITextModel, IIdentifiedSingleEditOperation } from 'vs/editor/common/model'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ResourceTextEdit } from 'vs/editor/common/modes'; import { createTextBufferFactoryFromSnapshot } from 'vs/editor/common/model/textModel'; @@ -164,7 +164,7 @@ export class ReplaceService implements IReplaceService { private applyEditsToPreview(fileMatch: FileMatch, replaceModel: ITextModel): void { const resourceEdits = this.createEdits(fileMatch, replaceModel.uri); - const modelEdits = []; + const modelEdits: IIdentifiedSingleEditOperation[] = []; for (const resourceEdit of resourceEdits) { for (const edit of resourceEdit.edits) { const range = Range.lift(edit.range); diff --git a/src/vs/workbench/parts/terminal/browser/terminalTab.ts b/src/vs/workbench/parts/terminal/browser/terminalTab.ts index f3a0ebc8e67..48e89fa8845 100644 --- a/src/vs/workbench/parts/terminal/browser/terminalTab.ts +++ b/src/vs/workbench/parts/terminal/browser/terminalTab.ts @@ -61,7 +61,7 @@ class SplitPaneContainer { } // Get sizes - const sizes = []; + const sizes: number[] = []; for (let i = 0; i < this._splitView.length; i++) { sizes.push(this._splitView.getViewSize(i)); } diff --git a/src/vs/workbench/services/configuration/common/configurationModels.ts b/src/vs/workbench/services/configuration/common/configurationModels.ts index f5fbcc43d26..e52a3083e50 100644 --- a/src/vs/workbench/services/configuration/common/configurationModels.ts +++ b/src/vs/workbench/services/configuration/common/configurationModels.ts @@ -208,7 +208,7 @@ export class Configuration extends BaseConfiguration { } compare(other: Configuration): string[] { - const result = []; + const result: string[] = []; for (const key of this.allKeys()) { if (!equals(this.getValue(key), other.getValue(key)) || (this._workspace && this._workspace.folders.some(folder => !equals(this.getValue(key, { resource: folder.uri }), other.getValue(key, { resource: folder.uri }))))) { diff --git a/src/vs/workbench/services/files/node/watcher/unix/chokidarWatcherService.ts b/src/vs/workbench/services/files/node/watcher/unix/chokidarWatcherService.ts index 4e907ad9d5d..3fdca226618 100644 --- a/src/vs/workbench/services/files/node/watcher/unix/chokidarWatcherService.ts +++ b/src/vs/workbench/services/files/node/watcher/unix/chokidarWatcherService.ts @@ -68,7 +68,7 @@ export class ChokidarWatcherService implements IWatcherService { public setRoots(requests: IWatcherRequest[]): TPromise { const watchers = Object.create(null); - const newRequests = []; + const newRequests: string[] = []; const requestsByBasePath = normalizeRoots(requests); diff --git a/src/vs/workbench/services/keybinding/common/keybindingEditing.ts b/src/vs/workbench/services/keybinding/common/keybindingEditing.ts index 374c8b468f5..dbbf13c1a93 100644 --- a/src/vs/workbench/services/keybinding/common/keybindingEditing.ts +++ b/src/vs/workbench/services/keybinding/common/keybindingEditing.ts @@ -169,7 +169,7 @@ export class KeybindingsEditingService extends Disposable implements IKeybinding } private findUnassignedDefaultKeybindingEntryIndex(keybindingItem: ResolvedKeybindingItem, userKeybindingEntries: IUserFriendlyKeybinding[]): number[] { - const indices = []; + const indices: number[] = []; for (let index = 0; index < userKeybindingEntries.length; index++) { if (userKeybindingEntries[index].command === `-${keybindingItem.command}`) { indices.push(index); diff --git a/src/vs/workbench/services/preferences/common/keybindingsEditorModel.ts b/src/vs/workbench/services/preferences/common/keybindingsEditorModel.ts index 066627f67f2..06ee1fb614c 100644 --- a/src/vs/workbench/services/preferences/common/keybindingsEditorModel.ts +++ b/src/vs/workbench/services/preferences/common/keybindingsEditorModel.ts @@ -157,7 +157,7 @@ export class KeybindingsEditorModel extends EditorModel { } private splitKeybindingWords(wordsSeparatedBySpaces: string[]): string[] { - const result = []; + const result: string[] = []; for (const word of wordsSeparatedBySpaces) { result.push(...word.split('+').filter(w => !!w)); } @@ -314,7 +314,7 @@ class KeybindingItemMatches { let firstPartMatch: KeybindingMatch = {}; let chordPartMatch: KeybindingMatch = {}; - const matchedWords = []; + const matchedWords: number[] = []; let firstPartMatchedWords: number[] = []; let chordPartMatchedWords: number[] = []; let matchFirstPart = true; diff --git a/src/vs/workbench/services/preferences/common/preferencesModels.ts b/src/vs/workbench/services/preferences/common/preferencesModels.ts index 65c773bc29c..ccb32b3bafc 100644 --- a/src/vs/workbench/services/preferences/common/preferencesModels.ts +++ b/src/vs/workbench/services/preferences/common/preferencesModels.ts @@ -587,7 +587,7 @@ export class DefaultSettings extends Disposable { } private removeEmptySettingsGroups(settingsGroups: ISettingsGroup[]): ISettingsGroup[] { - const result = []; + const result: ISettingsGroup[] = []; for (const settingsGroup of settingsGroups) { settingsGroup.sections = settingsGroup.sections.filter(section => section.settings.length > 0); if (settingsGroup.sections.length) { diff --git a/src/vs/workbench/services/search/node/fileSearch.ts b/src/vs/workbench/services/search/node/fileSearch.ts index d3c2f1cc84b..9f27bbcd579 100644 --- a/src/vs/workbench/services/search/node/fileSearch.ts +++ b/src/vs/workbench/services/search/node/fileSearch.ts @@ -741,7 +741,7 @@ class AbsoluteAndRelativeParsedExpression { } public getPathTerms(): string[] { - const pathTerms = []; + const pathTerms: string[] = []; if (this.absoluteParsedExpr) { pathTerms.push(...glob.getPathTerms(this.absoluteParsedExpr)); } diff --git a/src/vs/workbench/services/search/node/textSearchManager.ts b/src/vs/workbench/services/search/node/textSearchManager.ts index 828819afaad..5b49e34d08b 100644 --- a/src/vs/workbench/services/search/node/textSearchManager.ts +++ b/src/vs/workbench/services/search/node/textSearchManager.ts @@ -78,7 +78,7 @@ export class TextSearchManager { private searchInFolder(folderQuery: IFolderQuery, onResult: (result: vscode.TextSearchResult) => void, token: CancellationToken): TPromise { const queryTester = new QueryGlobTester(this.config, folderQuery); - const testingPs = []; + const testingPs: TPromise[] = []; const progress = { report: (result: vscode.TextSearchResult) => { const hasSibling = folderQuery.folder.scheme === 'file' && glob.hasSiblingPromiseFn(() => {