Eslint
规则 | Rules

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

进一步阅读

  • arrow-parens

  • no-cond-assign

  • no-return-assign

版本

该规则在 ESLint 0.1.4 中引入。

资源