@atlaskit/eslint-plugin-design-system 10.10.0 → 10.10.1
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 +11 -0
- package/dist/cjs/rules/no-legacy-icons/checks.js +63 -67
- package/dist/cjs/rules/no-legacy-icons/helpers.js +29 -24
- package/dist/cjs/rules/no-legacy-icons/index.js +4 -5
- package/dist/es2019/rules/no-legacy-icons/checks.js +20 -33
- package/dist/es2019/rules/no-legacy-icons/helpers.js +24 -21
- package/dist/es2019/rules/no-legacy-icons/index.js +4 -5
- package/dist/esm/rules/no-legacy-icons/checks.js +64 -68
- package/dist/esm/rules/no-legacy-icons/helpers.js +28 -23
- package/dist/esm/rules/no-legacy-icons/index.js +4 -5
- package/dist/types/rules/no-legacy-icons/helpers.d.ts +3 -13
- package/dist/types-ts4.5/rules/no-legacy-icons/helpers.d.ts +3 -13
- package/package.json +2 -2
- package/constellation/consistent-css-prop-usage/usage.mdx +0 -210
- package/constellation/ensure-design-token-usage/usage.mdx +0 -77
- package/constellation/ensure-design-token-usage-preview/usage.mdx +0 -6
- package/constellation/icon-label/usage.mdx +0 -41
- package/constellation/index/props.mdx +0 -30
- package/constellation/index/usage.mdx +0 -57
- package/constellation/no-banned-imports/usage.mdx +0 -19
- package/constellation/no-css-tagged-template-expression/usage.mdx +0 -71
- package/constellation/no-custom-icons/usage.mdx +0 -36
- package/constellation/no-deprecated-apis/usage.mdx +0 -82
- package/constellation/no-deprecated-design-token-usage/usage.mdx +0 -30
- package/constellation/no-deprecated-imports/usage.mdx +0 -66
- package/constellation/no-direct-use-of-web-platform-drag-and-drop/usage.mdx +0 -149
- package/constellation/no-empty-styled-expression/usage.mdx +0 -82
- package/constellation/no-exported-css/usage.mdx +0 -55
- package/constellation/no-exported-keyframes/usage.mdx +0 -55
- package/constellation/no-html-anchor/usage.mdx +0 -46
- package/constellation/no-html-button/usage.mdx +0 -52
- package/constellation/no-invalid-css-map/usage.mdx +0 -210
- package/constellation/no-keyframes-tagged-template-expression/usage.mdx +0 -80
- package/constellation/no-legacy-icons/usage.mdx +0 -42
- package/constellation/no-margin/usage.mdx +0 -21
- package/constellation/no-nested-styles/usage.mdx +0 -47
- package/constellation/no-physical-properties/usage.mdx +0 -53
- package/constellation/no-styled-tagged-template-expression/usage.mdx +0 -135
- package/constellation/no-unsafe-design-token-usage/usage.mdx +0 -50
- package/constellation/no-unsafe-style-overrides/usage.mdx +0 -52
- package/constellation/no-unsupported-drag-and-drop-libraries/usage.mdx +0 -23
- package/constellation/prefer-primitives/usage.mdx +0 -32
- package/constellation/use-button-group-label/usage.mdx +0 -60
- package/constellation/use-drawer-label/usage.mdx +0 -55
- package/constellation/use-heading/usage.mdx +0 -31
- package/constellation/use-heading-level-in-spotlight-card/usage.mdx +0 -21
- package/constellation/use-href-in-link-item/usage.mdx +0 -19
- package/constellation/use-latest-xcss-syntax/usage.mdx +0 -33
- package/constellation/use-latest-xcss-syntax-typography/usage.mdx +0 -34
- package/constellation/use-menu-section-title/usage.mdx +0 -55
- package/constellation/use-popup-label/usage.mdx +0 -56
- package/constellation/use-primitives/usage.mdx +0 -78
- package/constellation/use-primitives-text/usage.mdx +0 -35
- package/constellation/use-tokens-space/usage.mdx +0 -34
- package/constellation/use-tokens-typography/usage.mdx +0 -55
- package/constellation/use-visually-hidden/usage.mdx +0 -35
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @atlaskit/eslint-plugin-design-system
|
|
2
2
|
|
|
3
|
+
## 10.10.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#117847](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/117847)
|
|
8
|
+
[`5795b7b47ceac`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/5795b7b47ceac) -
|
|
9
|
+
Removes redundant files from NPM deployment
|
|
10
|
+
- [#117920](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/117920)
|
|
11
|
+
[`57088349e6e38`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/57088349e6e38) -
|
|
12
|
+
Updated guidance on no-legacy-icons lint rule to be more descriptive.
|
|
13
|
+
|
|
3
14
|
## 10.10.0
|
|
4
15
|
|
|
5
16
|
### Minor Changes
|
|
@@ -141,25 +141,36 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
141
141
|
if (typeof moduleSource === 'string' && ['@atlaskit/icon/glyph/', '@atlaskit/icon-object/glyph/'].find(function (val) {
|
|
142
142
|
return moduleSource.startsWith(val);
|
|
143
143
|
}) && node.specifiers.length) {
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
var _iterator4 = _createForOfIteratorHelper(node.specifiers),
|
|
145
|
+
_step4;
|
|
146
|
+
try {
|
|
147
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
148
|
+
var spec = _step4.value;
|
|
149
|
+
(0, _helpers.createCantMigrateReExportError)(spec, moduleSource, spec.exported.name, errorsManual);
|
|
150
|
+
guidance[(0, _helpers.locToString)(spec)] = (0, _helpers.createGuidance)(moduleSource);
|
|
151
|
+
}
|
|
152
|
+
} catch (err) {
|
|
153
|
+
_iterator4.e(err);
|
|
154
|
+
} finally {
|
|
155
|
+
_iterator4.f();
|
|
156
|
+
}
|
|
146
157
|
}
|
|
147
158
|
} else if (node.declaration && (0, _eslintCodemodUtils.isNodeOfType)(node.declaration, 'VariableDeclaration')) {
|
|
148
159
|
// export const Icon = AddIcon;
|
|
149
|
-
var
|
|
150
|
-
|
|
160
|
+
var _iterator5 = _createForOfIteratorHelper(node.declaration.declarations),
|
|
161
|
+
_step5;
|
|
151
162
|
try {
|
|
152
|
-
for (
|
|
153
|
-
var decl =
|
|
163
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
164
|
+
var decl = _step5.value;
|
|
154
165
|
if ((0, _eslintCodemodUtils.isNodeOfType)(decl, 'VariableDeclarator') && 'init' in decl && decl.init && (0, _eslintCodemodUtils.isNodeOfType)(decl.init, 'Identifier') && decl.init.name in legacyIconImports) {
|
|
155
166
|
(0, _helpers.createCantMigrateReExportError)(node, legacyIconImports[decl.init.name].packageName, decl.init.name, errorsManual);
|
|
156
|
-
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(
|
|
167
|
+
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[decl.init.name].packageName);
|
|
157
168
|
}
|
|
158
169
|
}
|
|
159
170
|
} catch (err) {
|
|
160
|
-
|
|
171
|
+
_iterator5.e(err);
|
|
161
172
|
} finally {
|
|
162
|
-
|
|
173
|
+
_iterator5.f();
|
|
163
174
|
}
|
|
164
175
|
} else if (!node.source && node.specifiers && node.specifiers.length > 0) {
|
|
165
176
|
/**
|
|
@@ -168,25 +179,25 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
168
179
|
* const crossIcon = LegacyIcon2;
|
|
169
180
|
* export { AddIcon, CrossIcon as default }
|
|
170
181
|
*/
|
|
171
|
-
var
|
|
172
|
-
|
|
182
|
+
var _iterator6 = _createForOfIteratorHelper(node.specifiers),
|
|
183
|
+
_step6;
|
|
173
184
|
try {
|
|
174
|
-
for (
|
|
175
|
-
var
|
|
176
|
-
if (
|
|
185
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
186
|
+
var _spec2 = _step6.value;
|
|
187
|
+
if (_spec2.local.name in legacyIconImports) {
|
|
177
188
|
//update legacy imports to be exported
|
|
178
|
-
legacyIconImports[
|
|
179
|
-
packageName: legacyIconImports[
|
|
189
|
+
legacyIconImports[_spec2.local.name] = {
|
|
190
|
+
packageName: legacyIconImports[_spec2.local.name].packageName,
|
|
180
191
|
exported: true
|
|
181
192
|
};
|
|
182
|
-
(0, _helpers.createCantMigrateReExportError)(
|
|
183
|
-
guidance[(0, _helpers.locToString)(
|
|
193
|
+
(0, _helpers.createCantMigrateReExportError)(_spec2, legacyIconImports[_spec2.local.name].packageName, _spec2.exported.name, errorsManual);
|
|
194
|
+
guidance[(0, _helpers.locToString)(_spec2)] = (0, _helpers.createGuidance)(legacyIconImports[_spec2.local.name].packageName);
|
|
184
195
|
}
|
|
185
196
|
}
|
|
186
197
|
} catch (err) {
|
|
187
|
-
|
|
198
|
+
_iterator6.e(err);
|
|
188
199
|
} finally {
|
|
189
|
-
|
|
200
|
+
_iterator6.f();
|
|
190
201
|
}
|
|
191
202
|
}
|
|
192
203
|
};
|
|
@@ -233,18 +244,17 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
233
244
|
UNSAFE_propName = result.UNSAFE_propName;
|
|
234
245
|
}
|
|
235
246
|
if (newIcon && isInNewButton && isNewIconMigratable && UNSAFE_size !== 'large' && UNSAFE_size !== 'xlarge') {
|
|
236
|
-
|
|
237
|
-
(0, _helpers.
|
|
238
|
-
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[node.name].packageName, 'medium');
|
|
247
|
+
(0, _helpers.createAutoMigrationError)(node, legacyIconImports[node.name].packageName, node.name, errorsAuto);
|
|
248
|
+
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[node.name].packageName, isInNewButton, 'medium');
|
|
239
249
|
} else if ((!newIcon || !isNewIconMigratable) && !UNSAFE_size) {
|
|
240
250
|
(0, _helpers.createCantFindSuitableReplacementError)(node, legacyIconImports[node.name].packageName, node.name, errorsManual);
|
|
241
|
-
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[node.name].packageName);
|
|
251
|
+
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[node.name].packageName, isInNewButton);
|
|
242
252
|
} else if ((UNSAFE_size === 'large' || UNSAFE_size === 'xlarge') && UNSAFE_propName) {
|
|
243
253
|
(0, _helpers.createCantMigrateUnsafeProp)(node, UNSAFE_propName, UNSAFE_size, legacyIconImports[node.name].packageName, node.name, errorsManual);
|
|
244
|
-
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[node.name].packageName, UNSAFE_size);
|
|
254
|
+
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[node.name].packageName, isInNewButton, UNSAFE_size);
|
|
245
255
|
} else if (!isInNewButton) {
|
|
246
256
|
(0, _helpers.createCantMigrateFunctionUnknownError)(node, legacyIconImports[node.name].packageName, node.name, errorsManual);
|
|
247
|
-
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[node.name].packageName);
|
|
257
|
+
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[node.name].packageName, isInNewButton);
|
|
248
258
|
}
|
|
249
259
|
}
|
|
250
260
|
};
|
|
@@ -287,11 +297,11 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
287
297
|
var requiredAttributesAfterSpread = new Set(['size', 'primaryColor', 'secondaryColor']);
|
|
288
298
|
var hasSpread = false;
|
|
289
299
|
var hasPrimaryColorProp = false;
|
|
290
|
-
var
|
|
291
|
-
|
|
300
|
+
var _iterator7 = _createForOfIteratorHelper(node.openingElement.attributes),
|
|
301
|
+
_step7;
|
|
292
302
|
try {
|
|
293
|
-
for (
|
|
294
|
-
var attr =
|
|
303
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
304
|
+
var attr = _step7.value;
|
|
295
305
|
// Detect spread props
|
|
296
306
|
if ((0, _eslintCodemodUtils.isNodeOfType)(attr, 'JSXSpreadAttribute')) {
|
|
297
307
|
// In case there are more spread props
|
|
@@ -324,9 +334,9 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
324
334
|
}
|
|
325
335
|
}
|
|
326
336
|
} catch (err) {
|
|
327
|
-
|
|
337
|
+
_iterator7.e(err);
|
|
328
338
|
} finally {
|
|
329
|
-
|
|
339
|
+
_iterator7.f();
|
|
330
340
|
}
|
|
331
341
|
var hasManualMigration = false;
|
|
332
342
|
if (primaryColor && !(0, _helpers.canMigrateColor)(primaryColor) || hasPrimaryColorProp && !primaryColor) {
|
|
@@ -340,7 +350,6 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
340
350
|
(0, _helpers.createCantMigrateSizeUnknown)(node, errorsManual, legacyIconImports[name].packageName, name);
|
|
341
351
|
hasManualMigration = true;
|
|
342
352
|
}
|
|
343
|
-
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[name].packageName, size ? size : undefined);
|
|
344
353
|
// Check for unsafe size
|
|
345
354
|
if ((UNSAFE_size === 'large' || UNSAFE_size === 'xlarge') && (UNSAFE_propName === 'UNSAFE_iconAfter_size' || UNSAFE_propName === 'UNSAFE_iconBefore_size' || UNSAFE_propName === 'UNSAFE_size')) {
|
|
346
355
|
(0, _helpers.createCantMigrateUnsafeProp)(node, UNSAFE_propName, UNSAFE_size, legacyIconImports[name].packageName, name, errorsManual);
|
|
@@ -362,14 +371,14 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
362
371
|
hasManualMigration = true;
|
|
363
372
|
}
|
|
364
373
|
var migrationMapObject = (0, _helpers.getMigrationMapObject)(legacyIconImports[name].packageName);
|
|
365
|
-
var iconKey = (0, _helpers.getIconKey)(legacyIconImports[name].packageName);
|
|
366
374
|
var newIcon = migrationMapObject === null || migrationMapObject === void 0 ? void 0 : migrationMapObject.newIcon;
|
|
367
375
|
var isNewIconMigratable = (0, _helpers.canAutoMigrateNewIconBasedOnSize)(migrationMapObject === null || migrationMapObject === void 0 ? void 0 : migrationMapObject.sizeGuidance[(_size = size) !== null && _size !== void 0 ? _size : 'medium']);
|
|
368
376
|
if (!hasManualMigration && newIcon && isNewIconMigratable) {
|
|
369
|
-
(0, _helpers.createAutoMigrationError)(node, legacyIconImports[name].packageName, name,
|
|
377
|
+
(0, _helpers.createAutoMigrationError)(node, legacyIconImports[name].packageName, name, errorsAuto);
|
|
370
378
|
} else if ((!newIcon || !isNewIconMigratable) && size) {
|
|
371
|
-
(0, _helpers.createCantFindSuitableReplacementError)(node, legacyIconImports[name].packageName, name, errorsManual);
|
|
379
|
+
(0, _helpers.createCantFindSuitableReplacementError)(node, legacyIconImports[name].packageName, name, errorsManual, migrationMapObject ? true : false);
|
|
372
380
|
}
|
|
381
|
+
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[name].packageName, insideNewButton, size && (0, _migrationMapTemp.isSize)(size) ? size : undefined);
|
|
373
382
|
}
|
|
374
383
|
};
|
|
375
384
|
|
|
@@ -379,20 +388,20 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
379
388
|
*/
|
|
380
389
|
var checkCallExpression = function checkCallExpression(node) {
|
|
381
390
|
if ('arguments' in node && node.arguments.length) {
|
|
382
|
-
var
|
|
383
|
-
|
|
391
|
+
var _iterator8 = _createForOfIteratorHelper(node.arguments),
|
|
392
|
+
_step8;
|
|
384
393
|
try {
|
|
385
|
-
for (
|
|
386
|
-
var arg =
|
|
394
|
+
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
395
|
+
var arg = _step8.value;
|
|
387
396
|
if ((0, _eslintCodemodUtils.isNodeOfType)(arg, 'Identifier') && arg.name in legacyIconImports && legacyIconImports[arg.name].packageName) {
|
|
388
397
|
(0, _helpers.createCantMigrateFunctionUnknownError)(node, legacyIconImports[arg.name].packageName, arg.name, errorsManual);
|
|
389
398
|
guidance[(0, _helpers.locToString)(node)] = (0, _helpers.createGuidance)(legacyIconImports[arg.name].packageName);
|
|
390
399
|
}
|
|
391
400
|
}
|
|
392
401
|
} catch (err) {
|
|
393
|
-
|
|
402
|
+
_iterator8.e(err);
|
|
394
403
|
} finally {
|
|
395
|
-
|
|
404
|
+
_iterator8.f();
|
|
396
405
|
}
|
|
397
406
|
}
|
|
398
407
|
};
|
|
@@ -408,36 +417,28 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
408
417
|
errorList = _Object$entries$_i[1];
|
|
409
418
|
var node = 'node' in errorList.errors[0] ? errorList.errors[0].node : null;
|
|
410
419
|
if (node) {
|
|
420
|
+
var guidanceMessage = _key in guidance ? guidance[_key] : '';
|
|
411
421
|
context.report({
|
|
412
422
|
node: node,
|
|
413
423
|
messageId: 'noLegacyIconsManualMigration',
|
|
414
424
|
data: {
|
|
415
425
|
iconName: errorList.iconName,
|
|
416
426
|
importSource: errorList.importSource,
|
|
417
|
-
|
|
427
|
+
guidance: isQuietMode ? guidanceMessage : "".concat(guidanceMessage, "For more information see the below errors.\n")
|
|
418
428
|
}
|
|
419
429
|
});
|
|
420
430
|
if (!isQuietMode) {
|
|
421
|
-
var
|
|
422
|
-
|
|
431
|
+
var _iterator9 = _createForOfIteratorHelper(errorList.errors),
|
|
432
|
+
_step9;
|
|
423
433
|
try {
|
|
424
|
-
for (
|
|
425
|
-
var error =
|
|
434
|
+
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
435
|
+
var error = _step9.value;
|
|
426
436
|
context.report(error);
|
|
427
437
|
}
|
|
428
438
|
} catch (err) {
|
|
429
|
-
|
|
439
|
+
_iterator9.e(err);
|
|
430
440
|
} finally {
|
|
431
|
-
|
|
432
|
-
}
|
|
433
|
-
if (_key in guidance) {
|
|
434
|
-
context.report({
|
|
435
|
-
node: node,
|
|
436
|
-
messageId: 'guidance',
|
|
437
|
-
data: {
|
|
438
|
-
guidance: guidance[_key]
|
|
439
|
-
}
|
|
440
|
-
});
|
|
441
|
+
_iterator9.f();
|
|
441
442
|
}
|
|
442
443
|
}
|
|
443
444
|
}
|
|
@@ -456,16 +457,11 @@ var createChecks = exports.createChecks = function createChecks(context) {
|
|
|
456
457
|
}
|
|
457
458
|
var _node = 'node' in _error ? _error.node : null;
|
|
458
459
|
if (_node) {
|
|
459
|
-
|
|
460
|
-
if (
|
|
461
|
-
|
|
462
|
-
node: _node,
|
|
463
|
-
messageId: 'guidance',
|
|
464
|
-
data: {
|
|
465
|
-
guidance: guidance[_key2]
|
|
466
|
-
}
|
|
467
|
-
});
|
|
460
|
+
var _guidanceMessage = _key2 in guidance ? guidance[_key2] : '';
|
|
461
|
+
if ('data' in _error && _error.data) {
|
|
462
|
+
_error.data.guidance = _guidanceMessage;
|
|
468
463
|
}
|
|
464
|
+
context.report(_error);
|
|
469
465
|
}
|
|
470
466
|
}
|
|
471
467
|
}
|
|
@@ -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.getMigrationMapObject = exports.getLiteralStringValue = exports.
|
|
8
|
+
exports.locToString = exports.getMigrationMapObject = exports.getLiteralStringValue = exports.findUNSAFEProp = exports.createHelpers = exports.createGuidance = exports.createCantMigrateUnsafeProp = exports.createCantMigrateSpreadPropsError = exports.createCantMigrateSizeUnknown = exports.createCantMigrateReExportError = exports.createCantMigrateIdentifierError = exports.createCantMigrateFunctionUnknownError = exports.createCantMigrateColorError = exports.createCantFindSuitableReplacementError = exports.createAutoMigrationError = exports.canMigrateColor = exports.canAutoMigrateNewIconBasedOnSize = void 0;
|
|
9
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
10
|
var _eslintCodemodUtils = require("eslint-codemod-utils");
|
|
11
11
|
var _getImportName = require("../utils/get-import-name");
|
|
@@ -30,7 +30,7 @@ var getMigrationMapObject = exports.getMigrationMapObject = function getMigratio
|
|
|
30
30
|
* @param iconPackage The name of the legacy icon package
|
|
31
31
|
* @returns The unique identifier for the icon (the part after "@atlaskit/icon/glyph")
|
|
32
32
|
*/
|
|
33
|
-
var getIconKey =
|
|
33
|
+
var getIconKey = function getIconKey(iconPackage) {
|
|
34
34
|
var key = iconPackage.replace(/^@atlaskit\/icon\/glyph\//, '');
|
|
35
35
|
return key;
|
|
36
36
|
};
|
|
@@ -45,39 +45,48 @@ var canAutoMigrateNewIconBasedOnSize = exports.canAutoMigrateNewIconBasedOnSize
|
|
|
45
45
|
/**
|
|
46
46
|
* Creates the written guidance for migrating a legacy icon to a new icon
|
|
47
47
|
*/
|
|
48
|
-
var createGuidance = exports.createGuidance = function createGuidance(iconPackage
|
|
48
|
+
var createGuidance = exports.createGuidance = function createGuidance(iconPackage) {
|
|
49
|
+
var insideNewButton = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
50
|
+
var size = arguments.length > 2 ? arguments[2] : undefined;
|
|
49
51
|
var migrationMapObject = getMigrationMapObject(iconPackage);
|
|
50
52
|
if (migrationMapObject) {
|
|
51
53
|
var newIcon = migrationMapObject.newIcon;
|
|
52
54
|
if (!newIcon) {
|
|
53
55
|
return 'No equivalent icon in new set. An option is to contribute a custom icon into icon-labs package instead.\n';
|
|
54
56
|
}
|
|
57
|
+
var buttonGuidanceStr = "Please set 'spacing' property of the new icon to 'none', to ensure appropriate spacing inside `@atlaskit/button`.\n";
|
|
58
|
+
var guidance = '';
|
|
55
59
|
if (size) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
guidance += " Please: ".concat(_migrationMapTemp.outcomeDescriptionMap[migrationMapObject.sizeGuidance[size]], "\n");
|
|
60
|
+
if (migrationMapObject.sizeGuidance[size] && canAutoMigrateNewIconBasedOnSize(migrationMapObject.sizeGuidance[size])) {
|
|
61
|
+
guidance += "Fix: Use ".concat(newIcon.name, " from @atlaskit/").concat(newIcon.library, "/").concat(newIcon.type, "/").concat(newIcon.name, " instead.");
|
|
59
62
|
} else {
|
|
60
|
-
guidance +=
|
|
63
|
+
guidance += "No equivalent icon for this size, ".concat(size, ", in new set.");
|
|
61
64
|
}
|
|
62
|
-
|
|
65
|
+
guidance += "".concat(migrationMapObject.sizeGuidance[size] in _migrationMapTemp.outcomeDescriptionMap ? " Please: ".concat(_migrationMapTemp.outcomeDescriptionMap[migrationMapObject.sizeGuidance[size]]) : ' No migration size advice given.', "\n");
|
|
63
66
|
} else {
|
|
64
|
-
|
|
67
|
+
guidance = "Use ".concat(newIcon.name, " from @atlaskit/").concat(newIcon.library, "/").concat(newIcon.type, "/").concat(newIcon.name, " instead.\nMigration suggestions, depending on the legacy icon size:\n");
|
|
65
68
|
for (var _i = 0, _Object$entries = Object.entries(migrationMapObject.sizeGuidance); _i < _Object$entries.length; _i++) {
|
|
66
69
|
var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
|
|
67
70
|
_size = _Object$entries$_i[0],
|
|
68
71
|
value = _Object$entries$_i[1];
|
|
69
|
-
|
|
72
|
+
guidance += "\t- ".concat(_size, ": ");
|
|
70
73
|
if (!(value in _migrationMapTemp.outcomeDescriptionMap)) {
|
|
71
|
-
|
|
74
|
+
guidance += 'No migration advice given.\n';
|
|
72
75
|
} else {
|
|
73
|
-
|
|
76
|
+
guidance += "".concat(_migrationMapTemp.outcomeDescriptionMap[value], ".\n");
|
|
74
77
|
}
|
|
75
|
-
_guidance;
|
|
76
78
|
}
|
|
77
|
-
return _guidance;
|
|
78
79
|
}
|
|
80
|
+
if (insideNewButton) {
|
|
81
|
+
guidance += buttonGuidanceStr;
|
|
82
|
+
} else if (size && size === 'medium') {
|
|
83
|
+
guidance += "Setting the spacing property to 'spacious' will maintain the icon's box dimensions - but consider setting spacing='none' as it allows for easier control of spacing by parent elements.\n";
|
|
84
|
+
} else if (size) {
|
|
85
|
+
guidance += "In the new icon, please use spacing='none'.\n";
|
|
86
|
+
}
|
|
87
|
+
return guidance;
|
|
79
88
|
} else {
|
|
80
|
-
return
|
|
89
|
+
return "Migration suggestions not found for \"".concat(iconPackage, "\".\n");
|
|
81
90
|
}
|
|
82
91
|
};
|
|
83
92
|
|
|
@@ -155,13 +164,14 @@ var createCantMigrateUnsafeProp = exports.createCantMigrateUnsafeProp = function
|
|
|
155
164
|
};
|
|
156
165
|
pushManualError(locToString(node), errors, myError, packageName, iconName);
|
|
157
166
|
};
|
|
158
|
-
var createCantFindSuitableReplacementError = exports.createCantFindSuitableReplacementError = function createCantFindSuitableReplacementError(node, importSource, iconName, errors) {
|
|
167
|
+
var createCantFindSuitableReplacementError = exports.createCantFindSuitableReplacementError = function createCantFindSuitableReplacementError(node, importSource, iconName, errors, sizeIssue) {
|
|
159
168
|
var myError = {
|
|
160
169
|
node: node,
|
|
161
170
|
messageId: 'cantFindSuitableReplacement',
|
|
162
171
|
data: {
|
|
163
172
|
importSource: importSource,
|
|
164
|
-
iconName: iconName
|
|
173
|
+
iconName: iconName,
|
|
174
|
+
sizeGuidance: sizeIssue ? ' at the current size' : ''
|
|
165
175
|
}
|
|
166
176
|
};
|
|
167
177
|
pushManualError(locToString(node), errors, myError, importSource, iconName);
|
|
@@ -204,18 +214,13 @@ var createCantMigrateSizeUnknown = exports.createCantMigrateSizeUnknown = functi
|
|
|
204
214
|
};
|
|
205
215
|
pushManualError(locToString(node), errors, myError, importSource, iconName);
|
|
206
216
|
};
|
|
207
|
-
var createAutoMigrationError = exports.createAutoMigrationError = function createAutoMigrationError(node, importSource, iconName,
|
|
208
|
-
var migrationKey = newIcon.name === oldIconName ? newIcon.name : "".concat(newIcon.name, "--").concat(oldIconName);
|
|
209
|
-
var newMigrationIconPackage = "@atlaskit/".concat(newIcon.library, "/").concat(newIcon.type, "/migration/").concat(migrationKey);
|
|
217
|
+
var createAutoMigrationError = exports.createAutoMigrationError = function createAutoMigrationError(node, importSource, iconName, errors) {
|
|
210
218
|
var myError = {
|
|
211
219
|
node: node,
|
|
212
220
|
messageId: 'noLegacyIconsAutoMigration',
|
|
213
221
|
data: {
|
|
214
222
|
importSource: importSource,
|
|
215
|
-
iconName: iconName
|
|
216
|
-
newIcon: newIcon.name,
|
|
217
|
-
//TODO: provide size guidance
|
|
218
|
-
newPackage: newMigrationIconPackage
|
|
223
|
+
iconName: iconName
|
|
219
224
|
}
|
|
220
225
|
};
|
|
221
226
|
errors[locToString(node)] = myError;
|
|
@@ -33,17 +33,16 @@ var rule = (0, _createRule.createLintRule)({
|
|
|
33
33
|
additionalProperties: false
|
|
34
34
|
}],
|
|
35
35
|
messages: {
|
|
36
|
-
noLegacyIconsAutoMigration: "Auto Migration:\nLegacy icon '{{iconName}}' from '{{importSource}}' detected.\nAutomatic migration is possible
|
|
37
|
-
noLegacyIconsManualMigration: "Manual Migration:\nLegacy icon '{{iconName}}' from '{{importSource}}' detected.\nAutomatic migration not possible
|
|
38
|
-
cantFindSuitableReplacement: "No suitable replacement found for '{{iconName}}' from '{{importSource}}'
|
|
36
|
+
noLegacyIconsAutoMigration: "Auto Migration:\nLegacy icon '{{iconName}}' from '{{importSource}}' detected.\nAutomatic migration is possible.\n\n{{guidance}}\nAtlassians: See https://go.atlassian.com/icon-migration-guide for details.'",
|
|
37
|
+
noLegacyIconsManualMigration: "Manual Migration:\nLegacy icon '{{iconName}}' from '{{importSource}}' detected.\nAutomatic migration not possible.\n\n{{guidance}}\nAtlassians: See https://go.atlassian.com/icon-migration-guide for details.",
|
|
38
|
+
cantFindSuitableReplacement: "No suitable replacement found for '{{iconName}}' from '{{importSource}}'{{sizeGuidance}}. Please manually migrate this icon.",
|
|
39
39
|
cantMigrateReExport: "'{{exportName}}' is a re-export of icon from '{{packageName}}' and cannot be automatically migrated. Please utilize the export from icons directly.",
|
|
40
40
|
cantMigrateColor: "Primary Color prop has {{colorValue}} which cannot be automatically migrated to color prop in the new Icon API. Please use either an appropriate color.icon, color.link token, or currentColor (as a last resort).",
|
|
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
44
|
cantMigrateIdentifier: "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
|
-
cantMigrateUnsafeProp: "Property '{{propName}}' with value of '{{value}}' is unable to be auto-migrated to the new button. Please manually migrate this icon."
|
|
46
|
-
guidance: "Guidance:\n'{{guidance}}'"
|
|
45
|
+
cantMigrateUnsafeProp: "Property '{{propName}}' with value of '{{value}}' is unable to be auto-migrated to the new button. Please manually migrate this icon."
|
|
47
46
|
}
|
|
48
47
|
},
|
|
49
48
|
create: function create(context) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isNodeOfType } from 'eslint-codemod-utils';
|
|
2
|
-
import { canAutoMigrateNewIconBasedOnSize, canMigrateColor, createAutoMigrationError, createCantFindSuitableReplacementError, createCantMigrateColorError, createCantMigrateFunctionUnknownError, createCantMigrateIdentifierError, createCantMigrateReExportError, createCantMigrateSizeUnknown, createCantMigrateSpreadPropsError, createCantMigrateUnsafeProp, createGuidance, createHelpers, findUNSAFEProp,
|
|
2
|
+
import { canAutoMigrateNewIconBasedOnSize, canMigrateColor, createAutoMigrationError, createCantFindSuitableReplacementError, createCantMigrateColorError, createCantMigrateFunctionUnknownError, createCantMigrateIdentifierError, createCantMigrateReExportError, createCantMigrateSizeUnknown, createCantMigrateSpreadPropsError, createCantMigrateUnsafeProp, createGuidance, createHelpers, findUNSAFEProp, getMigrationMapObject, locToString } from './helpers';
|
|
3
3
|
import { isSize } from './migration-map-temp';
|
|
4
4
|
export const createChecks = context => {
|
|
5
5
|
//create global variables to be shared by the checks
|
|
@@ -100,15 +100,17 @@ export const createChecks = context => {
|
|
|
100
100
|
if (node.source && isNodeOfType(node.source, 'Literal') && 'value' in node.source) {
|
|
101
101
|
const moduleSource = node.source.value;
|
|
102
102
|
if (typeof moduleSource === 'string' && ['@atlaskit/icon/glyph/', '@atlaskit/icon-object/glyph/'].find(val => moduleSource.startsWith(val)) && node.specifiers.length) {
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
for (const spec of node.specifiers) {
|
|
104
|
+
createCantMigrateReExportError(spec, moduleSource, spec.exported.name, errorsManual);
|
|
105
|
+
guidance[locToString(spec)] = createGuidance(moduleSource);
|
|
106
|
+
}
|
|
105
107
|
}
|
|
106
108
|
} else if (node.declaration && isNodeOfType(node.declaration, 'VariableDeclaration')) {
|
|
107
109
|
// export const Icon = AddIcon;
|
|
108
110
|
for (const decl of node.declaration.declarations) {
|
|
109
111
|
if (isNodeOfType(decl, 'VariableDeclarator') && 'init' in decl && decl.init && isNodeOfType(decl.init, 'Identifier') && decl.init.name in legacyIconImports) {
|
|
110
112
|
createCantMigrateReExportError(node, legacyIconImports[decl.init.name].packageName, decl.init.name, errorsManual);
|
|
111
|
-
guidance[locToString(node)] = createGuidance(
|
|
113
|
+
guidance[locToString(node)] = createGuidance(legacyIconImports[decl.init.name].packageName);
|
|
112
114
|
}
|
|
113
115
|
}
|
|
114
116
|
} else if (!node.source && node.specifiers && node.specifiers.length > 0) {
|
|
@@ -174,18 +176,17 @@ export const createChecks = context => {
|
|
|
174
176
|
UNSAFE_propName = result.UNSAFE_propName;
|
|
175
177
|
}
|
|
176
178
|
if (newIcon && isInNewButton && isNewIconMigratable && UNSAFE_size !== 'large' && UNSAFE_size !== 'xlarge') {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
guidance[locToString(node)] = createGuidance(legacyIconImports[node.name].packageName, 'medium');
|
|
179
|
+
createAutoMigrationError(node, legacyIconImports[node.name].packageName, node.name, errorsAuto);
|
|
180
|
+
guidance[locToString(node)] = createGuidance(legacyIconImports[node.name].packageName, isInNewButton, 'medium');
|
|
180
181
|
} else if ((!newIcon || !isNewIconMigratable) && !UNSAFE_size) {
|
|
181
182
|
createCantFindSuitableReplacementError(node, legacyIconImports[node.name].packageName, node.name, errorsManual);
|
|
182
|
-
guidance[locToString(node)] = createGuidance(legacyIconImports[node.name].packageName);
|
|
183
|
+
guidance[locToString(node)] = createGuidance(legacyIconImports[node.name].packageName, isInNewButton);
|
|
183
184
|
} else if ((UNSAFE_size === 'large' || UNSAFE_size === 'xlarge') && UNSAFE_propName) {
|
|
184
185
|
createCantMigrateUnsafeProp(node, UNSAFE_propName, UNSAFE_size, legacyIconImports[node.name].packageName, node.name, errorsManual);
|
|
185
|
-
guidance[locToString(node)] = createGuidance(legacyIconImports[node.name].packageName, UNSAFE_size);
|
|
186
|
+
guidance[locToString(node)] = createGuidance(legacyIconImports[node.name].packageName, isInNewButton, UNSAFE_size);
|
|
186
187
|
} else if (!isInNewButton) {
|
|
187
188
|
createCantMigrateFunctionUnknownError(node, legacyIconImports[node.name].packageName, node.name, errorsManual);
|
|
188
|
-
guidance[locToString(node)] = createGuidance(legacyIconImports[node.name].packageName);
|
|
189
|
+
guidance[locToString(node)] = createGuidance(legacyIconImports[node.name].packageName, isInNewButton);
|
|
189
190
|
}
|
|
190
191
|
}
|
|
191
192
|
};
|
|
@@ -272,7 +273,6 @@ export const createChecks = context => {
|
|
|
272
273
|
createCantMigrateSizeUnknown(node, errorsManual, legacyIconImports[name].packageName, name);
|
|
273
274
|
hasManualMigration = true;
|
|
274
275
|
}
|
|
275
|
-
guidance[locToString(node)] = createGuidance(legacyIconImports[name].packageName, size ? size : undefined);
|
|
276
276
|
// Check for unsafe size
|
|
277
277
|
if ((UNSAFE_size === 'large' || UNSAFE_size === 'xlarge') && (UNSAFE_propName === 'UNSAFE_iconAfter_size' || UNSAFE_propName === 'UNSAFE_iconBefore_size' || UNSAFE_propName === 'UNSAFE_size')) {
|
|
278
278
|
createCantMigrateUnsafeProp(node, UNSAFE_propName, UNSAFE_size, legacyIconImports[name].packageName, name, errorsManual);
|
|
@@ -290,14 +290,14 @@ export const createChecks = context => {
|
|
|
290
290
|
hasManualMigration = true;
|
|
291
291
|
}
|
|
292
292
|
const migrationMapObject = getMigrationMapObject(legacyIconImports[name].packageName);
|
|
293
|
-
const iconKey = getIconKey(legacyIconImports[name].packageName);
|
|
294
293
|
const newIcon = migrationMapObject === null || migrationMapObject === void 0 ? void 0 : migrationMapObject.newIcon;
|
|
295
294
|
const isNewIconMigratable = canAutoMigrateNewIconBasedOnSize(migrationMapObject === null || migrationMapObject === void 0 ? void 0 : migrationMapObject.sizeGuidance[(_size = size) !== null && _size !== void 0 ? _size : 'medium']);
|
|
296
295
|
if (!hasManualMigration && newIcon && isNewIconMigratable) {
|
|
297
|
-
createAutoMigrationError(node, legacyIconImports[name].packageName, name,
|
|
296
|
+
createAutoMigrationError(node, legacyIconImports[name].packageName, name, errorsAuto);
|
|
298
297
|
} else if ((!newIcon || !isNewIconMigratable) && size) {
|
|
299
|
-
createCantFindSuitableReplacementError(node, legacyIconImports[name].packageName, name, errorsManual);
|
|
298
|
+
createCantFindSuitableReplacementError(node, legacyIconImports[name].packageName, name, errorsManual, migrationMapObject ? true : false);
|
|
300
299
|
}
|
|
300
|
+
guidance[locToString(node)] = createGuidance(legacyIconImports[name].packageName, insideNewButton, size && isSize(size) ? size : undefined);
|
|
301
301
|
}
|
|
302
302
|
};
|
|
303
303
|
|
|
@@ -324,28 +324,20 @@ export const createChecks = context => {
|
|
|
324
324
|
for (const [key, errorList] of Object.entries(errorsManual)) {
|
|
325
325
|
const node = 'node' in errorList.errors[0] ? errorList.errors[0].node : null;
|
|
326
326
|
if (node) {
|
|
327
|
+
const guidanceMessage = key in guidance ? guidance[key] : '';
|
|
327
328
|
context.report({
|
|
328
329
|
node,
|
|
329
330
|
messageId: 'noLegacyIconsManualMigration',
|
|
330
331
|
data: {
|
|
331
332
|
iconName: errorList.iconName,
|
|
332
333
|
importSource: errorList.importSource,
|
|
333
|
-
|
|
334
|
+
guidance: isQuietMode ? guidanceMessage : `${guidanceMessage}For more information see the below errors.\n`
|
|
334
335
|
}
|
|
335
336
|
});
|
|
336
337
|
if (!isQuietMode) {
|
|
337
338
|
for (const error of errorList.errors) {
|
|
338
339
|
context.report(error);
|
|
339
340
|
}
|
|
340
|
-
if (key in guidance) {
|
|
341
|
-
context.report({
|
|
342
|
-
node,
|
|
343
|
-
messageId: 'guidance',
|
|
344
|
-
data: {
|
|
345
|
-
guidance: guidance[key]
|
|
346
|
-
}
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
341
|
}
|
|
350
342
|
}
|
|
351
343
|
}
|
|
@@ -360,16 +352,11 @@ export const createChecks = context => {
|
|
|
360
352
|
}
|
|
361
353
|
const node = 'node' in error ? error.node : null;
|
|
362
354
|
if (node) {
|
|
363
|
-
|
|
364
|
-
if (
|
|
365
|
-
|
|
366
|
-
node,
|
|
367
|
-
messageId: 'guidance',
|
|
368
|
-
data: {
|
|
369
|
-
guidance: guidance[key]
|
|
370
|
-
}
|
|
371
|
-
});
|
|
355
|
+
const guidanceMessage = key in guidance ? guidance[key] : '';
|
|
356
|
+
if ('data' in error && error.data) {
|
|
357
|
+
error.data.guidance = guidanceMessage;
|
|
372
358
|
}
|
|
359
|
+
context.report(error);
|
|
373
360
|
}
|
|
374
361
|
}
|
|
375
362
|
}
|