Skip to content

Commit 433d61b

Browse files
committed
feature: @putout/plugin-printer: remove-useless-arrow-from-type-checker: add
1 parent 24d1aeb commit 433d61b

9 files changed

Lines changed: 121 additions & 0 deletions

File tree

packages/plugin-printer/README.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ npm i @putout/plugin-printer -D
3131
-[remove-legacy-test-declaration](#remove-legacy-test-declaration);
3232
-[remove-trailing-spaces-from-type-checker](#remove-trailing-spaces-from-type-checker);
3333
-[remove-useless-spaces-from-type-checker](#remove-useless-spaces-from-type-checker);
34+
-[remove-useless-arrow-from-type-checker](#remove-useless-arrow-from-type-checker);
3435
-[remove-useless-colon-from-type-checker](#remove-useless-colon-from-type-checker);
3536
-[remove-useless-tuples-from-type-checker](#remove-useless-tuples-from-type-checker);
3637
-[remove-useless-not-from-type-checker](#remove-useless-not-from-type-checker);
@@ -59,6 +60,7 @@ npm i @putout/plugin-printer -D
5960
"printer/remove-useless-maybe": "on",
6061
"printer/remove-trailing-spaces-from-type-checker": "on",
6162
"printer/remove-useless-spaces-from-type-checker": "on",
63+
"printer/remove-useless-arrow-from-type-checker": "on",
6264
"printer/remove-useless-colon-from-type-checker": "on",
6365
"printer/remove-useless-not-from-type-checker": "on",
6466
"printer/remove-useless-path-from-type-checker": "on",
@@ -278,6 +280,28 @@ export const beforeIf = createTypeChecker([
278280
]);
279281
```
280282
283+
## remove-useless-arrow-from-type-checker
284+
285+
Checkout in 🐊[**Putout Editor**](https://putout.cloudcmd.io/#/gist/c12c37b793192eadb60fac332d95cc3b/3f4aa557c65897f4967712f30e51c29483feddc8).
286+
287+
### ❌ Example of incorrect code
288+
289+
```js
290+
const isTwoLongStringsInsideArray = createTypeChecker([
291+
['-: -> !', isTwoLongStrings],
292+
['+: parentPath -> -> ArrayExpression'],
293+
]);
294+
```
295+
296+
### ✅ Example of correct code
297+
298+
```js
299+
const isTwoLongStringsInsideArray = createTypeChecker([
300+
['-: -> !', isTwoLongStrings],
301+
['+: parentPath -> ArrayExpression'],
302+
]);
303+
```
304+
281305
## remove-useless-colon-from-type-checker
282306
283307
Checkout in 🐊[**Putout Editor**](https://putout.cloudcmd.io/#/gist/49a35399bd43d56bfd0221b3a0ace3b0/3ff3bdc8cb5f2a06786e9b616252d1b5f506dd73).

packages/plugin-printer/lib/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import * as removeUselessArrowFromTypeChecker from './remove-useless-arrow-from-type-checker/index.js';
12
import * as removeUselessPathFromTypeChecker from './remove-useless-path-from-type-checker/index.js';
23
import * as reverseComparisonInTypeChecker from './reverse-comparison-in-type-checker/index.js';
34
import * as removeUselessNotFromTypeChecker from './remove-useless-not-from-type-checker/index.js';
@@ -46,4 +47,5 @@ export const rules = {
4647
'remove-useless-not-from-type-checker': removeUselessNotFromTypeChecker,
4748
'reverse-comparison-in-type-checker': reverseComparisonInTypeChecker,
4849
'remove-useless-path-from-type-checker': removeUselessPathFromTypeChecker,
50+
'remove-useless-arrow-from-type-checker': removeUselessArrowFromTypeChecker,
4951
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const isTwoLongStringsInsideArray = createTypeChecker([
2+
['-: -> !', isTwoLongStrings],
3+
['+: parentPath -> ArrayExpression'],
4+
]);
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const isTwoLongStringsInsideArray = createTypeChecker([
2+
['-: -> !', isTwoLongStrings],
3+
['+: parentPath -> -> ArrayExpression'],
4+
]);
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import {operator, types} from 'putout';
2+
3+
const {
4+
isIdentifier,
5+
isCallExpression,
6+
} = types;
7+
8+
const {setLiteralValue} = operator;
9+
10+
export const report = ({path, where}) => {
11+
const {value} = path.node;
12+
const withSpaces = addColon(value, where);
13+
14+
return `Remove useless arrow: '${value}' -> '${withSpaces}'`;
15+
};
16+
17+
export const fix = ({path, where}) => {
18+
const {value} = path.node;
19+
setLiteralValue(path, addColon(value, where));
20+
};
21+
export const traverse = ({push}) => ({
22+
StringLiteral(path) {
23+
const call = path.find(isCallExpression);
24+
25+
if (!call)
26+
return;
27+
28+
if (!isIdentifier(call.node.callee, {name: 'createTypeChecker'}))
29+
return;
30+
31+
const {value} = path.node;
32+
const where = createWhere(value);
33+
34+
if (where.length)
35+
push({
36+
path,
37+
where,
38+
});
39+
},
40+
});
41+
42+
function createWhere(value) {
43+
const where = [];
44+
45+
if (value.includes('-> ->'))
46+
where.push('duplicate');
47+
48+
return where;
49+
}
50+
51+
function addColon(value, where) {
52+
if (where.includes('duplicate'))
53+
value = value.replace('-> ->', '->');
54+
55+
return value;
56+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import {createTest} from '@putout/test';
2+
import * as plugin from './index.js';
3+
4+
const test = createTest(import.meta.url, {
5+
plugins: [
6+
['remove-useless-arrow-from-type-checker', plugin],
7+
],
8+
});
9+
10+
test('printer: remove-useless-arrow-from-type-checker: report', (t) => {
11+
t.report('remove-useless-arrow-from-type-checker', `Remove useless arrow: '+: parentPath -> -> ArrayExpression' -> '+: parentPath -> ArrayExpression'`);
12+
t.end();
13+
});
14+
15+
test('printer: remove-useless-arrow-from-type-checker: transform', (t) => {
16+
t.transform('remove-useless-arrow-from-type-checker');
17+
t.end();
18+
});
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const isTwoLongStringsInsideArray = createTypeChecker([
2+
['-: -> !', isTwoLongStrings],
3+
['+: parentPath -> ArrayExpression'],
4+
]);
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const isTwoLongStringsInsideArray = createTypeChecker([
2+
['-: -> !', isTwoLongStrings],
3+
['+: parentPath -> -> ArrayExpression'],
4+
]);

packages/plugin-printer/test/printer.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,8 @@ test('plugin-printer: transform: remove-useless-path-from-type-checker', (t) =>
121121
t.transform('remove-useless-path-from-type-checker');
122122
t.end();
123123
});
124+
125+
test('plugin-printer: transform: remove-useless-arrow-from-type-checker', (t) => {
126+
t.transform('remove-useless-arrow-from-type-checker');
127+
t.end();
128+
});

0 commit comments

Comments
 (0)