]>
git.proxmox.com Git - pve-eslint.git/blob - eslint/tests/lib/rules/comma-dangle.js
2 * @fileoverview Tests for comma-dangle rule.
3 * @author Ian Christian Myers
8 //------------------------------------------------------------------------------
10 //------------------------------------------------------------------------------
12 const path
= require("path"),
13 { unIndent
} = require("../../_utils"),
14 rule
= require("../../../lib/rules/comma-dangle"),
15 { RuleTester
} = require("../../../lib/rule-tester");
17 //------------------------------------------------------------------------------
19 //------------------------------------------------------------------------------
22 * Gets the path to the parser of the given name.
23 * @param {string} name The name of a parser to get.
24 * @returns {string} The path to the specified parser.
26 function parser(name
) {
29 `../../fixtures/parsers/comma-dangle/${name}.js`
33 //------------------------------------------------------------------------------
35 //------------------------------------------------------------------------------
37 const ruleTester
= new RuleTester();
39 ruleTester
.defineRule("add-named-import", {
45 ImportDeclaration(node
) {
46 const sourceCode
= context
.getSourceCode();
47 const closingBrace
= sourceCode
.getLastToken(node
, token
=> token
.value
=== "}");
48 const addComma
= sourceCode
.getTokenBefore(closingBrace
).value
!== ",";
51 message
: "Add I18nManager.",
54 return fixer
.insertTextBefore(closingBrace
, `${addComma ? "," : ""}I18nManager`);
62 ruleTester
.run("comma-dangle", rule
, {
64 "var foo = { bar: 'baz' }",
65 "var foo = {\nbar: 'baz'\n}",
66 "var foo = [ 'baz' ]",
67 "var foo = [\n'baz'\n]",
74 { code
: "var foo = [\n (bar ? baz : qux),\n ];", options
: ["always-multiline"] },
75 { code
: "var foo = { bar: 'baz' }", options
: ["never"] },
76 { code
: "var foo = {\nbar: 'baz'\n}", options
: ["never"] },
77 { code
: "var foo = [ 'baz' ]", options
: ["never"] },
78 { code
: "var { a, b } = foo;", options
: ["never"], parserOptions
: { ecmaVersion
: 6 } },
79 { code
: "var [ a, b ] = foo;", options
: ["never"], parserOptions
: { ecmaVersion
: 6 } },
80 { code
: "var { a,\n b, \n} = foo;", options
: ["only-multiline"], parserOptions
: { ecmaVersion
: 6 } },
81 { code
: "var [ a,\n b, \n] = foo;", options
: ["only-multiline"], parserOptions
: { ecmaVersion
: 6 } },
83 { code
: "[(1),]", options
: ["always"] },
84 { code
: "var x = { foo: (1),};", options
: ["always"] },
85 { code
: "var foo = { bar: 'baz', }", options
: ["always"] },
86 { code
: "var foo = {\nbar: 'baz',\n}", options
: ["always"] },
87 { code
: "var foo = {\nbar: 'baz'\n,}", options
: ["always"] },
88 { code
: "var foo = [ 'baz', ]", options
: ["always"] },
89 { code
: "var foo = [\n'baz',\n]", options
: ["always"] },
90 { code
: "var foo = [\n'baz'\n,]", options
: ["always"] },
91 { code
: "[,,]", options
: ["always"] },
92 { code
: "[\n,\n,\n]", options
: ["always"] },
93 { code
: "[,]", options
: ["always"] },
94 { code
: "[\n,\n]", options
: ["always"] },
95 { code
: "[]", options
: ["always"] },
96 { code
: "[\n]", options
: ["always"] },
98 { code
: "var foo = { bar: 'baz' }", options
: ["always-multiline"] },
99 { code
: "var foo = { bar: 'baz' }", options
: ["only-multiline"] },
100 { code
: "var foo = {\nbar: 'baz',\n}", options
: ["always-multiline"] },
101 { code
: "var foo = {\nbar: 'baz',\n}", options
: ["only-multiline"] },
102 { code
: "var foo = [ 'baz' ]", options
: ["always-multiline"] },
103 { code
: "var foo = [ 'baz' ]", options
: ["only-multiline"] },
104 { code
: "var foo = [\n'baz',\n]", options
: ["always-multiline"] },
105 { code
: "var foo = [\n'baz',\n]", options
: ["only-multiline"] },
106 { code
: "var foo = { bar:\n\n'bar' }", options
: ["always-multiline"] },
107 { code
: "var foo = { bar:\n\n'bar' }", options
: ["only-multiline"] },
108 { code
: "var foo = {a: 1, b: 2, c: 3, d: 4}", options
: ["always-multiline"] },
109 { code
: "var foo = {a: 1, b: 2, c: 3, d: 4}", options
: ["only-multiline"] },
110 { code
: "var foo = {a: 1, b: 2,\n c: 3, d: 4}", options
: ["always-multiline"] },
111 { code
: "var foo = {a: 1, b: 2,\n c: 3, d: 4}", options
: ["only-multiline"] },
112 { code
: "var foo = {x: {\nfoo: 'bar',\n}}", options
: ["always-multiline"] },
113 { code
: "var foo = {x: {\nfoo: 'bar',\n}}", options
: ["only-multiline"] },
114 { code
: "var foo = new Map([\n[key, {\na: 1,\nb: 2,\nc: 3,\n}],\n])", options
: ["always-multiline"] },
115 { code
: "var foo = new Map([\n[key, {\na: 1,\nb: 2,\nc: 3,\n}],\n])", options
: ["only-multiline"] },
117 // https://github.com/eslint/eslint/issues/3627
119 code
: "var [a, ...rest] = [];",
121 parserOptions
: { ecmaVersion
: 6 }
124 code
: "var [\n a,\n ...rest\n] = [];",
126 parserOptions
: { ecmaVersion
: 6 }
129 code
: "var [\n a,\n ...rest\n] = [];",
130 options
: ["always-multiline"],
131 parserOptions
: { ecmaVersion
: 6 }
134 code
: "var [\n a,\n ...rest\n] = [];",
135 options
: ["only-multiline"],
136 parserOptions
: { ecmaVersion
: 6 }
139 code
: "[a, ...rest] = [];",
141 parserOptions
: { ecmaVersion
: 6 }
144 code
: "for ([a, ...rest] of []);",
146 parserOptions
: { ecmaVersion
: 6 }
149 code
: "var a = [b, ...spread,];",
151 parserOptions
: { ecmaVersion
: 6 }
154 // https://github.com/eslint/eslint/issues/7297
156 code
: "var {foo, ...bar} = baz",
158 parserOptions
: { ecmaVersion
: 2018 }
161 // https://github.com/eslint/eslint/issues/3794
163 code
: "import {foo,} from 'foo';",
165 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
168 code
: "import foo from 'foo';",
170 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
173 code
: "import foo, {abc,} from 'foo';",
175 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
178 code
: "import * as foo from 'foo';",
180 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
183 code
: "export {foo,} from 'foo';",
185 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
188 code
: "import {foo} from 'foo';",
190 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
193 code
: "import foo from 'foo';",
195 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
198 code
: "import foo, {abc} from 'foo';",
200 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
203 code
: "import * as foo from 'foo';",
205 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
208 code
: "export {foo} from 'foo';",
210 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
213 code
: "import {foo} from 'foo';",
214 options
: ["always-multiline"],
215 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
218 code
: "import {foo} from 'foo';",
219 options
: ["only-multiline"],
220 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
223 code
: "export {foo} from 'foo';",
224 options
: ["always-multiline"],
225 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
228 code
: "export {foo} from 'foo';",
229 options
: ["only-multiline"],
230 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
233 code
: "import {\n foo,\n} from 'foo';",
234 options
: ["always-multiline"],
235 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
238 code
: "import {\n foo,\n} from 'foo';",
239 options
: ["only-multiline"],
240 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
243 code
: "export {\n foo,\n} from 'foo';",
244 options
: ["always-multiline"],
245 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
248 code
: "export {\n foo,\n} from 'foo';",
249 options
: ["only-multiline"],
250 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
253 code
: "import {foo} from \n'foo';",
254 options
: ["always-multiline"],
255 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
258 code
: "import {foo} from \n'foo';",
259 options
: ["only-multiline"],
260 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
263 code
: "function foo(a) {}",
271 code
: "function foo(a) {}",
279 code
: "function foo(a,\nb) {}",
280 options
: ["always-multiline"]
284 options
: ["always-multiline"]
287 code
: "function foo(a,\nb) {}",
288 options
: ["only-multiline"]
292 options
: ["only-multiline"]
295 code
: "function foo(a) {}",
297 parserOptions
: { ecmaVersion
: 7 }
302 parserOptions
: { ecmaVersion
: 7 }
305 code
: "function foo(a) {}",
307 parserOptions
: { ecmaVersion
: 7 }
312 parserOptions
: { ecmaVersion
: 7 }
315 code
: "function foo(a,\nb) {}",
316 options
: ["always-multiline"],
317 parserOptions
: { ecmaVersion
: 7 }
321 options
: ["always-multiline"],
322 parserOptions
: { ecmaVersion
: 7 }
325 code
: "function foo(a,\nb) {}",
326 options
: ["only-multiline"],
327 parserOptions
: { ecmaVersion
: 7 }
331 options
: ["only-multiline"],
332 parserOptions
: { ecmaVersion
: 7 }
335 code
: "function foo(a) {}",
337 parserOptions
: { ecmaVersion
: 8 }
342 parserOptions
: { ecmaVersion
: 8 }
345 code
: "function foo(a,) {}",
347 parserOptions
: { ecmaVersion
: 8 }
352 parserOptions
: { ecmaVersion
: 8 }
355 code
: "function foo(\na,\nb,\n) {}",
356 options
: ["always-multiline"],
357 parserOptions
: { ecmaVersion
: 8 }
361 options
: ["always-multiline"],
362 parserOptions
: { ecmaVersion
: 8 }
365 code
: "function foo(a,b) {}",
366 options
: ["always-multiline"],
367 parserOptions
: { ecmaVersion
: 8 }
371 options
: ["always-multiline"],
372 parserOptions
: { ecmaVersion
: 8 }
375 code
: "function foo(a,b) {}",
376 options
: ["only-multiline"],
377 parserOptions
: { ecmaVersion
: 8 }
381 options
: ["only-multiline"],
382 parserOptions
: { ecmaVersion
: 8 }
385 // trailing comma in functions
387 code
: "function foo(a) {} ",
389 parserOptions
: { ecmaVersion
: 8 }
394 parserOptions
: { ecmaVersion
: 8 }
397 code
: "function foo(a) {} ",
398 options
: [{ functions
: "never" }],
399 parserOptions
: { ecmaVersion
: 8 }
403 options
: [{ functions
: "never" }],
404 parserOptions
: { ecmaVersion
: 8 }
407 code
: "function foo(a,) {}",
408 options
: [{ functions
: "always" }],
409 parserOptions
: { ecmaVersion
: 8 }
412 code
: "function bar(a, ...b) {}",
413 options
: [{ functions
: "always" }],
414 parserOptions
: { ecmaVersion
: 8 }
418 options
: [{ functions
: "always" }],
419 parserOptions
: { ecmaVersion
: 8 }
423 options
: [{ functions
: "always" }],
424 parserOptions
: { ecmaVersion
: 9 }
428 options
: [{ functions
: "always" }],
429 parserOptions
: { ecmaVersion
: 8 }
432 code
: "function foo(a) {} ",
433 options
: [{ functions
: "always-multiline" }],
434 parserOptions
: { ecmaVersion
: 8 }
438 options
: [{ functions
: "always-multiline" }],
439 parserOptions
: { ecmaVersion
: 8 }
442 code
: "function foo(\na,\nb,\n) {} ",
443 options
: [{ functions
: "always-multiline" }],
444 parserOptions
: { ecmaVersion
: 8 }
447 code
: "function foo(\na,\n...b\n) {} ",
448 options
: [{ functions
: "always-multiline" }],
449 parserOptions
: { ecmaVersion
: 8 }
452 code
: "foo(\na,\nb,\n)",
453 options
: [{ functions
: "always-multiline" }],
454 parserOptions
: { ecmaVersion
: 8 }
457 code
: "foo(\na,\n...b,\n)",
458 options
: [{ functions
: "always-multiline" }],
459 parserOptions
: { ecmaVersion
: 8 }
462 code
: "function foo(a) {} ",
463 options
: [{ functions
: "only-multiline" }],
464 parserOptions
: { ecmaVersion
: 8 }
468 options
: [{ functions
: "only-multiline" }],
469 parserOptions
: { ecmaVersion
: 8 }
472 code
: "function foo(\na,\nb,\n) {} ",
473 options
: [{ functions
: "only-multiline" }],
474 parserOptions
: { ecmaVersion
: 8 }
477 code
: "foo(\na,\nb,\n)",
478 options
: [{ functions
: "only-multiline" }],
479 parserOptions
: { ecmaVersion
: 8 }
482 code
: "function foo(\na,\nb\n) {} ",
483 options
: [{ functions
: "only-multiline" }],
484 parserOptions
: { ecmaVersion
: 8 }
487 code
: "foo(\na,\nb\n)",
488 options
: [{ functions
: "only-multiline" }],
489 parserOptions
: { ecmaVersion
: 8 }
492 // https://github.com/eslint/eslint/issues/7370
494 code
: "function foo({a}: {a: string,}) {}",
496 parser
: parser("object-pattern-1")
499 code
: "function foo({a,}: {a: string}) {}",
501 parser
: parser("object-pattern-2")
504 code
: "function foo(a): {b: boolean,} {}",
505 options
: [{ functions
: "never" }],
506 parser
: parser("return-type-1")
509 code
: "function foo(a,): {b: boolean} {}",
510 options
: [{ functions
: "always" }],
511 parser
: parser("return-type-2")
516 code
: "var foo = { bar: 'baz', }",
517 output
: "var foo = { bar: 'baz' }",
520 messageId
: "unexpected",
529 code
: "var foo = {\nbar: 'baz',\n}",
530 output
: "var foo = {\nbar: 'baz'\n}",
533 messageId
: "unexpected",
542 code
: "foo({ bar: 'baz', qux: 'quux', });",
543 output
: "foo({ bar: 'baz', qux: 'quux' });",
546 messageId
: "unexpected",
554 code
: "foo({\nbar: 'baz',\nqux: 'quux',\n});",
555 output
: "foo({\nbar: 'baz',\nqux: 'quux'\n});",
558 messageId
: "unexpected",
566 code
: "var foo = [ 'baz', ]",
567 output
: "var foo = [ 'baz' ]",
570 messageId
: "unexpected",
578 code
: "var foo = [ 'baz',\n]",
579 output
: "var foo = [ 'baz'\n]",
582 messageId
: "unexpected",
590 code
: "var foo = { bar: 'bar'\n\n, }",
591 output
: "var foo = { bar: 'bar'\n\n }",
594 messageId
: "unexpected",
604 code
: "var foo = { bar: 'baz', }",
605 output
: "var foo = { bar: 'baz' }",
609 messageId
: "unexpected",
617 code
: "var foo = { bar: 'baz', }",
618 output
: "var foo = { bar: 'baz' }",
619 options
: ["only-multiline"],
622 messageId
: "unexpected",
630 code
: "var foo = {\nbar: 'baz',\n}",
631 output
: "var foo = {\nbar: 'baz'\n}",
635 messageId
: "unexpected",
643 code
: "foo({ bar: 'baz', qux: 'quux', });",
644 output
: "foo({ bar: 'baz', qux: 'quux' });",
648 messageId
: "unexpected",
656 code
: "foo({ bar: 'baz', qux: 'quux', });",
657 output
: "foo({ bar: 'baz', qux: 'quux' });",
658 options
: ["only-multiline"],
661 messageId
: "unexpected",
670 code
: "var foo = { bar: 'baz' }",
671 output
: "var foo = { bar: 'baz', }",
675 messageId
: "missing",
685 code
: "var foo = {\nbar: 'baz'\n}",
686 output
: "var foo = {\nbar: 'baz',\n}",
690 messageId
: "missing",
700 code
: "var foo = {\nbar: 'baz'\r\n}",
701 output
: "var foo = {\nbar: 'baz',\r\n}",
705 messageId
: "missing",
715 code
: "foo({ bar: 'baz', qux: 'quux' });",
716 output
: "foo({ bar: 'baz', qux: 'quux', });",
720 messageId
: "missing",
731 code
: "foo({\nbar: 'baz',\nqux: 'quux'\n});",
732 output
: "foo({\nbar: 'baz',\nqux: 'quux',\n});",
736 messageId
: "missing",
746 code
: "var foo = [ 'baz' ]",
747 output
: "var foo = [ 'baz', ]",
751 messageId
: "missing",
759 code
: "var foo = ['baz']",
760 output
: "var foo = ['baz',]",
764 messageId
: "missing",
773 code
: "var foo = [ 'baz'\n]",
774 output
: "var foo = [ 'baz',\n]",
778 messageId
: "missing",
786 code
: "var foo = { bar:\n\n'bar' }",
787 output
: "var foo = { bar:\n\n'bar', }",
791 messageId
: "missing",
800 code
: "var foo = {\nbar: 'baz'\n}",
801 output
: "var foo = {\nbar: 'baz',\n}",
802 options
: ["always-multiline"],
805 messageId
: "missing",
830 messageId
: "missing",
855 messageId
: "missing",
864 // https://github.com/eslint/eslint/issues/7291
882 messageId
: "missing",
883 type
: "ConditionalExpression",
890 code
: "var foo = { bar: 'baz', }",
891 output
: "var foo = { bar: 'baz' }",
892 options
: ["always-multiline"],
895 messageId
: "unexpected",
903 code
: "foo({\nbar: 'baz',\nqux: 'quux'\n});",
904 output
: "foo({\nbar: 'baz',\nqux: 'quux',\n});",
905 options
: ["always-multiline"],
908 messageId
: "missing",
916 code
: "foo({ bar: 'baz', qux: 'quux', });",
917 output
: "foo({ bar: 'baz', qux: 'quux' });",
918 options
: ["always-multiline"],
921 messageId
: "unexpected",
929 code
: "var foo = [\n'baz'\n]",
930 output
: "var foo = [\n'baz',\n]",
931 options
: ["always-multiline"],
934 messageId
: "missing",
942 code
: "var foo = ['baz',]",
943 output
: "var foo = ['baz']",
944 options
: ["always-multiline"],
947 messageId
: "unexpected",
955 code
: "var foo = ['baz',]",
956 output
: "var foo = ['baz']",
957 options
: ["only-multiline"],
960 messageId
: "unexpected",
968 code
: "var foo = {x: {\nfoo: 'bar',\n},}",
969 output
: "var foo = {x: {\nfoo: 'bar',\n}}",
970 options
: ["always-multiline"],
973 messageId
: "unexpected",
981 code
: "var foo = {a: 1, b: 2,\nc: 3, d: 4,}",
982 output
: "var foo = {a: 1, b: 2,\nc: 3, d: 4}",
983 options
: ["always-multiline"],
986 messageId
: "unexpected",
994 code
: "var foo = {a: 1, b: 2,\nc: 3, d: 4,}",
995 output
: "var foo = {a: 1, b: 2,\nc: 3, d: 4}",
996 options
: ["only-multiline"],
999 messageId
: "unexpected",
1007 code
: "var foo = [{\na: 1,\nb: 2,\nc: 3,\nd: 4,\n},]",
1008 output
: "var foo = [{\na: 1,\nb: 2,\nc: 3,\nd: 4,\n}]",
1009 options
: ["always-multiline"],
1012 messageId
: "unexpected",
1013 type
: "ObjectExpression",
1020 code
: "var { a, b, } = foo;",
1021 output
: "var { a, b } = foo;",
1023 parserOptions
: { ecmaVersion
: 6 },
1026 messageId
: "unexpected",
1034 code
: "var { a, b, } = foo;",
1035 output
: "var { a, b } = foo;",
1036 options
: ["only-multiline"],
1037 parserOptions
: { ecmaVersion
: 6 },
1040 messageId
: "unexpected",
1048 code
: "var [ a, b, ] = foo;",
1049 output
: "var [ a, b ] = foo;",
1051 parserOptions
: { ecmaVersion
: 6 },
1054 messageId
: "unexpected",
1062 code
: "var [ a, b, ] = foo;",
1063 output
: "var [ a, b ] = foo;",
1064 options
: ["only-multiline"],
1065 parserOptions
: { ecmaVersion
: 6 },
1068 messageId
: "unexpected",
1081 messageId
: "unexpected",
1091 options
: ["only-multiline"],
1094 messageId
: "unexpected",
1102 code
: "var x = { foo: (1),};",
1103 output
: "var x = { foo: (1)};",
1107 messageId
: "unexpected",
1115 code
: "var x = { foo: (1),};",
1116 output
: "var x = { foo: (1)};",
1117 options
: ["only-multiline"],
1120 messageId
: "unexpected",
1128 // https://github.com/eslint/eslint/issues/3794
1130 code
: "import {foo} from 'foo';",
1131 output
: "import {foo,} from 'foo';",
1132 options
: ["always"],
1133 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1134 errors
: [{ messageId
: "missing", type
: "ImportSpecifier" }]
1137 code
: "import foo, {abc} from 'foo';",
1138 output
: "import foo, {abc,} from 'foo';",
1139 options
: ["always"],
1140 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1141 errors
: [{ messageId
: "missing", type
: "ImportSpecifier" }]
1144 code
: "export {foo} from 'foo';",
1145 output
: "export {foo,} from 'foo';",
1146 options
: ["always"],
1147 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1148 errors
: [{ messageId
: "missing", type
: "ExportSpecifier" }]
1151 code
: "import {foo,} from 'foo';",
1152 output
: "import {foo} from 'foo';",
1154 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1155 errors
: [{ messageId
: "unexpected", type
: "ImportSpecifier" }]
1158 code
: "import {foo,} from 'foo';",
1159 output
: "import {foo} from 'foo';",
1160 options
: ["only-multiline"],
1161 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1162 errors
: [{ messageId
: "unexpected", type
: "ImportSpecifier" }]
1165 code
: "import foo, {abc,} from 'foo';",
1166 output
: "import foo, {abc} from 'foo';",
1168 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1169 errors
: [{ messageId
: "unexpected", type
: "ImportSpecifier" }]
1172 code
: "import foo, {abc,} from 'foo';",
1173 output
: "import foo, {abc} from 'foo';",
1174 options
: ["only-multiline"],
1175 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1176 errors
: [{ messageId
: "unexpected", type
: "ImportSpecifier" }]
1179 code
: "export {foo,} from 'foo';",
1180 output
: "export {foo} from 'foo';",
1182 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1183 errors
: [{ messageId
: "unexpected", type
: "ExportSpecifier" }]
1186 code
: "export {foo,} from 'foo';",
1187 output
: "export {foo} from 'foo';",
1188 options
: ["only-multiline"],
1189 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1190 errors
: [{ messageId
: "unexpected", type
: "ExportSpecifier" }]
1193 code
: "import {foo,} from 'foo';",
1194 output
: "import {foo} from 'foo';",
1195 options
: ["always-multiline"],
1196 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1197 errors
: [{ messageId
: "unexpected", type
: "ImportSpecifier" }]
1200 code
: "export {foo,} from 'foo';",
1201 output
: "export {foo} from 'foo';",
1202 options
: ["always-multiline"],
1203 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1204 errors
: [{ messageId
: "unexpected", type
: "ExportSpecifier" }]
1207 code
: "import {\n foo\n} from 'foo';",
1208 output
: "import {\n foo,\n} from 'foo';",
1209 options
: ["always-multiline"],
1210 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1211 errors
: [{ messageId
: "missing", type
: "ImportSpecifier" }]
1214 code
: "export {\n foo\n} from 'foo';",
1215 output
: "export {\n foo,\n} from 'foo';",
1216 options
: ["always-multiline"],
1217 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1218 errors
: [{ messageId
: "missing", type
: "ExportSpecifier" }]
1221 // https://github.com/eslint/eslint/issues/6233
1223 code
: "var foo = {a: (1)}",
1224 output
: "var foo = {a: (1),}",
1225 options
: ["always"],
1226 errors
: [{ messageId
: "missing", type
: "Property" }]
1229 code
: "var foo = [(1)]",
1230 output
: "var foo = [(1),]",
1231 options
: ["always"],
1232 errors
: [{ messageId
: "missing", type
: "Literal" }]
1235 code
: "var foo = [\n1,\n(2)\n]",
1236 output
: "var foo = [\n1,\n(2),\n]",
1237 options
: ["always-multiline"],
1238 errors
: [{ messageId
: "missing", type
: "Literal" }]
1241 // trailing commas in functions
1243 code
: "function foo(a,) {}",
1244 output
: "function foo(a) {}",
1245 options
: [{ functions
: "never" }],
1246 parserOptions
: { ecmaVersion
: 8 },
1247 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1250 code
: "(function foo(a,) {})",
1251 output
: "(function foo(a) {})",
1252 options
: [{ functions
: "never" }],
1253 parserOptions
: { ecmaVersion
: 8 },
1254 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1259 options
: [{ functions
: "never" }],
1260 parserOptions
: { ecmaVersion
: 8 },
1261 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1264 code
: "(a,) => (a)",
1265 output
: "(a) => (a)",
1266 options
: [{ functions
: "never" }],
1267 parserOptions
: { ecmaVersion
: 8 },
1268 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1271 code
: "({foo(a,) {}})",
1272 output
: "({foo(a) {}})",
1273 options
: [{ functions
: "never" }],
1274 parserOptions
: { ecmaVersion
: 8 },
1275 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1278 code
: "class A {foo(a,) {}}",
1279 output
: "class A {foo(a) {}}",
1280 options
: [{ functions
: "never" }],
1281 parserOptions
: { ecmaVersion
: 8 },
1282 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1287 options
: [{ functions
: "never" }],
1288 parserOptions
: { ecmaVersion
: 8 },
1289 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1293 output
: "foo(...a)",
1294 options
: [{ functions
: "never" }],
1295 parserOptions
: { ecmaVersion
: 8 },
1296 errors
: [{ messageId
: "unexpected", type
: "SpreadElement" }]
1300 code
: "function foo(a) {}",
1301 output
: "function foo(a,) {}",
1302 options
: [{ functions
: "always" }],
1303 parserOptions
: { ecmaVersion
: 8 },
1304 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1307 code
: "(function foo(a) {})",
1308 output
: "(function foo(a,) {})",
1309 options
: [{ functions
: "always" }],
1310 parserOptions
: { ecmaVersion
: 8 },
1311 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1315 output
: "(a,) => a",
1316 options
: [{ functions
: "always" }],
1317 parserOptions
: { ecmaVersion
: 8 },
1318 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1322 output
: "(a,) => (a)",
1323 options
: [{ functions
: "always" }],
1324 parserOptions
: { ecmaVersion
: 8 },
1325 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1328 code
: "({foo(a) {}})",
1329 output
: "({foo(a,) {}})",
1330 options
: [{ functions
: "always" }],
1331 parserOptions
: { ecmaVersion
: 8 },
1332 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1335 code
: "class A {foo(a) {}}",
1336 output
: "class A {foo(a,) {}}",
1337 options
: [{ functions
: "always" }],
1338 parserOptions
: { ecmaVersion
: 8 },
1339 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1344 options
: [{ functions
: "always" }],
1345 parserOptions
: { ecmaVersion
: 8 },
1346 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1350 output
: "foo(...a,)",
1351 options
: [{ functions
: "always" }],
1352 parserOptions
: { ecmaVersion
: 8 },
1353 errors
: [{ messageId
: "missing", type
: "SpreadElement" }]
1357 code
: "function foo(a,) {}",
1358 output
: "function foo(a) {}",
1359 options
: [{ functions
: "always-multiline" }],
1360 parserOptions
: { ecmaVersion
: 8 },
1361 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1364 code
: "(function foo(a,) {})",
1365 output
: "(function foo(a) {})",
1366 options
: [{ functions
: "always-multiline" }],
1367 parserOptions
: { ecmaVersion
: 8 },
1368 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1373 options
: [{ functions
: "always-multiline" }],
1374 parserOptions
: { ecmaVersion
: 8 },
1375 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1379 output
: "foo(...a)",
1380 options
: [{ functions
: "always-multiline" }],
1381 parserOptions
: { ecmaVersion
: 8 },
1382 errors
: [{ messageId
: "unexpected", type
: "SpreadElement" }]
1385 code
: "function foo(\na,\nb\n) {}",
1386 output
: "function foo(\na,\nb,\n) {}",
1387 options
: [{ functions
: "always-multiline" }],
1388 parserOptions
: { ecmaVersion
: 8 },
1389 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1392 code
: "foo(\na,\nb\n)",
1393 output
: "foo(\na,\nb,\n)",
1394 options
: [{ functions
: "always-multiline" }],
1395 parserOptions
: { ecmaVersion
: 8 },
1396 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1399 code
: "foo(\n...a,\n...b\n)",
1400 output
: "foo(\n...a,\n...b,\n)",
1401 options
: [{ functions
: "always-multiline" }],
1402 parserOptions
: { ecmaVersion
: 8 },
1403 errors
: [{ messageId
: "missing", type
: "SpreadElement" }]
1407 code
: "function foo(a,) {}",
1408 output
: "function foo(a) {}",
1409 options
: [{ functions
: "only-multiline" }],
1410 parserOptions
: { ecmaVersion
: 8 },
1411 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1414 code
: "(function foo(a,) {})",
1415 output
: "(function foo(a) {})",
1416 options
: [{ functions
: "only-multiline" }],
1417 parserOptions
: { ecmaVersion
: 8 },
1418 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1423 options
: [{ functions
: "only-multiline" }],
1424 parserOptions
: { ecmaVersion
: 8 },
1425 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1429 output
: "foo(...a)",
1430 options
: [{ functions
: "only-multiline" }],
1431 parserOptions
: { ecmaVersion
: 8 },
1432 errors
: [{ messageId
: "unexpected", type
: "SpreadElement" }]
1435 code
: "function foo(a,) {}",
1436 output
: "function foo(a) {}",
1438 parserOptions
: { ecmaVersion
: 8 },
1439 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1442 code
: "(function foo(a,) {})",
1443 output
: "(function foo(a) {})",
1445 parserOptions
: { ecmaVersion
: 8 },
1446 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1452 parserOptions
: { ecmaVersion
: 8 },
1453 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1456 code
: "(a,) => (a)",
1457 output
: "(a) => (a)",
1459 parserOptions
: { ecmaVersion
: 8 },
1460 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1463 code
: "({foo(a,) {}})",
1464 output
: "({foo(a) {}})",
1466 parserOptions
: { ecmaVersion
: 8 },
1467 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1470 code
: "class A {foo(a,) {}}",
1471 output
: "class A {foo(a) {}}",
1473 parserOptions
: { ecmaVersion
: 8 },
1474 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1480 parserOptions
: { ecmaVersion
: 8 },
1481 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1485 output
: "foo(...a)",
1487 parserOptions
: { ecmaVersion
: 8 },
1488 errors
: [{ messageId
: "unexpected", type
: "SpreadElement" }]
1492 code
: "function foo(a) {}",
1493 output
: "function foo(a,) {}",
1494 options
: ["always"],
1495 parserOptions
: { ecmaVersion
: 8 },
1496 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1499 code
: "(function foo(a) {})",
1500 output
: "(function foo(a,) {})",
1501 options
: ["always"],
1502 parserOptions
: { ecmaVersion
: 8 },
1503 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1507 output
: "(a,) => a",
1508 options
: ["always"],
1509 parserOptions
: { ecmaVersion
: 8 },
1510 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1514 output
: "(a,) => (a)",
1515 options
: ["always"],
1516 parserOptions
: { ecmaVersion
: 8 },
1517 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1520 code
: "({foo(a) {}})",
1521 output
: "({foo(a,) {},})",
1522 options
: ["always"],
1523 parserOptions
: { ecmaVersion
: 8 },
1525 { messageId
: "missing", type
: "Identifier" },
1526 { messageId
: "missing", type
: "Property" }
1530 code
: "class A {foo(a) {}}",
1531 output
: "class A {foo(a,) {}}",
1532 options
: ["always"],
1533 parserOptions
: { ecmaVersion
: 8 },
1534 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1539 options
: ["always"],
1540 parserOptions
: { ecmaVersion
: 8 },
1541 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1545 output
: "foo(...a,)",
1546 options
: ["always"],
1547 parserOptions
: { ecmaVersion
: 8 },
1548 errors
: [{ messageId
: "missing", type
: "SpreadElement" }]
1552 code
: "function foo(a,) {}",
1553 output
: "function foo(a) {}",
1554 options
: ["always-multiline"],
1555 parserOptions
: { ecmaVersion
: 8 },
1556 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1559 code
: "(function foo(a,) {})",
1560 output
: "(function foo(a) {})",
1561 options
: ["always-multiline"],
1562 parserOptions
: { ecmaVersion
: 8 },
1563 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1568 options
: ["always-multiline"],
1569 parserOptions
: { ecmaVersion
: 8 },
1570 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1574 output
: "foo(...a)",
1575 options
: ["always-multiline"],
1576 parserOptions
: { ecmaVersion
: 8 },
1577 errors
: [{ messageId
: "unexpected", type
: "SpreadElement" }]
1580 code
: "function foo(\na,\nb\n) {}",
1581 output
: "function foo(\na,\nb,\n) {}",
1582 options
: ["always-multiline"],
1583 parserOptions
: { ecmaVersion
: 8 },
1584 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1587 code
: "foo(\na,\nb\n)",
1588 output
: "foo(\na,\nb,\n)",
1589 options
: ["always-multiline"],
1590 parserOptions
: { ecmaVersion
: 8 },
1591 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1594 code
: "foo(\n...a,\n...b\n)",
1595 output
: "foo(\n...a,\n...b,\n)",
1596 options
: ["always-multiline"],
1597 parserOptions
: { ecmaVersion
: 8 },
1598 errors
: [{ messageId
: "missing", type
: "SpreadElement" }]
1602 code
: "function foo(a,) {}",
1603 output
: "function foo(a) {}",
1604 options
: ["only-multiline"],
1605 parserOptions
: { ecmaVersion
: 8 },
1606 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1609 code
: "(function foo(a,) {})",
1610 output
: "(function foo(a) {})",
1611 options
: ["only-multiline"],
1612 parserOptions
: { ecmaVersion
: 8 },
1613 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1618 options
: ["only-multiline"],
1619 parserOptions
: { ecmaVersion
: 8 },
1620 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1624 output
: "foo(...a)",
1625 options
: ["only-multiline"],
1626 parserOptions
: { ecmaVersion
: 8 },
1627 errors
: [{ messageId
: "unexpected", type
: "SpreadElement" }]
1630 code
: "function foo(a) {}",
1631 output
: "function foo(a,) {}",
1632 options
: ["always"],
1633 parserOptions
: { ecmaVersion
: 9 },
1634 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1637 // separated options
1639 code
: `let {a,} = {a: 1,};
1641 import {c,} from "foo";
1642 let d = 0;export {d,};
1643 (function foo(e,) {})(f,);`,
1644 output
: `let {a} = {a: 1};
1646 import {c,} from "foo";
1647 let d = 0;export {d,};
1648 (function foo(e,) {})(f,);`,
1656 parserOptions
: { ecmaVersion
: 8, sourceType
: "module" },
1658 { messageId
: "unexpected", line
: 1 },
1659 { messageId
: "unexpected", line
: 1 }
1663 code
: `let {a,} = {a: 1,};
1665 import {c,} from "foo";
1666 let d = 0;export {d,};
1667 (function foo(e,) {})(f,);`,
1668 output
: `let {a,} = {a: 1,};
1670 import {c,} from "foo";
1671 let d = 0;export {d,};
1672 (function foo(e,) {})(f,);`,
1680 parserOptions
: { ecmaVersion
: 8, sourceType
: "module" },
1682 { messageId
: "unexpected", line
: 2 },
1683 { messageId
: "unexpected", line
: 2 }
1687 code
: `let {a,} = {a: 1,};
1689 import {c,} from "foo";
1690 let d = 0;export {d,};
1691 (function foo(e,) {})(f,);`,
1692 output
: `let {a,} = {a: 1,};
1694 import {c} from "foo";
1695 let d = 0;export {d,};
1696 (function foo(e,) {})(f,);`,
1704 parserOptions
: { ecmaVersion
: 8, sourceType
: "module" },
1706 { messageId
: "unexpected", line
: 3 }
1710 code
: `let {a,} = {a: 1,};
1712 import {c,} from "foo";
1713 let d = 0;export {d,};
1714 (function foo(e,) {})(f,);`,
1715 output
: `let {a,} = {a: 1,};
1717 import {c,} from "foo";
1718 let d = 0;export {d};
1719 (function foo(e,) {})(f,);`,
1727 parserOptions
: { ecmaVersion
: 8, sourceType
: "module" },
1729 { messageId
: "unexpected", line
: 4 }
1733 code
: `let {a,} = {a: 1,};
1735 import {c,} from "foo";
1736 let d = 0;export {d,};
1737 (function foo(e,) {})(f,);`,
1738 output
: `let {a,} = {a: 1,};
1740 import {c,} from "foo";
1741 let d = 0;export {d,};
1742 (function foo(e) {})(f);`,
1750 parserOptions
: { ecmaVersion
: 8, sourceType
: "module" },
1752 { messageId
: "unexpected", line
: 5 },
1753 { messageId
: "unexpected", line
: 5 }
1757 // https://github.com/eslint/eslint/issues/7370
1759 code
: "function foo({a}: {a: string,}) {}",
1760 output
: "function foo({a,}: {a: string,}) {}",
1761 options
: ["always"],
1762 parser
: parser("object-pattern-1"),
1763 errors
: [{ messageId
: "missing" }]
1766 code
: "function foo({a,}: {a: string}) {}",
1767 output
: "function foo({a}: {a: string}) {}",
1769 parser
: parser("object-pattern-2"),
1770 errors
: [{ messageId
: "unexpected" }]
1773 code
: "function foo(a): {b: boolean,} {}",
1774 output
: "function foo(a,): {b: boolean,} {}",
1775 options
: [{ functions
: "always" }],
1776 parser
: parser("return-type-1"),
1777 errors
: [{ messageId
: "missing" }]
1780 code
: "function foo(a,): {b: boolean} {}",
1781 output
: "function foo(a): {b: boolean} {}",
1782 options
: [{ functions
: "never" }],
1783 parser
: parser("return-type-2"),
1784 errors
: [{ messageId
: "unexpected" }]
1787 // https://github.com/eslint/eslint/issues/11502
1791 parserOptions
: { ecmaVersion
: 8 },
1792 errors
: [{ messageId
: "unexpected" }]
1795 // https://github.com/eslint/eslint/issues/15660
1798 /*eslint add-named-import:1*/
1807 } from 'react-native';
1810 /*eslint add-named-import:1*/
1819 } from 'react-native';
1821 options
: [{ imports
: "always-multiline" }],
1822 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1827 /*eslint add-named-import:1*/
1836 } from 'react-native';
1839 /*eslint add-named-import:1*/
1848 } from 'react-native';
1850 options
: [{ imports
: "never" }],
1851 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },