@atlaskit/eslint-plugin-design-system 10.12.4 → 10.13.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.md +24 -0
- package/dist/cjs/rules/no-legacy-icons/checks.js +90 -44
- package/dist/cjs/rules/no-legacy-icons/helpers.js +44 -12
- package/dist/cjs/rules/no-legacy-icons/index.js +5 -3
- package/dist/cjs/rules/use-heading/config/index.js +2 -1
- package/dist/cjs/rules/use-heading/transformers/native-elements.js +61 -31
- package/dist/cjs/rules/use-primitives-text/config/index.js +2 -1
- package/dist/cjs/rules/use-primitives-text/transformers/emphasis-elements.js +48 -26
- package/dist/cjs/rules/use-primitives-text/transformers/paragraph-elements.js +62 -51
- package/dist/cjs/rules/use-primitives-text/transformers/span-elements.js +56 -32
- package/dist/cjs/rules/use-primitives-text/transformers/strong-elements.js +48 -26
- package/dist/es2019/rules/no-legacy-icons/checks.js +75 -33
- package/dist/es2019/rules/no-legacy-icons/helpers.js +43 -11
- package/dist/es2019/rules/no-legacy-icons/index.js +5 -3
- package/dist/es2019/rules/use-heading/config/index.js +2 -1
- package/dist/es2019/rules/use-heading/transformers/native-elements.js +60 -29
- package/dist/es2019/rules/use-primitives-text/config/index.js +2 -1
- package/dist/es2019/rules/use-primitives-text/transformers/emphasis-elements.js +47 -24
- package/dist/es2019/rules/use-primitives-text/transformers/paragraph-elements.js +63 -52
- package/dist/es2019/rules/use-primitives-text/transformers/span-elements.js +55 -30
- package/dist/es2019/rules/use-primitives-text/transformers/strong-elements.js +47 -24
- package/dist/esm/rules/no-legacy-icons/checks.js +91 -45
- package/dist/esm/rules/no-legacy-icons/helpers.js +43 -11
- package/dist/esm/rules/no-legacy-icons/index.js +5 -3
- package/dist/esm/rules/use-heading/config/index.js +2 -1
- package/dist/esm/rules/use-heading/transformers/native-elements.js +61 -31
- package/dist/esm/rules/use-primitives-text/config/index.js +2 -1
- package/dist/esm/rules/use-primitives-text/transformers/emphasis-elements.js +48 -26
- package/dist/esm/rules/use-primitives-text/transformers/paragraph-elements.js +62 -51
- package/dist/esm/rules/use-primitives-text/transformers/span-elements.js +56 -32
- package/dist/esm/rules/use-primitives-text/transformers/strong-elements.js +48 -26
- package/dist/types/rules/no-legacy-icons/checks.d.ts +4 -1
- package/dist/types/rules/no-legacy-icons/helpers.d.ts +21 -14
- package/dist/types/rules/use-heading/config/index.d.ts +2 -1
- package/dist/types/rules/use-heading/transformers/native-elements.d.ts +5 -1
- package/dist/types/rules/use-primitives-text/config/index.d.ts +1 -0
- package/dist/types/rules/use-primitives-text/transformers/emphasis-elements.d.ts +6 -1
- package/dist/types/rules/use-primitives-text/transformers/paragraph-elements.d.ts +1 -0
- package/dist/types/rules/use-primitives-text/transformers/span-elements.d.ts +6 -1
- package/dist/types/rules/use-primitives-text/transformers/strong-elements.d.ts +6 -1
- package/dist/types-ts4.5/rules/no-legacy-icons/checks.d.ts +4 -1
- package/dist/types-ts4.5/rules/no-legacy-icons/helpers.d.ts +21 -14
- package/dist/types-ts4.5/rules/use-heading/config/index.d.ts +2 -1
- package/dist/types-ts4.5/rules/use-heading/transformers/native-elements.d.ts +5 -1
- package/dist/types-ts4.5/rules/use-primitives-text/config/index.d.ts +1 -0
- package/dist/types-ts4.5/rules/use-primitives-text/transformers/emphasis-elements.d.ts +6 -1
- package/dist/types-ts4.5/rules/use-primitives-text/transformers/paragraph-elements.d.ts +1 -0
- package/dist/types-ts4.5/rules/use-primitives-text/transformers/span-elements.d.ts +6 -1
- package/dist/types-ts4.5/rules/use-primitives-text/transformers/strong-elements.d.ts +6 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @atlaskit/eslint-plugin-design-system
|
|
2
2
|
|
|
3
|
+
## 10.13.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#128427](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/128427)
|
|
8
|
+
[`ade1e717764e2`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/ade1e717764e2) -
|
|
9
|
+
Update no-legacy-icons eslint rule following changes to color prop of new icon components
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#127303](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/127303)
|
|
14
|
+
[`8c7d9e510fc2a`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/8c7d9e510fc2a) -
|
|
15
|
+
New rule config option `enableUnsafeReport` for `use-primitives-text` and `use-heading` to enable
|
|
16
|
+
error reporting for native typography elements that are not autofixable.
|
|
17
|
+
- Updated dependencies
|
|
18
|
+
|
|
19
|
+
## 10.12.5
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- [#127454](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/127454)
|
|
24
|
+
[`e869f31dbe200`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/e869f31dbe200) -
|
|
25
|
+
No-legacy-icons ESLint rule errors at all references to a legacy icon.
|
|
26
|
+
|
|
3
27
|
## 10.12.4
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
|
@@ -27,6 +27,9 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
27
27
|
var shouldErrorForAutoMigration = getConfigFlag('shouldErrorForAutoMigration', true);
|
|
28
28
|
var isQuietMode = getConfigFlag('quiet', false);
|
|
29
29
|
|
|
30
|
+
// Sorted list of ranges
|
|
31
|
+
var errorRanges = [];
|
|
32
|
+
|
|
30
33
|
/**
|
|
31
34
|
* Adds the legacy Icon and new button imports to the correct global arrays to be used by the other checks
|
|
32
35
|
* @param node The import node found by ESLint
|
|
@@ -90,8 +93,8 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
90
93
|
try {
|
|
91
94
|
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
92
95
|
var decl = _step3.value;
|
|
93
|
-
if ((0, _eslintCodemodUtils.isNodeOfType)(decl, 'VariableDeclarator') && 'init'
|
|
94
|
-
if (decl.init.name
|
|
96
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(decl, 'VariableDeclarator') && Object.keys(decl).includes('init') && Object.keys(decl).includes('id') && decl.init && decl.id && 'name' in decl.id && decl.id.name && (0, _eslintCodemodUtils.isNodeOfType)(decl.init, 'Identifier')) {
|
|
97
|
+
if (Object.keys(legacyIconImports).includes(decl.init.name)) {
|
|
95
98
|
legacyIconImports[decl.id.name] = {
|
|
96
99
|
packageName: legacyIconImports[decl.init.name].packageName,
|
|
97
100
|
exported: legacyIconImports[decl.init.name].exported || isExported
|
|
@@ -116,16 +119,17 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
116
119
|
var checkExportDefaultDeclaration = function checkExportDefaultDeclaration(node) {
|
|
117
120
|
var exportName = '';
|
|
118
121
|
var packageName = '';
|
|
119
|
-
if ('declaration'
|
|
122
|
+
if (Object.keys(node).includes('declaration') && node.declaration && (0, _eslintCodemodUtils.isNodeOfType)(node.declaration, 'Identifier') && Object.keys(legacyIconImports).includes(node.declaration.name)) {
|
|
120
123
|
packageName = legacyIconImports[node.declaration.name].packageName;
|
|
121
124
|
exportName = 'Default export';
|
|
122
|
-
} else if ('declaration'
|
|
125
|
+
} else if (Object.keys(node).includes('declaration') && node.declaration && (0, _eslintCodemodUtils.isNodeOfType)(node.declaration, 'AssignmentExpression') && (0, _eslintCodemodUtils.isNodeOfType)(node.declaration.left, 'Identifier') && (0, _eslintCodemodUtils.isNodeOfType)(node.declaration.right, 'Identifier') && Object.keys(legacyIconImports).includes(node.declaration.right.name)) {
|
|
123
126
|
packageName = legacyIconImports[node.declaration.right.name].packageName;
|
|
124
127
|
exportName = node.declaration.left.name;
|
|
125
128
|
} else {
|
|
126
129
|
return;
|
|
127
130
|
}
|
|
128
131
|
(0, _helpers.createCantMigrateReExportError)(node, packageName, exportName, errorsManual);
|
|
132
|
+
(0, _helpers.addToListOfRanges)(node, errorRanges);
|
|
129
133
|
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(packageName);
|
|
130
134
|
};
|
|
131
135
|
|
|
@@ -135,7 +139,7 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
135
139
|
*/
|
|
136
140
|
var checkExportNamedVariables = function checkExportNamedVariables(node) {
|
|
137
141
|
// export {default as AddIcon} from '@atlaskit/icon/glyph/add';
|
|
138
|
-
if (node.source && (0, _eslintCodemodUtils.isNodeOfType)(node.source, 'Literal') &&
|
|
142
|
+
if (node.source && (0, _eslintCodemodUtils.isNodeOfType)(node.source, 'Literal') && Object.keys(node.source).includes('value')) {
|
|
139
143
|
var moduleSource = node.source.value;
|
|
140
144
|
if (typeof moduleSource === 'string' && ['@atlaskit/icon/glyph/', '@atlaskit/icon-object/glyph/'].find(function (val) {
|
|
141
145
|
return moduleSource.startsWith(val);
|
|
@@ -146,6 +150,7 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
146
150
|
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
147
151
|
var spec = _step4.value;
|
|
148
152
|
(0, _helpers.createCantMigrateReExportError)(spec, moduleSource, spec.exported.name, errorsManual);
|
|
153
|
+
(0, _helpers.addToListOfRanges)(spec, errorRanges);
|
|
149
154
|
guidance[(0, _helpers.locToString)(spec)] = (0, _helpers.createGuidance)(moduleSource);
|
|
150
155
|
}
|
|
151
156
|
} catch (err) {
|
|
@@ -161,8 +166,9 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
161
166
|
try {
|
|
162
167
|
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
163
168
|
var decl = _step5.value;
|
|
164
|
-
if ((0, _eslintCodemodUtils.isNodeOfType)(decl, 'VariableDeclarator') && 'init'
|
|
169
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(decl, 'VariableDeclarator') && Object.keys(decl).includes('init') && decl.init && (0, _eslintCodemodUtils.isNodeOfType)(decl.init, 'Identifier') && Object.keys(legacyIconImports).includes(decl.init.name)) {
|
|
165
170
|
(0, _helpers.createCantMigrateReExportError)(node, legacyIconImports[decl.init.name].packageName, decl.init.name, errorsManual);
|
|
171
|
+
(0, _helpers.addToListOfRanges)(node, errorRanges);
|
|
166
172
|
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[decl.init.name].packageName);
|
|
167
173
|
}
|
|
168
174
|
}
|
|
@@ -183,13 +189,14 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
183
189
|
try {
|
|
184
190
|
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
185
191
|
var _spec2 = _step6.value;
|
|
186
|
-
if (_spec2.local.name
|
|
192
|
+
if (Object.keys(legacyIconImports).includes(_spec2.local.name)) {
|
|
187
193
|
//update legacy imports to be exported
|
|
188
194
|
legacyIconImports[_spec2.local.name] = {
|
|
189
195
|
packageName: legacyIconImports[_spec2.local.name].packageName,
|
|
190
196
|
exported: true
|
|
191
197
|
};
|
|
192
198
|
(0, _helpers.createCantMigrateReExportError)(_spec2, legacyIconImports[_spec2.local.name].packageName, _spec2.exported.name, errorsManual);
|
|
199
|
+
(0, _helpers.addToListOfRanges)(_spec2, errorRanges);
|
|
193
200
|
guidance[(0, _helpers.locToString)(_spec2)] = (0, _helpers.createGuidance)(legacyIconImports[_spec2.local.name].packageName);
|
|
194
201
|
}
|
|
195
202
|
}
|
|
@@ -209,8 +216,9 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
209
216
|
if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'Identifier')) {
|
|
210
217
|
return;
|
|
211
218
|
}
|
|
212
|
-
if (node.name && node.name
|
|
213
|
-
(0, _helpers.
|
|
219
|
+
if (node.name && Object.keys(legacyIconImports).includes(node.name) && legacyIconImports[node.name].packageName) {
|
|
220
|
+
(0, _helpers.createCantMigrateIdentifierMapOrArrayError)(node, legacyIconImports[node.name].packageName, node.name, errorsManual);
|
|
221
|
+
(0, _helpers.addToListOfRanges)(node, errorRanges);
|
|
214
222
|
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[node.name].packageName);
|
|
215
223
|
}
|
|
216
224
|
};
|
|
@@ -229,7 +237,7 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
229
237
|
if (!(0, _eslintCodemodUtils.isNodeOfType)(node.parent, 'JSXExpressionContainer') || !(0, _eslintCodemodUtils.isNodeOfType)(node.parent.parent, 'JSXAttribute') || !(0, _eslintCodemodUtils.isNodeOfType)(node.parent.parent.parent, 'JSXOpeningElement')) {
|
|
230
238
|
return;
|
|
231
239
|
}
|
|
232
|
-
if (node.name
|
|
240
|
+
if (Object.keys(legacyIconImports).includes(node.name) && (0, _eslintCodemodUtils.isNodeOfType)(node.parent.parent.name, 'JSXIdentifier') && node.parent.parent.name.name !== 'LEGACY_fallbackIcon') {
|
|
233
241
|
var _migrationMapObject$s;
|
|
234
242
|
var migrationMapObject = (0, _helpers.getMigrationMapObject)(legacyIconImports[node.name].packageName);
|
|
235
243
|
var upcomingIcon = (0, _helpers.getUpcomingIcons)(legacyIconImports[node.name].packageName);
|
|
@@ -238,16 +246,35 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
238
246
|
var isInNewButton = (0, _eslintCodemodUtils.isNodeOfType)(node.parent.parent.parent.name, 'JSXIdentifier') && newButtonImports.has(node.parent.parent.parent.name.name);
|
|
239
247
|
if (newIcon && isInNewButton && isNewIconMigratable || upcomingIcon && isInNewButton && isNewIconMigratable) {
|
|
240
248
|
(0, _helpers.createAutoMigrationError)(node, legacyIconImports[node.name].packageName, node.name, errorsAuto);
|
|
249
|
+
(0, _helpers.addToListOfRanges)(node, errorRanges);
|
|
241
250
|
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[node.name].packageName, isInNewButton, 'medium');
|
|
242
251
|
} else if (!newIcon && !upcomingIcon || !isNewIconMigratable) {
|
|
243
252
|
(0, _helpers.createCantFindSuitableReplacementError)(node, legacyIconImports[node.name].packageName, node.name, errorsManual);
|
|
253
|
+
(0, _helpers.addToListOfRanges)(node, errorRanges);
|
|
244
254
|
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[node.name].packageName, isInNewButton);
|
|
245
255
|
} else if (!isInNewButton) {
|
|
246
256
|
(0, _helpers.createCantMigrateFunctionUnknownError)(node, legacyIconImports[node.name].packageName, node.name, errorsManual);
|
|
257
|
+
(0, _helpers.addToListOfRanges)(node, errorRanges);
|
|
247
258
|
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[node.name].packageName, isInNewButton);
|
|
248
259
|
}
|
|
249
260
|
}
|
|
250
261
|
};
|
|
262
|
+
var checkIconReference = function checkIconReference(node) {
|
|
263
|
+
//check the reference to see if it's a legacy icon, if not exit early
|
|
264
|
+
if (!Object.keys(legacyIconImports).includes(node.name)) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
//if this is an import statement then exit early
|
|
268
|
+
if (node.parent && ((0, _eslintCodemodUtils.isNodeOfType)(node.parent, 'ImportSpecifier') || (0, _eslintCodemodUtils.isNodeOfType)(node.parent, 'ImportDefaultSpecifier'))) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
//if in Fallback prop, do not error
|
|
272
|
+
if (node.parent && node.parent.parent && (0, _eslintCodemodUtils.isNodeOfType)(node.parent.parent, 'JSXAttribute') && (0, _eslintCodemodUtils.isNodeOfType)(node.parent.parent.name, 'JSXIdentifier') && node.parent.parent.name.name === 'LEGACY_fallbackIcon') {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
// manually error
|
|
276
|
+
(0, _helpers.createCantMigrateIdentifierError)(node, legacyIconImports[node.name].packageName, node.name, errorsManual);
|
|
277
|
+
};
|
|
251
278
|
|
|
252
279
|
/**
|
|
253
280
|
* Checks if a legacy icon is being rendered and stores the errors in the global array
|
|
@@ -265,7 +292,7 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
265
292
|
}
|
|
266
293
|
var name = node.openingElement.name.name;
|
|
267
294
|
// Legacy icons rendered as JSX elements
|
|
268
|
-
if (
|
|
295
|
+
if (Object.keys(legacyIconImports).includes(name)) {
|
|
269
296
|
var _node$parent2, _node$parent3, _size, _size2;
|
|
270
297
|
// Determine if inside a new button - if so:
|
|
271
298
|
// - Assume spread props are safe - still error if props explicitly set to unmigratable values
|
|
@@ -358,6 +385,7 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
358
385
|
} else if ((!newIcon && !upcomingIcon || !isNewIconMigratable) && size) {
|
|
359
386
|
(0, _helpers.createCantFindSuitableReplacementError)(node, legacyIconImports[name].packageName, name, errorsManual, upcomingIcon ? true : migrationMapObject ? true : false);
|
|
360
387
|
}
|
|
388
|
+
(0, _helpers.addToListOfRanges)(node, errorRanges);
|
|
361
389
|
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[name].packageName, insideNewButton, size && (0, _helpers.isSize)(size) ? size : undefined);
|
|
362
390
|
}
|
|
363
391
|
};
|
|
@@ -367,14 +395,15 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
367
395
|
* @param node The function call node found by ESLint
|
|
368
396
|
*/
|
|
369
397
|
var checkCallExpression = function checkCallExpression(node) {
|
|
370
|
-
if ('arguments'
|
|
398
|
+
if (Object.keys(node).includes('arguments') && node.arguments.length) {
|
|
371
399
|
var _iterator8 = _createForOfIteratorHelper(node.arguments),
|
|
372
400
|
_step8;
|
|
373
401
|
try {
|
|
374
402
|
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
375
403
|
var arg = _step8.value;
|
|
376
|
-
if ((0, _eslintCodemodUtils.isNodeOfType)(arg, 'Identifier') && arg.name
|
|
404
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(arg, 'Identifier') && Object.keys(legacyIconImports).includes(arg.name) && legacyIconImports[arg.name].packageName) {
|
|
377
405
|
(0, _helpers.createCantMigrateFunctionUnknownError)(node, legacyIconImports[arg.name].packageName, arg.name, errorsManual);
|
|
406
|
+
(0, _helpers.addToListOfRanges)(node, errorRanges);
|
|
378
407
|
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[arg.name].packageName);
|
|
379
408
|
}
|
|
380
409
|
}
|
|
@@ -395,30 +424,41 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
395
424
|
var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
|
|
396
425
|
_key = _Object$entries$_i[0],
|
|
397
426
|
errorList = _Object$entries$_i[1];
|
|
398
|
-
var
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
427
|
+
var _node = 'node' in errorList.errors[0] ? errorList.errors[0].node : null;
|
|
428
|
+
var cantMigrateIdentifierError = errorList.errors.find(function (x) {
|
|
429
|
+
return 'messageId' in x && x.messageId === 'cantMigrateIdentifier';
|
|
430
|
+
});
|
|
431
|
+
if (_node) {
|
|
432
|
+
var isInRange = false;
|
|
433
|
+
if (cantMigrateIdentifierError && (0, _helpers.isInRangeList)(_node, errorRanges)) {
|
|
434
|
+
isInRange = true;
|
|
435
|
+
}
|
|
436
|
+
if (isInRange && errorList.errors.length - 1 > 0 || !isInRange && errorList.errors.length > 0) {
|
|
437
|
+
var guidanceMessage = Object.keys(guidance).includes(_key) ? guidance[_key] : '';
|
|
438
|
+
context.report({
|
|
439
|
+
node: _node,
|
|
440
|
+
messageId: 'noLegacyIconsManualMigration',
|
|
441
|
+
data: {
|
|
442
|
+
iconName: errorList.iconName,
|
|
443
|
+
importSource: errorList.importSource,
|
|
444
|
+
guidance: isQuietMode ? guidanceMessage : "".concat(guidanceMessage, "For more information see the below errors.\n")
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
if (!isQuietMode) {
|
|
448
|
+
var _iterator9 = _createForOfIteratorHelper(errorList.errors),
|
|
449
|
+
_step9;
|
|
450
|
+
try {
|
|
451
|
+
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
452
|
+
var error = _step9.value;
|
|
453
|
+
if ('messageId' in error && (error.messageId !== 'cantMigrateIdentifier' || error.messageId === 'cantMigrateIdentifier' && !isInRange)) {
|
|
454
|
+
context.report(error);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
} catch (err) {
|
|
458
|
+
_iterator9.e(err);
|
|
459
|
+
} finally {
|
|
460
|
+
_iterator9.f();
|
|
417
461
|
}
|
|
418
|
-
} catch (err) {
|
|
419
|
-
_iterator9.e(err);
|
|
420
|
-
} finally {
|
|
421
|
-
_iterator9.f();
|
|
422
462
|
}
|
|
423
463
|
}
|
|
424
464
|
}
|
|
@@ -431,14 +471,19 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
431
471
|
_error = _Object$entries2$_i[1];
|
|
432
472
|
// If there's a manual error that exists for this same component,
|
|
433
473
|
// don't throw the auto error
|
|
434
|
-
if (
|
|
435
|
-
|
|
436
|
-
|
|
474
|
+
if (Object.keys(errorsManual).includes(_key2)) {
|
|
475
|
+
var _cantMigrateIdentifierError = errorsManual[_key2].errors.find(function (x) {
|
|
476
|
+
return 'messageId' in x && x.messageId === 'cantMigrateIdentifier';
|
|
477
|
+
});
|
|
478
|
+
if (!_cantMigrateIdentifierError || _cantMigrateIdentifierError && errorsManual[_key2].errors.length > 1) {
|
|
479
|
+
delete errorsAuto[_key2];
|
|
480
|
+
continue;
|
|
481
|
+
}
|
|
437
482
|
}
|
|
438
|
-
var
|
|
439
|
-
if (
|
|
440
|
-
var _guidanceMessage = _key2
|
|
441
|
-
if ('data'
|
|
483
|
+
var _node2 = 'node' in _error ? _error.node : null;
|
|
484
|
+
if (_node2) {
|
|
485
|
+
var _guidanceMessage = Object.keys(guidance).includes(_key2) ? guidance[_key2] : '';
|
|
486
|
+
if (Object.keys(_error).includes('data') && _error.data) {
|
|
442
487
|
_error.data.guidance = _guidanceMessage;
|
|
443
488
|
}
|
|
444
489
|
context.report(_error);
|
|
@@ -455,6 +500,7 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
455
500
|
checkIconAsProp: checkIconAsProp,
|
|
456
501
|
checkJSXElement: checkJSXElement,
|
|
457
502
|
checkCallExpression: checkCallExpression,
|
|
458
|
-
throwErrors: throwErrors
|
|
503
|
+
throwErrors: throwErrors,
|
|
504
|
+
checkIconReference: checkIconReference
|
|
459
505
|
};
|
|
460
506
|
};
|
|
@@ -5,7 +5,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.locToString = exports.isSize = exports.getUpcomingIcons = exports.getMigrationMapObject = exports.getLiteralStringValue = exports.createHelpers = exports.createGuidance = exports.createCantMigrateSpreadPropsError = exports.createCantMigrateSizeUnknown = exports.createCantMigrateReExportError = exports.createCantMigrateIdentifierError = exports.createCantMigrateFunctionUnknownError = exports.createCantMigrateColorError = exports.createCantFindSuitableReplacementError = exports.createAutoMigrationError = exports.canMigrateColor = exports.canAutoMigrateNewIconBasedOnSize = void 0;
|
|
8
|
+
exports.locToString = exports.isSize = exports.isInRangeList = exports.getUpcomingIcons = exports.getMigrationMapObject = exports.getLiteralStringValue = exports.createHelpers = exports.createGuidance = exports.createCantMigrateSpreadPropsError = exports.createCantMigrateSizeUnknown = exports.createCantMigrateReExportError = exports.createCantMigrateIdentifierMapOrArrayError = exports.createCantMigrateIdentifierError = exports.createCantMigrateFunctionUnknownError = exports.createCantMigrateColorError = exports.createCantFindSuitableReplacementError = exports.createAutoMigrationError = exports.canMigrateColor = exports.canAutoMigrateNewIconBasedOnSize = exports.addToListOfRanges = void 0;
|
|
9
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
10
|
var _eslintCodemodUtils = require("eslint-codemod-utils");
|
|
11
11
|
var _UNSAFE_migrationMap = _interopRequireWildcard(require("@atlaskit/icon/UNSAFE_migration-map"));
|
|
@@ -108,7 +108,7 @@ var createGuidance = exports.createGuidance = function createGuidance(iconPackag
|
|
|
108
108
|
} else {
|
|
109
109
|
_guidance += "No equivalent icon for this size, ".concat(size, ", in new set.");
|
|
110
110
|
}
|
|
111
|
-
_guidance += "".concat(migrationMapObject.sizeGuidance[size]
|
|
111
|
+
_guidance += "".concat(Object.keys(_UNSAFE_migrationMap.migrationOutcomeDescriptionMap).includes(migrationMapObject.sizeGuidance[size]) ? " Please: ".concat(_UNSAFE_migrationMap.migrationOutcomeDescriptionMap[migrationMapObject.sizeGuidance[size]]) : ' No migration size advice given.', "\n");
|
|
112
112
|
} else {
|
|
113
113
|
_guidance = "Use ".concat(newIcon.name, " from ").concat(newIcon.package, "/").concat(newIcon.type, "/").concat(newIcon.name, " instead.\nMigration suggestions, depending on the legacy icon size:\n");
|
|
114
114
|
Object.entries(migrationMapObject.sizeGuidance).forEach(function (_ref) {
|
|
@@ -116,7 +116,7 @@ var createGuidance = exports.createGuidance = function createGuidance(iconPackag
|
|
|
116
116
|
size = _ref2[0],
|
|
117
117
|
value = _ref2[1];
|
|
118
118
|
_guidance += "\t- ".concat(size, ": ");
|
|
119
|
-
if (!(
|
|
119
|
+
if (!Object.keys(_UNSAFE_migrationMap.migrationOutcomeDescriptionMap).includes(value)) {
|
|
120
120
|
_guidance += 'No migration advice given.\n';
|
|
121
121
|
} else {
|
|
122
122
|
_guidance += "".concat(_UNSAFE_migrationMap.migrationOutcomeDescriptionMap[value], ".\n");
|
|
@@ -142,12 +142,12 @@ var createGuidance = exports.createGuidance = function createGuidance(iconPackag
|
|
|
142
142
|
* @returns True if the color can be migrated, false otherwise
|
|
143
143
|
*/
|
|
144
144
|
var canMigrateColor = exports.canMigrateColor = function canMigrateColor(color) {
|
|
145
|
-
if (color.match(/^color\.
|
|
146
|
-
return true;
|
|
147
|
-
} else if (color.match(/^color\.icon/)) {
|
|
145
|
+
if (color.match(/^color\.icon/)) {
|
|
148
146
|
return true;
|
|
149
147
|
} else if (color.match(/^color\.link/)) {
|
|
150
148
|
return true;
|
|
149
|
+
} else if (color.match(/^color\.text/)) {
|
|
150
|
+
return true;
|
|
151
151
|
} else if (color === 'currentColor') {
|
|
152
152
|
return true;
|
|
153
153
|
} else {
|
|
@@ -155,8 +155,11 @@ var canMigrateColor = exports.canMigrateColor = function canMigrateColor(color)
|
|
|
155
155
|
}
|
|
156
156
|
};
|
|
157
157
|
var locToString = exports.locToString = function locToString(node) {
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
if (node.range && node.range.length >= 2) {
|
|
159
|
+
return "".concat(node.range[0], ":").concat(node.range[1]);
|
|
160
|
+
} else {
|
|
161
|
+
return '';
|
|
162
|
+
}
|
|
160
163
|
};
|
|
161
164
|
var createCantMigrateReExportError = exports.createCantMigrateReExportError = function createCantMigrateReExportError(node, packageName, exportName, errors) {
|
|
162
165
|
var myError = {
|
|
@@ -169,10 +172,10 @@ var createCantMigrateReExportError = exports.createCantMigrateReExportError = fu
|
|
|
169
172
|
};
|
|
170
173
|
pushManualError(locToString(node), errors, myError, packageName, exportName);
|
|
171
174
|
};
|
|
172
|
-
var
|
|
175
|
+
var createCantMigrateIdentifierMapOrArrayError = exports.createCantMigrateIdentifierMapOrArrayError = function createCantMigrateIdentifierMapOrArrayError(node, packageName, exportName, errors) {
|
|
173
176
|
var myError = {
|
|
174
177
|
node: node,
|
|
175
|
-
messageId: '
|
|
178
|
+
messageId: 'cantMigrateIdentifierMapOrArray',
|
|
176
179
|
data: {
|
|
177
180
|
packageName: packageName,
|
|
178
181
|
exportName: exportName
|
|
@@ -180,6 +183,17 @@ var createCantMigrateIdentifierError = exports.createCantMigrateIdentifierError
|
|
|
180
183
|
};
|
|
181
184
|
pushManualError(locToString(node), errors, myError, packageName, exportName);
|
|
182
185
|
};
|
|
186
|
+
var createCantMigrateIdentifierError = exports.createCantMigrateIdentifierError = function createCantMigrateIdentifierError(node, packageName, exportName, errors) {
|
|
187
|
+
var myError = {
|
|
188
|
+
node: node,
|
|
189
|
+
messageId: 'cantMigrateIdentifier',
|
|
190
|
+
data: {
|
|
191
|
+
iconSource: packageName,
|
|
192
|
+
iconName: exportName
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
pushManualError(locToString(node), errors, myError, packageName, exportName);
|
|
196
|
+
};
|
|
183
197
|
var createCantFindSuitableReplacementError = exports.createCantFindSuitableReplacementError = function createCantFindSuitableReplacementError(node, importSource, iconName, errors, sizeIssue) {
|
|
184
198
|
var myError = {
|
|
185
199
|
node: node,
|
|
@@ -242,7 +256,7 @@ var createAutoMigrationError = exports.createAutoMigrationError = function creat
|
|
|
242
256
|
errors[locToString(node)] = myError;
|
|
243
257
|
};
|
|
244
258
|
var pushManualError = function pushManualError(key, errors, myError, importSource, iconName) {
|
|
245
|
-
if (
|
|
259
|
+
if (Object.keys(errors).includes(key)) {
|
|
246
260
|
errors[key].errors.push(myError);
|
|
247
261
|
} else {
|
|
248
262
|
errors[key] = {
|
|
@@ -290,7 +304,7 @@ var createHelpers = exports.createHelpers = function createHelpers(context) {
|
|
|
290
304
|
* @returns defaultValue if the configuration flag is not set, the defaultValue of the configuration flag otherwise
|
|
291
305
|
*/
|
|
292
306
|
var getConfigFlag = function getConfigFlag(key, defaultValue) {
|
|
293
|
-
if (context.options.length > 0 && context.options[0] &&
|
|
307
|
+
if (context.options.length > 0 && context.options[0] && Object.keys(context.options[0]).includes(key)) {
|
|
294
308
|
return context.options[0][key] === !defaultValue ? !defaultValue : defaultValue;
|
|
295
309
|
}
|
|
296
310
|
return defaultValue;
|
|
@@ -307,4 +321,22 @@ var createHelpers = exports.createHelpers = function createHelpers(context) {
|
|
|
307
321
|
getTokenCallValue: getTokenCallValue,
|
|
308
322
|
getConfigFlag: getConfigFlag
|
|
309
323
|
};
|
|
324
|
+
};
|
|
325
|
+
var addToListOfRanges = exports.addToListOfRanges = function addToListOfRanges(node, sortedListOfRangesForErrors) {
|
|
326
|
+
if (node.range && node.range.length >= 2) {
|
|
327
|
+
sortedListOfRangesForErrors.push({
|
|
328
|
+
start: node.range[0],
|
|
329
|
+
end: node.range[1]
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
};
|
|
333
|
+
var isInRangeList = exports.isInRangeList = function isInRangeList(node, sortedListOfRangesForErrors) {
|
|
334
|
+
var range = node.range;
|
|
335
|
+
if (!range || range.length < 2) {
|
|
336
|
+
return false;
|
|
337
|
+
}
|
|
338
|
+
var found = sortedListOfRangesForErrors.find(function (currRange) {
|
|
339
|
+
return range[0] >= currRange.start && range[1] <= currRange.end;
|
|
340
|
+
});
|
|
341
|
+
return !!found;
|
|
310
342
|
};
|
|
@@ -41,8 +41,8 @@ var rule = (0, _createRule.createLintRule)({
|
|
|
41
41
|
cantMigrateSpreadProps: "This usage of Icon uses spread props in a way that can't be automatically migrated. Please explicitly define the following props after spread: '{{missingProps}}' ",
|
|
42
42
|
cantMigrateSizeUnknown: "This usage of Icon sets the size via a variable or function that can't be determined.",
|
|
43
43
|
cantMigrateFunctionUnknown: "'{{iconName}}' from legacy '{{importSource}}' is used in unknown function/component. Please manually migrate this icon.",
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
cantMigrateIdentifierMapOrArray: "This icon is passed to other components via a map or array, in a way that can't be automatically migrated. Please manually migrate wherever this expression is used and use the icon components directly.",
|
|
45
|
+
cantMigrateIdentifier: "This is a legacy icon, {{iconName}} from {{iconSource}}, being referenced. Please manually migrate."
|
|
46
46
|
}
|
|
47
47
|
},
|
|
48
48
|
create: function create(context) {
|
|
@@ -58,7 +58,8 @@ var rule = (0, _createRule.createLintRule)({
|
|
|
58
58
|
checkIconAsProp = _createChecks.checkIconAsProp,
|
|
59
59
|
checkJSXElement = _createChecks.checkJSXElement,
|
|
60
60
|
checkCallExpression = _createChecks.checkCallExpression,
|
|
61
|
-
throwErrors = _createChecks.throwErrors
|
|
61
|
+
throwErrors = _createChecks.throwErrors,
|
|
62
|
+
checkIconReference = _createChecks.checkIconReference;
|
|
62
63
|
return (0, _errorBoundary.errorBoundary)({
|
|
63
64
|
// Track imports of relevant components
|
|
64
65
|
ImportDeclaration: checkImportDeclarations,
|
|
@@ -74,6 +75,7 @@ var rule = (0, _createRule.createLintRule)({
|
|
|
74
75
|
JSXElement: checkJSXElement,
|
|
75
76
|
// Icons called as an argument of a function (i.e. icon={DefaultIcon(AddIcon)})
|
|
76
77
|
CallExpression: checkCallExpression,
|
|
78
|
+
Identifier: checkIconReference,
|
|
77
79
|
'Program:exit': throwErrors
|
|
78
80
|
}, failSilently);
|
|
79
81
|
}
|
|
@@ -7,7 +7,8 @@ exports.getConfig = void 0;
|
|
|
7
7
|
var defaults = {
|
|
8
8
|
failSilently: false,
|
|
9
9
|
patterns: ['native-elements'],
|
|
10
|
-
enableUnsafeAutofix: false
|
|
10
|
+
enableUnsafeAutofix: false,
|
|
11
|
+
enableUnsafeReport: false
|
|
11
12
|
};
|
|
12
13
|
var getConfig = exports.getConfig = function getConfig(overrides) {
|
|
13
14
|
return Object.assign({}, defaults, overrides);
|
|
@@ -28,63 +28,93 @@ var NativeElements = exports.NativeElements = {
|
|
|
28
28
|
var context = _ref.context,
|
|
29
29
|
config = _ref.config;
|
|
30
30
|
// Check whether all criteria needed to make a transformation are met
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
} : {
|
|
47
|
-
suggest: [{
|
|
48
|
-
desc: "Convert to Heading",
|
|
31
|
+
var _NativeElements$_chec = NativeElements._check(node, {
|
|
32
|
+
context: context,
|
|
33
|
+
config: config
|
|
34
|
+
}),
|
|
35
|
+
success = _NativeElements$_chec.success,
|
|
36
|
+
autoFixable = _NativeElements$_chec.autoFixable;
|
|
37
|
+
if (success && autoFixable) {
|
|
38
|
+
var fix = NativeElements._fix(node, {
|
|
39
|
+
context: context,
|
|
40
|
+
config: config
|
|
41
|
+
});
|
|
42
|
+
context.report(_objectSpread({
|
|
43
|
+
node: node,
|
|
44
|
+
messageId: 'preferHeading'
|
|
45
|
+
}, config.enableUnsafeAutofix ? {
|
|
49
46
|
fix: fix
|
|
50
|
-
}
|
|
51
|
-
|
|
47
|
+
} : {
|
|
48
|
+
suggest: [{
|
|
49
|
+
desc: "Convert to Heading",
|
|
50
|
+
fix: fix
|
|
51
|
+
}]
|
|
52
|
+
}));
|
|
53
|
+
} else if (success && config.enableUnsafeReport) {
|
|
54
|
+
context.report({
|
|
55
|
+
node: node,
|
|
56
|
+
messageId: 'preferHeading'
|
|
57
|
+
});
|
|
58
|
+
}
|
|
52
59
|
},
|
|
53
60
|
_check: function _check(node, _ref2) {
|
|
54
61
|
var config = _ref2.config;
|
|
55
62
|
if (!config.patterns.includes('native-elements')) {
|
|
56
|
-
return
|
|
63
|
+
return {
|
|
64
|
+
success: false
|
|
65
|
+
};
|
|
57
66
|
}
|
|
58
67
|
if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'JSXElement')) {
|
|
59
|
-
return
|
|
68
|
+
return {
|
|
69
|
+
success: false
|
|
70
|
+
};
|
|
60
71
|
}
|
|
61
72
|
if (!node.children.length) {
|
|
62
|
-
return
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
return false;
|
|
73
|
+
return {
|
|
74
|
+
success: false
|
|
75
|
+
};
|
|
66
76
|
}
|
|
67
77
|
var elementName = ast.JSXElement.getName(node);
|
|
68
78
|
if (!Object.keys(tagSizeMap).includes(elementName)) {
|
|
69
|
-
return
|
|
79
|
+
return {
|
|
80
|
+
success: false
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (!node.parent) {
|
|
84
|
+
return {
|
|
85
|
+
success: true,
|
|
86
|
+
autoFixable: false
|
|
87
|
+
};
|
|
70
88
|
}
|
|
71
89
|
|
|
72
90
|
// Element has to be first element of its siblings
|
|
73
91
|
if (!((0, _eslintCodemodUtils.isNodeOfType)(node.parent, 'JSXElement') || (0, _eslintCodemodUtils.isNodeOfType)(node.parent, 'JSXFragment'))) {
|
|
74
|
-
return
|
|
92
|
+
return {
|
|
93
|
+
success: true,
|
|
94
|
+
autoFixable: false
|
|
95
|
+
};
|
|
75
96
|
}
|
|
76
97
|
var siblings = ast.JSXElement.getChildren(node.parent);
|
|
77
98
|
if (siblings.length > 1) {
|
|
78
99
|
var _siblings$0$range, _node$range, _siblings$0$range2, _node$range2;
|
|
79
100
|
// Only report if element is first child element
|
|
80
101
|
if (((_siblings$0$range = siblings[0].range) === null || _siblings$0$range === void 0 ? void 0 : _siblings$0$range[0]) !== ((_node$range = node.range) === null || _node$range === void 0 ? void 0 : _node$range[0]) || ((_siblings$0$range2 = siblings[0].range) === null || _siblings$0$range2 === void 0 ? void 0 : _siblings$0$range2[1]) !== ((_node$range2 = node.range) === null || _node$range2 === void 0 ? void 0 : _node$range2[1])) {
|
|
81
|
-
return
|
|
102
|
+
return {
|
|
103
|
+
success: true,
|
|
104
|
+
autoFixable: false
|
|
105
|
+
};
|
|
82
106
|
}
|
|
83
107
|
}
|
|
84
108
|
if (!ast.JSXElement.hasAllowedAttrsOnly(node, _common.allowedAttrs)) {
|
|
85
|
-
return
|
|
109
|
+
return {
|
|
110
|
+
success: true,
|
|
111
|
+
autoFixable: false
|
|
112
|
+
};
|
|
86
113
|
}
|
|
87
|
-
return
|
|
114
|
+
return {
|
|
115
|
+
success: true,
|
|
116
|
+
autoFixable: true
|
|
117
|
+
};
|
|
88
118
|
},
|
|
89
119
|
_fix: function _fix(node, _ref3) {
|
|
90
120
|
var context = _ref3.context;
|
|
@@ -8,7 +8,8 @@ var defaults = {
|
|
|
8
8
|
failSilently: false,
|
|
9
9
|
patterns: ['paragraph-elements', 'span-elements', 'strong-elements', 'emphasis-elements'],
|
|
10
10
|
inheritColor: false,
|
|
11
|
-
enableUnsafeAutofix: false
|
|
11
|
+
enableUnsafeAutofix: false,
|
|
12
|
+
enableUnsafeReport: false
|
|
12
13
|
};
|
|
13
14
|
var getConfig = exports.getConfig = function getConfig(overrides) {
|
|
14
15
|
return Object.assign({}, defaults, overrides);
|