no-extra-parens
Запретить лишние скобки
Некоторые проблемы, выявленные этим правилом, могут быть автоматически исправлены с помощью опции командной строки --fix командной строки
Это правило было устаревшим в ESLint v8.53.0. Пожалуйста, используйте соответствующее правило соответствующее правило в @stylistic/eslint-plugin-js.
Это правило ограничивает использование скобок только там, где они необходимы.
Подробности правила
Это правило всегда игнорирует лишние скобки вокруг следующего:
- Литералы регулярных выражений, такие как
(/abc/).test(var)для предотвращения конфликтов с правилом wrap-regex - немедленные выражения функций (также известные как IIFE), такие как
var x = (function () {})();иvar x = (function () {}());для предотвращения конфликтов с правилом wrap-iife - аргументы стрелочных функций для предотвращения конфликтов с правилом arrow-parens
Проблемы, выявленные этим правилом, могут быть автоматически исправлены, за исключением случаев, когда удаление скобок создаёт новую директиву, поскольку это может изменить семантику кода. Например, следующий скрипт выводит object в консоль, но если скобки вокруг "use strict" будут удалены, он будет выводить undefined вместо этого.
<!--
// this is a script
// -->
("use strict");
function test() {
console.log(typeof this);
}
test();
В этом случае правило не будет пытаться удалить скобки вокруг "use strict" но по-прежнему будет сообщать о них как о проблеме.
Параметры
Это правило имеет строковый параметр:
-
"all"(по умолчанию) запрещает лишние скобки вокруг любого выражения -
"functions"запрещает лишние скобки только вокруг выражений функций
Это правило имеет параметр типа объект для исключений из параметра "all":
-
"conditionalAssign": falseразрешает лишние скобки вокруг присваиваний в условных выражениях -
"returnAssign": falseразрешает лишние скобки вокруг присваиваний вreturnоператорах -
"nestedBinaryExpressions": falseразрешает лишние скобки во вложенных бинарных выражениях -
"ternaryOperandBinaryExpressions": falseразрешает лишние скобки вокруг бинарных выражений, являющихся операндами условного?: -
"ignoreJSX": "none|all|multi-line|single-line"разрешает лишние скобки вокруг компонентов JSX, которые являются пустыми, или содержат одно, или несколько строк, или все строки. По умолчаниюnone. -
"enforceForArrowConditionals": falseразрешает лишние скобки вокруг условных операторов, которые являются телом стрелочной функции -
"enforceForSequenceExpressions": falseразрешает лишние скобки вокруг последовательностей выражений -
"enforceForNewInMemberExpressions": falseразрешает лишние скобки вокругnewвыражений в выражениях членов -
"enforceForFunctionPrototypeMethods": falseразрешает лишние скобки вокруг немедленных вызовов.callи.applyметодов для выражений функций и вокруг выражений функций в том же контексте -
"allowParensAfterCommentPattern": "any-string-pattern"разрешает лишние скобки, предшествующие комментарию, соответствующему регулярному выражению.
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);
Object.prototype.toString.call());
class A {
[x)] = 1;
}
class B {
x = y + z);
}
Примеры корректного кода для этого правила с параметром "all" по умолчанию:
/* eslint no-extra-parens: "error" */
(0).toString();
({}.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 a1(b) {
return (b = 1);
}
function a2(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;
ternaryOperandBinaryExpressions
Примеры корректного кода для этого правила с параметрами "all" и { "ternaryOperandBinaryExpressions": false }:
/* eslint no-extra-parens: ["error", "all", { "ternaryOperandBinaryExpressions": false }] */
(a && b) ? foo : bar;
(a - b > a) ? foo : bar;
foo ? (bar || baz) : qux;
foo ? bar : (baz || qux);
ignoreJSX
Примеры корректного кода для этого правила с параметрами all и { "ignoreJSX": "all" }:
/* eslint no-extra-parens: ["error", "all", { ignoreJSX: "all" }] */
const ThisComponent = (<div />)
const ThatComponent = (
<div
prop={true}
/>
)
Примеры некорректного кода для этого правила с параметрами all и { "ignoreJSX": "multi-line" }:
/* eslint no-extra-parens: ["error", "all", { ignoreJSX: "multi-line" }] */
const ThisComponent = <div />)
const ThatComponent = <div><p /></div>)
Примеры корректного кода для этого правила с параметрами all и { "ignoreJSX": "multi-line" }:
/* eslint no-extra-parens: ["error", "all", { ignoreJSX: "multi-line" }] */
const ThisComponent = (
<div><p /></div>
)
const ThatComponent = (
<div
prop={true}
/>
)
Примеры некорректного кода для этого правила с параметрами all и { "ignoreJSX": "single-line" }:
/* eslint no-extra-parens: ["error", "all", { ignoreJSX: "single-line" }] */
const ThisComponent =
<div><p /></div>
)
const ThatComponent =
<div
prop={true}
/>
)
Примеры корректного кода для этого правила с параметрами all и { "ignoreJSX": "single-line" }:
/* eslint no-extra-parens: ["error", "all", { ignoreJSX: "single-line" }] */
const ThisComponent = (<div />)
const ThatComponent = (<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);
Краткое описание полей для выражений последовательности
Примеры правильного кода для этой правила с "all" и { "enforceForSequenceExpressions": false } параметрами:
/* eslint no-extra-parens: ["error", "all", { "enforceForSequenceExpressions": false }] */
(a, b);
if ((val = foo(), val < 10)) {}
while ((val = foo(), val < 10));
Краткое описание полей для выражений new in member
Примеры правильного кода для этого правила с "all" и { "enforceForNewInMemberExpressions": false } параметрами:
/* eslint no-extra-parens: ["error", "all", { "enforceForNewInMemberExpressions": false }] */
const foo = (new Bar()).baz;
const quux = (new Bar())[baz];
(new Bar()).doSomething();
Краткое описание полей для методов прототипов функций
Примеры правильного кода для этого правила с "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());
Разрешение скобок после комментария
Чтобы это правило разрешало дополнительные скобки, предшествующие конкретным комментариям, установите этот параметр в строковый шаблон, который будет передан конструктору RegExp конструктора.
Примеры правильного кода для этого правила с "all" и { "allowParensAfterCommentPattern": "@type" } параметрами:
/* eslint no-extra-parens: ["error", "all", { "allowParensAfterCommentPattern": "@type" }] */
const span = /**@type {HTMLSpanElement}*/(event.currentTarget);
if (/** @type {Foo | Bar} */(options).baz) console.log('Lint free');
foo(/** @type {Bar} */ (bar), options, {
name: "name",
path: "path",
});
if (foo) {
/** @type {Bar} */
(bar).prop = false;
}
Функции
Примеры неправильного кода для этого правила с "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);
Связанные правила
Версия
Это правило было добавлено в ESLint v0.1.4.
Дополнительные материалы
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-extra-parens