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
}]
}
Настройки по умолчанию
Примеры правильного кода для этого правила с параметрами по умолчанию:
/*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';
/*eslint sort-imports: "error"*/
import a from 'foo.js';
import b from 'bar.js';
import c from 'baz.js';
/*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';
/*eslint sort-imports: "error"*/
import {a, b, c} from 'foo.js'
Примеры неправильного кода для этого правила с параметрами по умолчанию:
/*eslint sort-imports: "error"*/
import b from 'foo.js';
/*eslint sort-imports: "error"*/
import a from 'foo.js';
/*eslint sort-imports: "error"*/
import {c, d} from 'foo.js';
/*eslint sort-imports: "error"*/
import a from 'foo.js';
/*eslint sort-imports: "error"*/
import {a} from 'foo.js';
/*eslint sort-imports: "error"*/
import a from 'foo.js';
/*eslint sort-imports: "error"*/
import {b, , c} from 'foo.js'
ignoreCase
Если false (по умолчанию), буквы верхнего регистра всегда должны идти перед буквами нижнего регистра.
Если true, правило не учитывает регистр локальных имён импортов.
Примеры неправильного кода для этого правила с параметром { "ignoreCase": false } по умолчанию:
/*eslint sort-imports: ["error", { "ignoreCase": false }]*/
import a from 'bar.js';
import c from 'baz.js';
Примеры правильного кода для этого правила с параметром { "ignoreCase": false } по умолчанию:
/*eslint sort-imports: ["error", { "ignoreCase": false }]*/
import B from 'bar.js';
import a from 'foo.js';
import c from 'baz.js';
Примеры правильного кода для этого правила с параметром { "ignoreCase": true }:
/*eslint sort-imports: ["error", { "ignoreCase": true }]*/
import a from 'bar.js';
import B from 'foo.js';
import c from 'baz.js';
Примеры неправильного кода для этого правила с параметром { "ignoreCase": true }:
/*eslint sort-imports: ["error", { "ignoreCase": true }]*/
import B from 'foo.js';
ignoreDeclarationSort
Если true, правило не учитывает сортировку операторов объявления импорта. Значение по умолчанию — false.
Примеры неправильного кода для этого правила с параметром { "ignoreDeclarationSort": false } по умолчанию:
/*eslint sort-imports: ["error", { "ignoreDeclarationSort": false }]*/
import b from 'foo.js'
Примеры правильного кода для этого правила с параметром { "ignoreDeclarationSort": false } по умолчанию:
/*eslint sort-imports: ["error", { "ignoreDeclarationSort": false }]*/
import a from 'bar.js';
import b from 'foo.js';
Примеры правильного кода для этого правила с параметром { "ignoreDeclarationSort": true }:
/*eslint sort-imports: ["error", { "ignoreDeclarationSort": true }]*/
import b from 'foo.js'
import a from 'bar.js'
Примеры неправильного кода для этого правила с параметром { "ignoreDeclarationSort": true }:
/*eslint sort-imports: ["error", { "ignoreDeclarationSort": true }]*/
import {b, , c} from 'foo.js';
ignoreMemberSort
Если true, правило не учитывает сортировку членов внутри объявления импорта с несколькими членами multiple. Значение по умолчанию — false.
Примеры неправильного кода для этого правила с параметром { "ignoreMemberSort": false } по умолчанию:
/*eslint sort-imports: ["error", { "ignoreMemberSort": false }]*/
import {b, , c} from 'foo.js'
Примеры правильного кода для этого правила с параметром { "ignoreMemberSort": false } по умолчанию:
/*eslint sort-imports: ["error", { "ignoreMemberSort": false }]*/
import {a, b, c} from 'foo.js';
Примеры правильного кода для этого правила с параметром { "ignoreMemberSort": true }:
/*eslint sort-imports: ["error", { "ignoreMemberSort": true }]*/
import {b, a, c} from 'foo.js'
Примеры неправильного кода для этого правила с параметром { "ignoreMemberSort": true }:
/*eslint sort-imports: ["error", { "ignoreMemberSort": true }]*/
import b from 'foo.js';
memberSyntaxSortOrder
Этот параметр принимает массив из четырёх предопределённых элементов; порядок элементов определяет порядок синтаксиса импорта.
Порядок по умолчанию: ["none", "all", "multiple", "single"].
Существует четыре разных варианта, а порядок сортировки синтаксиса членов по умолчанию таков:
-
none— импортировать модуль без экспортируемых привязок. -
all— импортировать все члены, предоставляемые экспортируемыми привязками. -
multiple— импортировать несколько членов. -
single— импортировать один член.
В массиве должны быть указаны все четыре параметра, но их порядок можно настроить.
Примеры неправильного кода для этого правила с параметром { "memberSyntaxSortOrder": ["none", "all", "multiple", "single"] } по умолчанию:
/*eslint sort-imports: "error"*/
import a from 'foo.js';
Примеры правильного кода для этого правила с параметром { "memberSyntaxSortOrder": ['single', 'all', 'multiple', 'none'] }:
/*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'] }:
/*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 }:
/*eslint sort-imports: ["error", { "allowSeparatedGroups": true }]*/
import b from 'foo.js';
import c from 'bar.js';
Примеры правильного кода для этого правила с параметром { "allowSeparatedGroups": true }:
/*eslint sort-imports: ["error", { "allowSeparatedGroups": true }]*/
import b from 'foo.js';
import c from 'bar.js';
import a from 'baz.js';
/*eslint sort-imports: ["error", { "allowSeparatedGroups": true }]*/
import b from 'foo.js';
import c from 'bar.js';
// comment
import a from 'baz.js';
/*eslint sort-imports: ["error", { "allowSeparatedGroups": true }]*/
import b from 'foo.js';
import c from 'bar.js';
quux();
import a from 'baz.js';
Когда не следует использовать это правило
Это правило задаёт предпочтительный стиль форматирования, и его несоблюдение не ухудшает качество кода. Если алфавитная сортировка импортов не входит в ваши стандарты кодирования, это правило можно отключить.
Связанные правила
Версия
Это правило появилось в ESLint v2.0.0-beta.1.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/sort-imports