no-underscore-dangle
Запрещает использование подчёркиваний в начале или конце идентификаторов
Что касается соглашений об именовании идентификаторов, то подчёркивания в начале или конце могут быть одними из самых противоречивых в JavaScript. Подчёркивания в начале или конце идентификатора, такие как:
var _foo;
Существует давняя практика обозначения «приватных» членов подчёркиваниями в начале или конце в JavaScript, начиная со SpiderMonkey, добавившего нестандартные методы, такие как __defineGetter__(). С тех пор использование одиночного подчёркивания в начале стало наиболее распространённым соглашением для обозначения члена, который не входит в публичный интерфейс объекта.
Рекомендуется использовать формальные возможности приватных классов, введённые в ECMAScript 2022, для инкапсуляции приватных данных и методов вместо полагания на соглашения об именовании.
Разрешение подчёркиваний в начале или конце идентификаторов — это просто соглашение, которое не влияет на производительность, читаемость или сложность. Они не обеспечивают те же преимущества инкапсуляции, что и приватные классовые функции, даже с включённым данным правилом.
Подробности правила
Это правило запрещает использование подчёркиваний в начале или конце идентификаторов.
Примеры неправильного кода для данного правила:
/*eslint no-underscore-dangle: "error"*/
var ;
var ;
();
Примеры правильного кода для данного правила:
/*eslint no-underscore-dangle: "error"*/
var _ = require('underscore');
var obj = _.contains(items, item);
obj.__proto__ = {};
var 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"] }]*/
var foo_;
foo._bar();
allowAfterThis
Примеры правильного кода для данного правила с параметром { "allowAfterThis": true }:
/*eslint no-underscore-dangle: ["error", { "allowAfterThis": true }]*/
var a = this.foo_;
this._bar();
allowAfterSuper
Примеры правильного кода для данного правила с параметром { "allowAfterSuper": true }:
/*eslint no-underscore-dangle: ["error", { "allowAfterSuper": true }]*/
class Foo extends Bar {
doSomething() {
var a = super.foo_;
super._bar();
}
}
allowAfterThisConstructor
Примеры правильного кода для данного правила с параметром { "allowAfterThisConstructor": true }:
/*eslint no-underscore-dangle: ["error", { "allowAfterThisConstructor": true }]*/
var 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": false }:
/*eslint no-underscore-dangle: ["error", { "allowInArrayDestructuring": false }]*/
const ;
const ;
const ;
Разрешить в распаковке объектов
Примеры неправильного кода для данного правила с параметром { "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": 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