@cherepanov.pavel/shareable-config 1.0.2 → 1.0.4
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/.editorconfig +2 -3
- package/.editorconfig-get.js +3 -3
- package/.get-all.js +16 -12
- package/.gitattributes-get.js +3 -3
- package/.gitignore-get.js +33 -30
- package/.vscode/.code-snippets-get.js +34 -31
- package/.vscode/extensions.json +17 -17
- package/.vscode/extensions.json-get.js +25 -25
- package/.vscode/settings.json +36 -27
- package/.vscode/settings.json-get.js +25 -25
- package/README.md +13 -3
- package/env.json5.set.js +1 -1
- package/jsconfig.json +4 -7
- package/package.json +11 -1
- package/tools/eslint-config/configs/global.js +21 -18
- package/tools/eslint-config/configs/javascript.js +14 -14
- package/tools/eslint-config/configs/json.js +93 -0
- package/tools/eslint-config/configs/typescript.js +17 -17
- package/tools/eslint-config/configs/vue.js +22 -22
- package/tools/eslint-config/index.js +1 -0
- package/tools/eslint-config/rules/constants.js +10 -9
- package/tools/eslint-config/rules/javascript/index.js +2 -2
- package/tools/eslint-config/rules/javascript/possible-problems.js +76 -58
- package/tools/eslint-config/rules/javascript/suggestions.js +405 -249
- package/tools/eslint-config/rules/stylistic/jsFormatting.js +321 -167
- package/tools/eslint-config/rules/stylistic/tsFormatting.js +4 -4
- package/tools/eslint-config/rules/typescript/common.js +135 -126
- package/tools/eslint-config/rules/typescript/compatibility.js +20 -20
- package/tools/eslint-config/rules/typescript/extension.js +44 -44
- package/tools/eslint-config/rules/typescript/index.js +3 -3
- package/tools/eslint-config/rules/vue/base.js +2 -2
- package/tools/eslint-config/rules/vue/extension.js +47 -44
- package/tools/eslint-config/rules/vue/formatting.js +66 -36
- package/tools/eslint-config/rules/vue/index.js +5 -5
- package/tools/eslint-config/rules/vue/possibleProblems.js +182 -109
- package/tools/eslint-config/rules/vue/suggestions.js +82 -79
- package/tools/stylelint-config/config.js +18 -20
- package/tools/stylelint-config/rules/base.js +30 -24
- package/tools/stylelint-config/rules/conflicts.js +5 -5
- package/tools/stylelint-config/rules/order.js +38 -38
- package/tools/stylelint-config/rules/property-groups.js +392 -389
- package/tools/stylelint-config/rules/scss.js +9 -6
- package/tools/stylelint-config/rules/stylistic.js +110 -109
- package/utils/communication.js +26 -26
- package/utils/copy-with-override.js +35 -33
- package/utils/env.js +4 -4
- package/utils/file-header.js +9 -9
- package/utils/file.js +46 -46
- package/utils/merge.js +161 -155
package/utils/merge.js
CHANGED
|
@@ -1,180 +1,186 @@
|
|
|
1
|
+
// whole file should be rewrite
|
|
2
|
+
/* eslint-disable no-param-reassign */
|
|
3
|
+
/* eslint-disable no-negated-condition */
|
|
4
|
+
/* eslint-disable max-statements */
|
|
5
|
+
/* eslint-disable no-continue */
|
|
6
|
+
/* eslint-disable max-depth */
|
|
1
7
|
export async function mergeWithOverride(baseContent, overrideContent) {
|
|
2
|
-
|
|
8
|
+
let result = baseContent;
|
|
3
9
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
10
|
+
if (!overrideContent.includes('// override')) {
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
7
13
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
const overrideBlocks = findOverrideBlocks(overrideContent);
|
|
15
|
+
for (const block of overrideBlocks) {
|
|
16
|
+
result = pasteOverrideInsideEndOfPath(block, result);
|
|
17
|
+
if (!block.isObjectOverride) {
|
|
18
|
+
// удалить элементы массива при необходимости
|
|
19
|
+
result = processArrayOverride(result, block);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
17
23
|
}
|
|
18
24
|
|
|
19
25
|
function findOverrideBlocks(overrideContent) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
const lines = overrideContent.split('\n');
|
|
27
|
+
const overrideBlocks = [];
|
|
28
|
+
let currentBlock = null;
|
|
29
|
+
let braceCount = 0;
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
for (let i = 0; i < lines.length; i++) {
|
|
32
|
+
const line = lines[i];
|
|
27
33
|
|
|
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
|
-
|
|
34
|
+
if (line.includes('// override')) {
|
|
35
|
+
currentBlock = {
|
|
36
|
+
startLine: i,
|
|
37
|
+
lines: [line],
|
|
38
|
+
path: [],
|
|
39
|
+
isObjectOverride: false,
|
|
40
|
+
};
|
|
41
|
+
let braceCount2 = 0;
|
|
42
|
+
// ищем полный path до override поля
|
|
43
|
+
for (let j = i; j !== 0; j--) {
|
|
44
|
+
const line2 = lines[j];
|
|
45
|
+
braceCount2 += (
|
|
46
|
+
line2.match(/\{/gu)?.length
|
|
47
|
+
|| line2.match(/\[/gu)?.length
|
|
48
|
+
|| 0
|
|
49
|
+
);
|
|
50
|
+
braceCount2 -= (
|
|
51
|
+
line2.match(/\}/gu)?.length
|
|
52
|
+
|| line2.match(/\]/gu)?.length
|
|
53
|
+
|| 0
|
|
54
|
+
);
|
|
55
|
+
if (braceCount2 > 0) {
|
|
56
|
+
const fieldName = line2.match(/"([^"]+)"\s*:/u)?.[1];
|
|
57
|
+
if (fieldName) {
|
|
58
|
+
currentBlock.path.unshift(fieldName);
|
|
59
|
+
}
|
|
60
|
+
braceCount2 = 0;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
59
65
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
66
|
+
if (currentBlock) {
|
|
67
|
+
braceCount += (
|
|
68
|
+
line.match(/\{/gu)?.length
|
|
69
|
+
|| line.match(/\[/gu)?.length
|
|
70
|
+
|| 0
|
|
71
|
+
);
|
|
72
|
+
braceCount -= (
|
|
73
|
+
line.match(/\}/gu)?.length
|
|
74
|
+
|| line.match(/\]/gu)?.length
|
|
75
|
+
|| 0
|
|
76
|
+
);
|
|
77
|
+
if (braceCount < 0) {
|
|
78
|
+
if (line.match(/\}/gu)) {
|
|
79
|
+
currentBlock.isObjectOverride = true;
|
|
80
|
+
}
|
|
81
|
+
// currentBlock.endLine = i + 1
|
|
82
|
+
// currentBlock.path = lines.slice(startLine, endLine).join()
|
|
83
|
+
overrideBlocks.push(currentBlock);
|
|
84
|
+
currentBlock = null;
|
|
85
|
+
braceCount = 0;
|
|
86
|
+
} else {
|
|
87
|
+
currentBlock.lines.push(line);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
85
91
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
92
|
+
if (currentBlock) {
|
|
93
|
+
overrideBlocks.push(currentBlock);
|
|
94
|
+
}
|
|
89
95
|
|
|
90
|
-
|
|
96
|
+
return overrideBlocks;
|
|
91
97
|
}
|
|
92
98
|
|
|
93
99
|
function processArrayOverride(baseContent, block) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
100
|
+
// Разбиваем на строки
|
|
101
|
+
const lines = baseContent.split('\n');
|
|
102
|
+
// Копируем только нужный диапазон
|
|
103
|
+
const overrideLines = lines.slice(block.startIdx, block.endIdx);
|
|
98
104
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
105
|
+
// Обрабатываем override-блок только в этом диапазоне
|
|
106
|
+
let processed = overrideLines;
|
|
107
|
+
for (const line of block.lines) {
|
|
108
|
+
const trimmed = line.trim();
|
|
109
|
+
if (trimmed.startsWith('//')) {
|
|
110
|
+
const match = trimmed.match(/^\/\/\s*"([^"]+)"/u);
|
|
111
|
+
if (match) {
|
|
112
|
+
const elementToRemove = match[1];
|
|
113
|
+
// Удаляем строку с этим элементом только в overrideLines
|
|
114
|
+
processed = processed.filter((line) => {
|
|
115
|
+
return !line.includes(`"${elementToRemove}"`);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
114
120
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
+
// Собираем итоговый массив строк:
|
|
122
|
+
const resultLines = [
|
|
123
|
+
...lines.slice(0, block.startIdx),
|
|
124
|
+
...processed,
|
|
125
|
+
...lines.slice(block.endIdx),
|
|
126
|
+
];
|
|
121
127
|
|
|
122
|
-
|
|
128
|
+
return resultLines.join('\n');
|
|
123
129
|
}
|
|
124
130
|
|
|
125
131
|
function findEndOfArrOrObj(startIdx, lines, block) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
132
|
+
let braceCount = 0;
|
|
133
|
+
for (let i = startIdx; i < lines.length; i++) {
|
|
134
|
+
const line = lines[i];
|
|
135
|
+
braceCount += (
|
|
136
|
+
line.match(/\{/gu)?.length
|
|
137
|
+
|| line.match(/\[/gu)?.length
|
|
138
|
+
|| 0
|
|
139
|
+
);
|
|
140
|
+
braceCount -= (
|
|
141
|
+
line.match(/\}/gu)?.length
|
|
142
|
+
|| line.match(/\]/gu)?.length
|
|
143
|
+
|| 0
|
|
144
|
+
);
|
|
145
|
+
if (braceCount < 0) {
|
|
146
|
+
block.endIdx = i;
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
144
150
|
}
|
|
145
151
|
|
|
146
152
|
function pasteOverrideInsideEndOfPath(block, result) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
153
|
+
if (block.path.length) {
|
|
154
|
+
const resultArr = [];
|
|
155
|
+
const lines = result.split('\n');
|
|
156
|
+
let pathCount = 0;
|
|
157
|
+
for (let i = 0; i < lines.length; i++) {
|
|
158
|
+
if (lines[i].includes(block.path[pathCount])) {
|
|
159
|
+
if (pathCount !== block.path.length - 1) {
|
|
160
|
+
pathCount += 1;
|
|
161
|
+
} else {
|
|
162
|
+
block.startIdx = i;
|
|
163
|
+
findEndOfArrOrObj(i + 1, lines, block);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (i === block.endIdx) {
|
|
167
|
+
resultArr.push('');
|
|
168
|
+
resultArr.push(...block.lines);
|
|
169
|
+
}
|
|
170
|
+
resultArr.push(lines[i]);
|
|
171
|
+
}
|
|
166
172
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
173
|
+
return resultArr.join('\n');
|
|
174
|
+
}
|
|
175
|
+
const lastBraceIndex = result.lastIndexOf('}');
|
|
176
|
+
if (lastBraceIndex !== -1) {
|
|
177
|
+
const beforeBrace = result.substring(0, lastBraceIndex);
|
|
178
|
+
const afterBrace = result.substring(lastBraceIndex);
|
|
179
|
+
result = (
|
|
180
|
+
`${beforeBrace
|
|
181
|
+
}\n${block.lines.join('\n')}\n${
|
|
182
|
+
afterBrace}`
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
180
186
|
}
|