Skip to content

Commit b25be73

Browse files
armano2mysticatea
authored andcommitted
Fix: 'no-shared-component-data' false positive when using arrow functions (fixes vuejs#154)(vuejs#156)
1 parent 1e7a13a commit b25be73

File tree

2 files changed

+28
-15
lines changed

2 files changed

+28
-15
lines changed

lib/rules/no-shared-component-data.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ function create (context) {
1818
p.key.type === 'Identifier' &&
1919
p.key.name === 'data' &&
2020
p.value.type !== 'FunctionExpression' &&
21+
p.value.type !== 'ArrowFunctionExpression' &&
2122
p.value.type !== 'Identifier'
2223
)
2324
.forEach(cp => {
@@ -41,9 +42,7 @@ module.exports = {
4142
recommended: false
4243
},
4344
fixable: null, // or "code" or "whitespace"
44-
schema: [
45-
// fill in your schema
46-
]
45+
schema: []
4746
},
4847

4948
create

tests/lib/rules/no-shared-component-data.js

+26-12
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ const rule = require('../../../lib/rules/no-shared-component-data')
1212

1313
const RuleTester = require('eslint').RuleTester
1414

15+
const parserOptions = {
16+
ecmaVersion: 7,
17+
sourceType: 'module',
18+
ecmaFeatures: { experimentalObjectRestSpread: true }
19+
}
20+
1521
// ------------------------------------------------------------------------------
1622
// Tests
1723
// ------------------------------------------------------------------------------
@@ -30,7 +36,8 @@ ruleTester.run('no-shared-component-data', rule, {
3036
}
3137
}
3238
})
33-
`
39+
`,
40+
parserOptions
3441
},
3542
{
3643
filename: 'test.js',
@@ -44,11 +51,7 @@ ruleTester.run('no-shared-component-data', rule, {
4451
}
4552
})
4653
`,
47-
parserOptions: {
48-
ecmaVersion: 7,
49-
sourceType: 'module',
50-
ecmaFeatures: { experimentalObjectRestSpread: true }
51-
}
54+
parserOptions
5255
},
5356
{
5457
filename: 'test.js',
@@ -71,7 +74,7 @@ ruleTester.run('no-shared-component-data', rule, {
7174
}
7275
})
7376
`,
74-
parserOptions: { ecmaVersion: 6 }
77+
parserOptions
7578
},
7679
{
7780
filename: 'test.vue',
@@ -84,7 +87,7 @@ ruleTester.run('no-shared-component-data', rule, {
8487
}
8588
}
8689
`,
87-
parserOptions: { ecmaVersion: 6, sourceType: 'module' }
90+
parserOptions
8891
},
8992
{
9093
filename: 'test.vue',
@@ -93,7 +96,7 @@ ruleTester.run('no-shared-component-data', rule, {
9396
...foo
9497
}
9598
`,
96-
parserOptions: { ecmaVersion: 6, sourceType: 'module', ecmaFeatures: { experimentalObjectRestSpread: true }}
99+
parserOptions
97100
},
98101
{
99102
filename: 'test.vue',
@@ -102,7 +105,18 @@ ruleTester.run('no-shared-component-data', rule, {
102105
data
103106
}
104107
`,
105-
parserOptions: { ecmaVersion: 6, sourceType: 'module' }
108+
parserOptions
109+
},
110+
{
111+
filename: 'test.vue',
112+
code: `
113+
export default {
114+
data: () => {
115+
116+
}
117+
}
118+
`,
119+
parserOptions
106120
}
107121
],
108122

@@ -116,7 +130,7 @@ ruleTester.run('no-shared-component-data', rule, {
116130
}
117131
})
118132
`,
119-
parserOptions: { ecmaVersion: 6 },
133+
parserOptions,
120134
errors: [{
121135
message: '`data` property in component must be a function',
122136
line: 3
@@ -131,7 +145,7 @@ ruleTester.run('no-shared-component-data', rule, {
131145
}
132146
}
133147
`,
134-
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
148+
parserOptions,
135149
errors: [{
136150
message: '`data` property in component must be a function',
137151
line: 3

0 commit comments

Comments
 (0)