]>
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"),
16 FlatRuleTester
= require("../../../lib/rule-tester/flat-rule-tester");
18 //------------------------------------------------------------------------------
20 //------------------------------------------------------------------------------
23 * Gets the path to the parser of the given name.
24 * @param {string} name The name of a parser to get.
25 * @returns {string} The path to the specified parser.
27 function parser(name
) {
30 `../../fixtures/parsers/comma-dangle/${name}.js`
34 //------------------------------------------------------------------------------
36 //------------------------------------------------------------------------------
38 const ruleTester
= new RuleTester();
40 ruleTester
.defineRule("add-named-import", {
46 ImportDeclaration(node
) {
47 const sourceCode
= context
.sourceCode
;
48 const closingBrace
= sourceCode
.getLastToken(node
, token
=> token
.value
=== "}");
49 const addComma
= sourceCode
.getTokenBefore(closingBrace
).value
!== ",";
52 message
: "Add I18nManager.",
55 return fixer
.insertTextBefore(closingBrace
, `${addComma ? "," : ""}I18nManager`);
63 ruleTester
.run("comma-dangle", rule
, {
65 "var foo = { bar: 'baz' }",
66 "var foo = {\nbar: 'baz'\n}",
67 "var foo = [ 'baz' ]",
68 "var foo = [\n'baz'\n]",
75 { code
: "var foo = [\n (bar ? baz : qux),\n ];", options
: ["always-multiline"] },
76 { code
: "var foo = { bar: 'baz' }", options
: ["never"] },
77 { code
: "var foo = {\nbar: 'baz'\n}", options
: ["never"] },
78 { code
: "var foo = [ 'baz' ]", options
: ["never"] },
79 { code
: "var { a, b } = foo;", options
: ["never"], parserOptions
: { ecmaVersion
: 6 } },
80 { code
: "var [ a, b ] = foo;", options
: ["never"], parserOptions
: { ecmaVersion
: 6 } },
81 { code
: "var { a,\n b, \n} = foo;", options
: ["only-multiline"], parserOptions
: { ecmaVersion
: 6 } },
82 { code
: "var [ a,\n b, \n] = foo;", options
: ["only-multiline"], parserOptions
: { ecmaVersion
: 6 } },
84 { code
: "[(1),]", options
: ["always"] },
85 { code
: "var x = { foo: (1),};", options
: ["always"] },
86 { code
: "var foo = { bar: 'baz', }", options
: ["always"] },
87 { code
: "var foo = {\nbar: 'baz',\n}", options
: ["always"] },
88 { code
: "var foo = {\nbar: 'baz'\n,}", options
: ["always"] },
89 { code
: "var foo = [ 'baz', ]", options
: ["always"] },
90 { code
: "var foo = [\n'baz',\n]", options
: ["always"] },
91 { code
: "var foo = [\n'baz'\n,]", options
: ["always"] },
92 { code
: "[,,]", options
: ["always"] },
93 { code
: "[\n,\n,\n]", options
: ["always"] },
94 { code
: "[,]", options
: ["always"] },
95 { code
: "[\n,\n]", options
: ["always"] },
96 { code
: "[]", options
: ["always"] },
97 { code
: "[\n]", options
: ["always"] },
99 { code
: "var foo = { bar: 'baz' }", options
: ["always-multiline"] },
100 { code
: "var foo = { bar: 'baz' }", options
: ["only-multiline"] },
101 { code
: "var foo = {\nbar: 'baz',\n}", options
: ["always-multiline"] },
102 { code
: "var foo = {\nbar: 'baz',\n}", options
: ["only-multiline"] },
103 { code
: "var foo = [ 'baz' ]", options
: ["always-multiline"] },
104 { code
: "var foo = [ 'baz' ]", options
: ["only-multiline"] },
105 { code
: "var foo = [\n'baz',\n]", options
: ["always-multiline"] },
106 { code
: "var foo = [\n'baz',\n]", options
: ["only-multiline"] },
107 { code
: "var foo = { bar:\n\n'bar' }", options
: ["always-multiline"] },
108 { code
: "var foo = { bar:\n\n'bar' }", options
: ["only-multiline"] },
109 { code
: "var foo = {a: 1, b: 2, c: 3, d: 4}", options
: ["always-multiline"] },
110 { code
: "var foo = {a: 1, b: 2, c: 3, d: 4}", options
: ["only-multiline"] },
111 { code
: "var foo = {a: 1, b: 2,\n c: 3, d: 4}", options
: ["always-multiline"] },
112 { code
: "var foo = {a: 1, b: 2,\n c: 3, d: 4}", options
: ["only-multiline"] },
113 { code
: "var foo = {x: {\nfoo: 'bar',\n}}", options
: ["always-multiline"] },
114 { code
: "var foo = {x: {\nfoo: 'bar',\n}}", options
: ["only-multiline"] },
115 { code
: "var foo = new Map([\n[key, {\na: 1,\nb: 2,\nc: 3,\n}],\n])", options
: ["always-multiline"] },
116 { code
: "var foo = new Map([\n[key, {\na: 1,\nb: 2,\nc: 3,\n}],\n])", options
: ["only-multiline"] },
118 // https://github.com/eslint/eslint/issues/3627
120 code
: "var [a, ...rest] = [];",
122 parserOptions
: { ecmaVersion
: 6 }
125 code
: "var [\n a,\n ...rest\n] = [];",
127 parserOptions
: { ecmaVersion
: 6 }
130 code
: "var [\n a,\n ...rest\n] = [];",
131 options
: ["always-multiline"],
132 parserOptions
: { ecmaVersion
: 6 }
135 code
: "var [\n a,\n ...rest\n] = [];",
136 options
: ["only-multiline"],
137 parserOptions
: { ecmaVersion
: 6 }
140 code
: "[a, ...rest] = [];",
142 parserOptions
: { ecmaVersion
: 6 }
145 code
: "for ([a, ...rest] of []);",
147 parserOptions
: { ecmaVersion
: 6 }
150 code
: "var a = [b, ...spread,];",
152 parserOptions
: { ecmaVersion
: 6 }
155 // https://github.com/eslint/eslint/issues/7297
157 code
: "var {foo, ...bar} = baz",
159 parserOptions
: { ecmaVersion
: 2018 }
162 // https://github.com/eslint/eslint/issues/3794
164 code
: "import {foo,} from 'foo';",
166 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
169 code
: "import foo from 'foo';",
171 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
174 code
: "import foo, {abc,} from 'foo';",
176 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
179 code
: "import * as foo from 'foo';",
181 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
184 code
: "export {foo,} from 'foo';",
186 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
189 code
: "import {foo} from 'foo';",
191 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
194 code
: "import foo from 'foo';",
196 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
199 code
: "import foo, {abc} from 'foo';",
201 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
204 code
: "import * as foo from 'foo';",
206 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
209 code
: "export {foo} from 'foo';",
211 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
214 code
: "import {foo} from 'foo';",
215 options
: ["always-multiline"],
216 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
219 code
: "import {foo} from 'foo';",
220 options
: ["only-multiline"],
221 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
224 code
: "export {foo} from 'foo';",
225 options
: ["always-multiline"],
226 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
229 code
: "export {foo} from 'foo';",
230 options
: ["only-multiline"],
231 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
234 code
: "import {\n foo,\n} from 'foo';",
235 options
: ["always-multiline"],
236 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
239 code
: "import {\n foo,\n} from 'foo';",
240 options
: ["only-multiline"],
241 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
244 code
: "export {\n foo,\n} from 'foo';",
245 options
: ["always-multiline"],
246 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
249 code
: "export {\n foo,\n} from 'foo';",
250 options
: ["only-multiline"],
251 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
254 code
: "import {foo} from \n'foo';",
255 options
: ["always-multiline"],
256 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
259 code
: "import {foo} from \n'foo';",
260 options
: ["only-multiline"],
261 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" }
264 code
: "function foo(a) {}",
272 code
: "function foo(a) {}",
280 code
: "function foo(a,\nb) {}",
281 options
: ["always-multiline"]
284 code
: "foo(a,\nb\n)",
285 options
: ["always-multiline"]
288 code
: "function foo(a,\nb\n) {}",
289 options
: ["always-multiline"]
293 options
: ["always-multiline"]
296 code
: "function foo(a,\nb) {}",
297 options
: ["only-multiline"]
301 options
: ["only-multiline"]
304 code
: "function foo(a) {}",
306 parserOptions
: { ecmaVersion
: 7 }
311 parserOptions
: { ecmaVersion
: 7 }
314 code
: "function foo(a) {}",
316 parserOptions
: { ecmaVersion
: 7 }
321 parserOptions
: { ecmaVersion
: 7 }
324 code
: "function foo(a,\nb) {}",
325 options
: ["always-multiline"],
326 parserOptions
: { ecmaVersion
: 7 }
330 options
: ["always-multiline"],
331 parserOptions
: { ecmaVersion
: 7 }
334 code
: "function foo(a,\nb\n) {}",
335 options
: ["always-multiline"],
336 parserOptions
: { ecmaVersion
: 7 }
339 code
: "foo(a,\nb\n)",
340 options
: ["always-multiline"],
341 parserOptions
: { ecmaVersion
: 7 }
344 code
: "function foo(a,\nb) {}",
345 options
: ["only-multiline"],
346 parserOptions
: { ecmaVersion
: 7 }
350 options
: ["only-multiline"],
351 parserOptions
: { ecmaVersion
: 7 }
354 code
: "function foo(a) {}",
356 parserOptions
: { ecmaVersion
: 8 }
361 parserOptions
: { ecmaVersion
: 8 }
364 code
: "function foo(a,) {}",
366 parserOptions
: { ecmaVersion
: 8 }
371 parserOptions
: { ecmaVersion
: 8 }
374 code
: "function foo(\na,\nb,\n) {}",
375 options
: ["always-multiline"],
376 parserOptions
: { ecmaVersion
: 8 }
380 options
: ["always-multiline"],
381 parserOptions
: { ecmaVersion
: 8 }
384 code
: "function foo(a,b) {}",
385 options
: ["always-multiline"],
386 parserOptions
: { ecmaVersion
: 8 }
390 options
: ["always-multiline"],
391 parserOptions
: { ecmaVersion
: 8 }
394 code
: "function foo(a,b) {}",
395 options
: ["only-multiline"],
396 parserOptions
: { ecmaVersion
: 8 }
400 options
: ["only-multiline"],
401 parserOptions
: { ecmaVersion
: 8 }
404 // trailing comma in functions
406 code
: "function foo(a) {} ",
408 parserOptions
: { ecmaVersion
: 8 }
413 parserOptions
: { ecmaVersion
: 8 }
416 code
: "function foo(a) {} ",
417 options
: [{ functions
: "never" }],
418 parserOptions
: { ecmaVersion
: 8 }
422 options
: [{ functions
: "never" }],
423 parserOptions
: { ecmaVersion
: 8 }
426 code
: "function foo(a,) {}",
427 options
: [{ functions
: "always" }],
428 parserOptions
: { ecmaVersion
: 8 }
431 code
: "function bar(a, ...b) {}",
432 options
: [{ functions
: "always" }],
433 parserOptions
: { ecmaVersion
: 8 }
437 options
: [{ functions
: "always" }],
438 parserOptions
: { ecmaVersion
: 8 }
442 options
: [{ functions
: "always" }],
443 parserOptions
: { ecmaVersion
: 9 }
447 options
: [{ functions
: "always" }],
448 parserOptions
: { ecmaVersion
: 8 }
451 code
: "function foo(a) {} ",
452 options
: [{ functions
: "always-multiline" }],
453 parserOptions
: { ecmaVersion
: 8 }
457 options
: [{ functions
: "always-multiline" }],
458 parserOptions
: { ecmaVersion
: 8 }
461 code
: "function foo(\na,\nb,\n) {} ",
462 options
: [{ functions
: "always-multiline" }],
463 parserOptions
: { ecmaVersion
: 8 }
466 code
: "function foo(\na,\n...b\n) {} ",
467 options
: [{ functions
: "always-multiline" }],
468 parserOptions
: { ecmaVersion
: 8 }
471 code
: "foo(\na,\nb,\n)",
472 options
: [{ functions
: "always-multiline" }],
473 parserOptions
: { ecmaVersion
: 8 }
476 code
: "foo(\na,\n...b,\n)",
477 options
: [{ functions
: "always-multiline" }],
478 parserOptions
: { ecmaVersion
: 8 }
481 code
: "function foo(a) {} ",
482 options
: [{ functions
: "only-multiline" }],
483 parserOptions
: { ecmaVersion
: 8 }
487 options
: [{ functions
: "only-multiline" }],
488 parserOptions
: { ecmaVersion
: 8 }
491 code
: "function foo(\na,\nb,\n) {} ",
492 options
: [{ functions
: "only-multiline" }],
493 parserOptions
: { ecmaVersion
: 8 }
496 code
: "foo(\na,\nb,\n)",
497 options
: [{ functions
: "only-multiline" }],
498 parserOptions
: { ecmaVersion
: 8 }
501 code
: "function foo(\na,\nb\n) {} ",
502 options
: [{ functions
: "only-multiline" }],
503 parserOptions
: { ecmaVersion
: 8 }
506 code
: "foo(\na,\nb\n)",
507 options
: [{ functions
: "only-multiline" }],
508 parserOptions
: { ecmaVersion
: 8 }
511 // https://github.com/eslint/eslint/issues/7370
513 code
: "function foo({a}: {a: string,}) {}",
515 parser
: parser("object-pattern-1")
518 code
: "function foo({a,}: {a: string}) {}",
520 parser
: parser("object-pattern-2")
523 code
: "function foo(a): {b: boolean,} {}",
524 options
: [{ functions
: "never" }],
525 parser
: parser("return-type-1")
528 code
: "function foo(a,): {b: boolean} {}",
529 options
: [{ functions
: "always" }],
530 parser
: parser("return-type-2")
535 code
: "var foo = { bar: 'baz', }",
536 output
: "var foo = { bar: 'baz' }",
539 messageId
: "unexpected",
548 code
: "var foo = {\nbar: 'baz',\n}",
549 output
: "var foo = {\nbar: 'baz'\n}",
552 messageId
: "unexpected",
561 code
: "foo({ bar: 'baz', qux: 'quux', });",
562 output
: "foo({ bar: 'baz', qux: 'quux' });",
565 messageId
: "unexpected",
573 code
: "foo({\nbar: 'baz',\nqux: 'quux',\n});",
574 output
: "foo({\nbar: 'baz',\nqux: 'quux'\n});",
577 messageId
: "unexpected",
585 code
: "var foo = [ 'baz', ]",
586 output
: "var foo = [ 'baz' ]",
589 messageId
: "unexpected",
597 code
: "var foo = [ 'baz',\n]",
598 output
: "var foo = [ 'baz'\n]",
601 messageId
: "unexpected",
609 code
: "var foo = { bar: 'bar'\n\n, }",
610 output
: "var foo = { bar: 'bar'\n\n }",
613 messageId
: "unexpected",
623 code
: "var foo = { bar: 'baz', }",
624 output
: "var foo = { bar: 'baz' }",
628 messageId
: "unexpected",
636 code
: "var foo = { bar: 'baz', }",
637 output
: "var foo = { bar: 'baz' }",
638 options
: ["only-multiline"],
641 messageId
: "unexpected",
649 code
: "var foo = {\nbar: 'baz',\n}",
650 output
: "var foo = {\nbar: 'baz'\n}",
654 messageId
: "unexpected",
662 code
: "foo({ bar: 'baz', qux: 'quux', });",
663 output
: "foo({ bar: 'baz', qux: 'quux' });",
667 messageId
: "unexpected",
675 code
: "foo({ bar: 'baz', qux: 'quux', });",
676 output
: "foo({ bar: 'baz', qux: 'quux' });",
677 options
: ["only-multiline"],
680 messageId
: "unexpected",
689 code
: "var foo = { bar: 'baz' }",
690 output
: "var foo = { bar: 'baz', }",
694 messageId
: "missing",
704 code
: "var foo = {\nbar: 'baz'\n}",
705 output
: "var foo = {\nbar: 'baz',\n}",
709 messageId
: "missing",
719 code
: "var foo = {\nbar: 'baz'\r\n}",
720 output
: "var foo = {\nbar: 'baz',\r\n}",
724 messageId
: "missing",
734 code
: "foo({ bar: 'baz', qux: 'quux' });",
735 output
: "foo({ bar: 'baz', qux: 'quux', });",
739 messageId
: "missing",
750 code
: "foo({\nbar: 'baz',\nqux: 'quux'\n});",
751 output
: "foo({\nbar: 'baz',\nqux: 'quux',\n});",
755 messageId
: "missing",
765 code
: "var foo = [ 'baz' ]",
766 output
: "var foo = [ 'baz', ]",
770 messageId
: "missing",
778 code
: "var foo = ['baz']",
779 output
: "var foo = ['baz',]",
783 messageId
: "missing",
792 code
: "var foo = [ 'baz'\n]",
793 output
: "var foo = [ 'baz',\n]",
797 messageId
: "missing",
805 code
: "var foo = { bar:\n\n'bar' }",
806 output
: "var foo = { bar:\n\n'bar', }",
810 messageId
: "missing",
819 code
: "var foo = {\nbar: 'baz'\n}",
820 output
: "var foo = {\nbar: 'baz',\n}",
821 options
: ["always-multiline"],
824 messageId
: "missing",
849 messageId
: "missing",
874 messageId
: "missing",
883 // https://github.com/eslint/eslint/issues/7291
901 messageId
: "missing",
902 type
: "ConditionalExpression",
909 code
: "var foo = { bar: 'baz', }",
910 output
: "var foo = { bar: 'baz' }",
911 options
: ["always-multiline"],
914 messageId
: "unexpected",
922 code
: "foo({\nbar: 'baz',\nqux: 'quux'\n});",
923 output
: "foo({\nbar: 'baz',\nqux: 'quux',\n});",
924 options
: ["always-multiline"],
927 messageId
: "missing",
935 code
: "foo({ bar: 'baz', qux: 'quux', });",
936 output
: "foo({ bar: 'baz', qux: 'quux' });",
937 options
: ["always-multiline"],
940 messageId
: "unexpected",
948 code
: "var foo = [\n'baz'\n]",
949 output
: "var foo = [\n'baz',\n]",
950 options
: ["always-multiline"],
953 messageId
: "missing",
961 code
: "var foo = ['baz',]",
962 output
: "var foo = ['baz']",
963 options
: ["always-multiline"],
966 messageId
: "unexpected",
974 code
: "var foo = ['baz',]",
975 output
: "var foo = ['baz']",
976 options
: ["only-multiline"],
979 messageId
: "unexpected",
987 code
: "var foo = {x: {\nfoo: 'bar',\n},}",
988 output
: "var foo = {x: {\nfoo: 'bar',\n}}",
989 options
: ["always-multiline"],
992 messageId
: "unexpected",
1000 code
: "var foo = {a: 1, b: 2,\nc: 3, d: 4,}",
1001 output
: "var foo = {a: 1, b: 2,\nc: 3, d: 4}",
1002 options
: ["always-multiline"],
1005 messageId
: "unexpected",
1013 code
: "var foo = {a: 1, b: 2,\nc: 3, d: 4,}",
1014 output
: "var foo = {a: 1, b: 2,\nc: 3, d: 4}",
1015 options
: ["only-multiline"],
1018 messageId
: "unexpected",
1026 code
: "var foo = [{\na: 1,\nb: 2,\nc: 3,\nd: 4,\n},]",
1027 output
: "var foo = [{\na: 1,\nb: 2,\nc: 3,\nd: 4,\n}]",
1028 options
: ["always-multiline"],
1031 messageId
: "unexpected",
1032 type
: "ObjectExpression",
1039 code
: "var { a, b, } = foo;",
1040 output
: "var { a, b } = foo;",
1042 parserOptions
: { ecmaVersion
: 6 },
1045 messageId
: "unexpected",
1053 code
: "var { a, b, } = foo;",
1054 output
: "var { a, b } = foo;",
1055 options
: ["only-multiline"],
1056 parserOptions
: { ecmaVersion
: 6 },
1059 messageId
: "unexpected",
1067 code
: "var [ a, b, ] = foo;",
1068 output
: "var [ a, b ] = foo;",
1070 parserOptions
: { ecmaVersion
: 6 },
1073 messageId
: "unexpected",
1081 code
: "var [ a, b, ] = foo;",
1082 output
: "var [ a, b ] = foo;",
1083 options
: ["only-multiline"],
1084 parserOptions
: { ecmaVersion
: 6 },
1087 messageId
: "unexpected",
1100 messageId
: "unexpected",
1110 options
: ["only-multiline"],
1113 messageId
: "unexpected",
1121 code
: "var x = { foo: (1),};",
1122 output
: "var x = { foo: (1)};",
1126 messageId
: "unexpected",
1134 code
: "var x = { foo: (1),};",
1135 output
: "var x = { foo: (1)};",
1136 options
: ["only-multiline"],
1139 messageId
: "unexpected",
1147 // https://github.com/eslint/eslint/issues/3794
1149 code
: "import {foo} from 'foo';",
1150 output
: "import {foo,} from 'foo';",
1151 options
: ["always"],
1152 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1153 errors
: [{ messageId
: "missing", type
: "ImportSpecifier" }]
1156 code
: "import foo, {abc} from 'foo';",
1157 output
: "import foo, {abc,} from 'foo';",
1158 options
: ["always"],
1159 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1160 errors
: [{ messageId
: "missing", type
: "ImportSpecifier" }]
1163 code
: "export {foo} from 'foo';",
1164 output
: "export {foo,} from 'foo';",
1165 options
: ["always"],
1166 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1167 errors
: [{ messageId
: "missing", type
: "ExportSpecifier" }]
1170 code
: "import {foo,} from 'foo';",
1171 output
: "import {foo} from 'foo';",
1173 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1174 errors
: [{ messageId
: "unexpected", type
: "ImportSpecifier" }]
1177 code
: "import {foo,} from 'foo';",
1178 output
: "import {foo} from 'foo';",
1179 options
: ["only-multiline"],
1180 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1181 errors
: [{ messageId
: "unexpected", type
: "ImportSpecifier" }]
1184 code
: "import foo, {abc,} from 'foo';",
1185 output
: "import foo, {abc} from 'foo';",
1187 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1188 errors
: [{ messageId
: "unexpected", type
: "ImportSpecifier" }]
1191 code
: "import foo, {abc,} from 'foo';",
1192 output
: "import foo, {abc} from 'foo';",
1193 options
: ["only-multiline"],
1194 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1195 errors
: [{ messageId
: "unexpected", type
: "ImportSpecifier" }]
1198 code
: "export {foo,} from 'foo';",
1199 output
: "export {foo} from 'foo';",
1201 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1202 errors
: [{ messageId
: "unexpected", type
: "ExportSpecifier" }]
1205 code
: "export {foo,} from 'foo';",
1206 output
: "export {foo} from 'foo';",
1207 options
: ["only-multiline"],
1208 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1209 errors
: [{ messageId
: "unexpected", type
: "ExportSpecifier" }]
1212 code
: "import {foo,} from 'foo';",
1213 output
: "import {foo} from 'foo';",
1214 options
: ["always-multiline"],
1215 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1216 errors
: [{ messageId
: "unexpected", type
: "ImportSpecifier" }]
1219 code
: "export {foo,} from 'foo';",
1220 output
: "export {foo} from 'foo';",
1221 options
: ["always-multiline"],
1222 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1223 errors
: [{ messageId
: "unexpected", type
: "ExportSpecifier" }]
1226 code
: "import {\n foo\n} from 'foo';",
1227 output
: "import {\n foo,\n} from 'foo';",
1228 options
: ["always-multiline"],
1229 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1230 errors
: [{ messageId
: "missing", type
: "ImportSpecifier" }]
1233 code
: "export {\n foo\n} from 'foo';",
1234 output
: "export {\n foo,\n} from 'foo';",
1235 options
: ["always-multiline"],
1236 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1237 errors
: [{ messageId
: "missing", type
: "ExportSpecifier" }]
1240 // https://github.com/eslint/eslint/issues/6233
1242 code
: "var foo = {a: (1)}",
1243 output
: "var foo = {a: (1),}",
1244 options
: ["always"],
1245 errors
: [{ messageId
: "missing", type
: "Property" }]
1248 code
: "var foo = [(1)]",
1249 output
: "var foo = [(1),]",
1250 options
: ["always"],
1251 errors
: [{ messageId
: "missing", type
: "Literal" }]
1254 code
: "var foo = [\n1,\n(2)\n]",
1255 output
: "var foo = [\n1,\n(2),\n]",
1256 options
: ["always-multiline"],
1257 errors
: [{ messageId
: "missing", type
: "Literal" }]
1260 // trailing commas in functions
1262 code
: "function foo(a,) {}",
1263 output
: "function foo(a) {}",
1264 options
: [{ functions
: "never" }],
1265 parserOptions
: { ecmaVersion
: 8 },
1266 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1269 code
: "(function foo(a,) {})",
1270 output
: "(function foo(a) {})",
1271 options
: [{ functions
: "never" }],
1272 parserOptions
: { ecmaVersion
: 8 },
1273 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1278 options
: [{ functions
: "never" }],
1279 parserOptions
: { ecmaVersion
: 8 },
1280 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1283 code
: "(a,) => (a)",
1284 output
: "(a) => (a)",
1285 options
: [{ functions
: "never" }],
1286 parserOptions
: { ecmaVersion
: 8 },
1287 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1290 code
: "({foo(a,) {}})",
1291 output
: "({foo(a) {}})",
1292 options
: [{ functions
: "never" }],
1293 parserOptions
: { ecmaVersion
: 8 },
1294 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1297 code
: "class A {foo(a,) {}}",
1298 output
: "class A {foo(a) {}}",
1299 options
: [{ functions
: "never" }],
1300 parserOptions
: { ecmaVersion
: 8 },
1301 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1306 options
: [{ functions
: "never" }],
1307 parserOptions
: { ecmaVersion
: 8 },
1308 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1312 output
: "foo(...a)",
1313 options
: [{ functions
: "never" }],
1314 parserOptions
: { ecmaVersion
: 8 },
1315 errors
: [{ messageId
: "unexpected", type
: "SpreadElement" }]
1319 code
: "function foo(a) {}",
1320 output
: "function foo(a,) {}",
1321 options
: [{ functions
: "always" }],
1322 parserOptions
: { ecmaVersion
: 8 },
1323 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1326 code
: "(function foo(a) {})",
1327 output
: "(function foo(a,) {})",
1328 options
: [{ functions
: "always" }],
1329 parserOptions
: { ecmaVersion
: 8 },
1330 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1334 output
: "(a,) => a",
1335 options
: [{ functions
: "always" }],
1336 parserOptions
: { ecmaVersion
: 8 },
1337 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1341 output
: "(a,) => (a)",
1342 options
: [{ functions
: "always" }],
1343 parserOptions
: { ecmaVersion
: 8 },
1344 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1347 code
: "({foo(a) {}})",
1348 output
: "({foo(a,) {}})",
1349 options
: [{ functions
: "always" }],
1350 parserOptions
: { ecmaVersion
: 8 },
1351 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1354 code
: "class A {foo(a) {}}",
1355 output
: "class A {foo(a,) {}}",
1356 options
: [{ functions
: "always" }],
1357 parserOptions
: { ecmaVersion
: 8 },
1358 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1363 options
: [{ functions
: "always" }],
1364 parserOptions
: { ecmaVersion
: 8 },
1365 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1369 output
: "foo(...a,)",
1370 options
: [{ functions
: "always" }],
1371 parserOptions
: { ecmaVersion
: 8 },
1372 errors
: [{ messageId
: "missing", type
: "SpreadElement" }]
1376 code
: "function foo(a,) {}",
1377 output
: "function foo(a) {}",
1378 options
: [{ functions
: "always-multiline" }],
1379 parserOptions
: { ecmaVersion
: 8 },
1380 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1383 code
: "(function foo(a,) {})",
1384 output
: "(function foo(a) {})",
1385 options
: [{ functions
: "always-multiline" }],
1386 parserOptions
: { ecmaVersion
: 8 },
1387 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1392 options
: [{ functions
: "always-multiline" }],
1393 parserOptions
: { ecmaVersion
: 8 },
1394 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1398 output
: "foo(...a)",
1399 options
: [{ functions
: "always-multiline" }],
1400 parserOptions
: { ecmaVersion
: 8 },
1401 errors
: [{ messageId
: "unexpected", type
: "SpreadElement" }]
1404 code
: "function foo(\na,\nb\n) {}",
1405 output
: "function foo(\na,\nb,\n) {}",
1406 options
: [{ functions
: "always-multiline" }],
1407 parserOptions
: { ecmaVersion
: 8 },
1408 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1411 code
: "foo(\na,\nb\n)",
1412 output
: "foo(\na,\nb,\n)",
1413 options
: [{ functions
: "always-multiline" }],
1414 parserOptions
: { ecmaVersion
: 8 },
1415 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1418 code
: "foo(\n...a,\n...b\n)",
1419 output
: "foo(\n...a,\n...b,\n)",
1420 options
: [{ functions
: "always-multiline" }],
1421 parserOptions
: { ecmaVersion
: 8 },
1422 errors
: [{ messageId
: "missing", type
: "SpreadElement" }]
1426 code
: "function foo(a,) {}",
1427 output
: "function foo(a) {}",
1428 options
: [{ functions
: "only-multiline" }],
1429 parserOptions
: { ecmaVersion
: 8 },
1430 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1433 code
: "(function foo(a,) {})",
1434 output
: "(function foo(a) {})",
1435 options
: [{ functions
: "only-multiline" }],
1436 parserOptions
: { ecmaVersion
: 8 },
1437 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1442 options
: [{ functions
: "only-multiline" }],
1443 parserOptions
: { ecmaVersion
: 8 },
1444 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1448 output
: "foo(...a)",
1449 options
: [{ functions
: "only-multiline" }],
1450 parserOptions
: { ecmaVersion
: 8 },
1451 errors
: [{ messageId
: "unexpected", type
: "SpreadElement" }]
1454 code
: "function foo(a,) {}",
1455 output
: "function foo(a) {}",
1457 parserOptions
: { ecmaVersion
: 8 },
1458 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1461 code
: "(function foo(a,) {})",
1462 output
: "(function foo(a) {})",
1464 parserOptions
: { ecmaVersion
: 8 },
1465 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1471 parserOptions
: { ecmaVersion
: 8 },
1472 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1475 code
: "(a,) => (a)",
1476 output
: "(a) => (a)",
1478 parserOptions
: { ecmaVersion
: 8 },
1479 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1482 code
: "({foo(a,) {}})",
1483 output
: "({foo(a) {}})",
1485 parserOptions
: { ecmaVersion
: 8 },
1486 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1489 code
: "class A {foo(a,) {}}",
1490 output
: "class A {foo(a) {}}",
1492 parserOptions
: { ecmaVersion
: 8 },
1493 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1499 parserOptions
: { ecmaVersion
: 8 },
1500 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1504 output
: "foo(...a)",
1506 parserOptions
: { ecmaVersion
: 8 },
1507 errors
: [{ messageId
: "unexpected", type
: "SpreadElement" }]
1511 code
: "function foo(a) {}",
1512 output
: "function foo(a,) {}",
1513 options
: ["always"],
1514 parserOptions
: { ecmaVersion
: 8 },
1515 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1518 code
: "(function foo(a) {})",
1519 output
: "(function foo(a,) {})",
1520 options
: ["always"],
1521 parserOptions
: { ecmaVersion
: 8 },
1522 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1526 output
: "(a,) => a",
1527 options
: ["always"],
1528 parserOptions
: { ecmaVersion
: 8 },
1529 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1533 output
: "(a,) => (a)",
1534 options
: ["always"],
1535 parserOptions
: { ecmaVersion
: 8 },
1536 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1539 code
: "({foo(a) {}})",
1540 output
: "({foo(a,) {},})",
1541 options
: ["always"],
1542 parserOptions
: { ecmaVersion
: 8 },
1544 { messageId
: "missing", type
: "Identifier" },
1545 { messageId
: "missing", type
: "Property" }
1549 code
: "class A {foo(a) {}}",
1550 output
: "class A {foo(a,) {}}",
1551 options
: ["always"],
1552 parserOptions
: { ecmaVersion
: 8 },
1553 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1558 options
: ["always"],
1559 parserOptions
: { ecmaVersion
: 8 },
1560 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1564 output
: "foo(...a,)",
1565 options
: ["always"],
1566 parserOptions
: { ecmaVersion
: 8 },
1567 errors
: [{ messageId
: "missing", type
: "SpreadElement" }]
1571 code
: "function foo(a,) {}",
1572 output
: "function foo(a) {}",
1573 options
: ["always-multiline"],
1574 parserOptions
: { ecmaVersion
: 8 },
1575 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1578 code
: "(function foo(a,) {})",
1579 output
: "(function foo(a) {})",
1580 options
: ["always-multiline"],
1581 parserOptions
: { ecmaVersion
: 8 },
1582 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1587 options
: ["always-multiline"],
1588 parserOptions
: { ecmaVersion
: 8 },
1589 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1593 output
: "foo(...a)",
1594 options
: ["always-multiline"],
1595 parserOptions
: { ecmaVersion
: 8 },
1596 errors
: [{ messageId
: "unexpected", type
: "SpreadElement" }]
1599 code
: "function foo(\na,\nb\n) {}",
1600 output
: "function foo(\na,\nb,\n) {}",
1601 options
: ["always-multiline"],
1602 parserOptions
: { ecmaVersion
: 8 },
1603 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1606 code
: "foo(\na,\nb\n)",
1607 output
: "foo(\na,\nb,\n)",
1608 options
: ["always-multiline"],
1609 parserOptions
: { ecmaVersion
: 8 },
1610 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1613 code
: "foo(\n...a,\n...b\n)",
1614 output
: "foo(\n...a,\n...b,\n)",
1615 options
: ["always-multiline"],
1616 parserOptions
: { ecmaVersion
: 8 },
1617 errors
: [{ messageId
: "missing", type
: "SpreadElement" }]
1621 code
: "function foo(a,) {}",
1622 output
: "function foo(a) {}",
1623 options
: ["only-multiline"],
1624 parserOptions
: { ecmaVersion
: 8 },
1625 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1628 code
: "(function foo(a,) {})",
1629 output
: "(function foo(a) {})",
1630 options
: ["only-multiline"],
1631 parserOptions
: { ecmaVersion
: 8 },
1632 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1637 options
: ["only-multiline"],
1638 parserOptions
: { ecmaVersion
: 8 },
1639 errors
: [{ messageId
: "unexpected", type
: "Identifier" }]
1643 output
: "foo(...a)",
1644 options
: ["only-multiline"],
1645 parserOptions
: { ecmaVersion
: 8 },
1646 errors
: [{ messageId
: "unexpected", type
: "SpreadElement" }]
1649 code
: "function foo(a) {}",
1650 output
: "function foo(a,) {}",
1651 options
: ["always"],
1652 parserOptions
: { ecmaVersion
: 9 },
1653 errors
: [{ messageId
: "missing", type
: "Identifier" }]
1656 // separated options
1658 code
: `let {a,} = {a: 1,};
1660 import {c,} from "foo";
1661 let d = 0;export {d,};
1662 (function foo(e,) {})(f,);`,
1663 output
: `let {a} = {a: 1};
1665 import {c,} from "foo";
1666 let d = 0;export {d,};
1667 (function foo(e,) {})(f,);`,
1675 parserOptions
: { ecmaVersion
: 8, sourceType
: "module" },
1677 { messageId
: "unexpected", line
: 1 },
1678 { messageId
: "unexpected", line
: 1 }
1682 code
: `let {a,} = {a: 1,};
1684 import {c,} from "foo";
1685 let d = 0;export {d,};
1686 (function foo(e,) {})(f,);`,
1687 output
: `let {a,} = {a: 1,};
1689 import {c,} from "foo";
1690 let d = 0;export {d,};
1691 (function foo(e,) {})(f,);`,
1699 parserOptions
: { ecmaVersion
: 8, sourceType
: "module" },
1701 { messageId
: "unexpected", line
: 2 },
1702 { messageId
: "unexpected", line
: 2 }
1706 code
: `let {a,} = {a: 1,};
1708 import {c,} from "foo";
1709 let d = 0;export {d,};
1710 (function foo(e,) {})(f,);`,
1711 output
: `let {a,} = {a: 1,};
1713 import {c} from "foo";
1714 let d = 0;export {d,};
1715 (function foo(e,) {})(f,);`,
1723 parserOptions
: { ecmaVersion
: 8, sourceType
: "module" },
1725 { messageId
: "unexpected", line
: 3 }
1729 code
: `let {a,} = {a: 1,};
1731 import {c,} from "foo";
1732 let d = 0;export {d,};
1733 (function foo(e,) {})(f,);`,
1734 output
: `let {a,} = {a: 1,};
1736 import {c,} from "foo";
1737 let d = 0;export {d};
1738 (function foo(e,) {})(f,);`,
1746 parserOptions
: { ecmaVersion
: 8, sourceType
: "module" },
1748 { messageId
: "unexpected", line
: 4 }
1752 code
: `let {a,} = {a: 1,};
1754 import {c,} from "foo";
1755 let d = 0;export {d,};
1756 (function foo(e,) {})(f,);`,
1757 output
: `let {a,} = {a: 1,};
1759 import {c,} from "foo";
1760 let d = 0;export {d,};
1761 (function foo(e) {})(f);`,
1769 parserOptions
: { ecmaVersion
: 8, sourceType
: "module" },
1771 { messageId
: "unexpected", line
: 5 },
1772 { messageId
: "unexpected", line
: 5 }
1776 // https://github.com/eslint/eslint/issues/7370
1778 code
: "function foo({a}: {a: string,}) {}",
1779 output
: "function foo({a,}: {a: string,}) {}",
1780 options
: ["always"],
1781 parser
: parser("object-pattern-1"),
1782 errors
: [{ messageId
: "missing" }]
1785 code
: "function foo({a,}: {a: string}) {}",
1786 output
: "function foo({a}: {a: string}) {}",
1788 parser
: parser("object-pattern-2"),
1789 errors
: [{ messageId
: "unexpected" }]
1792 code
: "function foo(a): {b: boolean,} {}",
1793 output
: "function foo(a,): {b: boolean,} {}",
1794 options
: [{ functions
: "always" }],
1795 parser
: parser("return-type-1"),
1796 errors
: [{ messageId
: "missing" }]
1799 code
: "function foo(a,): {b: boolean} {}",
1800 output
: "function foo(a): {b: boolean} {}",
1801 options
: [{ functions
: "never" }],
1802 parser
: parser("return-type-2"),
1803 errors
: [{ messageId
: "unexpected" }]
1806 // https://github.com/eslint/eslint/issues/11502
1810 parserOptions
: { ecmaVersion
: 8 },
1811 errors
: [{ messageId
: "unexpected" }]
1814 // https://github.com/eslint/eslint/issues/15660
1817 /*eslint add-named-import:1*/
1826 } from 'react-native';
1829 /*eslint add-named-import:1*/
1838 } from 'react-native';
1840 options
: [{ imports
: "always-multiline" }],
1841 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1846 /*eslint add-named-import:1*/
1855 } from 'react-native';
1858 /*eslint add-named-import:1*/
1867 } from 'react-native';
1869 options
: [{ imports
: "never" }],
1870 parserOptions
: { ecmaVersion
: 6, sourceType
: "module" },
1876 const flatRuleTester
= new FlatRuleTester();
1878 // https://github.com/eslint/eslint/issues/16442
1879 flatRuleTester
.run("comma-dangle", rule
, {
1882 code
: "function f(\n a,\n b\n) {}",
1883 options
: ["always-multiline"],
1886 sourceType
: "script"
1890 code
: "f(\n a,\n b\n);",
1891 options
: ["always-multiline"],
1894 sourceType
: "script"
1898 code
: "function f(\n a,\n b\n) {}",
1899 options
: ["always-multiline"],
1905 code
: "f(\n a,\n b\n);",
1906 options
: ["always-multiline"],
1915 code
: "function f(\n a,\n b\n) {}",
1916 output
: "function f(\n a,\n b,\n) {}",
1917 options
: ["always-multiline"],
1922 messageId
: "missing",
1929 code
: "f(\n a,\n b\n);",
1930 output
: "f(\n a,\n b,\n);",
1931 options
: ["always-multiline"],
1936 messageId
: "missing",
1943 code
: "function f(\n a,\n b\n) {}",
1944 output
: "function f(\n a,\n b,\n) {}",
1945 options
: ["always-multiline"],
1947 ecmaVersion
: "latest"
1950 messageId
: "missing",
1957 code
: "f(\n a,\n b\n);",
1958 output
: "f(\n a,\n b,\n);",
1959 options
: ["always-multiline"],
1961 ecmaVersion
: "latest"
1964 messageId
: "missing",