Skip to content

Commit bca98af

Browse files
committed
feature: @putout/plugin-printer: reverse-comparison-in-type-checker: add
1 parent 688184c commit bca98af

10 files changed

Lines changed: 118 additions & 1 deletion

File tree

packages/plugin-printer/README.md

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ npm i @putout/plugin-printer -D
3434
-[remove-useless-colon-from-type-checker](#remove-useless-colon-from-type-checker);
3535
-[remove-useless-tuples-from-type-checker](#remove-useless-tuples-from-type-checker);
3636
-[remove-useless-not-from-type-checker](#remove-useless-not-from-type-checker);
37+
-[reverse-comparison-in-type-checker](#reverse-comparison-in-type-checker);
3738

3839
## Config
3940

@@ -59,7 +60,8 @@ npm i @putout/plugin-printer -D
5960
"printer/remove-useless-spaces-from-type-checker": "on",
6061
"printer/remove-useless-colon-from-type-checker": "on",
6162
"printer/remove-useless-not-from-type-checker": "on",
62-
"printer/remove-useless-tuples-from-type-checker": "on"
63+
"printer/remove-useless-tuples-from-type-checker": "on",
64+
"printer/reverse-comparison-in-type-checker": "on"
6365
}
6466
}
6567
```
@@ -483,6 +485,32 @@ export const isNewlineAfterComma = createTypeChecker([
483485
]);
484486
```
485487
488+
## reverse-comparison-in-type-checker
489+
490+
Checkout in 🐊[**Putout Editor**](https://putout.cloudcmd.io/#/gist/ae2335d32022de240e918ce077144767/f25c5a11f746fe532f81adede991286cb77d1b11).
491+
492+
### ❌ Example of incorrect code
493+
494+
```js
495+
const isMoreThenMaxElementLengthInOneLine = createTypeChecker([
496+
['-: node.elements.length -> !', '<', 2],
497+
['-: node.elements.length -> !', '>', 2],
498+
['-: node.elements.length -> !', '>=', 2],
499+
['-: node.elements.length -> !', '<=', 2],
500+
]);
501+
```
502+
503+
### ✅ Example of correct code
504+
505+
```js
506+
const isMoreThenMaxElementLengthInOneLine = createTypeChecker([
507+
['-: node.elements.length', '>=', 2],
508+
['-: node.elements.length', '<=', 2],
509+
['-: node.elements.length', '<', 2],
510+
['-: node.elements.length', '>', 2],
511+
]);
512+
```
513+
486514
## remove-legacy-test-declaration
487515
488516
```diff

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 reverseComparisonInTypeChecker from './reverse-comparison-in-type-checker/index.js';
12
import * as removeUselessNotFromTypeChecker from './remove-useless-not-from-type-checker/index.js';
23
import * as removeUselessColonFromTypeChecker from './remove-useless-colon-from-type-checker/index.js';
34
import * as addMissingColonToTypeChecker from './add-missing-colon-to-type-checker/index.js';
@@ -42,4 +43,5 @@ export const rules = {
4243
'add-missing-colon-to-type-checker': addMissingColonToTypeChecker,
4344
'remove-useless-colon-from-type-checker': removeUselessColonFromTypeChecker,
4445
'remove-useless-not-from-type-checker': removeUselessNotFromTypeChecker,
46+
'reverse-comparison-in-type-checker': reverseComparisonInTypeChecker,
4547
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const isMoreThenMaxElementLengthInOneLine = createTypeChecker([
2+
['-: node.elements.length -> !', '=', 2],
3+
]);
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const isMoreThenMaxElementLengthInOneLine = createTypeChecker([
2+
['-: node.elements.length', '>=', 2],
3+
['-: node.elements.length', '<=', 2],
4+
['-: node.elements.length', '<', 2],
5+
['-: node.elements.length', '>', 2],
6+
]);
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const isMoreThenMaxElementLengthInOneLine = createTypeChecker([
2+
['-: node.elements.length -> !', '<', 2],
3+
['-: node.elements.length -> !', '>', 2],
4+
['-: node.elements.length -> !', '>=', 2],
5+
['-: node.elements.length -> !', '<=', 2],
6+
]);
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import {operator} from 'putout';
2+
3+
const CMP = {
4+
'<': '>=',
5+
'>': '<=',
6+
'<=': '>',
7+
'>=': '<',
8+
};
9+
10+
const OPERATORS = Object.keys(CMP);
11+
12+
const {setLiteralValue} = operator;
13+
14+
export const report = () => `Reverse comparison`;
15+
16+
export const match = () => ({
17+
'["__a", "__b", __c]': ({__a, __b}) => {
18+
if (!OPERATORS.includes(__b.value))
19+
return false;
20+
21+
return __a.value.endsWith('!');
22+
},
23+
});
24+
25+
export const replace = () => ({
26+
'["__a", "__b", __c]': ({__a, __b}, path) => {
27+
setLiteralValue(__a, __a.value.slice(0, -5));
28+
setLiteralValue(__b, CMP[__b.value]);
29+
30+
return path;
31+
},
32+
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import {createTest} from '@putout/test';
2+
import * as plugin from './index.js';
3+
4+
const test = createTest(import.meta.url, {
5+
plugins: [
6+
['reverse-comparison-in-type-checker', plugin],
7+
],
8+
});
9+
10+
test('printer: reverse-comparison-in-type-checker: report', (t) => {
11+
t.report('reverse-comparison-in-type-checker', `Reverse comparison`);
12+
t.end();
13+
});
14+
15+
test('printer: reverse-comparison-in-type-checker: transform', (t) => {
16+
t.transform('reverse-comparison-in-type-checker');
17+
t.end();
18+
});
19+
20+
test('printer: reverse-comparison-in-type-checker: no report: equal', (t) => {
21+
t.noReport('equal');
22+
t.end();
23+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const isMoreThenMaxElementLengthInOneLine = createTypeChecker([
2+
['-: node.elements.length', '>=', 2],
3+
['-: node.elements.length', '<=', 2],
4+
['-: node.elements.length', '<', 2],
5+
['-: node.elements.length', '>', 2],
6+
]);
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const isMoreThenMaxElementLengthInOneLine = createTypeChecker([
2+
['-: node.elements.length -> !', '<', 2],
3+
['-: node.elements.length -> !', '>', 2],
4+
['-: node.elements.length -> !', '>=', 2],
5+
['-: node.elements.length -> !', '<=', 2],
6+
]);

packages/plugin-printer/test/printer.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,8 @@ test('plugin-printer: transform: remove-useless-not-from-type-checker', (t) => {
111111
t.transform('remove-useless-not-from-type-checker');
112112
t.end();
113113
});
114+
115+
test('plugin-printer: transform: reverse-comparison-in-type-checker', (t) => {
116+
t.transform('reverse-comparison-in-type-checker');
117+
t.end();
118+
});

0 commit comments

Comments
 (0)