From a5b6d6b94ed2e13e12091bec80a2c0b74183ba16 Mon Sep 17 00:00:00 2001 From: Will Binns-Smith Date: Mon, 4 Mar 2019 20:00:55 -0800 Subject: [PATCH 1/2] eslint: enable no-return-await (#2707) This sets violations of the `no-return-await` to `error`. `return await` is redundant as values returned from an async function are effectively wrapped in a `Promise.resolve`, and awaiting another promise in addition to this will defer resolution another microtick. [eslint is good enough to detect the valid use case of `return await` in a `try`/`catch`](https://eslint.org/docs/rules/no-return-await). We also get clever with a short circuiting `||` in `Resolver` so I disabled it there, but we should probably rewrite it to be clearer in the future. Test Plan: `yarn && yarn lint && yarn test` --- packages/core/parcel-bundler/src/Resolver.js | 2 +- .../core/parcel-bundler/src/transforms/babel/babelrc.js | 2 +- packages/core/parcel-bundler/src/utils/loadPlugins.js | 6 ++---- packages/dev/eslint-config/index.js | 3 +++ 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/core/parcel-bundler/src/Resolver.js b/packages/core/parcel-bundler/src/Resolver.js index 86e5a62563f..529f9aae96a 100755 --- a/packages/core/parcel-bundler/src/Resolver.js +++ b/packages/core/parcel-bundler/src/Resolver.js @@ -159,7 +159,7 @@ class Resolver { // First try as a file, then as a directory. return ( (await this.loadAsFile(filename, extensions, pkg)) || - (await this.loadDirectory(filename, extensions, pkg)) + (await this.loadDirectory(filename, extensions, pkg)) // eslint-disable-line no-return-await ); } diff --git a/packages/core/parcel-bundler/src/transforms/babel/babelrc.js b/packages/core/parcel-bundler/src/transforms/babel/babelrc.js index 906a55698d2..7dc101bffdf 100644 --- a/packages/core/parcel-bundler/src/transforms/babel/babelrc.js +++ b/packages/core/parcel-bundler/src/transforms/babel/babelrc.js @@ -53,7 +53,7 @@ async function getBabelRc(asset, isSource) { } // Otherwise, return the .babelrc if babelify was found - return babelify ? await findBabelRc(asset) : null; + return babelify ? findBabelRc(asset) : null; } // If this asset is not in node_modules, always use the .babelrc diff --git a/packages/core/parcel-bundler/src/utils/loadPlugins.js b/packages/core/parcel-bundler/src/utils/loadPlugins.js index a32fb673a3c..1f3775fc01e 100644 --- a/packages/core/parcel-bundler/src/utils/loadPlugins.js +++ b/packages/core/parcel-bundler/src/utils/loadPlugins.js @@ -3,13 +3,11 @@ const localRequire = require('./localRequire'); module.exports = async function loadPlugins(plugins, relative) { if (Array.isArray(plugins)) { return Promise.all( - plugins.map(async p => loadPlugin(p, relative)).filter(Boolean) + plugins.map(p => loadPlugin(p, relative)).filter(Boolean) ); } else if (typeof plugins === 'object') { let mapPlugins = await Promise.all( - Object.keys(plugins).map( - async p => await loadPlugin(p, relative, plugins[p]) - ) + Object.keys(plugins).map(p => loadPlugin(p, relative, plugins[p])) ); return mapPlugins.filter(Boolean); } else { diff --git a/packages/dev/eslint-config/index.js b/packages/dev/eslint-config/index.js index 18a78948a5c..cbdec1827ee 100644 --- a/packages/dev/eslint-config/index.js +++ b/packages/dev/eslint-config/index.js @@ -15,5 +15,8 @@ module.exports = { globals: { parcelRequire: true, define: true + }, + rules: { + 'no-return-await': 'error' } }; From f5ed5005dd61d1e4007fb4a5218054a834e30459 Mon Sep 17 00:00:00 2001 From: Will Binns-Smith Date: Wed, 13 Mar 2019 10:38:48 -0700 Subject: [PATCH 2/2] Remove unnecessary awaits --- packages/core/cache/src/Cache.js | 2 +- packages/core/core/src/Asset.js | 2 +- packages/core/core/src/Config.js | 7 ++++--- packages/core/core/src/ConfigResolver.js | 4 ++-- packages/core/core/src/PackagerRunner.js | 2 +- packages/core/core/src/Parcel.js | 2 +- packages/core/core/src/TransformerRunner.js | 3 ++- packages/core/utils/src/loadPlugins.js | 8 +++----- packages/core/utils/src/localRequire.js | 2 +- packages/resolvers/default/src/DefaultResolver.js | 4 ++-- packages/transformers/babel/src/BabelTransformer.js | 2 +- packages/transformers/babel/src/babelrc.js | 6 +++--- 12 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/core/cache/src/Cache.js b/packages/core/cache/src/Cache.js index 729ab124d94..2e43d9eec0b 100644 --- a/packages/core/cache/src/Cache.js +++ b/packages/core/cache/src/Cache.js @@ -85,7 +85,7 @@ export class Cache { } async _writeBlobs(assets: Array) { - return await Promise.all( + return Promise.all( assets.map(async asset => { let assetCacheId = this.getCacheId(asset.id, asset.env); for (let blobKey in asset.output) { diff --git a/packages/core/core/src/Asset.js b/packages/core/core/src/Asset.js index ea73813fbb2..c233d246876 100644 --- a/packages/core/core/src/Asset.js +++ b/packages/core/core/src/Asset.js @@ -178,6 +178,6 @@ export default class Asset implements IAsset { } async getPackage(): Promise { - return await this.getConfig(['package.json']); + return this.getConfig(['package.json']); } } diff --git a/packages/core/core/src/Config.js b/packages/core/core/src/Config.js index c8018286f4e..a32af4cd58c 100644 --- a/packages/core/core/src/Config.js +++ b/packages/core/core/src/Config.js @@ -1,4 +1,5 @@ // @flow + import type { ParcelConfig, FilePath, @@ -132,7 +133,7 @@ export default class Config { return []; } - return await this.loadPlugins(runtimes); + return this.loadPlugins(runtimes); } async getPackager(filePath: FilePath): Promise { @@ -144,7 +145,7 @@ export default class Config { throw new Error(`No packager found for "${filePath}".`); } - return await this.loadPlugin(packagerName); + return this.loadPlugin(packagerName); } async getOptimizers(filePath: FilePath): Promise> { @@ -156,7 +157,7 @@ export default class Config { return []; } - return await this.loadPlugins(optimizers); + return this.loadPlugins(optimizers); } isGlobMatch(filePath: FilePath, pattern: Glob) { diff --git a/packages/core/core/src/ConfigResolver.js b/packages/core/core/src/ConfigResolver.js index 16229b76bbc..4897d1ac244 100644 --- a/packages/core/core/src/ConfigResolver.js +++ b/packages/core/core/src/ConfigResolver.js @@ -33,7 +33,7 @@ export default class ConfigResolver { async loadConfig(configPath: FilePath, rootDir: FilePath) { let config: ParcelConfig = parse(await fs.readFile(configPath)); - return await this.processConfig(config, configPath, rootDir); + return this.processConfig(config, configPath, rootDir); } async processConfig( @@ -63,7 +63,7 @@ export default class ConfigResolver { return path.resolve(path.dirname(configPath), ext); } else { let [resolved] = await localRequire.resolve(ext, configPath); - return await fs.realpath(resolved); + return fs.realpath(resolved); } } diff --git a/packages/core/core/src/PackagerRunner.js b/packages/core/core/src/PackagerRunner.js index d4a13179a5f..dbfc8543aae 100644 --- a/packages/core/core/src/PackagerRunner.js +++ b/packages/core/core/src/PackagerRunner.js @@ -40,7 +40,7 @@ export default class PackagerRunner { async package(bundle: Bundle): Promise { // $FlowFixMe - filePath should already be filled in at this point let packager = await this.config.getPackager(bundle.filePath); - return await packager.package(bundle, this.cliOpts); + return packager.package(bundle, this.cliOpts); } async optimize(bundle: Bundle, contents: Blob): Promise { diff --git a/packages/core/core/src/Parcel.js b/packages/core/core/src/Parcel.js index 7be5a5762e0..8e81a5ee181 100644 --- a/packages/core/core/src/Parcel.js +++ b/packages/core/core/src/Parcel.js @@ -113,7 +113,7 @@ export default class Parcel { this.build(); }); - return await this.build(); + return this.build(); } async build() { diff --git a/packages/core/core/src/TransformerRunner.js b/packages/core/core/src/TransformerRunner.js index b33572810da..304bf973ba8 100644 --- a/packages/core/core/src/TransformerRunner.js +++ b/packages/core/core/src/TransformerRunner.js @@ -1,4 +1,5 @@ // @flow + import type { Asset as IAsset, AssetOutput, @@ -196,7 +197,7 @@ class TransformerRunner { // Create a generate function that can be called later to lazily generate let generate = async (input: Asset): Promise => { if (transformer.generate) { - return await transformer.generate(input, config, this.cliOpts); + return transformer.generate(input, config, this.cliOpts); } throw new Error( diff --git a/packages/core/utils/src/loadPlugins.js b/packages/core/utils/src/loadPlugins.js index 1a9a7c11924..1f3775fc01e 100644 --- a/packages/core/utils/src/loadPlugins.js +++ b/packages/core/utils/src/loadPlugins.js @@ -2,14 +2,12 @@ const localRequire = require('./localRequire'); module.exports = async function loadPlugins(plugins, relative) { if (Array.isArray(plugins)) { - return await Promise.all( - plugins.map(async p => await loadPlugin(p, relative)).filter(Boolean) + return Promise.all( + plugins.map(p => loadPlugin(p, relative)).filter(Boolean) ); } else if (typeof plugins === 'object') { let mapPlugins = await Promise.all( - Object.keys(plugins).map( - async p => await loadPlugin(p, relative, plugins[p]) - ) + Object.keys(plugins).map(p => loadPlugin(p, relative, plugins[p])) ); return mapPlugins.filter(Boolean); } else { diff --git a/packages/core/utils/src/localRequire.js b/packages/core/utils/src/localRequire.js index 350c3fdee9c..e99a92edeb5 100644 --- a/packages/core/utils/src/localRequire.js +++ b/packages/core/utils/src/localRequire.js @@ -23,7 +23,7 @@ async function localResolve(name, path, triedInstall = false) { location: require.resolve('./installPackage.js'), args: [[name], path] }); - return await localResolve(name, path, true); + return localResolve(name, path, true); } throw e; } diff --git a/packages/resolvers/default/src/DefaultResolver.js b/packages/resolvers/default/src/DefaultResolver.js index b8284064014..bcdd7a5e5dc 100644 --- a/packages/resolvers/default/src/DefaultResolver.js +++ b/packages/resolvers/default/src/DefaultResolver.js @@ -180,7 +180,7 @@ class NodeResolver { // First try as a file, then as a directory. return ( (await this.loadAsFile(filename, extensions, pkg)) || - (await this.loadDirectory(filename, extensions, pkg)) + (await this.loadDirectory(filename, extensions, pkg)) // eslint-disable-line no-return-await ); } @@ -276,7 +276,7 @@ class NodeResolver { } // Fall back to an index file inside the directory. - return await this.loadAsFile(path.join(dir, 'index'), extensions, pkg); + return this.loadAsFile(path.join(dir, 'index'), extensions, pkg); } async readPackage(dir: string): Promise { diff --git a/packages/transformers/babel/src/BabelTransformer.js b/packages/transformers/babel/src/BabelTransformer.js index b45cc505b4c..ddd0fa64204 100644 --- a/packages/transformers/babel/src/BabelTransformer.js +++ b/packages/transformers/babel/src/BabelTransformer.js @@ -8,7 +8,7 @@ import getBabelConfig from './config'; export default new Transformer({ async getConfig(asset) { - return await getBabelConfig(asset); + return getBabelConfig(asset); }, canReuseAST(ast) { diff --git a/packages/transformers/babel/src/babelrc.js b/packages/transformers/babel/src/babelrc.js index a8515f76f27..ec1f68383a8 100644 --- a/packages/transformers/babel/src/babelrc.js +++ b/packages/transformers/babel/src/babelrc.js @@ -56,12 +56,12 @@ async function getBabelRc(asset, pkg, isSource) { } // Otherwise, return the .babelrc if babelify was found - return babelify ? await findBabelRc(asset) : null; + return babelify ? findBabelRc(asset) : null; } // If this asset is not in node_modules, always use the .babelrc if (isSource) { - return await findBabelRc(asset); + return findBabelRc(asset); } // Otherwise, don't load .babelrc for node_modules. @@ -271,7 +271,7 @@ async function installPlugins(asset, babelrc) { let plugins = (babelrc.plugins || []).map(p => resolveModule('plugin', getPluginName(p), asset.filePath) ); - return await Promise.all([...presets, ...plugins]); + return Promise.all([...presets, ...plugins]); } async function resolveModule(type, name, path) {