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",
86 messageId
: "propertiesOnNewline",
87 type
: "ObjectExpression",
96 code
: "var obj = { k1: 'val1', k2: \n'val2', \nk3: 'val3' };",
97 output
: "var obj = { k1: 'val1',\nk2: \n'val2', \nk3: 'val3' };",
100 messageId
: "propertiesOnNewline",
101 type
: "ObjectExpression",
110 code
: "var obj = {\nk1: 'val1', k2: 'val2'\n};",
111 output
: "var obj = {\nk1: 'val1',\nk2: 'val2'\n};",
114 messageId
: "propertiesOnNewline",
115 type
: "ObjectExpression",
124 code
: "var obj = {\nk1: 'val1', k2: 'val2',\nk3: 'val3', k4: 'val4'\n};",
125 output
: "var obj = {\nk1: 'val1',\nk2: 'val2',\nk3: 'val3',\nk4: 'val4'\n};",
128 messageId
: "propertiesOnNewline",
129 type
: "ObjectExpression",
136 messageId
: "propertiesOnNewline",
137 type
: "ObjectExpression",
146 code
: "var obj = {k1: ['foo', 'bar'], k2: 'val1'};",
147 output
: "var obj = {k1: ['foo', 'bar'],\nk2: 'val1'};",
150 messageId
: "propertiesOnNewline",
151 type
: "ObjectExpression",
160 code
: "var obj = {k1: [\n'foo', 'bar'\n], k2: 'val1'};",
161 output
: "var obj = {k1: [\n'foo', 'bar'\n],\nk2: 'val1'};",
164 messageId
: "propertiesOnNewline",
165 type
: "ObjectExpression",
174 code
: "var obj = {\nk1: 'val1', k2: {e1: 'foo', e2: 'bar'}, k3: 'val2'\n};",
175 output
: "var obj = {\nk1: 'val1',\nk2: {e1: 'foo',\ne2: 'bar'},\nk3: 'val2'\n};",
178 messageId
: "propertiesOnNewline",
179 type
: "ObjectExpression",
186 messageId
: "propertiesOnNewline",
187 type
: "ObjectExpression",
194 messageId
: "propertiesOnNewline",
195 type
: "ObjectExpression",
204 code
: "var obj = {\nk1: 'val1',\nk2: {e1: 'foo', e2: 'bar'},\nk3: 'val2'\n};",
205 output
: "var obj = {\nk1: 'val1',\nk2: {e1: 'foo',\ne2: 'bar'},\nk3: 'val2'\n};",
208 messageId
: "propertiesOnNewline",
209 type
: "ObjectExpression",
218 code
: "var obj = { k1: 'val1',\nk2: [\n'val2a', 'val2b', 'val2c'\n], k3: 'val3' };",
219 output
: "var obj = { k1: 'val1',\nk2: [\n'val2a', 'val2b', 'val2c'\n],\nk3: 'val3' };",
222 messageId
: "propertiesOnNewline",
223 type
: "ObjectExpression",
232 code
: "var obj = { k1: 'val1', [\nk2]: 'val2' };",
233 output
: "var obj = { k1: 'val1',\n[\nk2]: 'val2' };",
234 parserOptions
: { ecmaVersion
: 6 },
237 messageId
: "propertiesOnNewline",
238 type
: "ObjectExpression",
247 code
: "var obj = { k1: 'val1', ...{} };",
248 output
: "var obj = { k1: 'val1',\n...{} };",
249 parserOptions
: { ecmaVersion
: 2018 },
252 messageId
: "propertiesOnNewline",
253 type
: "ObjectExpression",
262 code
: "var obj = {\nk1: 'val1', ...{}\n};",
263 output
: "var obj = {\nk1: 'val1',\n...{}\n};",
264 parserOptions
: { ecmaVersion
: 2018 },
267 messageId
: "propertiesOnNewline",
268 type
: "ObjectExpression",
277 code
: "foo({ k1: 'val1', k2: 'val2' });",
278 output
: "foo({ k1: 'val1',\nk2: 'val2' });",
281 messageId
: "propertiesOnNewline",
282 type
: "ObjectExpression",
291 code
: "foo({\nk1: 'val1', k2: 'val2'\n});",
292 output
: "foo({\nk1: 'val1',\nk2: 'val2'\n});",
295 messageId
: "propertiesOnNewline",
296 type
: "ObjectExpression",
305 code
: "foo({ a, b });",
306 output
: "foo({ a,\nb });",
307 parserOptions
: { ecmaVersion
: 6 },
310 messageId
: "propertiesOnNewline",
311 type
: "ObjectExpression",
320 code
: "foo({\na, b\n});",
321 output
: "foo({\na,\nb\n});",
322 parserOptions
: { ecmaVersion
: 6 },
325 messageId
: "propertiesOnNewline",
326 type
: "ObjectExpression",
335 code
: "foo({\nbar() {}, baz\n});",
336 output
: "foo({\nbar() {},\nbaz\n});",
337 parserOptions
: { ecmaVersion
: 6 },
340 messageId
: "propertiesOnNewline",
341 type
: "ObjectExpression",
350 code
: "foo({\n[bar]: 'baz', baz\n})",
351 output
: "foo({\n[bar]: 'baz',\nbaz\n})",
352 parserOptions
: { ecmaVersion
: 6 },
355 messageId
: "propertiesOnNewline",
356 type
: "ObjectExpression",
365 code
: "foo({ k1: 'val1', [\nk2]: 'val2' })",
366 output
: "foo({ k1: 'val1',\n[\nk2]: 'val2' })",
367 parserOptions
: { ecmaVersion
: 6 },
370 messageId
: "propertiesOnNewline",
371 type
: "ObjectExpression",
380 code
: "foo({ k1: 'val1', ...{} })",
381 output
: "foo({ k1: 'val1',\n...{} })",
382 parserOptions
: { ecmaVersion
: 2018 },
385 messageId
: "propertiesOnNewline",
386 type
: "ObjectExpression",
395 code
: "foo({\nk1: 'val1', ...{}\n})",
396 output
: "foo({\nk1: 'val1',\n...{}\n})",
397 parserOptions
: { ecmaVersion
: 2018 },
400 messageId
: "propertiesOnNewline",
401 type
: "ObjectExpression",
410 code
: "var obj = {\na: {\nb: 1,\nc: 2\n}, d: 2\n};",
411 output
: "var obj = {\na: {\nb: 1,\nc: 2\n},\nd: 2\n};",
414 messageId
: "propertiesOnNewline",
415 type
: "ObjectExpression",
424 code
: "({ foo: 1 /* comment */, bar: 2 })",
425 output
: "({ foo: 1 /* comment */,\nbar: 2 })",
428 messageId
: "propertiesOnNewline",
429 type
: "ObjectExpression",
438 code
: "({ foo: 1, /* comment */ bar: 2 })",
439 output
: null, // not fixed due to comment
442 messageId
: "propertiesOnNewline",
443 type
: "ObjectExpression",
452 // allowAllPropertiesOnSameLine: true
454 code
: "var obj = {\nk1: 'val1',\nk2: 'val2', k3: 'val3'\n};",
455 output
: "var obj = {\nk1: 'val1',\nk2: 'val2',\nk3: 'val3'\n};",
456 options
: [{ allowAllPropertiesOnSameLine
: true }],
459 messageId
: "propertiesOnNewlineAll",
460 type
: "ObjectExpression",
469 code
: "var obj = {\nk1:\n'val1', k2: 'val2', k3:\n'val3'\n};",
470 output
: "var obj = {\nk1:\n'val1',\nk2: 'val2',\nk3:\n'val3'\n};",
471 options
: [{ allowAllPropertiesOnSameLine
: true }],
474 messageId
: "propertiesOnNewlineAll",
475 type
: "ObjectExpression",
482 messageId
: "propertiesOnNewlineAll",
483 type
: "ObjectExpression",
492 code
: "var obj = {k1: [\n'foo',\n'bar'\n], k2: 'val1'};",
493 output
: "var obj = {k1: [\n'foo',\n'bar'\n],\nk2: 'val1'};",
494 options
: [{ allowAllPropertiesOnSameLine
: true }],
497 messageId
: "propertiesOnNewlineAll",
498 type
: "ObjectExpression",
507 code
: "var obj = {k1: [\n'foo', 'bar'\n], k2: 'val1'};",
508 output
: "var obj = {k1: [\n'foo', 'bar'\n],\nk2: 'val1'};",
509 options
: [{ allowAllPropertiesOnSameLine
: true }],
512 messageId
: "propertiesOnNewlineAll",
513 type
: "ObjectExpression",
522 code
: "var obj = {\nk1: 'val1', k2: {\ne1: 'foo', e2: 'bar'\n}, k3: 'val2'\n};",
523 output
: "var obj = {\nk1: 'val1',\nk2: {\ne1: 'foo', e2: 'bar'\n},\nk3: 'val2'\n};",
524 options
: [{ allowAllPropertiesOnSameLine
: true }],
527 messageId
: "propertiesOnNewlineAll",
528 type
: "ObjectExpression",
535 messageId
: "propertiesOnNewlineAll",
536 type
: "ObjectExpression",
545 code
: "var obj = { k1: 'val1',\nk2: [\n'val2a', 'val2b', 'val2c'\n], k3: 'val3' };",
546 output
: "var obj = { k1: 'val1',\nk2: [\n'val2a', 'val2b', 'val2c'\n],\nk3: 'val3' };",
547 options
: [{ allowAllPropertiesOnSameLine
: true }],
550 messageId
: "propertiesOnNewlineAll",
551 type
: "ObjectExpression",
560 code
: "var obj = { [\nk1]: 'val1', k2: 'val2' };",
561 output
: "var obj = { [\nk1]: 'val1',\nk2: 'val2' };",
562 options
: [{ allowAllPropertiesOnSameLine
: true }],
563 parserOptions
: { ecmaVersion
: 6 },
566 messageId
: "propertiesOnNewlineAll",
567 type
: "ObjectExpression",
576 code
: "var obj = {\nk1: 'val1',\nk2: 'val2', ...{}\n};",
577 output
: "var obj = {\nk1: 'val1',\nk2: 'val2',\n...{}\n};",
578 options
: [{ allowAllPropertiesOnSameLine
: true }],
579 parserOptions
: { ecmaVersion
: 2018 },
582 messageId
: "propertiesOnNewlineAll",
583 type
: "ObjectExpression",
592 code
: "var obj = {\n...{},\nk1: 'val1', k2: 'val2'\n};",
593 output
: "var obj = {\n...{},\nk1: 'val1',\nk2: 'val2'\n};",
594 options
: [{ allowAllPropertiesOnSameLine
: true }],
595 parserOptions
: { ecmaVersion
: 2018 },
598 messageId
: "propertiesOnNewlineAll",
599 type
: "ObjectExpression",
608 code
: "foo({ [\nk1]: 'val1', k2: 'val2' })",
609 output
: "foo({ [\nk1]: 'val1',\nk2: 'val2' })",
610 options
: [{ allowAllPropertiesOnSameLine
: true }],
611 parserOptions
: { ecmaVersion
: 6 },
614 messageId
: "propertiesOnNewlineAll",
615 type
: "ObjectExpression",
624 code
: "foo({\nk1: 'val1',\nk2: 'val2', ...{}\n})",
625 output
: "foo({\nk1: 'val1',\nk2: 'val2',\n...{}\n})",
626 options
: [{ allowAllPropertiesOnSameLine
: true }],
627 parserOptions
: { ecmaVersion
: 2018 },
630 messageId
: "propertiesOnNewlineAll",
631 type
: "ObjectExpression",
640 code
: "foo({\n...{},\nk1: 'val1', k2: 'val2'\n})",
641 output
: "foo({\n...{},\nk1: 'val1',\nk2: 'val2'\n})",
642 options
: [{ allowAllPropertiesOnSameLine
: true }],
643 parserOptions
: { ecmaVersion
: 2018 },
646 messageId
: "propertiesOnNewlineAll",
647 type
: "ObjectExpression",
656 // allowMultiplePropertiesPerLine: true (deprecated)
658 code
: "var obj = {\nk1: 'val1',\nk2: 'val2', k3: 'val3'\n};",
659 output
: "var obj = {\nk1: 'val1',\nk2: 'val2',\nk3: 'val3'\n};",
660 options
: [{ allowMultiplePropertiesPerLine
: true }],
663 messageId
: "propertiesOnNewlineAll",
664 type
: "ObjectExpression",