eslint-plugin-ferramentas
Version:
A bundle of useful ESLint rules
172 lines (121 loc) • 3.87 kB
Markdown
# 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'