2 * @fileoverview Prefer destructuring from arrays and objects
3 * @author Alex LaFroscia
7 //------------------------------------------------------------------------------
9 //------------------------------------------------------------------------------
11 const rule
= require("../../../lib/rules/prefer-destructuring"),
12 { RuleTester
} = require("../../../lib/rule-tester");
15 //------------------------------------------------------------------------------
17 //------------------------------------------------------------------------------
19 const ruleTester
= new RuleTester({ parserOptions
: { ecmaVersion
: 6 } });
21 ruleTester
.run("prefer-destructuring", rule
, {
24 "var { foo } = object;",
28 // Ensure that the default behavior does not require destructuring when renaming
29 code
: "var foo = object.bar;",
30 options
: [{ VariableDeclarator
: { object
: true } }]
34 // Ensure that the default behavior does not require destructuring when renaming
35 code
: "var foo = object.bar;",
36 options
: [{ object
: true }]
39 code
: "var foo = object.bar;",
40 options
: [{ VariableDeclarator
: { object
: true } }, { enforceForRenamedProperties
: false }]
43 code
: "var foo = object.bar;",
44 options
: [{ object
: true }, { enforceForRenamedProperties
: false }]
47 code
: "var foo = object['bar'];",
48 options
: [{ VariableDeclarator
: { object
: true } }, { enforceForRenamedProperties
: false }]
51 code
: "var foo = object[bar];",
52 options
: [{ object
: true }, { enforceForRenamedProperties
: false }]
55 code
: "var { bar: foo } = object;",
56 options
: [{ VariableDeclarator
: { object
: true } }, { enforceForRenamedProperties
: true }]
59 code
: "var { bar: foo } = object;",
60 options
: [{ object
: true }, { enforceForRenamedProperties
: true }]
63 code
: "var { [bar]: foo } = object;",
64 options
: [{ VariableDeclarator
: { object
: true } }, { enforceForRenamedProperties
: true }]
67 code
: "var { [bar]: foo } = object;",
68 options
: [{ object
: true }, { enforceForRenamedProperties
: true }]
71 code
: "var foo = array[0];",
72 options
: [{ VariableDeclarator
: { array
: false } }]
75 code
: "var foo = array[0];",
76 options
: [{ array
: false }]
79 code
: "var foo = object.foo;",
80 options
: [{ VariableDeclarator
: { object
: false } }]
83 code
: "var foo = object['foo'];",
84 options
: [{ VariableDeclarator
: { object
: false } }]
86 "({ foo } = object);",
90 code
: "var foo = array[0];",
91 options
: [{ VariableDeclarator
: { array
: false } }, { enforceForRenamedProperties
: true }]
96 code
: "var foo = array[0];",
97 options
: [{ array
: false }, { enforceForRenamedProperties
: true }]
103 code
: "foo = object.foo;",
104 options
: [{ AssignmentExpression
: { object
: false } }, { enforceForRenamedProperties
: true }]
107 code
: "foo = object.foo;",
108 options
: [{ AssignmentExpression
: { object
: false } }, { enforceForRenamedProperties
: false }]
111 code
: "foo = array[0];",
112 options
: [{ AssignmentExpression
: { array
: false } }, { enforceForRenamedProperties
: true }]
115 code
: "foo = array[0];",
116 options
: [{ AssignmentExpression
: { array
: false } }, { enforceForRenamedProperties
: false }]
119 code
: "foo = array[0];",
120 options
: [{ VariableDeclarator
: { array
: true }, AssignmentExpression
: { array
: false } }, { enforceForRenamedProperties
: false }]
123 code
: "var foo = array[0];",
124 options
: [{ VariableDeclarator
: { array
: false }, AssignmentExpression
: { array
: true } }, { enforceForRenamedProperties
: false }]
127 code
: "foo = object.foo;",
128 options
: [{ VariableDeclarator
: { object
: true }, AssignmentExpression
: { object
: false } }]
131 code
: "var foo = object.foo;",
132 options
: [{ VariableDeclarator
: { object
: false }, AssignmentExpression
: { object
: true } }]
134 "class Foo extends Bar { static foo() {var foo = super.foo} }",
136 "var foo = bar[foo];",
138 code
: "var {foo: {bar}} = object;",
139 options
: [{ object
: true }]
142 code
: "var {bar} = object.foo;",
143 options
: [{ object
: true }]
149 code
: "var foo = array[0];",
152 messageId
: "preferDestructuring",
153 data
: { type
: "array" },
154 type
: "VariableDeclarator"
158 code
: "foo = array[0];",
161 messageId
: "preferDestructuring",
162 data
: { type
: "array" },
163 type
: "AssignmentExpression"
167 code
: "var foo = object.foo;",
168 output
: "var {foo} = object;",
170 messageId
: "preferDestructuring",
171 data
: { type
: "object" },
172 type
: "VariableDeclarator"
176 code
: "var foo = object.bar.foo;",
177 output
: "var {foo} = object.bar;",
179 messageId
: "preferDestructuring",
180 data
: { type
: "object" },
181 type
: "VariableDeclarator"
185 code
: "var foobar = object.bar;",
187 options
: [{ VariableDeclarator
: { object
: true } }, { enforceForRenamedProperties
: true }],
189 messageId
: "preferDestructuring",
190 data
: { type
: "object" },
191 type
: "VariableDeclarator"
195 code
: "var foobar = object.bar;",
197 options
: [{ object
: true }, { enforceForRenamedProperties
: true }],
199 messageId
: "preferDestructuring",
200 data
: { type
: "object" },
201 type
: "VariableDeclarator"
205 code
: "var foo = object[bar];",
207 options
: [{ VariableDeclarator
: { object
: true } }, { enforceForRenamedProperties
: true }],
209 messageId
: "preferDestructuring",
210 data
: { type
: "object" },
211 type
: "VariableDeclarator"
215 code
: "var foo = object[bar];",
217 options
: [{ object
: true }, { enforceForRenamedProperties
: true }],
219 messageId
: "preferDestructuring",
220 data
: { type
: "object" },
221 type
: "VariableDeclarator"
225 code
: "var foo = object['foo'];",
228 messageId
: "preferDestructuring",
229 data
: { type
: "object" },
230 type
: "VariableDeclarator"
234 code
: "foo = object.foo;",
237 messageId
: "preferDestructuring",
238 data
: { type
: "object" },
239 type
: "AssignmentExpression"
243 code
: "foo = object['foo'];",
246 messageId
: "preferDestructuring",
247 data
: { type
: "object" },
248 type
: "AssignmentExpression"
252 code
: "var foo = array[0];",
254 options
: [{ VariableDeclarator
: { array
: true } }, { enforceForRenamedProperties
: true }],
256 messageId
: "preferDestructuring",
257 data
: { type
: "array" },
258 type
: "VariableDeclarator"
262 code
: "foo = array[0];",
264 options
: [{ AssignmentExpression
: { array
: true } }],
266 messageId
: "preferDestructuring",
267 data
: { type
: "array" },
268 type
: "AssignmentExpression"
272 code
: "var foo = array[0];",
276 VariableDeclarator
: { array
: true },
277 AssignmentExpression
: { array
: false }
279 { enforceForRenamedProperties
: true }
282 messageId
: "preferDestructuring",
283 data
: { type
: "array" },
284 type
: "VariableDeclarator"
288 code
: "var foo = array[0];",
292 VariableDeclarator
: { array
: true },
293 AssignmentExpression
: { array
: false }
297 messageId
: "preferDestructuring",
298 data
: { type
: "array" },
299 type
: "VariableDeclarator"
303 code
: "foo = array[0];",
307 VariableDeclarator
: { array
: false },
308 AssignmentExpression
: { array
: true }
312 messageId
: "preferDestructuring",
313 data
: { type
: "array" },
314 type
: "AssignmentExpression"
318 code
: "foo = object.foo;",
322 VariableDeclarator
: { array
: true, object
: false },
323 AssignmentExpression
: { object
: true }
327 messageId
: "preferDestructuring",
328 data
: { type
: "object" },
329 type
: "AssignmentExpression"
333 code
: "class Foo extends Bar { static foo() {var bar = super.foo.bar} }",
334 output
: "class Foo extends Bar { static foo() {var {bar} = super.foo} }",
336 messageId
: "preferDestructuring",
337 data
: { type
: "object" },
338 type
: "VariableDeclarator"