]>
git.proxmox.com Git - pve-eslint.git/blob - eslint/tests/lib/rules/arrow-parens.js
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 //------------------------------------------------------------------------------
21 const ruleTester
= new RuleTester({ parserOptions
: { ecmaVersion
: 6 } });
25 // "always" (by default)
30 "a.then((foo) => {});",
31 "a.then((foo) => { if (true) {}; });",
32 "const f = (/* */a) => a + a;",
33 "const f = (a/** */) => a + a;",
34 "const f = (a//\n) => a + a;",
35 "const f = (//\na) => a + a;",
36 "const f = (/*\n */a//\n) => a + a;",
37 "const f = (/** @type {number} */a/**hello*/) => a + a;",
38 { code
: "a.then(async (foo) => { if (true) {}; });", parserOptions
: { ecmaVersion
: 8 } },
40 // "always" (explicit)
41 { code
: "() => {}", options
: ["always"] },
42 { code
: "(a) => {}", options
: ["always"] },
43 { code
: "(a) => a", options
: ["always"] },
44 { code
: "(a) => {\n}", options
: ["always"] },
45 { code
: "a.then((foo) => {});", options
: ["always"] },
46 { code
: "a.then((foo) => { if (true) {}; });", options
: ["always"] },
47 { code
: "a.then(async (foo) => { if (true) {}; });", options
: ["always"], parserOptions
: { ecmaVersion
: 8 } },
50 { code
: "() => {}", options
: ["as-needed"] },
51 { code
: "a => {}", options
: ["as-needed"] },
52 { code
: "a => a", options
: ["as-needed"] },
53 { code
: "([a, b]) => {}", options
: ["as-needed"] },
54 { code
: "({ a, b }) => {}", options
: ["as-needed"] },
55 { code
: "(a = 10) => {}", options
: ["as-needed"] },
56 { code
: "(...a) => a[0]", options
: ["as-needed"] },
57 { code
: "(a, b) => {}", options
: ["as-needed"] },
58 { code
: "async ([a, b]) => {}", options
: ["as-needed"], parserOptions
: { ecmaVersion
: 8 } },
59 { code
: "async (a, b) => {}", options
: ["as-needed"], parserOptions
: { ecmaVersion
: 8 } },
60 { code
: "(a: T) => a", options
: ["as-needed"], parser
: parser("identifer-type") },
61 { code
: "(a): T => a", options
: ["as-needed"], parser
: parser("return-type") },
63 // "as-needed", { "requireForBlockBody": true }
64 { code
: "() => {}", options
: ["as-needed", { requireForBlockBody
: true }] },
65 { code
: "a => a", options
: ["as-needed", { requireForBlockBody
: true }] },
66 { code
: "([a, b]) => {}", options
: ["as-needed", { requireForBlockBody
: true }] },
67 { code
: "([a, b]) => a", options
: ["as-needed", { requireForBlockBody
: true }] },
68 { code
: "({ a, b }) => {}", options
: ["as-needed", { requireForBlockBody
: true }] },
69 { code
: "({ a, b }) => a + b", options
: ["as-needed", { requireForBlockBody
: true }] },
70 { code
: "(a = 10) => {}", options
: ["as-needed", { requireForBlockBody
: true }] },
71 { code
: "(...a) => a[0]", options
: ["as-needed", { requireForBlockBody
: true }] },
72 { code
: "(a, b) => {}", options
: ["as-needed", { requireForBlockBody
: true }] },
73 { code
: "a => ({})", options
: ["as-needed", { requireForBlockBody
: true }] },
74 { code
: "async a => ({})", options
: ["as-needed", { requireForBlockBody
: true }], parserOptions
: { ecmaVersion
: 8 } },
75 { code
: "async a => a", options
: ["as-needed", { requireForBlockBody
: true }], parserOptions
: { ecmaVersion
: 8 } },
76 { code
: "(a: T) => a", options
: ["as-needed", { requireForBlockBody
: true }], parser
: parser("identifer-type") },
77 { code
: "(a): T => a", options
: ["as-needed", { requireForBlockBody
: true }], parser
: parser("return-type") },
79 code
: "const f = (/** @type {number} */a/**hello*/) => a + a;",
80 options
: ["as-needed"]
83 code
: "const f = (/* */a) => a + a;",
84 options
: ["as-needed"]
87 code
: "const f = (a/** */) => a + a;",
88 options
: ["as-needed"]
91 code
: "const f = (a//\n) => a + a;",
92 options
: ["as-needed"]
95 code
: "const f = (//\na) => a + a;",
96 options
: ["as-needed"]
99 code
: "const f = (/*\n */a//\n) => a + a;",
100 options
: ["as-needed"]
103 code
: "var foo = (a,/**/) => b;",
104 parserOptions
: { ecmaVersion
: 2017 },
105 options
: ["as-needed"]
108 code
: "var foo = (a , /**/) => b;",
109 parserOptions
: { ecmaVersion
: 2017 },
110 options
: ["as-needed"]
113 code
: "var foo = (a\n,\n/**/) => b;",
114 parserOptions
: { ecmaVersion
: 2017 },
115 options
: ["as-needed"]
118 code
: "var foo = (a,//\n) => b;",
119 parserOptions
: { ecmaVersion
: 2017 },
120 options
: ["as-needed"]
123 code
: "const i = (a/**/,) => a + a;",
124 parserOptions
: { ecmaVersion
: 2017 },
125 options
: ["as-needed"]
128 code
: "const i = (a \n /**/,) => a + a;",
129 parserOptions
: { ecmaVersion
: 2017 },
130 options
: ["as-needed"]
133 code
: "var bar = ({/*comment here*/a}) => a",
134 options
: ["as-needed"]
137 code
: "var bar = (/*comment here*/{a}) => a",
138 options
: ["as-needed"]
142 const type
= "ArrowFunctionExpression";
146 // "always" (by default)
154 messageId
: "expectedParens",
165 messageId
: "expectedParens",
171 output
: "(a) => {\n}",
176 messageId
: "expectedParens",
181 code
: "a.then(foo => {});",
182 output
: "a.then((foo) => {});",
187 messageId
: "expectedParens",
192 code
: "a.then(foo => a);",
193 output
: "a.then((foo) => a);",
198 messageId
: "expectedParens",
203 code
: "a(foo => { if (true) {}; });",
204 output
: "a((foo) => { if (true) {}; });",
209 messageId
: "expectedParens",
214 code
: "a(async foo => { if (true) {}; });",
215 output
: "a(async (foo) => { if (true) {}; });",
216 parserOptions
: { ecmaVersion
: 8 },
221 messageId
: "expectedParens",
230 options
: ["as-needed"],
235 messageId
: "unexpectedParens",
242 options
: ["as-needed"],
243 parserOptions
: { ecmaVersion
: 8 },
248 messageId
: "unexpectedParens",
253 code
: "async (a) => a",
254 output
: "async a => a",
255 options
: ["as-needed"],
256 parserOptions
: { ecmaVersion
: 8 },
261 messageId
: "unexpectedParens",
266 code
: "async(a) => a",
267 output
: "async a => a",
268 options
: ["as-needed"],
269 parserOptions
: { ecmaVersion
: 8 },
274 messageId
: "unexpectedParens",
279 // "as-needed", { "requireForBlockBody": true }
283 options
: ["as-needed", { requireForBlockBody
: true }],
288 messageId
: "expectedParensBlock",
295 options
: ["as-needed", { requireForBlockBody
: true }],
300 messageId
: "unexpectedParensInline",
305 code
: "async a => {}",
306 output
: "async (a) => {}",
307 options
: ["as-needed", { requireForBlockBody
: true }],
308 parserOptions
: { ecmaVersion
: 8 },
313 messageId
: "expectedParensBlock",
318 code
: "async (a) => a",
319 output
: "async a => a",
320 options
: ["as-needed", { requireForBlockBody
: true }],
321 parserOptions
: { ecmaVersion
: 8 },
326 messageId
: "unexpectedParensInline",
331 code
: "async(a) => a",
332 output
: "async a => a",
333 options
: ["as-needed", { requireForBlockBody
: true }],
334 parserOptions
: { ecmaVersion
: 8 },
339 messageId
: "unexpectedParensInline",
344 code
: "const f = /** @type {number} */(a)/**hello*/ => a + a;",
345 options
: ["as-needed"],
346 output
: "const f = /** @type {number} */a/**hello*/ => a + a;",
351 messageId
: "unexpectedParens",
357 code
: "const f = //\n(a) => a + a;",
358 output
: "const f = //\na => a + a;",
359 options
: ["as-needed"],
364 messageId
: "unexpectedParens",
370 code
: "var foo = /**/ a => b;",
371 output
: "var foo = /**/ (a) => b;",
375 type
: "ArrowFunctionExpression",
376 messageId
: "expectedParens",
382 code
: "var bar = a /**/ => b;",
383 output
: "var bar = (a) /**/ => b;",
387 type
: "ArrowFunctionExpression",
388 messageId
: "expectedParens",
394 code
: `const foo = a => {};
396 // comment between 'a' and an unrelated closing paren
399 output
: `const foo = (a) => {};
401 // comment between 'a' and an unrelated closing paren
407 type
: "ArrowFunctionExpression",
408 messageId
: "expectedParens",
416 ruleTester
.run("arrow-parens", rule
, {