Spec-Zone.ru › ESLint

sort-keys

Требует сортировки ключей объектов

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

Это правило в настоящее время заморожено, и предложения по новым функциям не принимаются.

При объявлении нескольких свойств некоторые разработчики предпочитают сортировать имена свойств по алфавиту, чтобы позднее было проще найти нужные свойства и/или сравнить изменения. Другие считают, что это усложняет код и становится обременительным при сопровождении.

Описание правила

Это правило проверяет все определения свойств в выражениях объектов и убеждается, что все переменные отсортированы по алфавиту.

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

Открыть в Playground
/*eslint sort-keys: "error"*/

const obj1 = {a: 1, c: 3, b: 2};
const obj2 = {a: 1, "c": 3, b: 2};

// Case-sensitive by default.
const obj3 = {a: 1, b: 2, C: 3};

// Non-natural order by default.
const obj4 = {1: a, 2: c, 10: b};

// This rule checks computed properties which have a simple name as well.
// Simple names are names which are expressed by an Identifier node or a Literal node.
const S = Symbol("s")
const obj5 = {a: 1, ["c"]: 3, b: 2};
const obj6 = {a: 1, [S]: 3, b: 2};

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

Открыть в Playground
/*eslint sort-keys: "error"*/

const obj1 = {a: 1, b: 2, c: 3};
const obj2 = {a: 1, "b": 2, c: 3};

// Case-sensitive by default.
const obj3 = {C: 3, a: 1, b: 2};

// Non-natural order by default.
const obj4 = {1: a, 10: b, 2: c};

// This rule checks computed properties which have a simple name as well.
const obj5 = {a: 1, ["b"]: 2, c: 3};
const obj6 = {a: 1, [b]: 2, c: 3};

// This rule ignores computed properties which have a non-simple name.
const obj7 = {a: 1, [c + d]: 3, b: 2};
const obj8 = {a: 1, ["c" + "d"]: 3, b: 2};
const obj9 = {a: 1, [`${c}`]: 3, b: 2};
const obj10 = {a: 1, [tag`c`]: 3, b: 2};

// This rule does not report unsorted properties that are separated by a spread property.
const obj11 = {b: 1, ...c, a: 2};

Параметры

{
    "sort-keys": ["error", "asc", {"caseSensitive": true, "natural": false, "minKeys": 2}]
}

Первый параметр — "asc" или "desc".

  • "asc" (по умолчанию) — требует расположения свойств в порядке возрастания.
  • "desc" — требует расположения свойств в порядке убывания.

Второй параметр — объект со следующими свойствами.

  • caseSensitive — если true, требует сортировки свойств с учетом регистра. Значение по умолчанию — true.
  • minKeys — задает минимальное количество ключей, которое должен содержать объект, чтобы наличие несортированных ключей приводило к ошибке. По умолчанию — 2, то есть по умолчанию все объекты с несортированными ключами приводят к ошибкам линтера.
  • natural — если true, требует сортировки свойств в естественном порядке. Значение по умолчанию — false. При естественной сортировке строки, содержащие сочетание букв и цифр, сравниваются так, как их сортировал бы человек. По сути, сортировка выполняется по числовому значению, а не по алфавиту. Поэтому при естественной сортировке число 10 идет после числа 3.
  • allowLineSeparatedGroups — если true, правило позволяет группировать ключи объекта с помощью переводов строк. Иными словами, пустая строка после свойства сбрасывает сортировку ключей. Значение по умолчанию — false.
  • ignoreComputedKeys — если true, правило игнорирует все вычисляемые ключи и не сообщает об ошибках сортировки свойств, разделенных ими. Вычисляемый ключ сбрасывает сортировку следующих обычных ключей. Значение по умолчанию — false.

Пример списка:

Если natural равно true, порядок будет таким: 1 3 6 8 10

Если natural равно false, порядок будет таким: 1 10 3 6 8

desc

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

Открыть в Playground
/*eslint sort-keys: ["error", "desc"]*/

const obj1 = {b: 2, c: 3, a: 1};
const obj2 = {"b": 2, c: 3, a: 1};

// Case-sensitive by default.
const obj3 = {C: 1, b: 3, a: 2};

// Non-natural order by default.
const obj4 = {10: b, 2: c, 1: a};

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

Открыть в Playground
/*eslint sort-keys: ["error", "desc"]*/

const obj1 = {c: 3, b: 2, a: 1};
const obj2 = {c: 3, "b": 2, a: 1};

// Case-sensitive by default.
const obj3 = {b: 3, a: 2, C: 1};

// Non-natural order by default.
const obj4 = {2: c, 10: b, 1: a};

caseSensitive

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

Открыть в Playground
/*eslint sort-keys: ["error", "asc", {caseSensitive: false}]*/

const obj1 = {a: 1, c: 3, C: 4, b: 2};
const obj2 = {a: 1, C: 3, c: 4, b: 2};

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

Открыть в Playground
/*eslint sort-keys: ["error", "asc", {caseSensitive: false}]*/

const obj1 = {a: 1, b: 2, c: 3, C: 4};
const obj2 = {a: 1, b: 2, C: 3, c: 4};

natural

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

Открыть в Playground
/*eslint sort-keys: ["error", "asc", {natural: true}]*/

const obj = {1: a, 10: c, 2: b};

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

Открыть в Playground
/*eslint sort-keys: ["error", "asc", {natural: true}]*/

const obj = {1: a, 2: b, 10: c};

minKeys

Примеры неправильного кода для параметра {minKeys: 4}:

Открыть в Playground
/*eslint sort-keys: ["error", "asc", {minKeys: 4}]*/

// 4 keys
const obj1 = {
    b: 2,
    a: 1, // not sorted correctly (should be 1st key)
    c: 3,
    d: 4,
};

// 5 keys
const obj2 = {
    2: 'a',
    1: 'b', // not sorted correctly (should be 1st key)
    3: 'c',
    4: 'd',
    5: 'e',
};

Примеры правильного кода для параметра {minKeys: 4}:

Открыть в Playground
/*eslint sort-keys: ["error", "asc", {minKeys: 4}]*/

// 3 keys
const obj1 = {
    b: 2,
    a: 1,
    c: 3,
};

// 2 keys
const obj2 = {
    2: 'b',
    1: 'a',
};

allowLineSeparatedGroups

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

Открыть в Playground
/*eslint sort-keys: ["error", "asc", {allowLineSeparatedGroups: true}]*/

const obj1 = {
    b: 1,
    c () {

    },
    a: 3
}

const obj2 = {
    b: 1,
    c: 2,

    z () {

    },
    y: 3
}

const obj3 = {
    b: 1,
    c: 2,

    z () {

    },
    // comment
    y: 3,
}

const obj4 = {
    b: 1
    // comment before comma
    , a: 2
};

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

Открыть в Playground
/*eslint sort-keys: ["error", "asc", {allowLineSeparatedGroups: true}]*/

const obj1 = {
    e: 1,
    f: 2,
    g: 3,

    a: 4,
    b: 5,
    c: 6
}

const obj2 = {
    b: 1,

    // comment
    a: 4,
    c: 5,
}

const obj3 = {
    c: 1,
    d: 2,

    b () {

    },
    e: 3,
}

const obj4 = {
    c: 1,
    d: 2,
    // comment

    // comment
    b() {

    },
    e: 4
}

const obj5 = {
    b,

    [foo + bar]: 1,
    a
}

const obj6 = {
    b: 1
    // comment before comma

    ,
    a: 2
};

const obj7 = {
    b: 1,

    a: 2,
    ...z,
    c: 3
}

ignoreComputedKeys

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

Открыть в Playground
/*eslint sort-keys: ["error", "asc", {ignoreComputedKeys: true}]*/

const obj1 = {
    [b]: 1,
    a: 2
}

const obj2 = {
    c: 1,
    [b]: 2,
    a: 3
}

const obj3 = {
    c: 1,
    ["b"]: 2,
    a: 3
}

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

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

Совместимость

  • JSCS: validateOrderInObjectKeys

Связанные правила

  • sort-imports
  • sort-vars

Версия

Это правило появилось в ESLint v3.3.0.

Ресурсы

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

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

Spec-Zone.ru

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