object-shorthand
Требовать или запрещать сокращённый синтаксис методов и свойств в литералах объектов
Некоторые проблемы, о которых сообщает это правило, автоматически исправляются параметром --fix командной строки
Это правило в настоящее время заморожено, поэтому запросы на добавление функций не принимаются.
ECMAScript 6 предоставляет краткую форму для определения методов и свойств литералов объектов. Этот синтаксис может значительно упростить определение сложных литералов объектов.
Вот несколько распространённых примеров с использованием синтаксиса ES5:
// properties
const foo = {
x: x,
y: y,
z: z,
};
// methods
const bar = {
a: function() {},
b: function() {}
};
А теперь эквивалентные варианты на ES6:
// properties
const foo = {x, y, z};
// methods
const bar = {
a() {},
b() {}
};
Подробности правила
Это правило требует использования сокращённого синтаксиса. Оно применяется ко всем методам (включая генераторы), определённым в литералах объектов, а также к свойствам, у которых имя ключа совпадает с именем присваиваемой переменной.
Для каждого из следующих свойств будет выдано предупреждение:
/*eslint object-shorthand: "error"*/
const foo = {
w: function() {},
x: function *() {},
[y]: function() {},
z: z
};
В этом случае ожидался бы следующий синтаксис:
/*eslint object-shorthand: "error"*/
const foo = {
w() {},
*x() {},
[y]() {},
z
};
Это правило не отмечает стрелочные функции внутри литералов объектов. Следующий код не вызовет предупреждение:
/*eslint object-shorthand: "error"*/
const foo = {
x: (y) => y
};
Параметры
Правило принимает параметр, задающий, когда его следует применять. Ему можно присвоить одно из следующих значений:
-
"always"(по умолчанию) требует использовать сокращённый синтаксис везде, где это возможно. -
"methods"требует использовать сокращённый синтаксис методов (также применяется к генераторам). -
"properties"требует использовать сокращённый синтаксис свойств (если имена ключа и переменной совпадают). -
"never"требует не использовать сокращённый синтаксис свойств и методов в литералах объектов. -
"consistent"требует использовать в литерале объекта либо только сокращённый синтаксис, либо только полную форму. -
"consistent-as-needed"требует использовать в литерале объекта либо только сокращённый синтаксис, либо только полную форму, но при этом всегда выбирать сокращённую форму, если это возможно.
Параметр можно задать в конфигурации следующим образом:
{
"object-shorthand": ["error", "always"]
}
Кроме того, правило принимает необязательную конфигурацию в виде объекта:
-
"avoidQuotes": trueуказывает, что предпочтительна полная форма синтаксиса, если ключ объекта — строковый литерал (по умолчанию:false). Обратите внимание: этот параметр можно включить, только если для строкового параметра задано значение"always","methods"или"properties". -
"ignoreConstructors": trueможно использовать, чтобы правило не сообщало об ошибках для функций-конструкторов. (По умолчанию правило рассматривает конструкторы так же, как и другие функции.) Обратите внимание: этот параметр можно включить, только если для строкового параметра задано значение"always"или"methods". -
"methodsIgnorePattern"(string): для методов, имена которых соответствуют этому шаблону регулярного выражения, требование использовать сокращённый синтаксис методов не применяется. Обратите внимание: этот параметр можно использовать, только если для строкового параметра задано значение"always"или"methods". -
"avoidExplicitReturnArrows": trueуказывает, что для свойств-функций предпочтительны методы, а не стрелочные функции с явным возвратом. (По умолчанию правило допускает оба варианта.) Обратите внимание: этот параметр можно включить, только если для строкового параметра задано значение"always"или"methods".
avoidQuotes
{
"object-shorthand": ["error", "always", { "avoidQuotes": true }]
}
Пример некорректного кода для этого правила с параметром "always", { "avoidQuotes": true }:
/*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
const foo = {
};
Пример корректного кода для этого правила с параметром "always", { "avoidQuotes": true }:
/*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
const foo = {
"bar-baz": function() {},
"qux": qux
};
ignoreConstructors
{
"object-shorthand": ["error", "always", { "ignoreConstructors": true }]
}
Пример корректного кода для этого правила с параметром "always", { "ignoreConstructors": true }:
/*eslint object-shorthand: ["error", "always", { "ignoreConstructors": true }]*/
const foo = {
ConstructorFunction: function() {}
};
methodsIgnorePattern
Пример корректного кода для этого правила с параметром "always", { "methodsIgnorePattern": "^bar$" }:
/*eslint object-shorthand: ["error", "always", { "methodsIgnorePattern": "^bar$" }]*/
const foo = {
bar: function() {}
};
avoidExplicitReturnArrows
{
"object-shorthand": ["error", "always", { "avoidExplicitReturnArrows": true }]
}
Пример некорректного кода для этого правила с параметром "always", { "avoidExplicitReturnArrows": true }:
/*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
const foo = {
,
};
Пример корректного кода для этого правила с параметром "always", { "avoidExplicitReturnArrows": true }:
/*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
const foo = {
foo(bar, baz) {
return bar + baz;
},
qux: foobar => foobar * 2
};
Пример некорректного кода для этого правила с параметром "consistent":
/*eslint object-shorthand: [2, "consistent"]*/
const foo = ;
Примеры корректного кода для этого правила с параметром "consistent":
/*eslint object-shorthand: [2, "consistent"]*/
const foo = {
a: a,
b: "foo"
};
const bar = {
a,
b,
};
Пример некорректного кода с параметром "consistent-as-needed", который очень похож на "consistent":
/*eslint object-shorthand: [2, "consistent-as-needed"]*/
const foo = ;
Когда не следует использовать правило
Тем, кто ещё не использует среду ES6, не следует применять это правило. Другим может показаться, что краткий синтаксис труднее читать, и они могут не захотеть поощрять его использование с помощью этого правила.
Связанные правила
Версия
Это правило появилось в ESLint v0.20.0.
Дополнительные материалы
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/object-shorthand