首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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 中引入。

资源

扫码关注腾讯云开发者

领取腾讯云代金券