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
}]
}
Примеры
Настройки по умолчанию
Примеры корректного кода для этого правила при использовании параметров по умолчанию:
/*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