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 中引入。
资源
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com