no-extra-parens
不允许使用不必要的括号( no-extra-parens )
在--fix
命令行上的选项可以自动修复一些被这条规则反映的问题。
此规则仅在必要时限制使用括号。
规则细节
这条规则总是忽略了下面的附加括号:
- RegExp文字,
(/abc/).test(var)
以避免与 wrap-regex 规则发生冲突
- 立即调用的函数表达式(也称为IIFE)
var x = (function () {})(,(
(function foo() {return 1;})())以避
免与包裹规则发生冲突
另外,这个规则忽略箭头函数参数周围的括号,以避免与箭头规则的冲突。
选项
这条规则有一个字符串选项:
"all"
(默认)禁止在任何
表达式周围使用不必要的括号
"functions"
仅
在函数表达式附近禁止不必要的括号
此规则有一个对象选项,用于选项的例外情况"all"
:
"conditionalAssign": false
允许在条件测试表达式中分配的附加括号
"returnAssign": false
允许在return
语句中分配的附加括号
"nestedBinaryExpressions": false
允许在嵌套二进制表达式中使用额外的括号
"ignoreJSX": "none|all|multi-line|single-line"
允许在非全部/多行/单行 JSX 组件中使用额外的括号。默认为none
。
"enforceForArrowConditionals": false
允许围绕作为箭头函数主体的三元表达式的附加括号
all
此规则的默认代码错误
代码示例"all"
:
/* eslint no-extra-parens: "error" */
a = (b * c
(a * b) + c;
typeof (a
(function(){} ? a() : b()
具有默认选项的此规则的正确
代码示例"all"
:
/* eslint no-extra-parens: "error" */
(0).toString(
(Object.prototype.toString.call()
{}.toString.call()
(function(){}) ? a() : b(
(/^a$/).test(x
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
功能
此规则的错误
代码示例包含以下"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
进一步阅读
- MDN: Operator PrecedenceRelated Rules
- arrow-parens
- no-cond-assign
- no-return-assign
版本
该规则在 ESLint 0.1.4 中引入。