группированные-пары-аксессоров
Требует группировку пар аксессоров в объектных литералах и классах
Геттер и сеттер для одного и того же свойства не обязательно должны быть определены рядом друг с другом.
Например, следующие операторы создадут один и тот же объект:
var o = {
get a() {
return this.val;
},
set a(value) {
this.val = value;
},
b: 1
};
var o = {
get a() {
return this.val;
},
b: 1,
set a(value) {
this.val = value;
}
};
Хотя разрешено определять пару для геттера или сеттера где угодно в определении объекта или класса, считается лучшей практикой группировать функции аксессоров для одного и того же свойства.
Другими словами, если свойство имеет геттер и сеттер, сеттер должен быть определён сразу после геттера, или наоборот.
Подробное описание правила
Это правило требует группированных определений функций аксессоров для одного и того же свойства в объектных литералах, объявлениях классов и выражениях классов.
По желанию, это правило также может обеспечить согласованный порядок (getBeforeSet или setBeforeGet).
Это правило не требует существования пары для геттера или сеттера. Обратитесь к accessor-pairs, если вы также хотите принудительно создавать пары геттер/сеттер.
Примеры некорректного кода для этого правила:
/*eslint grouped-accessor-pairs: "error"*/
var foo = {
get a() {
return this.val;
},
b: 1,
(value) {
this.val = value;
}
};
var bar = {
set b(value) {
this.val = value;
},
a: 1,
() {
return this.val;
}
}
class Foo {
set a(value) {
this.val = value;
}
b(){}
() {
return this.val;
}
}
const Bar = class {
static get a() {
return this.val;
}
b(){}
(value) {
this.val = value;
}
}
Примеры корректного кода для этого правила:
/*eslint grouped-accessor-pairs: "error"*/
var foo = {
get a() {
return this.val;
},
set a(value) {
this.val = value;
},
b: 1
};
var bar = {
set b(value) {
this.val = value;
},
get b() {
return this.val;
},
a: 1
}
class Foo {
set a(value) {
this.val = value;
}
get a() {
return this.val;
}
b(){}
}
const Bar = class {
static get a() {
return this.val;
}
static set a(value) {
this.val = value;
}
b(){}
}
Параметры
Это правило имеет строковый параметр:
-
"anyOrder"(по умолчанию) не навязывает порядок. -
"getBeforeSet"если свойство имеет и геттер, и сеттер, требует определения геттера до сеттера. -
"setBeforeGet"если свойство имеет и геттер, и сеттер, требует определения сеттера до геттера.
getBeforeSet
Примеры некорректного кода для этого правила с параметром "getBeforeSet":
/*eslint grouped-accessor-pairs: ["error", "getBeforeSet"]*/
var foo = {
set a(value) {
this.val = value;
},
() {
return this.val;
}
};
class Foo {
set a(value) {
this.val = value;
}
() {
return this.val;
}
}
const Bar = class {
static set a(value) {
this.val = value;
}
() {
return this.val;
}
}
Примеры корректного кода для этого правила с параметром "getBeforeSet":
/*eslint grouped-accessor-pairs: ["error", "getBeforeSet"]*/
var foo = {
get a() {
return this.val;
},
set a(value) {
this.val = value;
}
};
class Foo {
get a() {
return this.val;
}
set a(value) {
this.val = value;
}
}
const Bar = class {
static get a() {
return this.val;
}
static set a(value) {
this.val = value;
}
}
setBeforeGet
Примеры некорректного кода для этого правила с параметром "setBeforeGet":
/*eslint grouped-accessor-pairs: ["error", "setBeforeGet"]*/
var foo = {
get a() {
return this.val;
},
(value) {
this.val = value;
}
};
class Foo {
get a() {
return this.val;
}
(value) {
this.val = value;
}
}
const Bar = class {
static get a() {
return this.val;
}
(value) {
this.val = value;
}
}
Примеры корректного кода для этого правила с параметром "setBeforeGet":
/*eslint grouped-accessor-pairs: ["error", "setBeforeGet"]*/
var foo = {
set a(value) {
this.val = value;
},
get a() {
return this.val;
}
};
class Foo {
set a(value) {
this.val = value;
}
get a() {
return this.val;
}
}
const Bar = class {
static set a(value) {
this.val = value;
}
static get a() {
return this.val;
}
}
Известные ограничения
Из-за ограничений статического анализа, это правило не учитывает возможные побочные эффекты и в некоторых случаях может потребовать или пропустить группировку или порядок для геттеров/сеттеров, которые имеют вычисляемое имя ключа, как в следующем примере:
/*eslint grouped-accessor-pairs: "error"*/
var a = 1;
// false warning (false positive)
var foo = {
get [a++]() {
return this.val;
},
b: 1,
set [a++](value) {
this.val = value;
}
};
// missed warning (false negative)
var bar = {
get [++a]() {
return this.val;
},
b: 1,
set [a](value) {
this.val = value;
}
};
Также это правило не сообщает никаких предупреждений о свойствах, у которых есть дублирующие геттеры или сеттеры.
Обратитесь к no-dupe-keys, если вы также хотите запретить дублирование ключей в объектных литералах.
Обратитесь к no-dupe-class-members, если вы также хотите запретить дублирование имен в определениях классов.
Связанные правила
Версия
Это правило было добавлено в ESLint v6.7.0.
Дополнительные материалы
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/grouped-accessor-pairs