Skip to content

shinhyogeun/eslint-plugin-re-export-sort

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

eslint-plugin-re-export-sort

💫 Plugin for sorting re-export. This plugin only apply to re-export. 💫
⚠️ plugin does not sort export specifiers in re-export statements. ⚠️

Example

export * from "./List";
export type { ListProps } from "./List";
export { default as List } from "./List";
export * from "./ListItem";
export type { ListItemProps } from "./ListItem";
export { default as ListItem } from "./ListItem";
export * from "./ListItemAvatar";
export type { ListItemAvatarProps } from "./ListItemAvatar";
export { default as ListItemAvatar } from "./ListItemAvatar";
export * from "./Menu";
export type { MenuProps } from "./Menu";
export { default as Menu } from "./Menu";
export * from "./MenuItem";
export type { MenuItemProps } from "./MenuItem";
export { default as MenuItem } from "./MenuItem";

⬇️

export type { ListProps } from "./List";
export type { ListItemProps } from "./ListItem";
export type { ListAvatarProps } from "./ListItemAvatar";
export type { MenuProps } from "./Menu";
export type { MenuItemProps } from "./MenuItem";

export * from "./List";
export * from "./ListItem";
export * from "./ListItemAvatar";
export * from "./Menu";
export * from "./MenuItem";

export { default as List } from "./List";
export { default as ListItem } from "./ListItem";
export { default as ListItemAvatar } from "./ListItemAvatar";
export { default as Menu } from "./Menu";
export { default as MenuItem } from "./MenuItem";

Installation

You'll first need to install ESLint:

npm i eslint --save-dev

Next, install eslint-plugin-re-export-sort:

npm install eslint-plugin-re-export-sort --save-dev

Usage

Add re-export-sort to the plugins section of your .eslintrc configuration file. You can omit the eslint-plugin- prefix:

{
  "plugins": ["re-export-sort"]
}

Then configure the rules you want to use under the rules section.

{
  "rules": {
    "re-export-sort/exports": "error"
  }
}

Sort order

First group, then sort alphabetically.
The default group order is TypeReExport first , followed by ExportAllDeclaration, and ExportNamedDeclaration last.

  • TypeReExport=> export type { typeSpecifier } from 'source';
  • ExportAllDeclaration => export * from 'source';
  • ExportNamedDeclaration => export { specifier } from 'source';

Once grouping finished, then source part(string after from) within each group will be sorted alphabetically.

Options

spaceBetweenGroup

{
  "rules": {
    "re-export-sort/exports": [
      "error",
      {
        "spaceBetweenGroup": "boolean"
      }
    ]
  }
}

if spaceBetweenGroup is false, /n between group are not injected. default value is true


if set true (default)

export * from "./List";
export type { ListProps } from "./List";
export { default as List } from "./List";
export * from "./ListItem";
export type { ListItemProps } from "./ListItem";
export { default as ListItem } from "./ListItem";

⬇️

export type { ListProps } from "./List";
export type { ListItemProps } from "./ListItem";

export * from "./List";
export * from "./ListItem";

export { default as List } from "./List";
export { default as ListItem } from "./ListItem";

if set false

export * from "./List";
export type { ListProps } from "./List";
export { default as List } from "./List";
export * from "./ListItem";
export type { ListItemProps } from "./ListItem";
export { default as ListItem } from "./ListItem";

⬇️

export type { ListProps } from "./List";
export type { ListItemProps } from "./ListItem";
export * from "./List";
export * from "./ListItem";
export { default as List } from "./List";
export { default as ListItem } from "./ListItem";

order

{
  "rules": {
    "re-export-sort/exports": [
      "error",
      {
        "order": ["type", "all", "name"]
      }
    ]
  }
}

The order option allows you to customize the sort order. The default is ["type", "all", "name"].

example

  • type=> export type { typeSpecifier } from 'source';
  • all => export * from 'source';
  • name => export { specifier } from 'source';

if set ["all", "name", "type"]

export * from "./List";
export type { ListProps } from "./List";
export { default as List } from "./List";
export * from "./ListItem";
export type { ListItemProps } from "./ListItem";
export { default as ListItem } from "./ListItem";

⬇️

export * from "./List";
export * from "./ListItem";

export { default as List } from "./List";
export { default as ListItem } from "./ListItem";

export type { ListProps } from "./List";
export type { ListItemProps } from "./ListItem";

if set ["all", "type", "name"]

export * from "./List";
export type { ListProps } from "./List";
export { default as List } from "./List";
export * from "./ListItem";
export type { ListItemProps } from "./ListItem";
export { default as ListItem } from "./ListItem";

⬇️

export * from "./List";
export * from "./ListItem";

export type { ListProps } from "./List";
export type { ListItemProps } from "./ListItem";

export { default as List } from "./List";
export { default as ListItem } from "./ListItem";

License

MIT

Releases

No releases published

Packages

No packages published