Spec-Zone.ru › ESLint

sort-imports

Принудительное упорядочение импортов в модулях

🔧 Исправимая

Некоторые проблемы, выявленные этим правилом, могут быть автоматически исправлены с помощью параметра --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"

При объявлении нескольких импортов отсортированный список импортов облегчает разработчикам чтение кода и поиск необходимых импортов впоследствии. Это правило чисто стилистическое.

Подробности правила

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

Параметр --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