# eslint-plugin-organize-imports

> ESLint plugin boilerplate

Latest version **0.0.46** (published 2018-05-08) · MIT license · 0 weekly downloads

## Install

```sh
npm install eslint-plugin-organize-imports
pnpm add eslint-plugin-organize-imports
yarn add eslint-plugin-organize-imports
bun add eslint-plugin-organize-imports
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.46 |
| Published | 2018-05-08 |
| First published | 2018-05-08 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.10 |
| Dependencies | 4 |
| Unpacked size | 1.4 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 14 |
| Maintainers | sagiavinashvarma |
| Keywords | eslint, eslint-plugin, eslintplugin |

## Links

- npm: https://www.npmjs.com/package/eslint-plugin-organize-imports
- Repository: https://github.com/sagiavinash/eslint-plugin-organize-imports
- Homepage: https://github.com/sagiavinash/eslint-plugin-organize-imports#readme
- Issues: https://github.com/sagiavinash/eslint-plugin-organize-imports/issues
- npm.io page: https://npm.io/package/eslint-plugin-organize-imports

## Dependencies (4)

- [lodash](https://npm.io/package/lodash.md) ^4.17.5
- [minimatch](https://npm.io/package/minimatch.md) ^3.0.4
- [babel-preset-env](https://npm.io/package/babel-preset-env.md) 1.6.1
- [babel-preset-stage-3](https://npm.io/package/babel-preset-stage-3.md) ^6.24.1

## Alternatives

- [eslint-plugin-sonarjs](https://npm.io/package/eslint-plugin-sonarjs.md) — 2.9M weekly downloads
- [eslint-config-expo](https://npm.io/package/eslint-config-expo.md) — 1.5M weekly downloads
- [@matter/protocol](https://npm.io/package/@matter/protocol.md) — 63.5K weekly downloads
- [@eventcatalog/linter](https://npm.io/package/@eventcatalog/linter.md) — 24.8K weekly downloads
- [@inrupt/eslint-config-base](https://npm.io/package/@inrupt/eslint-config-base.md) — 4.5K weekly downloads

## Recent versions

- 0.0.46 (latest) — 2018-05-08
- 0.0.45 — 2018-05-08
- 0.0.44 — 2018-05-08
- 0.0.43 — 2018-05-08

## README

# eslint-plugin-organize-imports:
An eslint plugin to enforce grouping of similar modules together with an associated comment & order of these groups.
## Problem:
when lot of imports are present on top of a file, its difficult to recognize if a file is imported already and leads to duplicate imports.
To prevent this, one can use this lint rule to organize imports

## Usage:
```
npm install --save-dev eslint-plugin-organize-imports
```

## Plugin in action - vscode
![Plugin in action - vscode](https://raw.githubusercontent.com/sagiavinash/eslint-plugin-organize-imports/master/assets/plugin_in_use_vscode.png)

## Config/Options Schema:
- `orderRules` - **_(required)_** Array of configs for each import-groups
    - `moduleType` - **_(required)_** String to denote a module-group in error messages. `nodeModule` is a predefined value to denote external dependencies
    - `comment` - **_(required)_** string that is the comment body. rule checks for equality after comment body's trimming whitespace.
    - `include` - array of paths(glob patterns supported) that categorize matching modules into the import group
    - `exclude` - array of paths(glob patterns supported) that avoid categorizing the matching modules into the import group
- `pathAliases` - **_(optional)_** to support use cases like `babel-plugin-module-alias` and any other other webpack plugins which preprocess shorthand prefixes in import paths to an actual path
    - `prefix` - string to denote the shorthand prefix that gets preprocessed to get the final file path (*ex: `expose` in `babel-plugin-module-alias`*)
    - `resolvesTo` - the string that replaces the path prefix by the preprocessing tool (*ex: `src` in `babel-plugin-module-alias`*)
## Example:
`.eslintrc`
```json
{
  "rules": {
    "organize-imports/organize-imports": ["error", {
      "orderRules": [{
        "moduleType": "nodeModule",
        "comment": "vendor modules"
      }, {
        "moduleType": "testModule",
        "comment": "test modules",
        "include": ["src/test/"],
        "exclude":  ["src/test/utils"]
      }, {
        "moduleType": "utilityModule",
        "comment": "utility modules",
        "include": [
          "src/shared/constants",
          "src/+(shared|server|test)/utils",
          "src/server/mock-data"
        ]
      }],
      "pathAliases": [{
        "prefix": "<shared>",
        "resolvesTo": "./src/shared"
      }]
    }]
  }
}
```

## Valid code samples
### valid code
**sourceFileLocation:** `/src/test/sample1.js`
```js
// vendor modules
import React, {Component} from 'react';
import PropTypes from 'prop-types';
import _ from 'lodash';
// utility modules
import sampleUtils from '<shared>/utils/sample-utils';
```
## Invalid code samples
### invalid code - (missing comments)
**sourceFileLocation:** `/src/test/sample1.js`
```js
// vendor modules
import React, {Component} from 'react';
import PropTypes from 'prop-types';
import _ from 'lodash';
import sampleUtils from '<shared>/utils/sample-utils';  /* [eslint] no associated "// utility modules" comment */
```
### invalid code - (wrong order of import-groups)
**sourceFileLocation:** `/src/test/sample1.js`
```js
// utility modules                                      /* [eslint] "utilityModule" modules need to be after "nodeModule" modules */
import sampleUtils from '<shared>/utils/sample-utils';
// vendor modules
import React, {Component} from 'react';
import PropTypes from 'prop-types';
import _ from 'lodash';
```

---
_Source: https://npm.io/package/eslint-plugin-organize-imports · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
