# no-extra-parens
禁止不必要的括号
一些该规则报告的问题可以通过 --fix 命令行选项 自动修复
该规则将括号的使用限制在必要的地方。
# 规则详情
此规则始终忽略以下内容周围的额外括号:
(/abc/).test(var)
等 RegExp 字面,以避免与wrap-regex
规则冲突- 立即调用的函数表达式(也称为 IIFE),例如
var x = (function () {})();
和var x = (function () {}());
,以避免与wrap-iife
规则冲突 - 箭头函数参数以避免与
arrow-parens
规则冲突
# 选项
此规则有一个字符串选项:
"all"
(默认)不允许在任何表达式周围使用不必要的括号"functions"
仅在函数表达式周围不允许不必要的括号
此规则有一个对象选项,用于 "all"
选项的例外情况:
"conditionalAssign": false
允许在条件测试表达式中的赋值周围使用额外的括号"returnAssign": false
允许在return
语句中的赋值周围使用额外的括号"nestedBinaryExpressions": false
允许在嵌套的二进制表达式中使用额外的括号"ignoreJSX": "none|all|multi-line|single-line"
允许在 no/all/multi-line/single-line JSX 组件周围使用额外的括号。默认为none
。"enforceForArrowConditionals": false
允许在作为箭头函数主体的三元表达式周围加上额外的括号"enforceForSequenceExpressions": false
允许在序列表达式周围加上额外的括号"enforceForNewInMemberExpressions": false
允许在成员表达式中的new
表达式周围加上额外的括号"enforceForFunctionPrototypeMethods": false
允许在函数表达式的直接.call
和.apply
方法调用以及同一上下文中的函数表达式周围使用额外的括号。
# all
此规则使用默认 "all"
选项的错误代码示例:
/* eslint no-extra-parens: "error" */
a = (b * c);
(a * b) + c;
for (a in (b, c));
for (a in (b));
for (a of (b));
typeof (a);
(function(){} ? a() : b());
class A {
[(x)] = 1;
}
class B {
x = (y + z);
}
此规则使用默认 "all"
选项的正确代码示例:
/* eslint no-extra-parens: "error" */
(0).toString();
(Object.prototype.toString.call());
({}.toString.call());
(function(){}) ? a() : b();
(/^a$/).test(x);
for (a of (b, c));
for (a of b);
for (a in b, c);
for (a in b);
class A {
[x] = 1;
}
class B {
x = y + z;
}
# conditionalAssign
此规则使用 "all"
和 { "conditionalAssign": false }
选项的正确代码示例:
/* eslint no-extra-parens: ["error", "all", { "conditionalAssign": false }] */
while ((foo = bar())) {}
if ((foo = bar())) {}
do; while ((foo = bar()))
for (;(a = b););
# returnAssign
此规则使用 "all"
和 { "returnAssign": false }
选项的正确代码示例:
/* eslint no-extra-parens: ["error", "all", { "returnAssign": false }] */
function a(b) {
return (b = 1);
}
function a(b) {
return b ? (c = d) : (c = e);
}
b => (b = 1);
b => b ? (c = d) : (c = e);
# nestedBinaryExpressions
此规则使用 "all"
和 { "nestedBinaryExpressions": false }
选项的正确代码示例:
/* eslint no-extra-parens: ["error", "all", { "nestedBinaryExpressions": false }] */
x = a || (b && c);
x = a + (b * c);
x = (a * b) / c;
# ignoreJSX
此规则使用 all
和 { "ignoreJSX": "all" }
选项的正确代码示例:
/* eslint no-extra-parens: ["error", "all", { ignoreJSX: "all" }] */
const Component = (<div />)
const Component = (
<div
prop={true}
/>
)
带有 all
和 { "ignoreJSX": "multi-line" }
选项的此规则的错误代码示例:
/* eslint no-extra-parens: ["error", "all", { ignoreJSX: "multi-line" }] */
const Component = (<div />)
const Component = (<div><p /></div>)
此规则使用 all
和 { "ignoreJSX": "multi-line" }
选项的正确代码示例:
/* eslint no-extra-parens: ["error", "all", { ignoreJSX: "multi-line" }] */
const Component = (
<div>
<p />
</div>
)
const Component = (
<div
prop={true}
/>
)
带有 all
和 { "ignoreJSX": "single-line" }
选项的此规则的错误代码示例:
/* eslint no-extra-parens: ["error", "all", { ignoreJSX: "single-line" }] */
const Component = (
<div>
<p />
</div>
)
const Component = (
<div
prop={true}
/>
)
此规则使用 all
和 { "ignoreJSX": "single-line" }
选项的正确代码示例:
/* eslint no-extra-parens: ["error", "all", { ignoreJSX: "single-line" }] */
const Component = (<div />)
const Component = (<div><p /></div>)
# enforceForArrowConditionals
此规则使用 "all"
和 { "enforceForArrowConditionals": false }
选项的正确代码示例:
/* eslint no-extra-parens: ["error", "all", { "enforceForArrowConditionals": false }] */
const b = a => 1 ? 2 : 3;
const d = c => (1 ? 2 : 3);
# enforceForSequenceExpressions
此规则使用 "all"
和 { "enforceForSequenceExpressions": false }
选项的正确代码示例:
/* eslint no-extra-parens: ["error", "all", { "enforceForSequenceExpressions": false }] */
(a, b);
if ((val = foo(), val < 10)) {}
while ((val = foo(), val < 10));
# enforceForNewInMemberExpressions
此规则使用 "all"
和 { "enforceForNewInMemberExpressions": false }
选项的正确代码示例:
/* eslint no-extra-parens: ["error", "all", { "enforceForNewInMemberExpressions": false }] */
const foo = (new Bar()).baz;
const quux = (new Bar())[baz];
(new Bar()).doSomething();
# enforceForFunctionPrototypeMethods
此规则使用 "all"
和 { "enforceForFunctionPrototypeMethods": false }
选项的正确代码示例:
/* eslint no-extra-parens: ["error", "all", { "enforceForFunctionPrototypeMethods": false }] */
const foo = (function () {}).call();
const bar = (function () {}).apply();
const baz = (function () {}.call());
const quux = (function () {}.apply());
# functions
此规则使用 "functions"
选项的错误代码示例:
/* eslint no-extra-parens: ["error", "functions"] */
((function foo() {}))();
var y = (function () {return 1;});
此规则使用 "functions"
选项的正确代码示例:
/* eslint no-extra-parens: ["error", "functions"] */
(0).toString();
(Object.prototype.toString.call());
({}.toString.call());
(function(){} ? a() : b());
(/^a$/).test(x);
a = (b * c);
(a * b) + c;
typeof (a);