From 44e2c3b72151833a4350af1d1dbf34f06079afb3 Mon Sep 17 00:00:00 2001 From: fisker Date: Wed, 18 Mar 2020 17:23:29 +0800 Subject: [PATCH] Fix integration test --- rules/prefer-spread.js | 13 ++++++++++--- test/prefer-spread.js | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/rules/prefer-spread.js b/rules/prefer-spread.js index 54758292de..1d68b9180c 100644 --- a/rules/prefer-spread.js +++ b/rules/prefer-spread.js @@ -19,9 +19,7 @@ const tokenTypesCantFollowOpenBracket = new Set([ 'Null', 'Boolean', 'Numeric', - 'Template', - 'RegularExpression', - 'Identifier' + 'RegularExpression' ]); const create = context => { @@ -47,10 +45,19 @@ const create = context => { return true; } + if (type === 'Template') { + return value.endsWith('`'); + } + const lastBlockNode = sourceCode.getNodeByRangeIndex(tokenBefore.range[0]); if (lastBlockNode && lastBlockNode.type === 'ObjectExpression') { return true; } + + // `for...of` + if (type === 'Identifier') { + return !(value === 'of' && lastBlockNode && lastBlockNode.type === 'ForOfStatement'); + } } return false; diff --git a/test/prefer-spread.js b/test/prefer-spread.js index 44fb4c5f72..0fec869562 100644 --- a/test/prefer-spread.js +++ b/test/prefer-spread.js @@ -265,6 +265,39 @@ ruleTester.run('prefer-spread', rule, { [...arrayLike].forEach(doSomething) ` }, + // https://github.com/angular/angular/blob/9e70bcb34f91d439f5203dc22a44f323d02c4648/packages/benchpress/src/webdriver/selenium_webdriver_adapter.ts#L37 + // TokenType of `of` is `Identifier` + { + code: ` + for (const key of Array.from(arrayLike)) { + } + `, + errors: [{}], + output: ` + for (const key of [...arrayLike]) { + } + ` + }, + // TokenType of `in` is `Keyword` + { + code: ` + for (const key in Array.from(arrayLike)) { + } + `, + errors: [{}], + output: ` + for (const key in [...arrayLike]) { + } + ` + }, + // https://github.com/facebook/relay/blob/c7dd4cc33eb2dba82629884bff865f0905fc269e/packages/relay-compiler/transforms/ValidateUnusedVariablesTransform.js#L57 + { + // eslint-disable-next-line no-template-curly-in-string + code: 'const foo = `${Array.from(arrayLike)}`', + errors: [{}], + // eslint-disable-next-line no-template-curly-in-string + output: 'const foo = `${[...arrayLike]}`' + }, // https://github.com/gatsbyjs/gatsby/blob/e720d8efe58eba0f6fae9f26ec8879128967d0b5/packages/gatsby/src/bootstrap/page-hot-reloader.js#L30 {