@putout/engine-runner 13.1.0 → 13.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/README.md +38 -0
- package/lib/merge-visitors.js +5 -0
- package/lib/store.js +20 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -239,6 +239,7 @@ of handling variables will most likely will lead to bugs. There is 3 store types
|
|
|
239
239
|
- ✅`listStore`;
|
|
240
240
|
- ✅`store`;
|
|
241
241
|
- ✅`upstore`;
|
|
242
|
+
- ✅`uplist`;
|
|
242
243
|
|
|
243
244
|
Let's talk about each of them.
|
|
244
245
|
|
|
@@ -340,6 +341,43 @@ module.exports.traverse = ({push, store}) => ({
|
|
|
340
341
|
});
|
|
341
342
|
```
|
|
342
343
|
|
|
344
|
+
### `uplist`
|
|
345
|
+
|
|
346
|
+
When you need to update named arrays:
|
|
347
|
+
|
|
348
|
+
```js
|
|
349
|
+
module.exports.traverse = ({uplist, push}) => ({
|
|
350
|
+
'const __object = __a.__b': (fullPath) => {
|
|
351
|
+
const {__a, __b} = getTemplateValues(fullPath, 'const __object = __a.__b');
|
|
352
|
+
const path = fullPath.get('declarations.0.init');
|
|
353
|
+
const {uid} = path.scope;
|
|
354
|
+
|
|
355
|
+
if (isIdentifier(__a) || isCallExpression(__a)) {
|
|
356
|
+
const {code} = generate(__a);
|
|
357
|
+
const id = `${uid}-${code}`;
|
|
358
|
+
|
|
359
|
+
return uplist(id, path);
|
|
360
|
+
}
|
|
361
|
+
},
|
|
362
|
+
'Program': {
|
|
363
|
+
exit: () => {
|
|
364
|
+
for (const items of uplist()) {
|
|
365
|
+
if (items.length < 2)
|
|
366
|
+
continue;
|
|
367
|
+
|
|
368
|
+
const index = items.length - 1;
|
|
369
|
+
const path = items[index];
|
|
370
|
+
|
|
371
|
+
push({
|
|
372
|
+
path,
|
|
373
|
+
items,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
},
|
|
377
|
+
},
|
|
378
|
+
});
|
|
379
|
+
```
|
|
380
|
+
|
|
343
381
|
## Logs
|
|
344
382
|
|
|
345
383
|
To see logs, use:
|
package/lib/merge-visitors.js
CHANGED
|
@@ -10,6 +10,7 @@ const {
|
|
|
10
10
|
listStore,
|
|
11
11
|
mapStore,
|
|
12
12
|
upStore,
|
|
13
|
+
upListStore,
|
|
13
14
|
} = require('./store');
|
|
14
15
|
|
|
15
16
|
const shouldSkip = (a) => !a.parent;
|
|
@@ -39,6 +40,7 @@ module.exports = (pluginsToMerge, {fix, shebang, template}) => {
|
|
|
39
40
|
store,
|
|
40
41
|
upstore,
|
|
41
42
|
listStore,
|
|
43
|
+
uplist,
|
|
42
44
|
} = getStore(plugin, {
|
|
43
45
|
fix,
|
|
44
46
|
rule,
|
|
@@ -54,6 +56,7 @@ module.exports = (pluginsToMerge, {fix, shebang, template}) => {
|
|
|
54
56
|
store,
|
|
55
57
|
listStore,
|
|
56
58
|
upstore,
|
|
59
|
+
uplist,
|
|
57
60
|
generate,
|
|
58
61
|
options,
|
|
59
62
|
});
|
|
@@ -90,6 +93,7 @@ function getStore(plugin, {fix, rule, shebang, msg, options}) {
|
|
|
90
93
|
const list = listStore();
|
|
91
94
|
const upstore = upStore();
|
|
92
95
|
const placesStore = listStore();
|
|
96
|
+
const uplist = upListStore();
|
|
93
97
|
|
|
94
98
|
const push = (path) => {
|
|
95
99
|
const position = getPosition(path, shebang);
|
|
@@ -121,6 +125,7 @@ function getStore(plugin, {fix, rule, shebang, msg, options}) {
|
|
|
121
125
|
store,
|
|
122
126
|
listStore: list,
|
|
123
127
|
upstore,
|
|
128
|
+
uplist,
|
|
124
129
|
};
|
|
125
130
|
}
|
|
126
131
|
|
package/lib/store.js
CHANGED
|
@@ -6,6 +6,8 @@ const {
|
|
|
6
6
|
assign,
|
|
7
7
|
} = Object;
|
|
8
8
|
|
|
9
|
+
const toArray = (a) => Array.from(a);
|
|
10
|
+
|
|
9
11
|
module.exports.listStore = (list = []) => {
|
|
10
12
|
const fn = (...args) => {
|
|
11
13
|
if (!args.length)
|
|
@@ -27,23 +29,39 @@ module.exports.listStore = (list = []) => {
|
|
|
27
29
|
};
|
|
28
30
|
|
|
29
31
|
module.exports.mapStore = createStore({
|
|
32
|
+
get(map) {
|
|
33
|
+
return values(map);
|
|
34
|
+
},
|
|
30
35
|
set(map, name, data) {
|
|
31
36
|
map[name] = data;
|
|
32
37
|
},
|
|
33
38
|
});
|
|
34
39
|
|
|
35
40
|
module.exports.upStore = createStore({
|
|
41
|
+
get(map) {
|
|
42
|
+
return values(map);
|
|
43
|
+
},
|
|
36
44
|
set(map, name, data) {
|
|
37
45
|
map[name] = map[name] || {};
|
|
38
46
|
assign(map[name], data);
|
|
39
47
|
},
|
|
40
48
|
});
|
|
41
49
|
|
|
42
|
-
|
|
50
|
+
module.exports.upListStore = createStore({
|
|
51
|
+
get(map) {
|
|
52
|
+
return values(map).map(toArray);
|
|
53
|
+
},
|
|
54
|
+
set(map, name, data) {
|
|
55
|
+
map[name] = map[name] || new Set();
|
|
56
|
+
map[name].add(data);
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
function createStore({set, get}) {
|
|
43
61
|
return (map = {}) => {
|
|
44
62
|
const fn = (...args) => {
|
|
45
63
|
if (!args.length)
|
|
46
|
-
return
|
|
64
|
+
return get(map);
|
|
47
65
|
|
|
48
66
|
const [name, data] = args;
|
|
49
67
|
|