Spec-Zone.ru › ESLint

no-underscore-dangle

Запрещает висячие символы подчеркивания в идентификаторах

❄️ Заморожено

В настоящее время это правило заморожено, и предложения по добавлению новых возможностей не принимаются.

Что касается соглашений об именовании идентификаторов, висячие символы подчеркивания, пожалуй, вызывают больше всего споров в JavaScript. Висячие символы подчеркивания располагаются в начале или в конце идентификатора, например:

let _foo;

В JavaScript существует давняя традиция помечать «приватные» члены висячими символами подчеркивания. Она началась с добавления в SpiderMonkey нестандартных методов, таких как __defineGetter__(). С тех пор наиболее популярным соглашением для обозначения того, что член не является частью публичного интерфейса объекта, стал префикс из одного символа подчеркивания.

Для инкапсуляции приватных данных и методов рекомендуется использовать формальные возможности приватных членов классов, появившиеся в ECMAScript 2022, а не полагаться на соглашения об именовании.

Разрешение висячих символов подчеркивания в идентификаторах — это исключительно соглашение, которое не влияет на производительность, читаемость или сложность. Даже при включенном этом правиле они не обеспечивают тех же преимуществ инкапсуляции, что и возможности приватных членов классов.

Подробное описание правила

Это правило запрещает висячие символы подчеркивания в идентификаторах.

Примеры неправильного кода для этого правила:

Открыть в Playground
/*eslint no-underscore-dangle: "error"*/

let foo_;
const __proto__ = {};
foo._bar();

Примеры правильного кода для этого правила:

Открыть в Playground
/*eslint no-underscore-dangle: "error"*/

const _ = require('underscore');
const obj = _.contains(items, item);
obj.__proto__ = {};
const file = __filename;
function foo(_bar) {};
const bar = { onClick(_bar) {} };
const baz = (_bar) => {};

Параметры

Это правило принимает объект параметров:

  • "allow" разрешает указанным идентификаторам содержать висячие символы подчеркивания
  • "allowAfterThis": false (по умолчанию) запрещает висячие символы подчеркивания в членах объекта this
  • "allowAfterSuper": false (по умолчанию) запрещает висячие символы подчеркивания в членах объекта super
  • "allowAfterThisConstructor": false (по умолчанию) запрещает висячие символы подчеркивания в членах объекта this.constructor
  • "enforceInMethodNames": false (по умолчанию) разрешает висячие символы подчеркивания в именах методов
  • "enforceInClassFields": false (по умолчанию) разрешает висячие символы подчеркивания в именах полей классов es2022
  • "allowInArrayDestructuring": true (по умолчанию) разрешает висячие символы подчеркивания в именах переменных, которым присваиваются значения с помощью деструктуризации массива
  • "allowInObjectDestructuring": true (по умолчанию) разрешает висячие символы подчеркивания в именах переменных, которым присваиваются значения с помощью деструктуризации объекта
  • "allowFunctionParams": true (по умолчанию) разрешает висячие символы подчеркивания в именах параметров функций

allow

Примеры дополнительного правильного кода для этого правила с параметром { "allow": ["foo_", "_bar"] }:

Открыть в Playground
/*eslint no-underscore-dangle: ["error", { "allow": ["foo_", "_bar"] }]*/

let foo_;
foo._bar();

allowAfterThis

Примеры правильного кода для этого правила с параметром { "allowAfterThis": true }:

Открыть в Playground
/*eslint no-underscore-dangle: ["error", { "allowAfterThis": true }]*/

const a = this.foo_;
this._bar();

allowAfterSuper

Примеры правильного кода для этого правила с параметром { "allowAfterSuper": true }:

Открыть в Playground
/*eslint no-underscore-dangle: ["error", { "allowAfterSuper": true }]*/

class Foo extends Bar {
  doSomething() {
    const a = super.foo_;
    super._bar();
  }
}

allowAfterThisConstructor

Примеры правильного кода для этого правила с параметром { "allowAfterThisConstructor": true }:

Открыть в Playground
/*eslint no-underscore-dangle: ["error", { "allowAfterThisConstructor": true }]*/

const a = this.constructor.foo_;
this.constructor._bar();

enforceInMethodNames

Примеры неправильного кода для этого правила с параметром { "enforceInMethodNames": true }:

Открыть в Playground
/*eslint no-underscore-dangle: ["error", { "enforceInMethodNames": true }]*/

class Foo {
  _bar() {}
}

class Bar {
  bar_() {}
}

const o1 = {
  _bar() {}
};

const o2 = {
  bar_() {}
};

enforceInClassFields

Примеры неправильного кода для этого правила с параметром { "enforceInClassFields": true }:

Открыть в Playground
/*eslint no-underscore-dangle: ["error", { "enforceInClassFields": true }]*/

class Foo {
    _bar;
}

class Bar {
    _bar = () => {};
}

class Baz {
    bar_;
}

class Qux {
    #_bar;
}

class FooBar {
    #bar_;
}

allowInArrayDestructuring

Примеры неправильного кода для этого правила с параметром { "allowInArrayDestructuring": false }:

Открыть в Playground
/*eslint no-underscore-dangle: ["error", { "allowInArrayDestructuring": false }]*/

const [_foo, _bar] = list;
const [foo_, ..._qux] = list;
const [foo, [bar, _baz]] = list;

allowInObjectDestructuring

Примеры неправильного кода для этого правила с параметром { "allowInObjectDestructuring": false }:

Открыть в Playground
/*eslint no-underscore-dangle: ["error", { "allowInObjectDestructuring": false }]*/

const { foo, bar: _bar } = collection;
const { qux, xyz, _baz } = collection;

Примеры правильного кода для этого правила с параметром { "allowInObjectDestructuring": false }:

Открыть в Playground
/*eslint no-underscore-dangle: ["error", { "allowInObjectDestructuring": false }]*/

const { foo, bar, _baz: { a, b } } = collection;
const { qux, xyz, _baz: baz } = collection;

allowFunctionParams

Примеры неправильного кода для этого правила с параметром { "allowFunctionParams": false }:

Открыть в Playground
/*eslint no-underscore-dangle: ["error", { "allowFunctionParams": false }]*/

function foo1 (_bar) {}
function foo2 (_bar = 0) {}
function foo3 (..._bar) {}

const foo4 = function onClick (_bar) {}
const foo5 = function onClick (_bar = 0) {}
const foo6 = function onClick (..._bar) {}

const foo7 = (_bar) => {};
const foo8 = (_bar = 0) => {};
const foo9 = (..._bar) => {};

Когда не следует использовать правило

Если вы хотите разрешить висячие символы подчеркивания в идентификаторах, это правило можно безопасно отключить.

Версия

Это правило появилось в ESLint v0.0.9.

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-underscore-dangle

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API