no-underscore-dangle
Запрещает висячие символы подчеркивания в идентификаторах
В настоящее время это правило заморожено, и предложения по добавлению новых возможностей не принимаются.
Что касается соглашений об именовании идентификаторов, висячие символы подчеркивания, пожалуй, вызывают больше всего споров в JavaScript. Висячие символы подчеркивания располагаются в начале или в конце идентификатора, например:
let _foo;
В JavaScript существует давняя традиция помечать «приватные» члены висячими символами подчеркивания. Она началась с добавления в SpiderMonkey нестандартных методов, таких как __defineGetter__(). С тех пор наиболее популярным соглашением для обозначения того, что член не является частью публичного интерфейса объекта, стал префикс из одного символа подчеркивания.
Для инкапсуляции приватных данных и методов рекомендуется использовать формальные возможности приватных членов классов, появившиеся в ECMAScript 2022, а не полагаться на соглашения об именовании.
Разрешение висячих символов подчеркивания в идентификаторах — это исключительно соглашение, которое не влияет на производительность, читаемость или сложность. Даже при включенном этом правиле они не обеспечивают тех же преимуществ инкапсуляции, что и возможности приватных членов классов.
Подробное описание правила
Это правило запрещает висячие символы подчеркивания в идентификаторах.
Примеры неправильного кода для этого правила:
/*eslint no-underscore-dangle: "error"*/
let ;
const ;
();
Примеры правильного кода для этого правила:
/*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"] }:
/*eslint no-underscore-dangle: ["error", { "allow": ["foo_", "_bar"] }]*/
let foo_;
foo._bar();
allowAfterThis
Примеры правильного кода для этого правила с параметром { "allowAfterThis": true }:
/*eslint no-underscore-dangle: ["error", { "allowAfterThis": true }]*/
const a = this.foo_;
this._bar();
allowAfterSuper
Примеры правильного кода для этого правила с параметром { "allowAfterSuper": true }:
/*eslint no-underscore-dangle: ["error", { "allowAfterSuper": true }]*/
class Foo extends Bar {
doSomething() {
const a = super.foo_;
super._bar();
}
}
allowAfterThisConstructor
Примеры правильного кода для этого правила с параметром { "allowAfterThisConstructor": true }:
/*eslint no-underscore-dangle: ["error", { "allowAfterThisConstructor": true }]*/
const a = this.constructor.foo_;
this.constructor._bar();
enforceInMethodNames
Примеры неправильного кода для этого правила с параметром { "enforceInMethodNames": true }:
/*eslint no-underscore-dangle: ["error", { "enforceInMethodNames": true }]*/
class Foo {
}
class Bar {
}
const o1 = {
};
const o2 = {
};
enforceInClassFields
Примеры неправильного кода для этого правила с параметром { "enforceInClassFields": true }:
/*eslint no-underscore-dangle: ["error", { "enforceInClassFields": true }]*/
class Foo {
}
class Bar {
}
class Baz {
}
class Qux {
}
class FooBar {
}
allowInArrayDestructuring
Примеры неправильного кода для этого правила с параметром { "allowInArrayDestructuring": false }:
/*eslint no-underscore-dangle: ["error", { "allowInArrayDestructuring": false }]*/
const ;
const ;
const ;
allowInObjectDestructuring
Примеры неправильного кода для этого правила с параметром { "allowInObjectDestructuring": false }:
/*eslint no-underscore-dangle: ["error", { "allowInObjectDestructuring": false }]*/
const ;
const ;
Примеры правильного кода для этого правила с параметром { "allowInObjectDestructuring": false }:
/*eslint no-underscore-dangle: ["error", { "allowInObjectDestructuring": false }]*/
const { foo, bar, _baz: { a, b } } = collection;
const { qux, xyz, _baz: baz } = collection;
allowFunctionParams
Примеры неправильного кода для этого правила с параметром { "allowFunctionParams": false }:
/*eslint no-underscore-dangle: ["error", { "allowFunctionParams": false }]*/
function foo1 () {}
function foo2 () {}
function foo3 () {}
const foo4 = function onClick () {}
const foo5 = function onClick () {}
const foo6 = function onClick () {}
const foo7 = () => {};
const foo8 = () => {};
const foo9 = () => {};
Когда не следует использовать правило
Если вы хотите разрешить висячие символы подчеркивания в идентификаторах, это правило можно безопасно отключить.
Версия
Это правило появилось в ESLint v0.0.9.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-underscore-dangle