From 2f36ba900c786062dc0ef159c52b30d3cb5864f4 Mon Sep 17 00:00:00 2001 From: Armano Date: Mon, 14 Aug 2017 13:29:44 +0200 Subject: [PATCH 1/2] Fix 'no-shared-component-data' false positive when using arrow functions fixes #154 --- lib/rules/no-shared-component-data.js | 6 ++-- tests/lib/rules/no-shared-component-data.js | 38 ++++++++++++++------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/lib/rules/no-shared-component-data.js b/lib/rules/no-shared-component-data.js index 67e2ec45f..47cfa2aff 100644 --- a/lib/rules/no-shared-component-data.js +++ b/lib/rules/no-shared-component-data.js @@ -17,7 +17,7 @@ function create (context) { p.type === 'Property' && p.key.type === 'Identifier' && p.key.name === 'data' && - p.value.type !== 'FunctionExpression' && + !['FunctionExpression', 'ArrowFunctionExpression'].includes(p.value.type) && p.value.type !== 'Identifier' ) .forEach(cp => { @@ -41,9 +41,7 @@ module.exports = { recommended: false }, fixable: null, // or "code" or "whitespace" - schema: [ - // fill in your schema - ] + schema: [] }, create diff --git a/tests/lib/rules/no-shared-component-data.js b/tests/lib/rules/no-shared-component-data.js index 2a54ad07f..cc1380284 100644 --- a/tests/lib/rules/no-shared-component-data.js +++ b/tests/lib/rules/no-shared-component-data.js @@ -12,6 +12,12 @@ const rule = require('../../../lib/rules/no-shared-component-data') const RuleTester = require('eslint').RuleTester +const parserOptions = { + ecmaVersion: 7, + sourceType: 'module', + ecmaFeatures: { experimentalObjectRestSpread: true } +} + // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ @@ -30,7 +36,8 @@ ruleTester.run('no-shared-component-data', rule, { } } }) - ` + `, + parserOptions }, { filename: 'test.js', @@ -44,11 +51,7 @@ ruleTester.run('no-shared-component-data', rule, { } }) `, - parserOptions: { - ecmaVersion: 7, - sourceType: 'module', - ecmaFeatures: { experimentalObjectRestSpread: true } - } + parserOptions }, { filename: 'test.js', @@ -71,7 +74,7 @@ ruleTester.run('no-shared-component-data', rule, { } }) `, - parserOptions: { ecmaVersion: 6 } + parserOptions }, { filename: 'test.vue', @@ -84,7 +87,7 @@ ruleTester.run('no-shared-component-data', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + parserOptions }, { filename: 'test.vue', @@ -93,7 +96,7 @@ ruleTester.run('no-shared-component-data', rule, { ...foo } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module', ecmaFeatures: { experimentalObjectRestSpread: true }} + parserOptions }, { filename: 'test.vue', @@ -102,7 +105,18 @@ ruleTester.run('no-shared-component-data', rule, { data } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + parserOptions + }, + { + filename: 'test.vue', + code: ` + export default { + data: () => { + + } + } + `, + parserOptions } ], @@ -116,7 +130,7 @@ ruleTester.run('no-shared-component-data', rule, { } }) `, - parserOptions: { ecmaVersion: 6 }, + parserOptions, errors: [{ message: '`data` property in component must be a function', line: 3 @@ -131,7 +145,7 @@ ruleTester.run('no-shared-component-data', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, + parserOptions, errors: [{ message: '`data` property in component must be a function', line: 3 From 28b2c49d1fc085d2a7c3f7733e45047104700f0f Mon Sep 17 00:00:00 2001 From: Armano Date: Mon, 14 Aug 2017 17:57:40 +0200 Subject: [PATCH 2/2] Fix node 4 --- lib/rules/no-shared-component-data.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/rules/no-shared-component-data.js b/lib/rules/no-shared-component-data.js index 47cfa2aff..94d0c4c92 100644 --- a/lib/rules/no-shared-component-data.js +++ b/lib/rules/no-shared-component-data.js @@ -17,7 +17,8 @@ function create (context) { p.type === 'Property' && p.key.type === 'Identifier' && p.key.name === 'data' && - !['FunctionExpression', 'ArrowFunctionExpression'].includes(p.value.type) && + p.value.type !== 'FunctionExpression' && + p.value.type !== 'ArrowFunctionExpression' && p.value.type !== 'Identifier' ) .forEach(cp => {