Skip to content

Commit

Permalink
feature: @putout/plugin-eslint: apply-dir-to-flat
Browse files Browse the repository at this point in the history
  • Loading branch information
coderaiser committed May 9, 2024
1 parent b0c8fac commit d1deb4b
Show file tree
Hide file tree
Showing 11 changed files with 124 additions and 15 deletions.
65 changes: 50 additions & 15 deletions packages/plugin-eslint/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,28 +17,30 @@ npm i @putout/plugin-eslint -D

## Rules

-[add-putout](#add-putout)
-[apply-match-to-flat](#apply-match-to-flat)
-[apply-safe-align](#apply-safe-align)
-[convert-files-to-array](#convert-files-to-array)
-[convert-ide-to-safe](#convert-ide-to-safe)
-[convert-node-to-n](#convert-node-to-n)
-[convert-rc-to-flat](#convert-rc-to-flat)
-[convert-require-to-import](#convert-require-to-import)
-[declare](#declare)
-[move-putout-to-end-of-extends](#move-putout-to-end-of-extends)
-[remove-no-missing](#remove-no-missing)
-[remove-no-unpublished-require](#remove-no-unpublished-require)
-[remove-no-unsupported-features](#remove-no-unsupported-features)
-[remove-overrides-with-empty-rules](#remove-overrides-with-empty-rules)
-[remove-useless-slice](#remove-useless-slice)
-[add-putout](#add-putout);
-[apply-dir-to-flat](#apply-dir-to-flat);
-[apply-match-to-flat](#apply-match-to-flat);
-[apply-safe-align](#apply-safe-align);
-[convert-files-to-array](#convert-files-to-array);
-[convert-ide-to-safe](#convert-ide-to-safe);
-[convert-node-to-n](#convert-node-to-n);
-[convert-rc-to-flat](#convert-rc-to-flat);
-[convert-require-to-import](#convert-require-to-import);
-[declare](#declare);
-[move-putout-to-end-of-extends](#move-putout-to-end-of-extends);
-[remove-no-missing](#remove-no-missing);
-[remove-no-unpublished-require](#remove-no-unpublished-require);
-[remove-no-unsupported-features](#remove-no-unsupported-features);
-[remove-overrides-with-empty-rules](#remove-overrides-with-empty-rules);
-[remove-useless-slice](#remove-useless-slice);

## Config

```json
{
"rules": {
"eslint/add-putout": "on",
"eslint/apply-dir-to-flat": "on",
"eslint/apply-safe-align": "on",
"eslint/apply-match-to-flat": "on",
"eslint/move-putout-to-end-of-extends": "on",
Expand Down Expand Up @@ -91,6 +93,39 @@ npm i @putout/plugin-eslint -D
}
```

## apply-dir-to-flat

`matchToFlatDir()` and `mergeESLintConfigs` supports `__dirname` or `import.meta.url` starting from `v2` of [`@putout/eslint-flat`](https://www.npmjs.com/package/@putout/eslint-flat).

Check out in 🐊[**Putout Editor**](https://putout.cloudcmd.io/#/gist/805d120cbee5d216b91473d5a71f8d78/1f5b440ef7b63b56a4a12cdfcafe419764a62889).

### ❌ Example of incorrect code

```js
const scriptsConfig = await matchToFlatDir('scripts');
const monoConfig = await mergeESLintConfigs(['codemods', 'packages', 'rules']);

module.exports = [
...scriptsConfig,
...monoConfig,
];
```

### ✅ Example of correct code

```js
// CommonJS
const scriptsConfig = await matchToFlatDir(__dirname, 'scripts');

// ESM
const monoConfig = await mergeESLintConfigs(import.meta.url, ['codemods', 'packages', 'rules']);

module.exports = [
...scriptsConfig,
...monoConfig,
];
```
## apply-match-to-flat
Check out in 🐊[**Putout Editor**](https://putout.cloudcmd.io/#/gist/805d120cbee5d216b91473d5a71f8d78/1f5b440ef7b63b56a4a12cdfcafe419764a62889).
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const scriptsConfig = await matchToFlatDir(__dirname, 'scripts');

const monoConfig = await mergeESLintConfigs(__dirname, ['codemods', 'packages', 'rules']);
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const scriptsConfig = await matchToFlatDir('scripts');

const monoConfig = await mergeESLintConfigs(['codemods', 'packages', 'rules']);
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import {matchToFlatDir} from '@putout/eslint-flat';

const scriptsConfig = await matchToFlatDir(import.meta.url, 'scripts');
const monoConfig = await mergeESLintConfigs(import.meta.url, ['codemods', 'packages', 'rules']);
4 changes: 4 additions & 0 deletions packages/plugin-eslint/lib/apply-dir-to-flat/fixture/esm.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import {matchToFlatDir} from '@putout/eslint-flat';

const scriptsConfig = await matchToFlatDir('scripts');
const monoConfig = await mergeESLintConfigs(['codemods', 'packages', 'rules']);
18 changes: 18 additions & 0 deletions packages/plugin-eslint/lib/apply-dir-to-flat/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
'use strict';

const {operator} = require('putout');
const {isESM} = operator;
const createName = (a) => isESM(a) ? 'import.meta.url' : '__dirname';

module.exports.report = () => `Use 'if condition' instead of 'ternary expression'`;

module.exports.replace = () => ({
'matchToFlatDir(__a)': (vars, path) => {
const name = createName(path);
return `matchToFlatDir(${name}, __a)`;
},
'mergeESLintConfigs(__a)': (vars, path) => {
const name = createName(path);
return `mergeESLintConfigs(${name}, __a)`;
},
});
26 changes: 26 additions & 0 deletions packages/plugin-eslint/lib/apply-dir-to-flat/index.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
'use strict';

const {createTest} = require('@putout/test');
const plugin = require('.');

const test = createTest(__dirname, {
printer: 'putout',
plugins: [
['apply-dir-to-flat', plugin],
],
});

test('eslint: apply-dir-to-flat: report', (t) => {
t.report('apply-dir-to-flat', `Use 'if condition' instead of 'ternary expression'`);
t.end();
});

test('eslint: apply-dir-to-flat: transform', (t) => {
t.transform('apply-dir-to-flat');
t.end();
});

test('eslint: apply-dir-to-flat: transform: esm', (t) => {
t.transform('esm');
t.end();
});
2 changes: 2 additions & 0 deletions packages/plugin-eslint/lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const addPutout = require('./add-putout/index.js');
const removeUselessSlice = require('./remove-useless-slice');
const convertFilesToArray = require('./convert-files-to-array');
const applyMatchToFlat = require('./apply-match-to-flat');
const applyDirToFlat = require('./apply-dir-to-flat');

module.exports.rules = {
'add-putout': addPutout,
Expand All @@ -32,4 +33,5 @@ module.exports.rules = {
'remove-useless-slice': removeUselessSlice,
'convert-files-to-array': convertFilesToArray,
'apply-match-to-flat': applyMatchToFlat,
'apply-dir-to-flat': applyDirToFlat,
};
5 changes: 5 additions & 0 deletions packages/plugin-eslint/test/eslint.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,3 +89,8 @@ test('plugin-eslint: transform: apply-match-to-flat', (t) => {
t.transform('apply-match-to-flat');
t.end();
});

test('plugin-eslint: transform: apply-dir-to-flat', (t) => {
t.transform('apply-dir-to-flat');
t.end();
});
6 changes: 6 additions & 0 deletions packages/plugin-eslint/test/fixture/apply-dir-to-flat-fix.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import {matchToFlat} from '@putout/eslint-flat';
import {mergeESLintConfigs} from '@putout/eslint-flat';

const scriptsConfig = await matchToFlatDir(__dirname, 'scripts');

const monoConfig = await mergeESLintConfigs(import.meta.url, ['codemods', 'packages', 'rules']);
3 changes: 3 additions & 0 deletions packages/plugin-eslint/test/fixture/apply-dir-to-flat.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const scriptsConfig = await matchToFlatDir('scripts');

const monoConfig = await mergeESLintConfigs(['codemods', 'packages', 'rules']);

0 comments on commit d1deb4b

Please sign in to comment.