Spec-Zone.ru › ESLint

sort-imports

Требует сортировки объявлений import в модулях

🔧 Можно исправить автоматически

Некоторые проблемы, о которых сообщает это правило, можно исправить автоматически с помощью параметра командной строки --fix

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

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

Оператор import используется для импорта членов (функций, объектов или примитивов), экспортированных из внешнего модуля. Синтаксис импорта конкретного члена:

// single - Import single member.
import myMember from "my-module.js";
import {myOtherMember} from "my-other-module.js";

// multiple - Import multiple members.
import {foo, bar} from "my-module.js";

// all - Import all members, where myModule contains all the exported bindings.
import * as myModule from "my-module.js";

Оператор import также может импортировать модуль без экспортируемых привязок. Он используется, когда модуль ничего не экспортирует, но выполняет собственный код или изменяет объект глобального контекста.

// none - Import module without exported bindings.
import "my-module.js"

При объявлении нескольких импортов отсортированный список объявлений import упрощает чтение кода и последующий поиск нужных импортов. Это правило касается исключительно стиля.

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

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

Параметр --fix в командной строке автоматически исправляет некоторые проблемы, о которых сообщает это правило: несколько членов в одной строке автоматически сортируются (например, import { b, a } from 'foo.js' исправляется на import { a, b } from 'foo.js'), но строки не переставляются.

Параметры

Это правило принимает объект со следующими свойствами:

  • ignoreCase (по умолчанию: false)
  • ignoreDeclarationSort (по умолчанию: false)
  • ignoreMemberSort (по умолчанию: false)
  • memberSyntaxSortOrder (по умолчанию: ["none", "all", "multiple", "single"]); в массиве должны присутствовать все 4 элемента, но их порядок можно изменить:
    • none = импортировать модуль без экспортируемых привязок.
    • all = импортировать все члены, предоставляемые экспортируемыми привязками.
    • multiple = импортировать несколько членов.
    • single = импортировать один член.
  • allowSeparatedGroups (по умолчанию: false)

Параметры по умолчанию:

{
    "sort-imports": ["error", {
        "ignoreCase": false,
        "ignoreDeclarationSort": false,
        "ignoreMemberSort": false,
        "memberSyntaxSortOrder": ["none", "all", "multiple", "single"],
        "allowSeparatedGroups": false
    }]
}

Настройки по умолчанию

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

Открыть в Playground
/*eslint sort-imports: "error"*/
import 'module-without-export.js';
import * as bar from 'bar.js';
import * as foo from 'foo.js';
import {alpha, beta} from 'alpha.js';
import {delta, gamma} from 'delta.js';
import a from 'baz.js';
import {b} from 'qux.js';
Открыть в Playground
/*eslint sort-imports: "error"*/
import a from 'foo.js';
import b from 'bar.js';
import c from 'baz.js';
Открыть в Playground
/*eslint sort-imports: "error"*/
import 'foo.js'
import * as bar from 'bar.js';
import {a, b} from 'baz.js';
import c from 'qux.js';
import {d} from 'quux.js';
Открыть в Playground
/*eslint sort-imports: "error"*/
import {a, b, c} from 'foo.js'

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

Открыть в Playground
/*eslint sort-imports: "error"*/
import b from 'foo.js';
import a from 'bar.js';
Открыть в Playground
/*eslint sort-imports: "error"*/
import a from 'foo.js';
import A from 'bar.js';
Открыть в Playground
/*eslint sort-imports: "error"*/
import {c, d} from 'foo.js';
import {a, b} from 'bar.js';
Открыть в Playground
/*eslint sort-imports: "error"*/
import a from 'foo.js';
import {b, c} from 'bar.js';
Открыть в Playground
/*eslint sort-imports: "error"*/
import {a} from 'foo.js';
import {b, c} from 'bar.js';
Открыть в Playground
/*eslint sort-imports: "error"*/
import a from 'foo.js';
import * as b from 'bar.js';
Открыть в Playground
/*eslint sort-imports: "error"*/
import {b, a, c} from 'foo.js'

ignoreCase

Если false (по умолчанию), буквы верхнего регистра всегда должны идти перед буквами нижнего регистра.

Если true, правило не учитывает регистр локальных имён импортов.

Примеры неправильного кода для этого правила с параметром { "ignoreCase": false } по умолчанию:

Открыть в Playground
/*eslint sort-imports: ["error", { "ignoreCase": false }]*/
import a from 'bar.js';
import B from 'foo.js';
import c from 'baz.js';

Примеры правильного кода для этого правила с параметром { "ignoreCase": false } по умолчанию:

Открыть в Playground
/*eslint sort-imports: ["error", { "ignoreCase": false }]*/
import B from 'bar.js';
import a from 'foo.js';
import c from 'baz.js';

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

Открыть в Playground
/*eslint sort-imports: ["error", { "ignoreCase": true }]*/
import a from 'bar.js';
import B from 'foo.js';
import c from 'baz.js';

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

Открыть в Playground
/*eslint sort-imports: ["error", { "ignoreCase": true }]*/
import B from 'foo.js';
import a from 'bar.js';

ignoreDeclarationSort

Если true, правило не учитывает сортировку операторов объявления импорта. Значение по умолчанию — false.

Примеры неправильного кода для этого правила с параметром { "ignoreDeclarationSort": false } по умолчанию:

Открыть в Playground
/*eslint sort-imports: ["error", { "ignoreDeclarationSort": false }]*/
import b from 'foo.js'
import a from 'bar.js'

Примеры правильного кода для этого правила с параметром { "ignoreDeclarationSort": false } по умолчанию:

Открыть в Playground
/*eslint sort-imports: ["error", { "ignoreDeclarationSort": false }]*/
import a from 'bar.js';
import b from 'foo.js';

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

Открыть в Playground
/*eslint sort-imports: ["error", { "ignoreDeclarationSort": true }]*/
import b from 'foo.js'
import a from 'bar.js'

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

Открыть в Playground
/*eslint sort-imports: ["error", { "ignoreDeclarationSort": true }]*/
import {b, a, c} from 'foo.js';

ignoreMemberSort

Если true, правило не учитывает сортировку членов внутри объявления импорта с несколькими членами multiple. Значение по умолчанию — false.

Примеры неправильного кода для этого правила с параметром { "ignoreMemberSort": false } по умолчанию:

Открыть в Playground
/*eslint sort-imports: ["error", { "ignoreMemberSort": false }]*/
import {b, a, c} from 'foo.js'

Примеры правильного кода для этого правила с параметром { "ignoreMemberSort": false } по умолчанию:

Открыть в Playground
/*eslint sort-imports: ["error", { "ignoreMemberSort": false }]*/
import {a, b, c} from 'foo.js';

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

Открыть в Playground
/*eslint sort-imports: ["error", { "ignoreMemberSort": true }]*/
import {b, a, c} from 'foo.js'

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

Открыть в Playground
/*eslint sort-imports: ["error", { "ignoreMemberSort": true }]*/
import b from 'foo.js';
import a from 'bar.js';

memberSyntaxSortOrder

Этот параметр принимает массив из четырёх предопределённых элементов; порядок элементов определяет порядок синтаксиса импорта.

Порядок по умолчанию: ["none", "all", "multiple", "single"].

Существует четыре разных варианта, а порядок сортировки синтаксиса членов по умолчанию таков:

  • none — импортировать модуль без экспортируемых привязок.
  • all — импортировать все члены, предоставляемые экспортируемыми привязками.
  • multiple — импортировать несколько членов.
  • single — импортировать один член.

В массиве должны быть указаны все четыре параметра, но их порядок можно настроить.

Примеры неправильного кода для этого правила с параметром { "memberSyntaxSortOrder": ["none", "all", "multiple", "single"] } по умолчанию:

Открыть в Playground
/*eslint sort-imports: "error"*/
import a from 'foo.js';
import * as b from 'bar.js';

Примеры правильного кода для этого правила с параметром { "memberSyntaxSortOrder": ['single', 'all', 'multiple', 'none'] }:

Открыть в Playground
/*eslint sort-imports: ["error", { "memberSyntaxSortOrder": ['single', 'all', 'multiple', 'none'] }]*/

import a from 'foo.js';
import * as b from 'bar.js';

Примеры правильного кода для этого правила с параметром { "memberSyntaxSortOrder": ['all', 'single', 'multiple', 'none'] }:

Открыть в Playground
/*eslint sort-imports: ["error", { "memberSyntaxSortOrder": ['all', 'single', 'multiple', 'none'] }]*/

import * as foo from 'foo.js';
import z from 'zoo.js';
import {a, b} from 'foo.js';

allowSeparatedGroups

Если true, правило проверяет сортировку операторов объявления импорта только в том случае, если они расположены на соседних строках. Значение по умолчанию — false.

Иными словами, пустая строка, строка с комментарием или строка с любым другим оператором после оператора объявления импорта сбрасывает сортировку операторов объявления импорта.

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

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

import b from 'foo.js';
import c from 'bar.js';
import a from 'baz.js';

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

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

import b from 'foo.js';
import c from 'bar.js';

import a from 'baz.js';
Открыть в Playground
/*eslint sort-imports: ["error", { "allowSeparatedGroups": true }]*/

import b from 'foo.js';
import c from 'bar.js';
// comment
import a from 'baz.js';
Открыть в Playground
/*eslint sort-imports: ["error", { "allowSeparatedGroups": true }]*/

import b from 'foo.js';
import c from 'bar.js';
quux();
import a from 'baz.js';

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

Это правило задаёт предпочтительный стиль форматирования, и его несоблюдение не ухудшает качество кода. Если алфавитная сортировка импортов не входит в ваши стандарты кодирования, это правило можно отключить.

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

  • sort-keys
  • sort-vars

Версия

Это правило появилось в ESLint v2.0.0-beta.1.

Ресурсы

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

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

Spec-Zone.ru

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