Use array.find in more places of re-implementing it with for loops

This commit is contained in:
Matt Bierner
2019-10-07 14:35:04 -07:00
parent d1b81e23db
commit 4e2caaa646
14 changed files with 42 additions and 123 deletions

View File

@@ -20,7 +20,7 @@ import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
import { MarkerNavigationWidget } from './gotoErrorWidget'; import { MarkerNavigationWidget } from './gotoErrorWidget';
import { compare } from 'vs/base/common/strings'; import { compare } from 'vs/base/common/strings';
import { binarySearch } from 'vs/base/common/arrays'; import { binarySearch, find } from 'vs/base/common/arrays';
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
import { onUnexpectedError } from 'vs/base/common/errors'; import { onUnexpectedError } from 'vs/base/common/errors';
import { MenuRegistry, MenuId } from 'vs/platform/actions/common/actions'; import { MenuRegistry, MenuId } from 'vs/platform/actions/common/actions';
@@ -173,12 +173,7 @@ class MarkerModel {
} }
public findMarkerAtPosition(pos: Position): IMarker | undefined { public findMarkerAtPosition(pos: Position): IMarker | undefined {
for (const marker of this._markers) { return find(this._markers, marker => Range.containsPosition(marker, pos));
if (Range.containsPosition(marker, pos)) {
return marker;
}
}
return undefined;
} }
public get total() { public get total() {

View File

@@ -8,6 +8,7 @@ import { StandardTokenType } from 'vs/editor/common/modes';
import { CharacterPairSupport } from 'vs/editor/common/modes/supports/characterPair'; import { CharacterPairSupport } from 'vs/editor/common/modes/supports/characterPair';
import { TokenText, createFakeScopedLineTokens } from 'vs/editor/test/common/modesTestUtils'; import { TokenText, createFakeScopedLineTokens } from 'vs/editor/test/common/modesTestUtils';
import { StandardAutoClosingPairConditional } from 'vs/editor/common/modes/languageConfiguration'; import { StandardAutoClosingPairConditional } from 'vs/editor/common/modes/languageConfiguration';
import { find } from 'vs/base/common/arrays';
suite('CharacterPairSupport', () => { suite('CharacterPairSupport', () => {
@@ -53,13 +54,8 @@ suite('CharacterPairSupport', () => {
assert.deepEqual(characaterPairSupport.getSurroundingPairs(), []); assert.deepEqual(characaterPairSupport.getSurroundingPairs(), []);
}); });
function findAutoClosingPair(characterPairSupport: CharacterPairSupport, character: string): StandardAutoClosingPairConditional | null { function findAutoClosingPair(characterPairSupport: CharacterPairSupport, character: string): StandardAutoClosingPairConditional | undefined {
for (const autoClosingPair of characterPairSupport.getAutoClosingPairs()) { return find(characterPairSupport.getAutoClosingPairs(), autoClosingPair => autoClosingPair.open === character);
if (autoClosingPair.open === character) {
return autoClosingPair;
}
}
return null;
} }
function testShouldAutoClose(characterPairSupport: CharacterPairSupport, line: TokenText[], character: string, column: number): boolean { function testShouldAutoClose(characterPairSupport: CharacterPairSupport, line: TokenText[], character: string, column: number): boolean {

View File

@@ -21,19 +21,13 @@ import { isLinux, isWindows } from 'vs/base/common/platform';
import { DisposableStore } from 'vs/base/common/lifecycle'; import { DisposableStore } from 'vs/base/common/lifecycle';
import { isEqual } from 'vs/base/common/resources'; import { isEqual } from 'vs/base/common/resources';
import { VSBuffer, VSBufferReadable, toVSBufferReadableStream, VSBufferReadableStream, bufferToReadable, bufferToStream } from 'vs/base/common/buffer'; import { VSBuffer, VSBufferReadable, toVSBufferReadableStream, VSBufferReadableStream, bufferToReadable, bufferToStream } from 'vs/base/common/buffer';
import { find } from 'vs/base/common/arrays';
function getByName(root: IFileStat, name: string): IFileStat | null { function getByName(root: IFileStat, name: string): IFileStat | undefined {
if (root.children === undefined) { if (root.children === undefined) {
return null; return undefined;
} }
return find(root.children, child => child.name === name);
for (const child of root.children) {
if (child.name === name) {
return child;
}
}
return null;
} }
function toLineByLineReadable(content: string): VSBufferReadable { function toLineByLineReadable(content: string): VSBufferReadable {

View File

@@ -8,6 +8,7 @@ import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor'; import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor';
import { IConstructorSignature0, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IConstructorSignature0, IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { find } from 'vs/base/common/arrays';
export interface IEditorDescriptor { export interface IEditorDescriptor {
instantiate(instantiationService: IInstantiationService): BaseEditor; instantiate(instantiationService: IInstantiationService): BaseEditor;
@@ -140,13 +141,7 @@ class EditorRegistry implements IEditorRegistry {
} }
getEditorById(editorId: string): EditorDescriptor | undefined { getEditorById(editorId: string): EditorDescriptor | undefined {
for (const editor of this.editors) { return find(this.editors, editor => editor.getId() === editorId);
if (editor.getId() === editorId) {
return editor;
}
}
return undefined;
} }
getEditors(): readonly EditorDescriptor[] { getEditors(): readonly EditorDescriptor[] {

View File

@@ -16,6 +16,7 @@ import { GroupDirection, MergeGroupMode } from 'vs/workbench/services/editor/com
import { toDisposable } from 'vs/base/common/lifecycle'; import { toDisposable } from 'vs/base/common/lifecycle';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { RunOnceScheduler } from 'vs/base/common/async'; import { RunOnceScheduler } from 'vs/base/common/async';
import { find } from 'vs/base/common/arrays';
interface IDropOperation { interface IDropOperation {
splitDirection?: GroupDirection; splitDirection?: GroupDirection;
@@ -544,13 +545,7 @@ export class EditorDropTarget extends Themable {
private findTargetGroupView(child: HTMLElement): IEditorGroupView | undefined { private findTargetGroupView(child: HTMLElement): IEditorGroupView | undefined {
const groups = this.accessor.groups; const groups = this.accessor.groups;
for (const groupView of groups) { return find(groups, groupView => isAncestor(child, groupView.element));
if (isAncestor(child, groupView.element)) {
return groupView;
}
}
return undefined;
} }
private updateContainer(isDraggedOver: boolean): void { private updateContainer(isDraggedOver: boolean): void {

View File

@@ -27,7 +27,7 @@ import { INotificationService } from 'vs/platform/notification/common/notificati
import { IStorageService, StorageScope, IWorkspaceStorageChangeEvent } from 'vs/platform/storage/common/storage'; import { IStorageService, StorageScope, IWorkspaceStorageChangeEvent } from 'vs/platform/storage/common/storage';
import { Parts, IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; import { Parts, IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
import { coalesce } from 'vs/base/common/arrays'; import { coalesce, find } from 'vs/base/common/arrays';
import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; import { StandardMouseEvent } from 'vs/base/browser/mouseEvent';
import { ToggleStatusbarVisibilityAction } from 'vs/workbench/browser/actions/layoutActions'; import { ToggleStatusbarVisibilityAction } from 'vs/workbench/browser/actions/layoutActions';
import { Separator } from 'vs/base/browser/ui/actionbar/actionbar'; import { Separator } from 'vs/base/browser/ui/actionbar/actionbar';
@@ -176,13 +176,7 @@ class StatusbarViewModel extends Disposable {
} }
findEntry(container: HTMLElement): IStatusbarViewModelEntry | undefined { findEntry(container: HTMLElement): IStatusbarViewModelEntry | undefined {
for (const entry of this._entries) { return find(this._entries, entry => entry.container === container);
if (entry.container === container) {
return entry;
}
}
return undefined;
} }
getEntries(alignment: StatusbarAlignment): IStatusbarViewModelEntry[] { getEntries(alignment: StatusbarAlignment): IStatusbarViewModelEntry[] {

View File

@@ -12,6 +12,7 @@ import { Action } from 'vs/base/common/actions';
import { isErrorWithActions } from 'vs/base/common/errorsWithActions'; import { isErrorWithActions } from 'vs/base/common/errorsWithActions';
import { startsWith } from 'vs/base/common/strings'; import { startsWith } from 'vs/base/common/strings';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { find, equals } from 'vs/base/common/arrays';
export interface INotificationsModel { export interface INotificationsModel {
@@ -169,13 +170,7 @@ export class NotificationsModel extends Disposable implements INotificationsMode
} }
private findNotification(item: INotificationViewItem): INotificationViewItem | undefined { private findNotification(item: INotificationViewItem): INotificationViewItem | undefined {
for (const notification of this._notifications) { return find(this._notifications, notification => notification.equals(item));
if (notification.equals(item)) {
return notification;
}
}
return undefined;
} }
private createViewItem(notification: INotification): INotificationViewItem | null { private createViewItem(notification: INotification): INotificationViewItem | null {
@@ -641,17 +636,7 @@ export class NotificationViewItem extends Disposable implements INotificationVie
const primaryActions = (this._actions && this._actions.primary) || []; const primaryActions = (this._actions && this._actions.primary) || [];
const otherPrimaryActions = (other.actions && other.actions.primary) || []; const otherPrimaryActions = (other.actions && other.actions.primary) || [];
if (primaryActions.length !== otherPrimaryActions.length) { return equals(primaryActions, otherPrimaryActions, (a, b) => (a.id + a.label) === (b.id + b.label));
return false;
}
for (let i = 0; i < primaryActions.length; i++) {
if ((primaryActions[i].id + primaryActions[i].label) !== (otherPrimaryActions[i].id + otherPrimaryActions[i].label)) {
return false;
}
}
return true;
} }
} }

View File

@@ -12,6 +12,7 @@ import * as strings from 'vs/base/common/strings';
import { Range } from 'vs/editor/common/core/range'; import { Range } from 'vs/editor/common/core/range';
import { isWindows } from 'vs/base/common/platform'; import { isWindows } from 'vs/base/common/platform';
import { Schemas } from 'vs/base/common/network'; import { Schemas } from 'vs/base/common/network';
import { find } from 'vs/base/common/arrays';
export interface ICreateData { export interface ICreateData {
workspaceFolders: string[]; workspaceFolders: string[];
@@ -44,15 +45,9 @@ export class OutputLinkComputer {
}); });
} }
private getModel(uri: string): IMirrorModel | null { private getModel(uri: string): IMirrorModel | undefined {
const models = this.ctx.getMirrorModels(); const models = this.ctx.getMirrorModels();
for (const model of models) { return find(models, model => model.uri.toString() === uri);
if (model.uri.toString() === uri) {
return model;
}
}
return null;
} }
public computeLinks(uri: string): Promise<ILink[]> { public computeLinks(uri: string): Promise<ILink[]> {

View File

@@ -32,6 +32,7 @@ import { DefaultSettingsEditorModel, SettingsEditorModel, WorkspaceConfiguration
import { IMarkerService, IMarkerData, MarkerSeverity, MarkerTag } from 'vs/platform/markers/common/markers'; import { IMarkerService, IMarkerData, MarkerSeverity, MarkerTag } from 'vs/platform/markers/common/markers';
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { EditorOption } from 'vs/editor/common/config/editorOptions';
import { find } from 'vs/base/common/arrays';
export interface IPreferencesRenderer<T> extends IDisposable { export interface IPreferencesRenderer<T> extends IDisposable {
readonly preferencesModel: IPreferencesEditorModel<T>; readonly preferencesModel: IPreferencesEditorModel<T>;
@@ -321,12 +322,7 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR
const { key, overrideOf } = setting; const { key, overrideOf } = setting;
if (overrideOf) { if (overrideOf) {
const setting = this.getSetting(overrideOf); const setting = this.getSetting(overrideOf);
for (const override of setting!.overrides!) { return find(setting!.overrides!, override => override.key === key);
if (override.key === key) {
return override;
}
}
return undefined;
} }
const settingsGroups = this.filterResult ? this.filterResult.filteredGroups : this.preferencesModel.settingsGroups; const settingsGroups = this.filterResult ? this.filterResult.filteredGroups : this.preferencesModel.settingsGroups;
return this.getPreference(key, settingsGroups); return this.getPreference(key, settingsGroups);

View File

@@ -77,6 +77,7 @@ import { applyEdits } from 'vs/base/common/jsonEdit';
import { ITextEditor } from 'vs/workbench/common/editor'; import { ITextEditor } from 'vs/workbench/common/editor';
import { ITextEditorSelection } from 'vs/platform/editor/common/editor'; import { ITextEditorSelection } from 'vs/platform/editor/common/editor';
import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences';
import { find } from 'vs/base/common/arrays';
export namespace ConfigureTaskAction { export namespace ConfigureTaskAction {
export const ID = 'workbench.action.tasks.configureTaskRunner'; export const ID = 'workbench.action.tasks.configureTaskRunner';
@@ -515,12 +516,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
if (!values) { if (!values) {
return undefined; return undefined;
} }
for (const task of values) { return find(values, task => task.matches(key, compareId));
if (task.matches(key, compareId)) {
return task;
}
}
return undefined;
}); });
} }

View File

@@ -29,6 +29,7 @@ import { escapeNonWindowsPath } from 'vs/workbench/contrib/terminal/common/termi
import { isWindows, isMacintosh, OperatingSystem } from 'vs/base/common/platform'; import { isWindows, isMacintosh, OperatingSystem } from 'vs/base/common/platform';
import { basename } from 'vs/base/common/path'; import { basename } from 'vs/base/common/path';
import { IOpenFileRequest } from 'vs/platform/windows/common/windows'; import { IOpenFileRequest } from 'vs/platform/windows/common/windows';
import { find } from 'vs/base/common/arrays';
interface IExtHostReadyEntry { interface IExtHostReadyEntry {
promise: Promise<void>; promise: Promise<void>;
@@ -414,13 +415,8 @@ export class TerminalService implements ITerminalService {
instance.addDisposable(instance.onFocus(this._onActiveInstanceChanged.fire, this._onActiveInstanceChanged)); instance.addDisposable(instance.onFocus(this._onActiveInstanceChanged.fire, this._onActiveInstanceChanged));
} }
private _getTabForInstance(instance: ITerminalInstance): ITerminalTab | null { private _getTabForInstance(instance: ITerminalInstance): ITerminalTab | undefined {
for (const tab of this._terminalTabs) { return find(this._terminalTabs, tab => tab.terminalInstances.indexOf(instance) !== -1);
if (tab.terminalInstances.indexOf(instance) !== -1) {
return tab;
}
}
return null;
} }
public showPanel(focus?: boolean): Promise<void> { public showPanel(focus?: boolean): Promise<void> {

View File

@@ -6,6 +6,7 @@
import { ICredentialsService } from 'vs/platform/credentials/common/credentials'; import { ICredentialsService } from 'vs/platform/credentials/common/credentials';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
import { find } from 'vs/base/common/arrays';
export interface ICredentialsProvider { export interface ICredentialsProvider {
getPassword(service: string, account: string): Promise<string | null>; getPassword(service: string, account: string): Promise<string | null>;
@@ -14,7 +15,7 @@ export interface ICredentialsProvider {
deletePassword(service: string, account: string): Promise<boolean>; deletePassword(service: string, account: string): Promise<boolean>;
findPassword(service: string): Promise<string | null>; findPassword(service: string): Promise<string | null>;
findCredentials(service: string): Promise<Array<{ account: string, password: string }>>; findCredentials(service: string): Promise<Array<{ account: string, password: string; }>>;
} }
export class BrowserCredentialsService implements ICredentialsService { export class BrowserCredentialsService implements ICredentialsService {
@@ -47,7 +48,7 @@ export class BrowserCredentialsService implements ICredentialsService {
return this.credentialsProvider.findPassword(service); return this.credentialsProvider.findPassword(service);
} }
findCredentials(service: string): Promise<Array<{ account: string, password: string }>> { findCredentials(service: string): Promise<Array<{ account: string, password: string; }>> {
return this.credentialsProvider.findCredentials(service); return this.credentialsProvider.findCredentials(service);
} }
} }
@@ -88,17 +89,12 @@ class InMemoryCredentialsProvider implements ICredentialsProvider {
return credential ? credential.password : null; return credential ? credential.password : null;
} }
private doFindPassword(service: string, account?: string): ICredential | null { private doFindPassword(service: string, account?: string): ICredential | undefined {
for (const credential of this.credentials) { return find(this.credentials, credential =>
if (credential.service === service && (typeof account !== 'string' || credential.account === account)) { credential.service === service && (typeof account !== 'string' || credential.account === account));
return credential;
}
} }
return null; async findCredentials(service: string): Promise<Array<{ account: string, password: string; }>> {
}
async findCredentials(service: string): Promise<Array<{ account: string, password: string }>> {
return this.credentials return this.credentials
.filter(credential => credential.service === service) .filter(credential => credential.service === service)
.map(({ account, password }) => ({ account, password })); .map(({ account, password }) => ({ account, password }));

View File

@@ -14,6 +14,7 @@ import { Event, Emitter } from 'vs/base/common/event';
import { FileIconThemeData } from 'vs/workbench/services/themes/browser/fileIconThemeData'; import { FileIconThemeData } from 'vs/workbench/services/themes/browser/fileIconThemeData';
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { Disposable } from 'vs/base/common/lifecycle'; import { Disposable } from 'vs/base/common/lifecycle';
import { find } from 'vs/base/common/arrays';
const iconThemeExtPoint = ExtensionsRegistry.registerExtensionPoint<IThemeExtensionPoint[]>({ const iconThemeExtPoint = ExtensionsRegistry.registerExtensionPoint<IThemeExtensionPoint[]>({
extensionPoint: 'iconThemes', extensionPoint: 'iconThemes',
@@ -62,7 +63,7 @@ export class FileIconThemeStore extends Disposable {
private initialize() { private initialize() {
iconThemeExtPoint.setHandler((extensions) => { iconThemeExtPoint.setHandler((extensions) => {
const previousIds: { [key: string]: boolean } = {}; const previousIds: { [key: string]: boolean; } = {};
const added: FileIconThemeData[] = []; const added: FileIconThemeData[] = [];
for (const theme of this.knownIconThemes) { for (const theme of this.knownIconThemes) {
previousIds[theme.id] = true; previousIds[theme.id] = true;
@@ -131,12 +132,7 @@ export class FileIconThemeStore extends Disposable {
return Promise.resolve(FileIconThemeData.noIconTheme()); return Promise.resolve(FileIconThemeData.noIconTheme());
} }
return this.getFileIconThemes().then(allIconSets => { return this.getFileIconThemes().then(allIconSets => {
for (let iconSet of allIconSets) { return find(allIconSets, iconSet => iconSet.id === iconTheme);
if (iconSet.id === iconTheme) {
return iconSet;
}
}
return undefined;
}); });
} }
@@ -145,12 +141,7 @@ export class FileIconThemeStore extends Disposable {
return Promise.resolve(FileIconThemeData.noIconTheme()); return Promise.resolve(FileIconThemeData.noIconTheme());
} }
return this.getFileIconThemes().then(allIconSets => { return this.getFileIconThemes().then(allIconSets => {
for (let iconSet of allIconSets) { return find(allIconSets, iconSet => iconSet.settingsId === settingsId);
if (iconSet.settingsId === settingsId) {
return iconSet;
}
}
return undefined;
}); });
} }

View File

@@ -91,6 +91,7 @@ import { INativeOpenDialogOptions, MessageBoxReturnValue, SaveDialogReturnValue,
import { IBackupMainService, IWorkspaceBackupInfo } from 'vs/platform/backup/electron-main/backup'; import { IBackupMainService, IWorkspaceBackupInfo } from 'vs/platform/backup/electron-main/backup';
import { IEmptyWindowBackupInfo } from 'vs/platform/backup/node/backup'; import { IEmptyWindowBackupInfo } from 'vs/platform/backup/node/backup';
import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogs'; import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogs';
import { find } from 'vs/base/common/arrays';
export function createFileInput(instantiationService: IInstantiationService, resource: URI): FileEditorInput { export function createFileInput(instantiationService: IInstantiationService, resource: URI): FileEditorInput {
return instantiationService.createInstance(FileEditorInput, resource, undefined, undefined); return instantiationService.createInstance(FileEditorInput, resource, undefined, undefined);
@@ -700,14 +701,8 @@ export class TestEditorGroupsService implements IEditorGroupsService {
return this.groups; return this.groups;
} }
getGroup(identifier: number): IEditorGroup { getGroup(identifier: number): IEditorGroup | undefined {
for (const group of this.groups) { return find(this.groups, group => group.id === identifier);
if (group.id === identifier) {
return group;
}
}
return undefined!;
} }
getLabel(_identifier: number): string { getLabel(_identifier: number): string {