Skip to content

Commit 00921f7

Browse files
Merge branch 'fix-2309' into fix/useContext
2 parents 34920bb + 443a45a commit 00921f7

File tree

2 files changed

+52
-21
lines changed

2 files changed

+52
-21
lines changed

lib/rules/destructuring-assignment.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,18 @@ module.exports = {
4747
*/
4848
function handleStatelessComponent(node) {
4949
const destructuringProps = node.params && node.params[0] && node.params[0].type === 'ObjectPattern';
50+
const destructuringContext = node.params && node.params[1] && node.params[1].type === 'ObjectPattern';
5051

5152
if (destructuringProps && components.get(node) && configuration === 'never') {
5253
context.report({
5354
node,
5455
message: 'Must never use destructuring props assignment in SFC argument'
5556
});
57+
} else if (destructuringContext && components.get(node) && configuration === 'never') {
58+
context.report({
59+
node,
60+
message: 'Must never use destructuring context assignment in SFC argument'
61+
});
5662
}
5763
}
5864

@@ -151,7 +157,7 @@ module.exports = {
151157
context.report({
152158
node,
153159
message: `Must never use destructuring ${node.init.callee.name} assignment`
154-
})
160+
});
155161
}
156162

157163
if (SFCComponent && destructuringSFC && configuration === 'never') {

tests/lib/rules/destructuring-assignment.js

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const parserOptions = {
1717
}
1818
};
1919

20-
const ruleTester = new RuleTester({parserOptions});
20+
const ruleTester = new RuleTester({ parserOptions });
2121
ruleTester.run('destructuring-assignment', rule, {
2222
valid: [{
2323
code: `const MyComponent = ({ id, className }) => (
@@ -163,7 +163,7 @@ ruleTester.run('destructuring-assignment', rule, {
163163
bar = this.props.bar
164164
}
165165
`,
166-
options: ['always', {ignoreClassFields: true}],
166+
options: ['always', { ignoreClassFields: true }],
167167
parser: parsers.BABEL_ESLINT
168168
}, {
169169
code: [
@@ -174,7 +174,7 @@ ruleTester.run('destructuring-assignment', rule, {
174174
' }',
175175
'}'
176176
].join('\n'),
177-
options: ['always', {ignoreClassFields: true}],
177+
options: ['always', { ignoreClassFields: true }],
178178
parser: parsers.BABEL_ESLINT
179179
}, {
180180
code: `const MyComponent = (props) => {
@@ -189,21 +189,28 @@ ruleTester.run('destructuring-assignment', rule, {
189189
};`,
190190
options: ['never']
191191
}],
192-
193192
invalid: [{
194193
code: `const MyComponent = (props) => {
195194
return (<div id={props.id} />)
196195
};`,
197196
errors: [
198-
{message: 'Must use destructuring props assignment'}
197+
{ message: 'Must use destructuring props assignment' }
199198
]
200199
}, {
201200
code: `const MyComponent = ({ id, className }) => (
202201
<div id={id} className={className} />
203202
);`,
204203
options: ['never'],
205204
errors: [
206-
{message: 'Must never use destructuring props assignment in SFC argument'}
205+
{ message: 'Must never use destructuring props assignment in SFC argument' }
206+
]
207+
}, {
208+
code: `const MyComponent = (props, { color }) => (
209+
<div id={props.id} className={props.className} />
210+
);`,
211+
options: ['never'],
212+
errors: [
213+
{ message: 'Must never use destructuring context assignment in SFC argument' }
207214
]
208215
}, {
209216
code: `const Foo = class extends React.PureComponent {
@@ -212,7 +219,7 @@ ruleTester.run('destructuring-assignment', rule, {
212219
}
213220
};`,
214221
errors: [
215-
{message: 'Must use destructuring props assignment'}
222+
{ message: 'Must use destructuring props assignment' }
216223
]
217224
}, {
218225
code: `const Foo = class extends React.PureComponent {
@@ -221,7 +228,7 @@ ruleTester.run('destructuring-assignment', rule, {
221228
}
222229
};`,
223230
errors: [
224-
{message: 'Must use destructuring state assignment'}
231+
{ message: 'Must use destructuring state assignment' }
225232
]
226233
}, {
227234
code: `const Foo = class extends React.PureComponent {
@@ -230,7 +237,7 @@ ruleTester.run('destructuring-assignment', rule, {
230237
}
231238
};`,
232239
errors: [
233-
{message: 'Must use destructuring context assignment'}
240+
{ message: 'Must use destructuring context assignment' }
234241
]
235242
}, {
236243
code: `class Foo extends React.Component {
@@ -240,7 +247,7 @@ ruleTester.run('destructuring-assignment', rule, {
240247
}
241248
}`,
242249
errors: [
243-
{message: 'Must use destructuring props assignment'}
250+
{ message: 'Must use destructuring props assignment' }
244251
]
245252
}, {
246253
code: `var Hello = React.createClass({
@@ -249,7 +256,7 @@ ruleTester.run('destructuring-assignment', rule, {
249256
}
250257
});`,
251258
errors: [
252-
{message: 'Must use destructuring props assignment'}
259+
{ message: 'Must use destructuring props assignment' }
253260
]
254261
}, {
255262
code: `
@@ -259,21 +266,21 @@ ruleTester.run('destructuring-assignment', rule, {
259266
}
260267
}
261268
`,
262-
errors: [{message: 'Must use destructuring props assignment'}]
269+
errors: [{ message: 'Must use destructuring props assignment' }]
263270
}, {
264271
code: `
265272
export default function Foo(props) {
266273
return <p>{props.a}</p>;
267274
}
268275
`,
269-
errors: [{message: 'Must use destructuring props assignment'}]
276+
errors: [{ message: 'Must use destructuring props assignment' }]
270277
}, {
271278
code: `
272279
function hof() {
273280
return (props) => <p>{props.a}</p>;
274281
}
275282
`,
276-
errors: [{message: 'Must use destructuring props assignment'}]
283+
errors: [{ message: 'Must use destructuring props assignment' }]
277284
}, {
278285
code: `const Foo = class extends React.PureComponent {
279286
render() {
@@ -282,7 +289,7 @@ ruleTester.run('destructuring-assignment', rule, {
282289
}
283290
};`,
284291
errors: [
285-
{message: 'Must use destructuring props assignment'}
292+
{ message: 'Must use destructuring props assignment' }
286293
]
287294
}, {
288295
code: `const Foo = class extends React.PureComponent {
@@ -294,7 +301,7 @@ ruleTester.run('destructuring-assignment', rule, {
294301
options: ['never'],
295302
parser: parsers.BABEL_ESLINT,
296303
errors: [
297-
{message: 'Must never use destructuring props assignment'}
304+
{ message: 'Must never use destructuring props assignment' }
298305
]
299306
}, {
300307
code: `const MyComponent = (props) => {
@@ -304,7 +311,7 @@ ruleTester.run('destructuring-assignment', rule, {
304311
options: ['never'],
305312
parser: parsers.BABEL_ESLINT,
306313
errors: [
307-
{message: 'Must never use destructuring props assignment'}
314+
{ message: 'Must never use destructuring props assignment' }
308315
]
309316
}, {
310317
code: `const Foo = class extends React.PureComponent {
@@ -316,7 +323,25 @@ ruleTester.run('destructuring-assignment', rule, {
316323
options: ['never'],
317324
parser: parsers.BABEL_ESLINT,
318325
errors: [
319-
{message: 'Must never use destructuring state assignment'}
326+
{ message: 'Must never use destructuring state assignment' }
327+
]
328+
}, {
329+
code: `const MyComponent = (props) => {
330+
const foo = useContext(aContext);
331+
return <div>{foo.test}</div>
332+
};`,
333+
options: ['always'],
334+
errors: [
335+
{ message: 'Must use destructuring foo assignment' }
336+
]
337+
}, {
338+
code: `const MyComponent = (props) => {
339+
const {foo} = useContext(aContext);
340+
return <div>{foo}</div>
341+
};`,
342+
options: ['never'],
343+
errors: [
344+
{ message: 'Must never use destructuring useContext assignment' }
320345
]
321346
}, {
322347
code: `const MyComponent = (props) => {
@@ -325,7 +350,7 @@ ruleTester.run('destructuring-assignment', rule, {
325350
};`,
326351
options: ['always'],
327352
errors: [
328-
{message: 'Must use destructuring foo assignment'}
353+
{ message: 'Must use destructuring foo assignment' }
329354
]
330355
}, {
331356
code: `const MyComponent = (props) => {
@@ -334,7 +359,7 @@ ruleTester.run('destructuring-assignment', rule, {
334359
};`,
335360
options: ['never'],
336361
errors: [
337-
{message: 'Must never use destructuring useContext assignment'}
362+
{ message: 'Must never use destructuring useContext assignment' }
338363
]
339364
}]
340365
});

0 commit comments

Comments
 (0)