]>
git.proxmox.com Git - pve-eslint.git/blob - eslint/tests/lib/rules/arrow-parens.js
d2f32a784a3a7a9b4a7aa722dd9b62bfd1892879
2 * @fileoverview Tests for arrow-parens
8 //------------------------------------------------------------------------------
10 //------------------------------------------------------------------------------
12 const baseParser
= require("../../fixtures/fixture-parser"),
13 rule
= require("../../../lib/rules/arrow-parens"),
14 { RuleTester
} = require("../../../lib/rule-tester");
16 const parser
= baseParser
.bind(null, "arrow-parens");
18 //------------------------------------------------------------------------------
20 //------------------------------------------------------------------------------
22 const ruleTester
= new RuleTester({ parserOptions
: { ecmaVersion
: 6 } });
26 // "always" (by default)
31 "a.then((foo) => {});",
32 "a.then((foo) => { if (true) {}; });",
33 "const f = (/* */a) => a + a;",
34 "const f = (a/** */) => a + a;",
35 "const f = (a//\n) => a + a;",
36 "const f = (//\na) => a + a;",
37 "const f = (/*\n */a//\n) => a + a;",
38 "const f = (/** @type {number} */a/**hello*/) => a + a;",
39 { code
: "a.then(async (foo) => { if (true) {}; });", parserOptions
: { ecmaVersion
: 8 } },
41 // "always" (explicit)
42 { code
: "() => {}", options
: ["always"] },
43 { code
: "(a) => {}", options
: ["always"] },
44 { code
: "(a) => a", options
: ["always"] },
45 { code
: "(a) => {\n}", options
: ["always"] },
46 { code
: "a.then((foo) => {});", options
: ["always"] },
47 { code
: "a.then((foo) => { if (true) {}; });", options
: ["always"] },
48 { code
: "a.then(async (foo) => { if (true) {}; });", options
: ["always"], parserOptions
: { ecmaVersion
: 8 } },
49 { code
: "(a: T) => a", options
: ["always"], parser
: parser("identifer-type") },
50 { code
: "(a): T => a", options
: ["always"], parser
: parser("return-type") },
53 { code
: "() => {}", options
: ["as-needed"] },
54 { code
: "a => {}", options
: ["as-needed"] },
55 { code
: "a => a", options
: ["as-needed"] },
56 { code
: "a => (a)", options
: ["as-needed"] },
57 { code
: "(a => a)", options
: ["as-needed"] },
58 { code
: "((a => a))", options
: ["as-needed"] },
59 { code
: "([a, b]) => {}", options
: ["as-needed"] },
60 { code
: "({ a, b }) => {}", options
: ["as-needed"] },
61 { code
: "(a = 10) => {}", options
: ["as-needed"] },
62 { code
: "(...a) => a[0]", options
: ["as-needed"] },
63 { code
: "(a, b) => {}", options
: ["as-needed"] },
64 { code
: "async a => a", options
: ["as-needed"], parserOptions
: { ecmaVersion
: 8 } },
65 { code
: "async ([a, b]) => {}", options
: ["as-needed"], parserOptions
: { ecmaVersion
: 8 } },
66 { code
: "async (a, b) => {}", options
: ["as-needed"], parserOptions
: { ecmaVersion
: 8 } },
67 { code
: "(a: T) => a", options
: ["as-needed"], parser
: parser("identifer-type") },
68 { code
: "(a): T => a", options
: ["as-needed"], parser
: parser("return-type") },
70 // "as-needed", { "requireForBlockBody": true }
71 { code
: "() => {}", options
: ["as-needed", { requireForBlockBody
: true }] },
72 { code
: "a => a", options
: ["as-needed", { requireForBlockBody
: true }] },
73 { code
: "a => (a)", options
: ["as-needed", { requireForBlockBody
: true }] },
74 { code
: "(a => a)", options
: ["as-needed", { requireForBlockBody
: true }] },
75 { code
: "((a => a))", options
: ["as-needed", { requireForBlockBody
: true }] },
76 { code
: "([a, b]) => {}", options
: ["as-needed", { requireForBlockBody
: true }] },
77 { code
: "([a, b]) => a", options
: ["as-needed", { requireForBlockBody
: true }] },
78 { code
: "({ a, b }) => {}", options
: ["as-needed", { requireForBlockBody
: true }] },
79 { code
: "({ a, b }) => a + b", options
: ["as-needed", { requireForBlockBody
: true }] },
80 { code
: "(a = 10) => {}", options
: ["as-needed", { requireForBlockBody
: true }] },
81 { code
: "(...a) => a[0]", options
: ["as-needed", { requireForBlockBody
: true }] },
82 { code
: "(a, b) => {}", options
: ["as-needed", { requireForBlockBody
: true }] },
83 { code
: "a => ({})", options
: ["as-needed", { requireForBlockBody
: true }] },
84 { code
: "async a => ({})", options
: ["as-needed", { requireForBlockBody
: true }], parserOptions
: { ecmaVersion
: 8 } },
85 { code
: "async a => a", options
: ["as-needed", { requireForBlockBody
: true }], parserOptions
: { ecmaVersion
: 8 } },
86 { code
: "(a: T) => a", options
: ["as-needed", { requireForBlockBody
: true }], parser
: parser("identifer-type") },
87 { code
: "(a): T => a", options
: ["as-needed", { requireForBlockBody
: true }], parser
: parser("return-type") },
89 code
: "const f = (/** @type {number} */a/**hello*/) => a + a;",
90 options
: ["as-needed"]
93 code
: "const f = (/* */a) => a + a;",
94 options
: ["as-needed"]
97 code
: "const f = (a/** */) => a + a;",
98 options
: ["as-needed"]
101 code
: "const f = (a//\n) => a + a;",
102 options
: ["as-needed"]
105 code
: "const f = (//\na) => a + a;",
106 options
: ["as-needed"]
109 code
: "const f = (/*\n */a//\n) => a + a;",
110 options
: ["as-needed"]
113 code
: "var foo = (a,/**/) => b;",
114 parserOptions
: { ecmaVersion
: 2017 },
115 options
: ["as-needed"]
118 code
: "var foo = (a , /**/) => b;",
119 parserOptions
: { ecmaVersion
: 2017 },
120 options
: ["as-needed"]
123 code
: "var foo = (a\n,\n/**/) => b;",
124 parserOptions
: { ecmaVersion
: 2017 },
125 options
: ["as-needed"]
128 code
: "var foo = (a,//\n) => b;",
129 parserOptions
: { ecmaVersion
: 2017 },
130 options
: ["as-needed"]
133 code
: "const i = (a/**/,) => a + a;",
134 parserOptions
: { ecmaVersion
: 2017 },
135 options
: ["as-needed"]
138 code
: "const i = (a \n /**/,) => a + a;",
139 parserOptions
: { ecmaVersion
: 2017 },
140 options
: ["as-needed"]
143 code
: "var bar = ({/*comment here*/a}) => a",
144 options
: ["as-needed"]
147 code
: "var bar = (/*comment here*/{a}) => a",
148 options
: ["as-needed"]
155 parser
: parser("generics-simple")
159 options
: ["as-needed"],
160 parser
: parser("generics-simple")
164 options
: ["as-needed", { requireForBlockBody
: true }],
165 parser
: parser("generics-simple")
168 code
: "async <T>(a) => b",
170 parser
: parser("generics-simple-async")
173 code
: "async <T>(a) => b",
174 options
: ["as-needed"],
175 parser
: parser("generics-simple-async")
178 code
: "async <T>(a) => b",
179 options
: ["as-needed", { requireForBlockBody
: true }],
180 parser
: parser("generics-simple-async")
185 parser
: parser("generics-simple-no-params")
189 options
: ["as-needed"],
190 parser
: parser("generics-simple-no-params")
194 options
: ["as-needed", { requireForBlockBody
: true }],
195 parser
: parser("generics-simple-no-params")
198 code
: "<T extends A>(a) => b",
200 parser
: parser("generics-extends")
203 code
: "<T extends A>(a) => b",
204 options
: ["as-needed"],
205 parser
: parser("generics-extends")
208 code
: "<T extends A>(a) => b",
209 options
: ["as-needed", { requireForBlockBody
: true }],
210 parser
: parser("generics-extends")
213 code
: "<T extends (A | B) & C>(a) => b",
215 parser
: parser("generics-extends-complex")
218 code
: "<T extends (A | B) & C>(a) => b",
219 options
: ["as-needed"],
220 parser
: parser("generics-extends-complex")
223 code
: "<T extends (A | B) & C>(a) => b",
224 options
: ["as-needed", { requireForBlockBody
: true }],
225 parser
: parser("generics-extends-complex")
229 const type
= "ArrowFunctionExpression";
233 // "always" (by default)
241 messageId
: "expectedParens",
252 messageId
: "expectedParens",
258 output
: "(a) => {\n}",
263 messageId
: "expectedParens",
268 code
: "a.then(foo => {});",
269 output
: "a.then((foo) => {});",
274 messageId
: "expectedParens",
279 code
: "a.then(foo => a);",
280 output
: "a.then((foo) => a);",
285 messageId
: "expectedParens",
290 code
: "a(foo => { if (true) {}; });",
291 output
: "a((foo) => { if (true) {}; });",
296 messageId
: "expectedParens",
301 code
: "a(async foo => { if (true) {}; });",
302 output
: "a(async (foo) => { if (true) {}; });",
303 parserOptions
: { ecmaVersion
: 8 },
308 messageId
: "expectedParens",
317 options
: ["as-needed"],
322 messageId
: "unexpectedParens",
329 options
: ["as-needed"],
334 messageId
: "unexpectedParens",
339 code
: "(\na\n) => b",
341 options
: ["as-needed"],
346 messageId
: "unexpectedParens",
353 options
: ["as-needed"],
354 parserOptions
: { ecmaVersion
: 8 },
359 messageId
: "unexpectedParens",
364 code
: "async (a) => a",
365 output
: "async a => a",
366 options
: ["as-needed"],
367 parserOptions
: { ecmaVersion
: 8 },
372 messageId
: "unexpectedParens",
377 code
: "async(a) => a",
378 output
: "async a => a",
379 options
: ["as-needed"],
380 parserOptions
: { ecmaVersion
: 8 },
385 messageId
: "unexpectedParens",
390 code
: "typeof((a) => {})",
391 output
: "typeof(a => {})",
392 options
: ["as-needed"],
397 messageId
: "unexpectedParens",
402 code
: "function *f() { yield(a) => a; }",
403 output
: "function *f() { yield a => a; }",
404 options
: ["as-needed"],
409 messageId
: "unexpectedParens",
414 // "as-needed", { "requireForBlockBody": true }
418 options
: ["as-needed", { requireForBlockBody
: true }],
423 messageId
: "expectedParensBlock",
430 options
: ["as-needed", { requireForBlockBody
: true }],
435 messageId
: "unexpectedParensInline",
440 code
: "async a => {}",
441 output
: "async (a) => {}",
442 options
: ["as-needed", { requireForBlockBody
: true }],
443 parserOptions
: { ecmaVersion
: 8 },
448 messageId
: "expectedParensBlock",
453 code
: "async (a) => a",
454 output
: "async a => a",
455 options
: ["as-needed", { requireForBlockBody
: true }],
456 parserOptions
: { ecmaVersion
: 8 },
461 messageId
: "unexpectedParensInline",
466 code
: "async(a) => a",
467 output
: "async a => a",
468 options
: ["as-needed", { requireForBlockBody
: true }],
469 parserOptions
: { ecmaVersion
: 8 },
474 messageId
: "unexpectedParensInline",
479 code
: "const f = /** @type {number} */(a)/**hello*/ => a + a;",
480 options
: ["as-needed"],
481 output
: "const f = /** @type {number} */a/**hello*/ => a + a;",
486 messageId
: "unexpectedParens",
492 code
: "const f = //\n(a) => a + a;",
493 output
: "const f = //\na => a + a;",
494 options
: ["as-needed"],
499 messageId
: "unexpectedParens",
505 code
: "var foo = /**/ a => b;",
506 output
: "var foo = /**/ (a) => b;",
510 type
: "ArrowFunctionExpression",
511 messageId
: "expectedParens",
517 code
: "var bar = a /**/ => b;",
518 output
: "var bar = (a) /**/ => b;",
522 type
: "ArrowFunctionExpression",
523 messageId
: "expectedParens",
529 code
: `const foo = a => {};
531 // comment between 'a' and an unrelated closing paren
534 output
: `const foo = (a) => {};
536 // comment between 'a' and an unrelated closing paren
542 type
: "ArrowFunctionExpression",
543 messageId
: "expectedParens",
551 ruleTester
.run("arrow-parens", rule
, {