From 386ed2e338967bf9004269c7377bdd8ca1f621ab Mon Sep 17 00:00:00 2001 From: James Addison Date: Sat, 4 Jul 2020 11:51:05 +0100 Subject: [PATCH 01/13] Replace lodash 'includes' usage with Array.prototype.includes --- packages/babel-cli/src/babel/util.js | 3 +-- .../src/index.js | 7 +++---- packages/babel-traverse/src/index.js | 3 +-- packages/babel-traverse/src/path/introspection.js | 3 +-- packages/babel-traverse/src/scope/index.js | 5 ++--- 5 files changed, 8 insertions(+), 13 deletions(-) diff --git a/packages/babel-cli/src/babel/util.js b/packages/babel-cli/src/babel/util.js index 752203cd0620..868382232d02 100644 --- a/packages/babel-cli/src/babel/util.js +++ b/packages/babel-cli/src/babel/util.js @@ -2,7 +2,6 @@ import readdirRecursive from "fs-readdir-recursive"; import * as babel from "@babel/core"; -import includes from "lodash/includes"; import path from "path"; import fs from "fs"; @@ -47,7 +46,7 @@ export function isCompilableExtension( ): boolean { const exts = altExts || babel.DEFAULT_EXTENSIONS; const ext = path.extname(filename); - return includes(exts, ext); + return exts.includes(ext); } export function addSourceMappingUrl(code: string, loc: string): string { diff --git a/packages/babel-helper-transform-fixture-test-runner/src/index.js b/packages/babel-helper-transform-fixture-test-runner/src/index.js index 568e18376048..09e7d3a62444 100644 --- a/packages/babel-helper-transform-fixture-test-runner/src/index.js +++ b/packages/babel-helper-transform-fixture-test-runner/src/index.js @@ -5,7 +5,6 @@ import getFixtures from "@babel/helper-fixtures"; import sourceMap from "source-map"; import { codeFrameColumns } from "@babel/code-frame"; import defaults from "lodash/defaults"; -import includes from "lodash/includes"; import escapeRegExp from "lodash/escapeRegExp"; import * as helpers from "./helpers"; import extend from "lodash/extend"; @@ -352,7 +351,7 @@ export default function ( const suites = getFixtures(fixturesLoc); for (const testSuite of suites) { - if (includes(suiteOpts.ignoreSuites, testSuite.title)) continue; + if (suiteOpts.ignoreSuites.includes(testSuite.title)) continue; describe(name + "/" + testSuite.title, function () { jest.addMatchers({ @@ -361,8 +360,8 @@ export default function ( for (const task of testSuite.tests) { if ( - includes(suiteOpts.ignoreTasks, task.title) || - includes(suiteOpts.ignoreTasks, testSuite.title + "/" + task.title) + suiteOpts.ignoreTasks.includes(task.title) || + suiteOpts.ignoreTasks.includes(testSuite.title + "/" + task.title) ) { continue; } diff --git a/packages/babel-traverse/src/index.js b/packages/babel-traverse/src/index.js index 1af05587ca2b..4b4c86f786d9 100644 --- a/packages/babel-traverse/src/index.js +++ b/packages/babel-traverse/src/index.js @@ -1,6 +1,5 @@ import TraversalContext from "./context"; import * as visitors from "./visitors"; -import includes from "lodash/includes"; import * as t from "@babel/types"; import * as cache from "./cache"; @@ -90,7 +89,7 @@ traverse.hasType = function ( blacklistTypes: Array, ): boolean { // the node we're searching in is blacklisted - if (includes(blacklistTypes, tree.type)) return false; + if (blacklistTypes.includes(tree.type)) return false; // the type we're looking for is the same as the passed node if (tree.type === type) return true; diff --git a/packages/babel-traverse/src/path/introspection.js b/packages/babel-traverse/src/path/introspection.js index b660cf666e94..7060b6a2f51f 100644 --- a/packages/babel-traverse/src/path/introspection.js +++ b/packages/babel-traverse/src/path/introspection.js @@ -1,7 +1,6 @@ // This file contains methods responsible for introspecting the current path for certain values. import type NodePath from "./index"; -import includes from "lodash/includes"; import * as t from "@babel/types"; /** @@ -149,7 +148,7 @@ export function isStatementOrBlock() { ) { return false; } else { - return includes(t.STATEMENT_OR_BLOCK_KEYS, this.key); + return t.STATEMENT_OR_BLOCK_KEYS.includes(this.key); } } diff --git a/packages/babel-traverse/src/scope/index.js b/packages/babel-traverse/src/scope/index.js index f309baf316e2..51718c13228e 100644 --- a/packages/babel-traverse/src/scope/index.js +++ b/packages/babel-traverse/src/scope/index.js @@ -1,4 +1,3 @@ -import includes from "lodash/includes"; import repeat from "lodash/repeat"; import Renamer from "./lib/renamer"; import type NodePath from "../path"; @@ -1038,8 +1037,8 @@ export default class Scope { if (this.hasOwnBinding(name)) return true; if (this.parentHasBinding(name, noGlobals)) return true; if (this.hasUid(name)) return true; - if (!noGlobals && includes(Scope.globals, name)) return true; - if (!noGlobals && includes(Scope.contextVariables, name)) return true; + if (!noGlobals && Scope.globals.includes(name)) return true; + if (!noGlobals && Scope.contextVariables.includes(name)) return true; return false; } From 9fd3679d6db03066daee09fad0050e5292a32aa1 Mon Sep 17 00:00:00 2001 From: James Addison Date: Sat, 4 Jul 2020 11:58:13 +0100 Subject: [PATCH 02/13] Replace lodash 'values' usage with Object.values --- packages/babel-plugin-transform-block-scoping/src/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/babel-plugin-transform-block-scoping/src/index.js b/packages/babel-plugin-transform-block-scoping/src/index.js index 78ef881b71cb..421118b86304 100644 --- a/packages/babel-plugin-transform-block-scoping/src/index.js +++ b/packages/babel-plugin-transform-block-scoping/src/index.js @@ -2,7 +2,6 @@ import { declare } from "@babel/helper-plugin-utils"; import type NodePath from "@babel/traverse"; import type Scope from "@babel/traverse"; import { visitor as tdzVisitor } from "./tdz"; -import values from "lodash/values"; import extend from "lodash/extend"; import { traverse, template, types as t } from "@babel/core"; @@ -545,7 +544,7 @@ class BlockScoping { this.hoistVarDeclarations(); // turn outsideLetReferences into an array - const args = values(outsideRefs).map(id => t.cloneNode(id)); + const args = Object.values(outsideRefs).map(id => t.cloneNode(id)); const params = args.map(id => t.cloneNode(id)); const isSwitch = this.blockPath.isSwitchStatement(); From 149e48bb4d3def441c613fe5ce83fb854e3324c3 Mon Sep 17 00:00:00 2001 From: James Addison Date: Sat, 4 Jul 2020 12:33:56 +0100 Subject: [PATCH 03/13] Replace lodash 'uniq' usage with Array.from(new Set(...)) --- packages/babel-cli/src/babel/options.js | 3 +-- packages/babel-types/src/utils/inherit.js | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/babel-cli/src/babel/options.js b/packages/babel-cli/src/babel/options.js index 6b94f75cd675..0aa54b3ef607 100644 --- a/packages/babel-cli/src/babel/options.js +++ b/packages/babel-cli/src/babel/options.js @@ -4,7 +4,6 @@ import fs from "fs"; import commander from "commander"; import { version } from "@babel/core"; -import uniq from "lodash/uniq"; import glob from "glob"; import pkg from "../../package.json"; @@ -195,7 +194,7 @@ export default function parseArgv(args: Array): CmdOptions | null { return globbed.concat(files); }, []); - filenames = uniq(filenames); + filenames = Array.from(new Set(filenames)); filenames.forEach(function (filename) { if (!fs.existsSync(filename)) { diff --git a/packages/babel-types/src/utils/inherit.js b/packages/babel-types/src/utils/inherit.js index 276e0d91436f..be57867e8bd3 100644 --- a/packages/babel-types/src/utils/inherit.js +++ b/packages/babel-types/src/utils/inherit.js @@ -1,12 +1,12 @@ // @flow -import uniq from "lodash/uniq"; - export default function inherit( key: string, child: Object, parent: Object, ): void { if (child && parent) { - child[key] = uniq([].concat(child[key], parent[key]).filter(Boolean)); + child[key] = Array.from( + new Set([].concat(child[key], parent[key]).filter(Boolean)), + ); } } From db862e7903186993c9ab775d9c7b9a1864205980 Mon Sep 17 00:00:00 2001 From: James Addison Date: Sat, 4 Jul 2020 13:06:09 +0100 Subject: [PATCH 04/13] Property safety: ensure that ignoreSuites/ignoreTasks are populated prior to access --- .../src/index.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/babel-helper-transform-fixture-test-runner/src/index.js b/packages/babel-helper-transform-fixture-test-runner/src/index.js index 09e7d3a62444..bff0c9431d96 100644 --- a/packages/babel-helper-transform-fixture-test-runner/src/index.js +++ b/packages/babel-helper-transform-fixture-test-runner/src/index.js @@ -351,7 +351,12 @@ export default function ( const suites = getFixtures(fixturesLoc); for (const testSuite of suites) { - if (suiteOpts.ignoreSuites.includes(testSuite.title)) continue; + if ( + suiteOpts.ignoreSuites && + suiteOpts.ignoreSuites.includes(testSuite.title) + ) { + continue; + } describe(name + "/" + testSuite.title, function () { jest.addMatchers({ @@ -360,8 +365,9 @@ export default function ( for (const task of testSuite.tests) { if ( - suiteOpts.ignoreTasks.includes(task.title) || - suiteOpts.ignoreTasks.includes(testSuite.title + "/" + task.title) + suiteOpts.ignoreTasks && + (suiteOpts.ignoreTasks.includes(task.title) || + suiteOpts.ignoreTasks.includes(testSuite.title + "/" + task.title)) ) { continue; } From 00fecf6e992ae81014c84e47afa6bfefd44d463a Mon Sep 17 00:00:00 2001 From: James Addison Date: Sat, 4 Jul 2020 13:20:30 +0100 Subject: [PATCH 05/13] Property safety: ensure that blacklistTypes is populated prior to access --- packages/babel-traverse/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-traverse/src/index.js b/packages/babel-traverse/src/index.js index 4b4c86f786d9..b6630ad974f0 100644 --- a/packages/babel-traverse/src/index.js +++ b/packages/babel-traverse/src/index.js @@ -89,7 +89,7 @@ traverse.hasType = function ( blacklistTypes: Array, ): boolean { // the node we're searching in is blacklisted - if (blacklistTypes.includes(tree.type)) return false; + if (blacklistTypes && blacklistTypes.includes(tree.type)) return false; // the type we're looking for is the same as the passed node if (tree.type === type) return true; From cd9c5efd05aa057081e23e3f00bc19f6d78f4ac7 Mon Sep 17 00:00:00 2001 From: James Addison Date: Sat, 4 Jul 2020 13:36:41 +0100 Subject: [PATCH 06/13] Revert "Replace lodash 'values' usage with Object.values" This reverts commit 9fd3679d6db03066daee09fad0050e5292a32aa1. --- packages/babel-plugin-transform-block-scoping/src/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/babel-plugin-transform-block-scoping/src/index.js b/packages/babel-plugin-transform-block-scoping/src/index.js index 421118b86304..78ef881b71cb 100644 --- a/packages/babel-plugin-transform-block-scoping/src/index.js +++ b/packages/babel-plugin-transform-block-scoping/src/index.js @@ -2,6 +2,7 @@ import { declare } from "@babel/helper-plugin-utils"; import type NodePath from "@babel/traverse"; import type Scope from "@babel/traverse"; import { visitor as tdzVisitor } from "./tdz"; +import values from "lodash/values"; import extend from "lodash/extend"; import { traverse, template, types as t } from "@babel/core"; @@ -544,7 +545,7 @@ class BlockScoping { this.hoistVarDeclarations(); // turn outsideLetReferences into an array - const args = Object.values(outsideRefs).map(id => t.cloneNode(id)); + const args = values(outsideRefs).map(id => t.cloneNode(id)); const params = args.map(id => t.cloneNode(id)); const isSwitch = this.blockPath.isSwitchStatement(); From e63d45b6efe9b77b9fc782e2c1501ca863aa169e Mon Sep 17 00:00:00 2001 From: James Addison Date: Sat, 4 Jul 2020 14:52:29 +0100 Subject: [PATCH 07/13] Replace lodash 'repeat' usage with String.prototype.repeat --- packages/babel-generator/src/printer.js | 5 ++--- packages/babel-traverse/src/scope/index.js | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/babel-generator/src/printer.js b/packages/babel-generator/src/printer.js index bed3698545c7..3b1c06a577c1 100644 --- a/packages/babel-generator/src/printer.js +++ b/packages/babel-generator/src/printer.js @@ -1,5 +1,4 @@ import isInteger from "lodash/isInteger"; -import repeat from "lodash/repeat"; import Buffer from "./buffer"; import * as n from "./node"; import * as t from "@babel/types"; @@ -324,7 +323,7 @@ export default class Printer { */ _getIndent(): string { - return repeat(this.format.indent.style, this._indent); + return this.format.indent.style.repeat(this._indent); } /** @@ -616,7 +615,7 @@ export default class Printer { this._getIndent().length, this._buf.getCurrentColumn(), ); - val = val.replace(/\n(?!$)/g, `\n${repeat(" ", indentSize)}`); + val = val.replace(/\n(?!$)/g, `\n${" ".repeat(indentSize)}`); } // Avoid creating //* comments diff --git a/packages/babel-traverse/src/scope/index.js b/packages/babel-traverse/src/scope/index.js index 51718c13228e..4a7a7f83efa1 100644 --- a/packages/babel-traverse/src/scope/index.js +++ b/packages/babel-traverse/src/scope/index.js @@ -1,4 +1,3 @@ -import repeat from "lodash/repeat"; import Renamer from "./lib/renamer"; import type NodePath from "../path"; import traverse from "../index"; @@ -501,7 +500,7 @@ export default class Scope { } dump() { - const sep = repeat("-", 60); + const sep = "-".repeat(60); console.log(sep); let scope = this; do { From 594f4badb8af73c02339db4e074523c55d6bcb0d Mon Sep 17 00:00:00 2001 From: James Addison Date: Sat, 4 Jul 2020 14:57:25 +0100 Subject: [PATCH 08/13] Replace lodash 'isinteger' usage with Number.isInteger --- packages/babel-generator/src/printer.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/babel-generator/src/printer.js b/packages/babel-generator/src/printer.js index 3b1c06a577c1..83a0321a0a70 100644 --- a/packages/babel-generator/src/printer.js +++ b/packages/babel-generator/src/printer.js @@ -1,4 +1,3 @@ -import isInteger from "lodash/isInteger"; import Buffer from "./buffer"; import * as n from "./node"; import * as t from "@babel/types"; @@ -137,7 +136,7 @@ export default class Printer { // Integer tokens need special handling because they cannot have '.'s inserted // immediately after them. this._endsWithInteger = - isInteger(+str) && + Number.isInteger(+str) && !NON_DECIMAL_LITERAL.test(str) && !SCIENTIFIC_NOTATION.test(str) && !ZERO_DECIMAL_INTEGER.test(str) && From ab7fbf10fb7492a534390dff7d1a33eb1a0f65e1 Mon Sep 17 00:00:00 2001 From: James Addison Date: Sat, 4 Jul 2020 14:58:50 +0100 Subject: [PATCH 09/13] Remove explicit lodash dependency from babel-generator package --- packages/babel-generator/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/babel-generator/package.json b/packages/babel-generator/package.json index 0fa7b675ef14..545b27db7e44 100644 --- a/packages/babel-generator/package.json +++ b/packages/babel-generator/package.json @@ -20,7 +20,6 @@ "dependencies": { "@babel/types": "^7.10.4", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" }, "devDependencies": { From 98d2769eb46ae177856283bf2ad6a7b3f13235a5 Mon Sep 17 00:00:00 2001 From: James Addison Date: Sun, 5 Jul 2020 11:49:31 +0100 Subject: [PATCH 10/13] Update packages/babel-helper-transform-fixture-test-runner/src/index.js Co-authored-by: Brian Ng --- .../babel-helper-transform-fixture-test-runner/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-helper-transform-fixture-test-runner/src/index.js b/packages/babel-helper-transform-fixture-test-runner/src/index.js index bff0c9431d96..8549960ed5f7 100644 --- a/packages/babel-helper-transform-fixture-test-runner/src/index.js +++ b/packages/babel-helper-transform-fixture-test-runner/src/index.js @@ -353,7 +353,7 @@ export default function ( for (const testSuite of suites) { if ( suiteOpts.ignoreSuites && - suiteOpts.ignoreSuites.includes(testSuite.title) + suiteOpts.ignoreSuites?.includes(testSuite.title) ) { continue; } From 7a669406d8c15a25a8777d9c47953e4a22d99b63 Mon Sep 17 00:00:00 2001 From: James Addison Date: Sun, 5 Jul 2020 11:55:02 +0100 Subject: [PATCH 11/13] Rely on optional chaining operator as sole boolean check --- .../src/index.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/babel-helper-transform-fixture-test-runner/src/index.js b/packages/babel-helper-transform-fixture-test-runner/src/index.js index 8549960ed5f7..1ff7233d1975 100644 --- a/packages/babel-helper-transform-fixture-test-runner/src/index.js +++ b/packages/babel-helper-transform-fixture-test-runner/src/index.js @@ -351,12 +351,7 @@ export default function ( const suites = getFixtures(fixturesLoc); for (const testSuite of suites) { - if ( - suiteOpts.ignoreSuites && - suiteOpts.ignoreSuites?.includes(testSuite.title) - ) { - continue; - } + if (suiteOpts.ignoreSuites?.includes(testSuite.title)) continue; describe(name + "/" + testSuite.title, function () { jest.addMatchers({ @@ -365,9 +360,8 @@ export default function ( for (const task of testSuite.tests) { if ( - suiteOpts.ignoreTasks && - (suiteOpts.ignoreTasks.includes(task.title) || - suiteOpts.ignoreTasks.includes(testSuite.title + "/" + task.title)) + suiteOpts.ignoreTasks?.includes(task.title) || + suiteOpts.ignoreTasks?.includes(testSuite.title + "/" + task.title) ) { continue; } From c991fd17256766578319ae37bb9b62cfba7ecbe8 Mon Sep 17 00:00:00 2001 From: James Addison Date: Sun, 5 Jul 2020 12:10:41 +0100 Subject: [PATCH 12/13] Handle additional optional chaining operator simplification --- packages/babel-traverse/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-traverse/src/index.js b/packages/babel-traverse/src/index.js index b6630ad974f0..c8365bb6b0fd 100644 --- a/packages/babel-traverse/src/index.js +++ b/packages/babel-traverse/src/index.js @@ -89,7 +89,7 @@ traverse.hasType = function ( blacklistTypes: Array, ): boolean { // the node we're searching in is blacklisted - if (blacklistTypes && blacklistTypes.includes(tree.type)) return false; + if (blacklistTypes?.includes(tree.type)) return false; // the type we're looking for is the same as the passed node if (tree.type === type) return true; From ad95ab8c2f23cc47ab6c8e14181ad74e8834a936 Mon Sep 17 00:00:00 2001 From: James Addison Date: Sun, 5 Jul 2020 16:54:29 +0100 Subject: [PATCH 13/13] Update type signature --- packages/babel-traverse/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-traverse/src/index.js b/packages/babel-traverse/src/index.js index c8365bb6b0fd..3d3af0f79e03 100644 --- a/packages/babel-traverse/src/index.js +++ b/packages/babel-traverse/src/index.js @@ -86,7 +86,7 @@ function hasBlacklistedType(path, state) { traverse.hasType = function ( tree: Object, type: Object, - blacklistTypes: Array, + blacklistTypes?: Array, ): boolean { // the node we're searching in is blacklisted if (blacklistTypes?.includes(tree.type)) return false;