2 * @fileoverview Rule to enforce placing object properties on separate lines.
3 * @author Vitor Balocco
8 //------------------------------------------------------------------------------
10 //------------------------------------------------------------------------------
12 const rule
= require("../../../lib/rules/object-property-newline"),
13 { RuleTester
} = require("../../../lib/rule-tester");
15 //------------------------------------------------------------------------------
17 //------------------------------------------------------------------------------
19 const ruleTester
= new RuleTester();
21 ruleTester
.run("object-property-newline", rule
, {
26 "var obj = {\nk1: 'val1',\nk2: 'val2',\nk3: 'val3',\nk4: 'val4'\n};",
27 "var obj = {\nk1: 'val1'\n, k2: 'val2'\n, k3: 'val3'\n, k4: 'val4'\n};",
28 "var obj = { k1: 'val1',\nk2: 'val2',\nk3: 'val3',\nk4: 'val4' };",
29 "var obj = { k1: 'val1'\n, k2: 'val2'\n, k3: 'val3'\n, k4: 'val4' };",
30 "var obj = { k1: 'val1' };",
31 "var obj = {\nk1: 'val1'\n};",
33 { code
: "var obj = {\n[bar]: 'baz',\nbaz\n};", parserOptions
: { ecmaVersion
: 6 } },
34 { code
: "var obj = {\nk1: 'val1',\nk2: 'val2',\n...{}\n};", parserOptions
: { ecmaVersion
: 2018 } },
35 { code
: "var obj = { k1: 'val1',\nk2: 'val2',\n...{} };", parserOptions
: { ecmaVersion
: 2018 } },
36 { code
: "var obj = { ...{} };", parserOptions
: { ecmaVersion
: 2018 } },
37 "foo({ k1: 'val1',\nk2: 'val2' });",
38 "foo({\nk1: 'val1',\nk2: 'val2'\n});",
39 { code
: "foo({\na,\nb\n});", parserOptions
: { ecmaVersion
: 6 } },
40 { code
: "foo({\na,\nb,\n});", parserOptions
: { ecmaVersion
: 6 } },
41 { code
: "foo({\nbar() {},\nbaz\n});", parserOptions
: { ecmaVersion
: 6 } },
42 { code
: "foo({\n[bar]: 'baz',\nbaz \n})", parserOptions
: { ecmaVersion
: 6 } },
43 { code
: "foo({\nk1: 'val1',\nk2: 'val2',\n...{}\n});", parserOptions
: { ecmaVersion
: 2018 } },
44 { code
: "foo({ k1: 'val1',\nk2: 'val2',\n...{} });", parserOptions
: { ecmaVersion
: 2018 } },
45 { code
: "foo({ ...{} });", parserOptions
: { ecmaVersion
: 2018 } },
47 // allowAllPropertiesOnSameLine: true
48 { code
: "var obj = { k1: 'val1', k2: 'val2', k3: 'val3' };", options
: [{ allowAllPropertiesOnSameLine
: true }] },
49 { code
: "var obj = {\nk1: 'val1', k2: 'val2', k3: 'val3'\n};", options
: [{ allowAllPropertiesOnSameLine
: true }] },
50 { code
: "var obj = { k1: 'val1' };", options
: [{ allowAllPropertiesOnSameLine
: true }] },
51 { code
: "var obj = {\nk1: 'val1'\n};", options
: [{ allowAllPropertiesOnSameLine
: true }] },
52 { code
: "var obj = {};", options
: [{ allowAllPropertiesOnSameLine
: true }] },
53 { code
: "var obj = { 'k1': 'val1', k2: 'val2', ...{} };", options
: [{ allowAllPropertiesOnSameLine
: true }], parserOptions
: { ecmaVersion
: 2018 } },
54 { code
: "var obj = {\n'k1': 'val1', k2: 'val2', ...{}\n};", options
: [{ allowAllPropertiesOnSameLine
: true }], parserOptions
: { ecmaVersion
: 2018 } },
55 { code
: "foo({ k1: 'val1', k2: 'val2' });", options
: [{ allowAllPropertiesOnSameLine
: true }] },
56 { code
: "foo({\nk1: 'val1', k2: 'val2'\n});", options
: [{ allowAllPropertiesOnSameLine
: true }] },
57 { code
: "foo({ a, b });", options
: [{ allowAllPropertiesOnSameLine
: true }], parserOptions
: { ecmaVersion
: 6 } },
58 { code
: "foo({ bar() {}, baz });", options
: [{ allowAllPropertiesOnSameLine
: true }], parserOptions
: { ecmaVersion
: 6 } },
59 { code
: "foo({ [bar]: 'baz', baz })", options
: [{ allowAllPropertiesOnSameLine
: true }], parserOptions
: { ecmaVersion
: 6 } },
60 { code
: "foo({ 'k1': 'val1', k2: 'val2', ...{} });", options
: [{ allowAllPropertiesOnSameLine
: true }], parserOptions
: { ecmaVersion
: 2018 } },
61 { code
: "foo({\n'k1': 'val1', k2: 'val2', ...{}\n});", options
: [{ allowAllPropertiesOnSameLine
: true }], parserOptions
: { ecmaVersion
: 2018 } },
62 { code
: "var obj = {k1: ['foo', 'bar'], k2: 'val1', k3: 'val2'};", options
: [{ allowAllPropertiesOnSameLine
: true }] },
63 { code
: "var obj = {\nk1: ['foo', 'bar'], k2: 'val1', k3: 'val2'\n};", options
: [{ allowAllPropertiesOnSameLine
: true }] },
64 { code
: "var obj = {\nk1: 'val1', k2: {e1: 'foo', e2: 'bar'}, k3: 'val2'\n};", options
: [{ allowAllPropertiesOnSameLine
: true }] },
66 // allowMultiplePropertiesPerLine: true (deprecated)
67 { code
: "var obj = { k1: 'val1', k2: 'val2', k3: 'val3' };", options
: [{ allowMultiplePropertiesPerLine
: true }] }
74 code
: "var obj = { k1: 'val1', k2: 'val2', k3: 'val3' };",
75 output
: "var obj = { k1: 'val1',\nk2: 'val2',\nk3: 'val3' };",
78 messageId
: "propertiesOnNewline",
79 type
: "ObjectExpression",
84 messageId
: "propertiesOnNewline",
85 type
: "ObjectExpression",
92 code
: "var obj = {\nk1: 'val1', k2: 'val2'\n};",
93 output
: "var obj = {\nk1: 'val1',\nk2: 'val2'\n};",
96 messageId
: "propertiesOnNewline",
97 type
: "ObjectExpression",
104 code
: "var obj = {\nk1: 'val1', k2: 'val2',\nk3: 'val3', k4: 'val4'\n};",
105 output
: "var obj = {\nk1: 'val1',\nk2: 'val2',\nk3: 'val3',\nk4: 'val4'\n};",
108 messageId
: "propertiesOnNewline",
109 type
: "ObjectExpression",
114 messageId
: "propertiesOnNewline",
115 type
: "ObjectExpression",
122 code
: "var obj = {k1: ['foo', 'bar'], k2: 'val1'};",
123 output
: "var obj = {k1: ['foo', 'bar'],\nk2: 'val1'};",
126 messageId
: "propertiesOnNewline",
127 type
: "ObjectExpression",
134 code
: "var obj = {k1: [\n'foo', 'bar'\n], k2: 'val1'};",
135 output
: "var obj = {k1: [\n'foo', 'bar'\n],\nk2: 'val1'};",
138 messageId
: "propertiesOnNewline",
139 type
: "ObjectExpression",
146 code
: "var obj = {\nk1: 'val1', k2: {e1: 'foo', e2: 'bar'}, k3: 'val2'\n};",
147 output
: "var obj = {\nk1: 'val1',\nk2: {e1: 'foo',\ne2: 'bar'},\nk3: 'val2'\n};",
150 messageId
: "propertiesOnNewline",
151 type
: "ObjectExpression",
156 messageId
: "propertiesOnNewline",
157 type
: "ObjectExpression",
162 messageId
: "propertiesOnNewline",
163 type
: "ObjectExpression",
170 code
: "var obj = {\nk1: 'val1',\nk2: {e1: 'foo', e2: 'bar'},\nk3: 'val2'\n};",
171 output
: "var obj = {\nk1: 'val1',\nk2: {e1: 'foo',\ne2: 'bar'},\nk3: 'val2'\n};",
174 messageId
: "propertiesOnNewline",
175 type
: "ObjectExpression",
182 code
: "var obj = { k1: 'val1',\nk2: [\n'val2a', 'val2b', 'val2c'\n], k3: 'val3' };",
183 output
: "var obj = { k1: 'val1',\nk2: [\n'val2a', 'val2b', 'val2c'\n],\nk3: 'val3' };",
186 messageId
: "propertiesOnNewline",
187 type
: "ObjectExpression",
194 code
: "var obj = { k1: 'val1', [\nk2]: 'val2' };",
195 output
: "var obj = { k1: 'val1',\n[\nk2]: 'val2' };",
196 parserOptions
: { ecmaVersion
: 6 },
199 messageId
: "propertiesOnNewline",
200 type
: "ObjectExpression",
207 code
: "var obj = { k1: 'val1', ...{} };",
208 output
: "var obj = { k1: 'val1',\n...{} };",
209 parserOptions
: { ecmaVersion
: 2018 },
212 messageId
: "propertiesOnNewline",
213 type
: "ObjectExpression",
220 code
: "var obj = {\nk1: 'val1', ...{}\n};",
221 output
: "var obj = {\nk1: 'val1',\n...{}\n};",
222 parserOptions
: { ecmaVersion
: 2018 },
225 messageId
: "propertiesOnNewline",
226 type
: "ObjectExpression",
233 code
: "foo({ k1: 'val1', k2: 'val2' });",
234 output
: "foo({ k1: 'val1',\nk2: 'val2' });",
237 messageId
: "propertiesOnNewline",
238 type
: "ObjectExpression",
245 code
: "foo({\nk1: 'val1', k2: 'val2'\n});",
246 output
: "foo({\nk1: 'val1',\nk2: 'val2'\n});",
249 messageId
: "propertiesOnNewline",
250 type
: "ObjectExpression",
257 code
: "foo({ a, b });",
258 output
: "foo({ a,\nb });",
259 parserOptions
: { ecmaVersion
: 6 },
262 messageId
: "propertiesOnNewline",
263 type
: "ObjectExpression",
270 code
: "foo({\na, b\n});",
271 output
: "foo({\na,\nb\n});",
272 parserOptions
: { ecmaVersion
: 6 },
275 messageId
: "propertiesOnNewline",
276 type
: "ObjectExpression",
283 code
: "foo({\nbar() {}, baz\n});",
284 output
: "foo({\nbar() {},\nbaz\n});",
285 parserOptions
: { ecmaVersion
: 6 },
288 messageId
: "propertiesOnNewline",
289 type
: "ObjectExpression",
296 code
: "foo({\n[bar]: 'baz', baz\n})",
297 output
: "foo({\n[bar]: 'baz',\nbaz\n})",
298 parserOptions
: { ecmaVersion
: 6 },
301 messageId
: "propertiesOnNewline",
302 type
: "ObjectExpression",
309 code
: "foo({ k1: 'val1', [\nk2]: 'val2' })",
310 output
: "foo({ k1: 'val1',\n[\nk2]: 'val2' })",
311 parserOptions
: { ecmaVersion
: 6 },
314 messageId
: "propertiesOnNewline",
315 type
: "ObjectExpression",
322 code
: "foo({ k1: 'val1', ...{} })",
323 output
: "foo({ k1: 'val1',\n...{} })",
324 parserOptions
: { ecmaVersion
: 2018 },
327 messageId
: "propertiesOnNewline",
328 type
: "ObjectExpression",
335 code
: "foo({\nk1: 'val1', ...{}\n})",
336 output
: "foo({\nk1: 'val1',\n...{}\n})",
337 parserOptions
: { ecmaVersion
: 2018 },
340 messageId
: "propertiesOnNewline",
341 type
: "ObjectExpression",
348 code
: "var obj = {\na: {\nb: 1,\nc: 2\n}, d: 2\n};",
349 output
: "var obj = {\na: {\nb: 1,\nc: 2\n},\nd: 2\n};",
352 messageId
: "propertiesOnNewline",
353 type
: "ObjectExpression",
360 code
: "({ foo: 1 /* comment */, bar: 2 })",
361 output
: "({ foo: 1 /* comment */,\nbar: 2 })",
364 messageId
: "propertiesOnNewline",
365 type
: "ObjectExpression",
372 code
: "({ foo: 1, /* comment */ bar: 2 })",
373 output
: null, // not fixed due to comment
376 messageId
: "propertiesOnNewline",
377 type
: "ObjectExpression",
384 // allowAllPropertiesOnSameLine: true
386 code
: "var obj = {\nk1: 'val1',\nk2: 'val2', k3: 'val3'\n};",
387 output
: "var obj = {\nk1: 'val1',\nk2: 'val2',\nk3: 'val3'\n};",
388 options
: [{ allowAllPropertiesOnSameLine
: true }],
391 messageId
: "propertiesOnNewlineAll",
392 type
: "ObjectExpression",
399 code
: "var obj = {\nk1:\n'val1', k2: 'val2', k3:\n'val3'\n};",
400 output
: "var obj = {\nk1:\n'val1',\nk2: 'val2',\nk3:\n'val3'\n};",
401 options
: [{ allowAllPropertiesOnSameLine
: true }],
404 messageId
: "propertiesOnNewlineAll",
405 type
: "ObjectExpression",
410 messageId
: "propertiesOnNewlineAll",
411 type
: "ObjectExpression",
418 code
: "var obj = {k1: [\n'foo',\n'bar'\n], k2: 'val1'};",
419 output
: "var obj = {k1: [\n'foo',\n'bar'\n],\nk2: 'val1'};",
420 options
: [{ allowAllPropertiesOnSameLine
: true }],
423 messageId
: "propertiesOnNewlineAll",
424 type
: "ObjectExpression",
431 code
: "var obj = {k1: [\n'foo', 'bar'\n], k2: 'val1'};",
432 output
: "var obj = {k1: [\n'foo', 'bar'\n],\nk2: 'val1'};",
433 options
: [{ allowAllPropertiesOnSameLine
: true }],
436 messageId
: "propertiesOnNewlineAll",
437 type
: "ObjectExpression",
444 code
: "var obj = {\nk1: 'val1', k2: {\ne1: 'foo', e2: 'bar'\n}, k3: 'val2'\n};",
445 output
: "var obj = {\nk1: 'val1',\nk2: {\ne1: 'foo', e2: 'bar'\n},\nk3: 'val2'\n};",
446 options
: [{ allowAllPropertiesOnSameLine
: true }],
449 messageId
: "propertiesOnNewlineAll",
450 type
: "ObjectExpression",
455 messageId
: "propertiesOnNewlineAll",
456 type
: "ObjectExpression",
463 code
: "var obj = { k1: 'val1',\nk2: [\n'val2a', 'val2b', 'val2c'\n], k3: 'val3' };",
464 output
: "var obj = { k1: 'val1',\nk2: [\n'val2a', 'val2b', 'val2c'\n],\nk3: 'val3' };",
465 options
: [{ allowAllPropertiesOnSameLine
: true }],
468 messageId
: "propertiesOnNewlineAll",
469 type
: "ObjectExpression",
476 code
: "var obj = { [\nk1]: 'val1', k2: 'val2' };",
477 output
: "var obj = { [\nk1]: 'val1',\nk2: 'val2' };",
478 options
: [{ allowAllPropertiesOnSameLine
: true }],
479 parserOptions
: { ecmaVersion
: 6 },
482 messageId
: "propertiesOnNewlineAll",
483 type
: "ObjectExpression",
490 code
: "var obj = {\nk1: 'val1',\nk2: 'val2', ...{}\n};",
491 output
: "var obj = {\nk1: 'val1',\nk2: 'val2',\n...{}\n};",
492 options
: [{ allowAllPropertiesOnSameLine
: true }],
493 parserOptions
: { ecmaVersion
: 2018 },
496 messageId
: "propertiesOnNewlineAll",
497 type
: "ObjectExpression",
504 code
: "var obj = {\n...{},\nk1: 'val1', k2: 'val2'\n};",
505 output
: "var obj = {\n...{},\nk1: 'val1',\nk2: 'val2'\n};",
506 options
: [{ allowAllPropertiesOnSameLine
: true }],
507 parserOptions
: { ecmaVersion
: 2018 },
510 messageId
: "propertiesOnNewlineAll",
511 type
: "ObjectExpression",
518 code
: "foo({ [\nk1]: 'val1', k2: 'val2' })",
519 output
: "foo({ [\nk1]: 'val1',\nk2: 'val2' })",
520 options
: [{ allowAllPropertiesOnSameLine
: true }],
521 parserOptions
: { ecmaVersion
: 6 },
524 messageId
: "propertiesOnNewlineAll",
525 type
: "ObjectExpression",
532 code
: "foo({\nk1: 'val1',\nk2: 'val2', ...{}\n})",
533 output
: "foo({\nk1: 'val1',\nk2: 'val2',\n...{}\n})",
534 options
: [{ allowAllPropertiesOnSameLine
: true }],
535 parserOptions
: { ecmaVersion
: 2018 },
538 messageId
: "propertiesOnNewlineAll",
539 type
: "ObjectExpression",
546 code
: "foo({\n...{},\nk1: 'val1', k2: 'val2'\n})",
547 output
: "foo({\n...{},\nk1: 'val1',\nk2: 'val2'\n})",
548 options
: [{ allowAllPropertiesOnSameLine
: true }],
549 parserOptions
: { ecmaVersion
: 2018 },
552 messageId
: "propertiesOnNewlineAll",
553 type
: "ObjectExpression",
560 // allowMultiplePropertiesPerLine: true (deprecated)
562 code
: "var obj = {\nk1: 'val1',\nk2: 'val2', k3: 'val3'\n};",
563 output
: "var obj = {\nk1: 'val1',\nk2: 'val2',\nk3: 'val3'\n};",
564 options
: [{ allowMultiplePropertiesPerLine
: true }],
567 messageId
: "propertiesOnNewlineAll",
568 type
: "ObjectExpression",