UNPKG

eslint-plugin-ferramentas

Version:
172 lines (121 loc) 3.87 kB
# eslint-plugin-ferramentas This package contains 3 ESLint rules.<br/> As all these rules **need** configuration by default, no plugin preset is exported.<br/> Install it by running `npm install --save-dev eslint-plugin-ferramentas` ## Rules ### import-spaces Enforces consistency of spacing between relative imports according to the folder each imports reference.<br/> Imports are grouped as defined in the configuration, spaces are only allowed between the groups.<br/> Non relative imports, and relative imports without a specified group will be considered to be each in their own group, thus having spaces between them as well. #### Configuration To configure the rule on `.eslintrc.js`, simply add: ```js /** @type {import('eslint-plugin-ferramentas').Options['import-spaces']} */ const options = { groups: ['^foo.*$', '^bar.*$'], }; module.exports = { rules: { 'ferramentas/import-spaces': ['error', options] } }; ``` #### Possible errors examples `🔧 Automatic fixes available` > There should be no empty lines in a import group > There should be one empty line between import groups #### Fixes When configured with: ```json { "groups": ["^foo.*$", "^bar.*$"] } ``` Will change: ```ts import { DomainType } from 'static'; import { FooA } from './foo/a'; import { FooB } from './foo/b'; import { Bar } from './bar'; import { Other } from './other'; ``` To: ```ts import { DomainType } from 'static'; import { FooA } from './foo/a'; import { FooB } from './foo/b'; import { Bar } from './bar'; import { Other } from './other'; ``` ### relative-import-order Ensure relative imports appear in a specific order as set on the configuration.<br/> The paths must be set with root paths and not from the perspective of the files where the import actually happens. #### Configuration To configure the rule on `.eslintrc.js`, simply add: ```js /** @type {import('eslint-plugin-ferramentas').Options['relative-import-order']} */ const options = { sort: [ { type: 'group', groups: ['src/utils', 'src/domain', 'src/react'], }, { type: 'depth', }, { type: 'name', }, ], }; module.exports = { rules: { 'ferramentas/relative-import-order': ['error', options] } }; ``` #### Possible errors examples `🔧 Automatic fixes available` > The path './foo/bar' is not listed. > All imported paths need to be included, either in the groups (so they are sorted) or ignored > Imports from './foo' should be above the import from './bar' #### Fixes When configured with: ```json { "sort": [ { "type": "group", "groups": ["top-library", "bottom-library"] }, { "type": "depth" }, { "type": "name" } ] } ``` Will change (while on the file `./bottom-library/ExampleImporter.tsx`): ```ts import { Label } from '../bottom-library'; import { isBufferValid } from '../top-library'; import { SpanishInquisition } from '../non-listed/import-path'; ``` To: ```ts import { isBufferValid } from '../top-library'; import { Label } from '../bottom-library'; import { SpanishInquisition } from '../non-listed/import-path'; ``` ### siloed-relative-import Prevents importing of files in specific folders from other specified locations of the codebase through regex. #### Configuration To configure the rule on `.eslintrc.js`, simply add: ```js /** @type {import('eslint-plugin-ferramentas').Options['siloed-relative-import']} */ const options = { directories: [ { filter: '^src/react', forbid: ['^src/http'], }, ], }; module.exports = { rules: { 'ferramentas/siloed-relative-import': ['error', options] } }; ``` #### Possible errors examples > Importing of './foo' is forbidden on './moo'