sort-exports
Enforce sorted exports.
Sorting exports in a consistent manner can greatly enhance the readability and maintainability of your codebase. By alphabetically ordering exports, developers can quickly identify and correct any missing or incorrect exports.
This rule promotes a structured approach to exporting modules, which simplifies code management and improves the overall quality of the project.
Try it out
export { MainContent } from './components/MainContent'
export { calculateAge } from './utils/calculateAge'
export { Sidebar } from './components/Sidebar'
export { deleteUser } from './actions/deleteUser'
export { Footer } from './components/Footer'
export { debounce } from './utils/debounce'
export { generateUUID } from './utils/generateUUID'
export { formatDate } from './utils/formatDate'
export { updateUser } from './actions/updateUser'
export { fetchUser } from './actions/fetchUser'
export { Header } from './components/Header'
export { createUser } from './actions/createUser'
export { parseQueryString } from './utils/parseQueryString'
Options
This rule accepts an options object with the following properties:
type
default:'alphabetical'
Specifies the sorting method.
'alphabetical'
— Sort items alphabetically (e.g., “a” < “b” < “c”) using localeCompare.'natural'
— Sort items in a natural order (e.g., “item2” < “item10”).'line-length'
— Sort items by the length of the code line (shorter lines first).'custom'
— Sort items using the alphabet entered in thealphabet
option.'unsorted'
— Do not sort items.
order
default:'asc'
Determines whether the sorted items should be in ascending or descending order.
'asc'
— Sort items in ascending order (A to Z, 1 to 9).'desc'
— Sort items in descending order (Z to A, 9 to 1).
fallbackSort
type: { type: string; order?: 'asc' | 'desc' }
{ type: 'unsorted' }
Defines a list of fallback sort options to use when comparing two elements that are equal according to the primary sort
type
.
Example: enforce alphabetical sort between two elements with the same length.
{
type: 'line-length',
order: 'desc'
fallbackSort: { type: 'alphabetical', order: 'asc' }
}
alphabet
default:''
Only used when the type
option is set to 'custom'
. Specifies the custom alphabet to use when sorting.
Use the Alphabet
utility class from eslint-plugin-perfectionist/alphabet
to quickly generate a custom alphabet.
Example: 0123456789abcdef...
ignoreCase
default:true
Controls whether sorting should be case-sensitive or not.
true
— Ignore case when sorting alphabetically or naturally (e.g., “A” and “a” are the same).false
— Consider case when sorting (e.g., “a” comes before “A”).
specialCharacters
default:keep
Controls whether special characters should be trimmed, removed or kept before sorting.
'keep'
— Keep special characters when sorting (e.g., “_a” comes before “a”).'trim'
— Trim special characters when sorting alphabetically or naturally (e.g., “_a” and “a” are the same).'remove'
— Remove special characters when sorting (e.g., “/a/b” and “ab” are the same).
locales
default:'en-US'
Specifies the sorting locales. See String.prototype.localeCompare() - locales.
string
— A BCP 47 language tag (e.g.'en'
,'en-US'
,'zh-CN'
).string[]
— An array of BCP 47 language tags.
partitionByComment
default:false
Allows you to use comments to separate the exports into logical groups. This can help in organizing and maintaining large export blocks by creating partitions based on comments.
true
— All comments will be treated as delimiters, creating partitions.false
— Comments will not be used as delimiters.RegExpPattern = string | { pattern: string; flags: string}
— A regexp pattern to specify which comments should act as delimiters.RegExpPattern[]
— A list of regexp patterns to specify which comments should act as delimiters.{ block: boolean | RegExpPattern | RegExpPattern[]; line: boolean | RegExpPattern | RegExpPattern[] }
— Specify which block and line comments should act as delimiters.
partitionByNewLine
default:false
When true
, the rule will not sort the exports if there is an empty line between them. This can be useful for keeping logically separated groups of exports in their defined order.
// Group 1
export * from "./atoms";
export * from "./organisms";
export * from "./shared";
// Group 2
export { Named } from './folder';
export { AnotherNamed } from './second-folder';
Each group of exports (separated by empty lines) is treated independently, and the order within each group is preserved.
groupKind
default:'mixed'
Allows you to group exports by their kind, determining whether value exports should come before or after type exports.
mixed
— Do not group named exports by their kind; export statements are sorted together regardless of their type.values-first
— Group all value exports before type exports.types-first
— Group all type exports before value exports.
Usage
// .eslintrc.js
module.exports = {
plugins: [
'perfectionist',
],
rules: {
'perfectionist/sort-exports': [
'error',
{
type: 'alphabetical',
order: 'asc',
fallbackSort: { type: 'unsorted' },
ignoreCase: true,
specialCharacters: 'keep',
partitionByComment: false,
partitionByNewLine: false,
groupKind: 'mixed',
},
],
},
}
Version
This rule was introduced in v1.2.0.