putout 25.0.9 → 25.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ChangeLog +43 -0
- package/README.md +138 -91
- package/package.json +4 -4
- package/putout.json +0 -1
package/ChangeLog
CHANGED
|
@@ -1,3 +1,46 @@
|
|
|
1
|
+
2022.03.06, v25.2.0
|
|
2
|
+
|
|
3
|
+
fix:
|
|
4
|
+
- (@putout/plugin-apply-try-catch) try-to-catch: report: await
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
feature:
|
|
8
|
+
- (package) @putout/plugin-remove-useless-escape v3.0.0
|
|
9
|
+
- (putout) convert-replace-to-replace-all: enable since node v16 support
|
|
10
|
+
- (@putout/plugin-remove-useless-escape) drop support of putout < 25
|
|
11
|
+
- (@putout/plugin-regexp) apply-literal-notation: add support of \/
|
|
12
|
+
- (@putout/plugin-remove-useless-escape) add support of \/
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
2022.03.05, v25.1.1
|
|
16
|
+
|
|
17
|
+
feature:
|
|
18
|
+
- (package) @putout/plugin-apply-array-at v2.0.0
|
|
19
|
+
- (@putout/plugin-apply-array-at) drop support of putout < 25
|
|
20
|
+
- (@putout/plugin-apply-array-at) report
|
|
21
|
+
- (@putout/plugin-apply-array-at) exclude left of AssignmentExpression
|
|
22
|
+
- (@putout/plugin-promises) remove-useless-await: add support of OptionalCallExpression
|
|
23
|
+
- (@putout/operator-declare) exclude TSDeclareMethod
|
|
24
|
+
- (@putout/operator-declare) exclude TSFunctionType
|
|
25
|
+
- (@putout/plugin-nodejs) declare: rm type
|
|
26
|
+
- (@putout/operator-declare) exclude TSParameterProperty
|
|
27
|
+
- (@putout/operator-declare) exclude TSMethodSignature
|
|
28
|
+
- (@putout/plugin-promise) remove-useless-await: exclude `new await Promise()`
|
|
29
|
+
- (eslint-plugin-putout) ts: disable warn on unsupported version (https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/parser#parseroptionswarnonunsupportedtypescriptversion)
|
|
30
|
+
- (@putout/plugin-apply-try-catch) try-catch: improve filtering of CallExpression
|
|
31
|
+
- (@putout/plugin-apply-try-catch) try-to-catch: improve filtering Await Expressions
|
|
32
|
+
- (eslint-plugin-putout) nonblock-statement-body-newline: add support of for, for-of, while
|
|
33
|
+
- (eslint-plugin-putout) add nonblock-statement-body-newline
|
|
34
|
+
- (eslint-plugin-putout) *.md{js}: enable quotes, quote-props'
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
2022.03.01, v25.1.0
|
|
38
|
+
|
|
39
|
+
feature:
|
|
40
|
+
- (package) @putout/plugin-package-json v4.0.0
|
|
41
|
+
- (@putout/plugin-package-json) drop support of putout < 25
|
|
42
|
+
|
|
43
|
+
|
|
1
44
|
2022.03.01, v25.0.9
|
|
2
45
|
|
|
3
46
|
feature:
|
package/README.md
CHANGED
|
@@ -7,96 +7,138 @@
|
|
|
7
7
|
[CoverageURL]: https://coveralls.io/github/coderaiser/putout?branch=master
|
|
8
8
|
[CoverageIMGURL]: https://coveralls.io/repos/coderaiser/putout/badge.svg?branch=master&service=github
|
|
9
9
|
|
|
10
|
+
> **Perfection is finally attained not when there is no longer anything to add,
|
|
11
|
+
> but when there is no longer anything to take away.**
|
|
12
|
+
>
|
|
13
|
+
> **(c) Antoine de Saint Exupéry**
|
|
14
|
+
|
|
10
15
|

|
|
11
16
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
- remove
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
- remove useless `
|
|
82
|
-
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
|
|
99
|
-
|
|
17
|
+
🐊**Putout** is a pluggable and configurable code transformer with built-in ESLint and Babel plugins support for js, jsx, typescript and flow files. It has [a lot of transformations](#-built-in-transformations) that will keep your codebase in a clean state, transforming any code smell to readable code according to best practices.
|
|
18
|
+
|
|
19
|
+
[](https://asciinema.org/a/0akg9gkJdbmbGl6BbpaycgKZm)
|
|
20
|
+
|
|
21
|
+
## 🤷️ In doubt about using 🐊Putout?
|
|
22
|
+
|
|
23
|
+
Check out couple variants of plugins that does the same: [**linting debugger statement**](https://putout.cloudcmd.io/#/gist/f61ba31fe534868d49eba9b946f3ed4b/5ef6863d9cf4826666782ae0eea5cb5def266bbd):
|
|
24
|
+
|
|
25
|
+
- ❌ ESLint [no-debugger](https://github.com/eslint/eslint/blob/2dc38aa653f1d5137a9abf82024c67a11620bb7c/lib/rules/no-debugger.js): **43** lines;
|
|
26
|
+
- ❌ SWCLint [no-debugger](https://github.com/swc-project/swc/blob/v1.2.138/crates/swc_ecma_lints/src/rules/no_debugger.rs): **49** lines;
|
|
27
|
+
- ❌ Rome [no-debugger](https://github.com/rome/tools/blob/4d5a99ce98e987cbd03f3ab6b38fa22d00bbfe27/packages/%40romejs/js-compiler/transforms/lint/noDebugger.ts): **28** lines;
|
|
28
|
+
- ❌ RSLint [no-debugger](https://github.com/rslint/rslint/blob/v0.3.0/crates/rslint_core/src/groups/errors/no_debugger.rs): **48** lines
|
|
29
|
+
- ✅ 🐊**Putout** [remove-debugger](https://github.com/coderaiser/putout/blob/v24.6.0/packages/plugin-remove-debugger/lib/remove-debugger.js): **7** lines:
|
|
30
|
+
|
|
31
|
+
*Choose wisely, competitors cannot even fix…* 🤫
|
|
32
|
+
|
|
33
|
+
```js
|
|
34
|
+
'use strict';
|
|
35
|
+
|
|
36
|
+
module.exports.report = () => 'Unexpected "debugger" statement';
|
|
37
|
+
|
|
38
|
+
module.exports.replace = () => ({
|
|
39
|
+
debugger: '',
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 🙏 Whom should I thank for this project exist?
|
|
44
|
+
|
|
45
|
+
> **If I have seen further, it is by standing upon the shoulders of giants.**
|
|
46
|
+
>
|
|
47
|
+
> **(c) Isaak Newton**
|
|
48
|
+
|
|
49
|
+
- 💪 [**ESLint**](https://eslint.org) for stable releases and future proof `API`.
|
|
50
|
+
- 💪 [**Babel**](https://babeljs.io) for amazing `API` documented in [`Handbook`](https://github.com/jamiebuilds/babel-handbook/blob/master/translations/en/plugin-handbook.md#babel-plugin-handbook) and responsiveness of a team.
|
|
51
|
+
- 💪 [**Prettier**](https://github.com/prettier/prettier) for minimalistic options and uniform codestyle.
|
|
52
|
+
- 💪 [**jscodeshift**](https://github.com/facebook/jscodeshift) for making codemods simple and popular.
|
|
53
|
+
|
|
54
|
+
## 🤷 Why does this project exist?
|
|
55
|
+
|
|
56
|
+
- ❌ [**ESLint**](https://eslint.org) avoids [fixes that could change the runtime behavior](https://eslint.org/docs/developer-guide/working-with-rules#applying-fixes).
|
|
57
|
+
- ❌ [**Babel**](https://babeljs.io) produces [throw-away code](https://github.com/babel/babel/issues/5139).
|
|
58
|
+
- ❌ [**Prettier**](https://github.com/prettier/prettier) is a formatter.
|
|
59
|
+
- ❌ [**jscodeshift**](https://github.com/facebook/jscodeshift) has no `config` and `plugins` support.
|
|
60
|
+
|
|
61
|
+
☝️ *🐊**Putout** on the other hand can make more drastic code transformations that directly affect your codebase making it a better place to code 💻.*
|
|
62
|
+
|
|
63
|
+
[It can](https://github.com/coderaiser/putout#-built-in-transformations):
|
|
64
|
+
|
|
65
|
+
- ✅ remove unused `variables`;
|
|
66
|
+
- ✅ remove unused `for-of variables`;
|
|
67
|
+
- ✅ remove unused `typescripts` types;
|
|
68
|
+
- ✅ remove unreferenced `variables`;
|
|
69
|
+
- ✅ remove unused `private fields`;
|
|
70
|
+
- ✅ remove unused `expressions`;
|
|
71
|
+
- ✅ remove useless `variables`;
|
|
72
|
+
- ✅ remove useless `map`;
|
|
73
|
+
- ✅ remove useless `mapped types`;
|
|
74
|
+
- ✅ remove useless `mapping modifiers`;
|
|
75
|
+
- ✅ remove useless `continue`;
|
|
76
|
+
- ✅ remove useless `operand`;
|
|
77
|
+
- ✅ remove useless `array constructor`;
|
|
78
|
+
- ✅ remove useless `conditions`;
|
|
79
|
+
- ✅ remove useless `type conversion`;
|
|
80
|
+
- ✅ remove useless `functions`;
|
|
81
|
+
- ✅ remove useless `Array.from`;
|
|
82
|
+
- ✅ remove useless `spread`;
|
|
83
|
+
- ✅ remove useless `arguments`;
|
|
84
|
+
- ✅ remove useless `escape`;
|
|
85
|
+
- ✅ remove useless `async`;
|
|
86
|
+
- ✅ remove useless `await`;
|
|
87
|
+
- ✅ remove useless `typeof`;
|
|
88
|
+
- ✅ remove useless `template expressions`;
|
|
89
|
+
- ✅ remove useless `for-of`;
|
|
90
|
+
- ✅ remove useless `array.entries()`;
|
|
91
|
+
- ✅ remove `debugger` statement;
|
|
92
|
+
- ✅ remove `iife`;
|
|
93
|
+
- ✅ remove nested blocks;
|
|
94
|
+
- ✅ remove `process.exit` call;
|
|
95
|
+
- ✅ remove `console.log` calls;
|
|
96
|
+
- ✅ remove `empty block statements`;
|
|
97
|
+
- ✅ remove `empty patterns`;
|
|
98
|
+
- ✅ remove `strict mode` directive from `esm`;
|
|
99
|
+
- ✅ remove `constant conditions`;
|
|
100
|
+
- ✅ remove `boolean` from `assertion`;
|
|
101
|
+
- ✅ remove `boolean` from `logical expressions`;
|
|
102
|
+
- ✅ remove `duplicates` from `logical expressions`;
|
|
103
|
+
- ✅ remove `duplicates` from TypeScript `Union`;
|
|
104
|
+
- ✅ remove `unreachable code`;
|
|
105
|
+
- ✅ remove `duplicate keys`;
|
|
106
|
+
- ✅ remove useless `typescripts` types;
|
|
107
|
+
- ✅ remove duplicate `typescripts` interface keys;
|
|
108
|
+
- ✅ replace `test.only` to `test` calls;
|
|
109
|
+
- ✅ replace `test.skip` to `test` calls;
|
|
110
|
+
- ✅ reuse duplicate `init`;
|
|
111
|
+
- ✅ split `variable declarations`;
|
|
112
|
+
- ✅ split `nested destructuring`;
|
|
113
|
+
- ✅ simplify `assignment`;
|
|
114
|
+
- ✅ simplify `ternary`;
|
|
115
|
+
- ✅ simplify `logical expressions`;
|
|
116
|
+
- ✅ if absent `strict mode` directive in `commonjs` add it;
|
|
117
|
+
- ✅ convert `apply` to `spread`;
|
|
118
|
+
- ✅ convert `bitwise` to `logical` operator;
|
|
119
|
+
- ✅ convert `concat` to `flat`;
|
|
120
|
+
- ✅ convert `esm` to `commonjs` (enabled for `*.cjs`);
|
|
121
|
+
- ✅ convert `commonjs` to `esm` (enabled for `*.mjs`);
|
|
122
|
+
- ✅ convert `template` with one `expression` to `string`;
|
|
123
|
+
- ✅ convert `equal` to `strict equal`;
|
|
124
|
+
- ✅ convert `indexOf` to `includes`;
|
|
125
|
+
- ✅ convert `replace` to `replaceAll` (disabled, [stage 4](https://github.com/tc39/proposal-string-replaceall));
|
|
126
|
+
- ✅ convert `assignment` to `arrow function`;
|
|
127
|
+
- ✅ convert `forEach` to `for-of`;
|
|
128
|
+
- ✅ convert `map` to `for-of`;
|
|
129
|
+
- ✅ extract sequence expressions;
|
|
130
|
+
- ✅ extract object properties;
|
|
131
|
+
- ✅ add `return await`;
|
|
132
|
+
- ✅ remove useless `Promise.resolve`;
|
|
133
|
+
- ✅ convert `Promise.reject` to `throw`;
|
|
134
|
+
- ✅ declare `undefined variables`;
|
|
135
|
+
- ✅ apply `as` type assertions;
|
|
136
|
+
- ✅ apply `utility types`;
|
|
137
|
+
- ✅ apply `array.at` ([not bundled](https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V16.md#2021-07-29-version-1660-current-bethgriggs));
|
|
138
|
+
- ✅ apply `filter(Boolean)`;
|
|
139
|
+
- ✅ apply [isArray](https://web.mit.edu/jwalden/www/isArray.html);
|
|
140
|
+
- ✅ apply `if condition`;
|
|
141
|
+
- ✅ apply `await import`;
|
|
100
142
|
|
|
101
143
|
## Install
|
|
102
144
|
|
|
@@ -130,7 +172,7 @@ Options:
|
|
|
130
172
|
--no-cache disable the cache
|
|
131
173
|
```
|
|
132
174
|
|
|
133
|
-
To find
|
|
175
|
+
To find errors:
|
|
134
176
|
|
|
135
177
|
```
|
|
136
178
|
putout lib test
|
|
@@ -156,7 +198,7 @@ putout lib --plugins remove-debugger,remove-unused-variables
|
|
|
156
198
|
|
|
157
199
|
- `PUTOUT_FILES` - files that should be processed by putout, divided by ",";
|
|
158
200
|
- `PUTOUT_CONFIG_FILE` - path to 🐊**Putout** config file;
|
|
159
|
-
- `ESLINT_CONFIG_FILE` - path to
|
|
201
|
+
- `ESLINT_CONFIG_FILE` - path to **ESLint** config file;
|
|
160
202
|
|
|
161
203
|
```sh
|
|
162
204
|
PUTOUT_FILES=lib,test putout --fix
|
|
@@ -194,7 +236,12 @@ When you need to ignore some routes no metter what, you can use `ignore` section
|
|
|
194
236
|
|
|
195
237
|
## Plugins
|
|
196
238
|
|
|
197
|
-
🐊**Putout** supports
|
|
239
|
+
🐊**Putout** supports two types of `plugins`, prefix with:
|
|
240
|
+
|
|
241
|
+
- ✅ `@putout/plugin-`;
|
|
242
|
+
- ✅ `putout-plugin-`;
|
|
243
|
+
|
|
244
|
+
To use your plugin create`npm` package with keywords `putout`, `putout-plugin` and add it to `.putout.json`.
|
|
198
245
|
|
|
199
246
|
For example if you need to `remove-something` create 🐊[**Putout**](https://github.com/coderaiser/putout) plugin with name `putout-plugin-remove-something` and it to `package.json`:
|
|
200
247
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "putout",
|
|
3
|
-
"version": "25.0
|
|
3
|
+
"version": "25.2.0",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
|
|
6
6
|
"description": "🐊 Pluggable and configurable code transformer with built-in eslint and babel plugins support of js, jsx typescript, flow files, markdown, yaml and json",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"@putout/operator-add-args": "^3.0.0",
|
|
71
71
|
"@putout/operator-declare": "^4.0.0",
|
|
72
72
|
"@putout/operator-regexp": "^1.0.0",
|
|
73
|
-
"@putout/plugin-apply-array-at": "^
|
|
73
|
+
"@putout/plugin-apply-array-at": "^2.0.0",
|
|
74
74
|
"@putout/plugin-apply-await-import": "^1.0.0",
|
|
75
75
|
"@putout/plugin-apply-destructuring": "^5.0.0",
|
|
76
76
|
"@putout/plugin-apply-if-condition": "^1.0.0",
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
"@putout/plugin-merge-if-statements": "^3.0.0",
|
|
115
115
|
"@putout/plugin-nodejs": "^4.0.0",
|
|
116
116
|
"@putout/plugin-npmignore": "^2.0.0",
|
|
117
|
-
"@putout/plugin-package-json": "^
|
|
117
|
+
"@putout/plugin-package-json": "^4.0.0",
|
|
118
118
|
"@putout/plugin-promises": "^8.0.0",
|
|
119
119
|
"@putout/plugin-putout": "^10.0.0",
|
|
120
120
|
"@putout/plugin-putout-config": "^2.0.0",
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
"@putout/plugin-remove-useless-conditions": "^1.0.0",
|
|
144
144
|
"@putout/plugin-remove-useless-constructor": "^1.0.0",
|
|
145
145
|
"@putout/plugin-remove-useless-continue": "^1.0.0",
|
|
146
|
-
"@putout/plugin-remove-useless-escape": "^
|
|
146
|
+
"@putout/plugin-remove-useless-escape": "^3.0.0",
|
|
147
147
|
"@putout/plugin-remove-useless-for-of": "^2.0.0",
|
|
148
148
|
"@putout/plugin-remove-useless-functions": "^2.0.0",
|
|
149
149
|
"@putout/plugin-remove-useless-map": "^1.0.0",
|