@atlaskit/eslint-plugin-design-system 4.20.0 → 5.0.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.
Files changed (56) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +3 -3
  3. package/constellation/index/usage.mdx +6 -4
  4. package/dist/cjs/presets/recommended.codegen.js +6 -3
  5. package/dist/cjs/rules/ensure-design-token-usage/index.js +7 -6
  6. package/dist/cjs/rules/ensure-design-token-usage-spacing/index.js +31 -14
  7. package/dist/cjs/rules/ensure-design-token-usage-spacing/utils.js +30 -7
  8. package/dist/cjs/rules/icon-label/index.js +4 -5
  9. package/dist/cjs/rules/no-banned-imports/index.js +5 -3
  10. package/dist/cjs/rules/no-deprecated-apis/index.js +1 -1
  11. package/dist/cjs/rules/no-deprecated-design-token-usage/index.js +5 -3
  12. package/dist/cjs/rules/no-deprecated-imports/index.js +1 -1
  13. package/dist/cjs/rules/no-margin/index.js +5 -2
  14. package/dist/cjs/rules/no-unsafe-design-token-usage/index.js +5 -3
  15. package/dist/cjs/rules/use-primitives/index.js +4 -2
  16. package/dist/cjs/rules/use-visually-hidden/index.js +5 -5
  17. package/dist/cjs/rules/utils/create-rule.js +23 -3
  18. package/dist/cjs/version.json +1 -1
  19. package/dist/es2019/presets/recommended.codegen.js +6 -3
  20. package/dist/es2019/rules/ensure-design-token-usage/index.js +7 -16
  21. package/dist/es2019/rules/ensure-design-token-usage-spacing/index.js +31 -16
  22. package/dist/es2019/rules/ensure-design-token-usage-spacing/utils.js +25 -4
  23. package/dist/es2019/rules/icon-label/index.js +4 -5
  24. package/dist/es2019/rules/no-banned-imports/index.js +5 -3
  25. package/dist/es2019/rules/no-deprecated-apis/index.js +1 -1
  26. package/dist/es2019/rules/no-deprecated-design-token-usage/index.js +5 -3
  27. package/dist/es2019/rules/no-deprecated-imports/index.js +1 -1
  28. package/dist/es2019/rules/no-margin/index.js +5 -2
  29. package/dist/es2019/rules/no-unsafe-design-token-usage/index.js +5 -3
  30. package/dist/es2019/rules/use-primitives/index.js +4 -2
  31. package/dist/es2019/rules/use-visually-hidden/index.js +5 -5
  32. package/dist/es2019/rules/utils/create-rule.js +20 -1
  33. package/dist/es2019/version.json +1 -1
  34. package/dist/esm/presets/recommended.codegen.js +6 -3
  35. package/dist/esm/rules/ensure-design-token-usage/index.js +7 -6
  36. package/dist/esm/rules/ensure-design-token-usage-spacing/index.js +32 -15
  37. package/dist/esm/rules/ensure-design-token-usage-spacing/utils.js +25 -4
  38. package/dist/esm/rules/icon-label/index.js +4 -5
  39. package/dist/esm/rules/no-banned-imports/index.js +5 -3
  40. package/dist/esm/rules/no-deprecated-apis/index.js +1 -1
  41. package/dist/esm/rules/no-deprecated-design-token-usage/index.js +5 -3
  42. package/dist/esm/rules/no-deprecated-imports/index.js +1 -1
  43. package/dist/esm/rules/no-margin/index.js +5 -2
  44. package/dist/esm/rules/no-unsafe-design-token-usage/index.js +5 -3
  45. package/dist/esm/rules/use-primitives/index.js +4 -2
  46. package/dist/esm/rules/use-visually-hidden/index.js +5 -5
  47. package/dist/esm/rules/utils/create-rule.js +21 -2
  48. package/dist/esm/version.json +1 -1
  49. package/dist/types/index.codegen.d.ts +3 -0
  50. package/dist/types/presets/recommended.codegen.d.ts +4 -1
  51. package/dist/types/rules/ensure-design-token-usage-spacing/utils.d.ts +2 -0
  52. package/dist/types/rules/icon-label/index.d.ts +1 -2
  53. package/dist/types/rules/no-banned-imports/index.d.ts +1 -2
  54. package/dist/types/rules/use-primitives/index.d.ts +1 -2
  55. package/dist/types/rules/utils/create-rule.d.ts +43 -0
  56. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # @atlaskit/eslint-plugin-design-system
2
2
 
3
+ ## 5.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`31ebca384fa`](https://bitbucket.org/atlassian/atlassian-frontend/commits/31ebca384fa) - Improved behaviour of `ensure-design-token-usage-spacing` rule to not report on or replace 0, auto, and calc within spacing properties.
8
+
9
+ ## 5.0.0
10
+
11
+ ### Major Changes
12
+
13
+ - [`b910bbe6130`](https://bitbucket.org/atlassian/atlassian-frontend/commits/b910bbe6130) - The following rules are now included in the recommended preset as errors:
14
+
15
+ - ensure-design-token-usage
16
+ - no-deprecated-apis
17
+ - no-deprecated-imports
18
+ - no-unsafe-design-token-usage
19
+
20
+ The following rules are now included in the recommended preset as warnings:
21
+
22
+ - no-deprecated-design-token-usage
23
+
24
+ ### Minor Changes
25
+
26
+ - [`b689e24847d`](https://bitbucket.org/atlassian/atlassian-frontend/commits/b689e24847d) - All lint rule violations in IDEs now point to their corresponding documentation on https://atlassian.design.
27
+
3
28
  ## 4.20.0
4
29
 
5
30
  ### Minor Changes
package/README.md CHANGED
@@ -49,15 +49,15 @@ module.exports = {
49
49
 
50
50
  | Rule | Description | Recommended | Fixable | Suggestions |
51
51
  | ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------- | ------- | ----------- |
52
- | <a href="./src/rules/ensure-design-token-usage/README.md">ensure-design-token-usage</a> | Enforces usage of design tokens. | | Yes | Yes |
52
+ | <a href="./src/rules/ensure-design-token-usage/README.md">ensure-design-token-usage</a> | Enforces usage of design tokens. | Yes | Yes | Yes |
53
53
  | <a href="./src/rules/ensure-design-token-usage-spacing/README.md">ensure-design-token-usage-spacing</a> | Enforces usage of spacing design tokens rather than hard-coded values. | | Yes | |
54
54
  | <a href="./src/rules/icon-label/README.md">icon-label</a> | Enforces accessible usage of icon labels when composed with Atlassian Design System components. | Yes | Yes | |
55
55
  | <a href="./src/rules/no-banned-imports/README.md">no-banned-imports</a> | Disallow importing banned modules. | Yes | | |
56
56
  | <a href="./src/rules/no-deprecated-apis/README.md">no-deprecated-apis</a> | Disallow using deprecated APIs. | Yes | | |
57
- | <a href="./src/rules/no-deprecated-design-token-usage/README.md">no-deprecated-design-token-usage</a> | Disallow using deprecated design tokens. | | Yes | |
57
+ | <a href="./src/rules/no-deprecated-design-token-usage/README.md">no-deprecated-design-token-usage</a> | Disallow using deprecated design tokens. | Yes | Yes | |
58
58
  | <a href="./src/rules/no-deprecated-imports/README.md">no-deprecated-imports</a> | Disallow importing deprecated modules. | Yes | | |
59
59
  | <a href="./src/rules/no-margin/README.md">no-margin</a> | Disallow using the margin CSS property. | | | |
60
- | <a href="./src/rules/no-unsafe-design-token-usage/README.md">no-unsafe-design-token-usage</a> | Enforces design token usage is statically and locally analyzable. | | Yes | |
60
+ | <a href="./src/rules/no-unsafe-design-token-usage/README.md">no-unsafe-design-token-usage</a> | Enforces design token usage is statically and locally analyzable. | Yes | Yes | |
61
61
  | <a href="./src/rules/use-primitives/README.md">use-primitives</a> | Encourage the usage of primitives components. | | Yes | |
62
62
  | <a href="./src/rules/use-visually-hidden/README.md">use-visually-hidden</a> | Enforce usage of the visually hidden component. | Yes | Yes | |
63
63
 
@@ -13,15 +13,15 @@ This plugin contains rules that should be used when working with the [Atlassian
13
13
 
14
14
  | Rule | Description | Recommended | Fixable | Suggestions |
15
15
  | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------- | ------- | ----------- |
16
- | <a href="#ensure-design-token-usage">ensure-design-token-usage</a> | Enforces usage of design tokens. | | Yes | Yes |
16
+ | <a href="#ensure-design-token-usage">ensure-design-token-usage</a> | Enforces usage of design tokens. | Yes | Yes | Yes |
17
17
  | <a href="#ensure-design-token-usage-spacing">ensure-design-token-usage-spacing</a> | Enforces usage of spacing design tokens rather than hard-coded values. | | Yes | |
18
18
  | <a href="#icon-label">icon-label</a> | Enforces accessible usage of icon labels when composed with Atlassian Design System components. | Yes | Yes | |
19
19
  | <a href="#no-banned-imports">no-banned-imports</a> | Disallow importing banned modules. | Yes | | |
20
20
  | <a href="#no-deprecated-apis">no-deprecated-apis</a> | Disallow using deprecated APIs. | Yes | | |
21
- | <a href="#no-deprecated-design-token-usage">no-deprecated-design-token-usage</a> | Disallow using deprecated design tokens. | | Yes | |
21
+ | <a href="#no-deprecated-design-token-usage">no-deprecated-design-token-usage</a> | Disallow using deprecated design tokens. | Yes | Yes | |
22
22
  | <a href="#no-deprecated-imports">no-deprecated-imports</a> | Disallow importing deprecated modules. | Yes | | |
23
23
  | <a href="#no-margin">no-margin</a> | Disallow using the margin CSS property. | | | |
24
- | <a href="#no-unsafe-design-token-usage">no-unsafe-design-token-usage</a> | Enforces design token usage is statically and locally analyzable. | | Yes | |
24
+ | <a href="#no-unsafe-design-token-usage">no-unsafe-design-token-usage</a> | Enforces design token usage is statically and locally analyzable. | Yes | Yes | |
25
25
  | <a href="#use-primitives">use-primitives</a> | Encourage the usage of primitives components. | | Yes | |
26
26
  | <a href="#use-visually-hidden">use-visually-hidden</a> | Enforce usage of the visually hidden component. | Yes | Yes | |
27
27
 
@@ -48,7 +48,7 @@ import { B100 } from '@atlaskit/theme/colors';
48
48
  css({ color: 'red' });
49
49
  ^^^
50
50
  css({ boxShadow: '0px 1px 1px #161A1D32' });
51
- ^^^^^^^^^
51
+ ^^^^^^^^^
52
52
  css`${e100};`;
53
53
  ^^^^
54
54
  css({ color: B100 });
@@ -60,6 +60,8 @@ css({ color: B100 });
60
60
  ```js
61
61
  import { token } from '@atlaskit/tokens';
62
62
 
63
+ css({ color: token('color.text.danger') });
64
+
63
65
  css({ boxShadow: token('elevation.shadow.card') });
64
66
  ```
65
67
 
@@ -6,16 +6,19 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  /**
8
8
  * THIS FILE WAS CREATED VIA CODEGEN DO NOT MODIFY {@see http://go/af-codegen}
9
- * @codegen <<SignedSource::bd61b874ee0323855e0ad920b54e84cc>>
9
+ * @codegen <<SignedSource::b3d2f24d8d37a87fc2bbd964dfdcb87c>>
10
10
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
11
11
  */
12
12
  var _default = {
13
13
  plugins: ['@atlaskit/design-system'],
14
14
  rules: {
15
+ '@atlaskit/design-system/ensure-design-token-usage': 'error',
15
16
  '@atlaskit/design-system/icon-label': 'warn',
16
17
  '@atlaskit/design-system/no-banned-imports': 'error',
17
- '@atlaskit/design-system/no-deprecated-apis': 'warn',
18
- '@atlaskit/design-system/no-deprecated-imports': 'warn',
18
+ '@atlaskit/design-system/no-deprecated-apis': 'error',
19
+ '@atlaskit/design-system/no-deprecated-design-token-usage': 'warn',
20
+ '@atlaskit/design-system/no-deprecated-imports': 'error',
21
+ '@atlaskit/design-system/no-unsafe-design-token-usage': 'error',
19
22
  '@atlaskit/design-system/use-visually-hidden': 'error'
20
23
  }
21
24
  };
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _eslintCodemodUtils = require("eslint-codemod-utils");
8
+ var _createRule = require("../utils/create-rule");
8
9
  var _getIsException = require("../utils/get-is-exception");
9
10
  var _isColor = require("../utils/is-color");
10
11
  var _isElevation = require("../utils/is-elevation");
@@ -34,19 +35,19 @@ var filterSuggestion = function filterSuggestion(_ref) {
34
35
  var shouldReturnSuggestion = _ref.shouldReturnSuggestion;
35
36
  return shouldReturnSuggestion;
36
37
  };
37
- var rule = {
38
+ var rule = (0, _createRule.createLintRule)({
38
39
  meta: {
39
- // We need to upgrade the version of ESLint.
40
+ name: 'ensure-design-token-usage',
40
41
  hasSuggestions: true,
41
42
  docs: {
42
43
  description: 'Enforces usage of design tokens.',
43
- recommended: false
44
+ recommended: 'error'
44
45
  },
45
46
  fixable: 'code',
46
47
  type: 'problem',
47
48
  messages: {
48
- legacyElevation: "Elevations can be sourced from the global theme using the token function made of both a background and shadow. Use \"card\" for card elevations, and \"overlay\" for anything else that should appear elevated.\n\n{{example}}\n",
49
- hardCodedColor: "Colors can be sourced from the global theme using the token function.\n\n```\nimport { token } from '@atlaskit/tokens';\n\ntoken('color.background.blanket');\n```\n"
49
+ legacyElevation: "Elevations can be sourced from the global theme using the token function made of both a background and shadow. Use \"card\" for card elevations, and \"overlay\" for anything else that should appear elevated.",
50
+ hardCodedColor: "Colors can be sourced from the global theme using the token function."
50
51
  }
51
52
  },
52
53
  create: function create(context) {
@@ -192,6 +193,6 @@ var rule = {
192
193
  }
193
194
  };
194
195
  }
195
- };
196
+ });
196
197
  var _default = rule;
197
198
  exports.default = _default;
@@ -118,6 +118,11 @@ var rule = (0, _createRule.createRule)({
118
118
  });
119
119
  return;
120
120
  }
121
+
122
+ // Don't report on CSS calc function
123
+ if (node.value.type === 'Literal' && (0, _utils.isCalc)(node.value.value)) {
124
+ return;
125
+ }
121
126
  var propertyName = node.key.name;
122
127
  var isFontFamily = /fontFamily/.test(propertyName);
123
128
  var value = (0, _utils.getValue)(node.value, context);
@@ -139,6 +144,11 @@ var rule = (0, _createRule.createRule)({
139
144
  if (values.length === 1 || isFontFamily) {
140
145
  var _values = (0, _slicedToArray2.default)(values, 1),
141
146
  _value = _values[0];
147
+
148
+ // Do not report or suggest a token to replace `0`
149
+ if ((0, _utils.isZero)(_value)) {
150
+ return;
151
+ }
142
152
  var pixelValue = isFontFamily ? _value : (0, _utils.emToPixels)(_value, fontSize);
143
153
  return context.report({
144
154
  node: node,
@@ -170,17 +180,22 @@ var rule = (0, _createRule.createRule)({
170
180
  * estree node.
171
181
  *
172
182
  * @example
173
- * { padding: '8px 0px' } // two values we don't try and apply the fixer
183
+ * { padding: '8px 0px' }
174
184
  */
175
185
  values.forEach(function (val, index) {
176
186
  var pixelValue = (0, _utils.emToPixels)(val, fontSize);
187
+
188
+ // Do not report or suggest a token to replace `0`
189
+ if ((0, _utils.isZero)(val) || val === 'auto') {
190
+ return;
191
+ }
177
192
  context.report({
178
193
  node: node,
179
194
  messageId: 'noRawSpacingValues',
180
195
  data: {
181
196
  payload: "".concat(propertyName, ":").concat(pixelValue)
182
197
  },
183
- fix: index === 0 ? function (fixer) {
198
+ fix: function fix(fixer) {
184
199
  var allResolvableValues = values.every(function (value) {
185
200
  return !Number.isNaN((0, _utils.emToPixels)(value, fontSize));
186
201
  });
@@ -189,6 +204,8 @@ var rule = (0, _createRule.createRule)({
189
204
  }
190
205
  var valuesWithTokenReplacement = values.filter(function (value) {
191
206
  return (0, _utils.findTokenNameByPropertyValue)(propertyName, value);
207
+ }).filter(function (value) {
208
+ return value !== 0;
192
209
  });
193
210
  if (valuesWithTokenReplacement.length === 0) {
194
211
  // all values could be replaceable but that just means they're numeric
@@ -211,12 +228,16 @@ var rule = (0, _createRule.createRule)({
211
228
  return null;
212
229
  }
213
230
  return (!tokenNode && ruleConfig.applyImport ? [(0, _utils.insertTokensImport)(fixer)] : []).concat([fixer.replaceText(node.value, "`".concat(values.map(function (value, index) {
231
+ if ((0, _utils.isZero)(value)) {
232
+ return originalValues[index];
233
+ }
214
234
  var pixelValue = (0, _utils.emToPixels)(value, fontSize);
215
235
  var pixelValueString = "".concat(pixelValue, "px");
216
236
  // if there is a token we take it, otherwise we go with the original value
237
+
217
238
  return (0, _utils.findTokenNameByPropertyValue)(propertyName, value) ? "${".concat((0, _utils.getTokenNodeForValue)(propertyName, pixelValueString), "}") : originalValues[index];
218
239
  }).join(' '), "`"))]);
219
- } : undefined
240
+ }
220
241
  });
221
242
  });
222
243
  }
@@ -225,7 +246,7 @@ var rule = (0, _createRule.createRule)({
225
246
  // CSSTemplateLiteral and StyledTemplateLiteral
226
247
  // const cssTemplateLiteral = css`color: red; padding: 12px`;
227
248
  // const styledTemplateLiteral = styled.p`color: red; padding: 8px`;
228
- 'TaggedTemplateExpression[tag.name="css"],TaggedTemplateExpression[tag.object.name="styled"]': function TaggedTemplateExpressionTagNameCssTaggedTemplateExpressionTagObjectNameStyled(node) {
249
+ 'TaggedTemplateExpression[tag.name="css"],TaggedTemplateExpression[tag.object.name="styled"],TaggedTemplateExpression[tag.callee.name="styled"]': function TaggedTemplateExpressionTagNameCssTaggedTemplateExpressionTagObjectNameStyledTaggedTemplateExpressionTagCalleeNameStyled(node) {
229
250
  if (node.type !== 'TaggedTemplateExpression') {
230
251
  return;
231
252
  }
@@ -282,17 +303,13 @@ var rule = (0, _createRule.createRule)({
282
303
  // if the value is already valid, nothing to report or replace
283
304
  return originalValue;
284
305
  }
285
- if (isNaN(numericOrNanValue) && !isFontFamily) {
286
- // this can be either a weird expression or a fontsize declaration
287
306
 
288
- // we can't replace a NaN but we can alert what the offending value is
289
- context.report({
290
- node: node,
291
- messageId: 'noRawSpacingValues',
292
- data: {
293
- payload: "".concat(propertyName, ":").concat(originalValue)
294
- }
295
- });
307
+ // do not replace 0 with tokens
308
+ if ((0, _utils.isZero)(pxValue) || pxValue === 'auto') {
309
+ return originalValue;
310
+ }
311
+ if (isNaN(numericOrNanValue) && !isFontFamily) {
312
+ // do not report if we have nothing to replace with
296
313
  return originalValue;
297
314
  }
298
315
 
@@ -15,9 +15,9 @@ exports.getTokenNodeForValue = getTokenNodeForValue;
15
15
  exports.getTokenReplacement = getTokenReplacement;
16
16
  exports.getValueFromShorthand = exports.getValue = void 0;
17
17
  exports.insertTokensImport = insertTokensImport;
18
- exports.isSpacingProperty = void 0;
18
+ exports.isSpacingProperty = exports.isCalc = void 0;
19
19
  exports.isTokenValueString = isTokenValueString;
20
- exports.onlyScaleTokens = exports.isValidSpacingValue = exports.isTypographyProperty = void 0;
20
+ exports.onlyScaleTokens = exports.isZero = exports.isValidSpacingValue = exports.isTypographyProperty = void 0;
21
21
  exports.processCssNode = processCssNode;
22
22
  exports.removePixelSuffix = void 0;
23
23
  exports.shouldAnalyzeProperty = shouldAnalyzeProperty;
@@ -292,12 +292,11 @@ var emToPixels = function emToPixels(value, fontSize) {
292
292
  return value;
293
293
  };
294
294
  exports.emToPixels = emToPixels;
295
- var percentageOrEm = /(%$)|(\d+em$)/;
295
+ var percentageOrEmOrAuto = /(%$)|(\d+em$)|(auto$)/;
296
296
  var removePixelSuffix = function removePixelSuffix(value) {
297
297
  var isString = typeof value === 'string';
298
-
299
298
  // @ts-ignore This shouldn't be a type error but CI is complaining
300
- if (isString && percentageOrEm.test(value)) {
299
+ if (isString && percentageOrEmOrAuto.test(value)) {
301
300
  return value;
302
301
  }
303
302
 
@@ -305,7 +304,7 @@ var removePixelSuffix = function removePixelSuffix(value) {
305
304
  return Number(isString ? value.replace('px', '') : value);
306
305
  };
307
306
  exports.removePixelSuffix = removePixelSuffix;
308
- var invalidSpacingUnitRegex = /(%$)|(\d+rem$)|(^calc)|(vw$)|(vh$)/;
307
+ var invalidSpacingUnitRegex = /(%$)|(\d+rem$)|(vw$)|(vh$)/;
309
308
  var isValidSpacingValue = function isValidSpacingValue(value, fontSize) {
310
309
  if (typeof value === 'string') {
311
310
  if (invalidSpacingUnitRegex.test(value)) {
@@ -324,9 +323,33 @@ var isValidSpacingValue = function isValidSpacingValue(value, fontSize) {
324
323
  }
325
324
  return true;
326
325
  };
326
+ exports.isValidSpacingValue = isValidSpacingValue;
327
+ var calcRegex = /(^calc)/;
328
+ var isCalc = function isCalc(value) {
329
+ if (typeof value === 'string') {
330
+ if (calcRegex.test(value)) {
331
+ return true;
332
+ }
333
+ }
334
+ return false;
335
+ };
336
+ exports.isCalc = isCalc;
337
+ var isZero = function isZero(value) {
338
+ if (typeof value === 'string') {
339
+ if (value === '0px' || value === '0') {
340
+ return true;
341
+ }
342
+ }
343
+ if (typeof value === 'number') {
344
+ if (value === 0) {
345
+ return true;
346
+ }
347
+ }
348
+ return false;
349
+ };
327
350
 
328
351
  // convert line-height to lineHeight
329
- exports.isValidSpacingValue = isValidSpacingValue;
352
+ exports.isZero = isZero;
330
353
  var convertHyphenatedNameToCamelCase = function convertHyphenatedNameToCamelCase(prop) {
331
354
  return prop.replace(/-./g, function (m) {
332
355
  return m[1].toUpperCase();
@@ -5,18 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _eslintCodemodUtils = require("eslint-codemod-utils");
8
+ var _createRule = require("../utils/create-rule");
8
9
  var _jsx = require("../utils/jsx");
9
10
  var elements = ['AkButton', 'AKButton', 'Button', 'MenuItem', 'ButtonItem', 'CustomItem', 'CustomThemeButton', 'LoadingButton', 'BreadcrumbsItem'];
10
11
  var elementsIconProps = ['iconBefore', 'iconAfter', 'icon'];
11
- var rule = {
12
+ var rule = (0, _createRule.createLintRule)({
12
13
  meta: {
14
+ name: 'icon-label',
13
15
  fixable: 'code',
14
16
  type: 'suggestion',
15
17
  docs: {
16
- url: 'http://go/adsc/icon/usage#accessibility-guidelines',
17
18
  description: 'Enforces accessible usage of icon labels when composed with Atlassian Design System components.',
18
- // TODO: Move to createRule() api
19
- // @ts-expect-error
20
19
  recommended: 'warn'
21
20
  },
22
21
  messages: {
@@ -117,6 +116,6 @@ var rule = {
117
116
  })
118
117
  };
119
118
  }
120
- };
119
+ });
121
120
  var _default = rule;
122
121
  exports.default = _default;
@@ -5,13 +5,15 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _eslintCodemodUtils = require("eslint-codemod-utils");
8
+ var _createRule = require("../utils/create-rule");
8
9
  var _paths = require("./paths");
9
- var rule = {
10
+ var rule = (0, _createRule.createLintRule)({
10
11
  meta: {
12
+ name: 'no-banned-imports',
11
13
  type: 'problem',
12
14
  docs: {
13
15
  description: 'Disallow importing banned modules.',
14
- recommended: true
16
+ recommended: 'error'
15
17
  },
16
18
  messages: {
17
19
  path: "The '{{importSource}}' import is restricted from being used. {{customMessage}}"
@@ -45,6 +47,6 @@ var rule = {
45
47
  ExportDefaultDeclaration: checkNode
46
48
  };
47
49
  }
48
- };
50
+ });
49
51
  var _default = rule;
50
52
  exports.default = _default;
@@ -39,7 +39,7 @@ var rule = (0, _createRule.createRule)({
39
39
  type: 'suggestion',
40
40
  docs: {
41
41
  description: 'Disallow using deprecated APIs.',
42
- recommended: 'warn'
42
+ recommended: 'error'
43
43
  },
44
44
  messages: {
45
45
  noDeprecatedJSXAttributes: 'The JSX attribute {{propName}} has been deprecated.'
@@ -7,11 +7,13 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = void 0;
8
8
  var _renameMapping = _interopRequireDefault(require("@atlaskit/tokens/rename-mapping"));
9
9
  var _tokenIds = require("@atlaskit/tokens/token-ids");
10
- var rule = {
10
+ var _createRule = require("../utils/create-rule");
11
+ var rule = (0, _createRule.createLintRule)({
11
12
  meta: {
13
+ name: 'no-deprecated-design-token-usage',
12
14
  docs: {
13
15
  description: 'Disallow using deprecated design tokens.',
14
- recommended: false
16
+ recommended: 'warn'
15
17
  },
16
18
  fixable: 'code',
17
19
  type: 'problem',
@@ -58,6 +60,6 @@ var rule = {
58
60
  }
59
61
  };
60
62
  }
61
- };
63
+ });
62
64
  var _default = rule;
63
65
  exports.default = _default;
@@ -52,7 +52,7 @@ var rule = (0, _createRule.createRule)({
52
52
  type: 'suggestion',
53
53
  docs: {
54
54
  description: 'Disallow importing deprecated modules.',
55
- recommended: 'warn'
55
+ recommended: 'error'
56
56
  },
57
57
  messages: {
58
58
  pathWithCustomMessage: "'{{importSource}}' import is restricted from being used. {{customMessage}}",
@@ -5,10 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _eslintCodemodUtils = require("eslint-codemod-utils");
8
- var rule = {
8
+ var _createRule = require("../utils/create-rule");
9
+ var rule = (0, _createRule.createLintRule)({
9
10
  meta: {
11
+ name: 'no-margin',
10
12
  type: 'problem',
11
13
  docs: {
14
+ recommended: false,
12
15
  description: 'Disallow using the margin CSS property.'
13
16
  },
14
17
  messages: {
@@ -78,6 +81,6 @@ var rule = {
78
81
  }
79
82
  };
80
83
  }
81
- };
84
+ });
82
85
  var _default = rule;
83
86
  exports.default = _default;
@@ -9,16 +9,18 @@ var _eslintCodemodUtils = require("eslint-codemod-utils");
9
9
  var _renameMapping = _interopRequireDefault(require("@atlaskit/tokens/rename-mapping"));
10
10
  var _tokenIds = require("@atlaskit/tokens/token-ids");
11
11
  var _tokenNames = _interopRequireDefault(require("@atlaskit/tokens/token-names"));
12
+ var _createRule = require("../utils/create-rule");
12
13
  var _isNode = require("../utils/is-node");
13
14
  var _isToken = require("../utils/is-token");
14
15
  var defaultConfig = {
15
16
  shouldEnforceFallbacks: false
16
17
  };
17
- var rule = {
18
+ var rule = (0, _createRule.createLintRule)({
18
19
  meta: {
20
+ name: 'no-unsafe-design-token-usage',
19
21
  docs: {
20
22
  description: 'Enforces design token usage is statically and locally analyzable.',
21
- recommended: false
23
+ recommended: 'error'
22
24
  },
23
25
  fixable: 'code',
24
26
  type: 'problem',
@@ -173,6 +175,6 @@ var rule = {
173
175
  }
174
176
  };
175
177
  }
176
- };
178
+ });
177
179
  var _default = rule;
178
180
  exports.default = _default;
@@ -5,12 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _eslintCodemodUtils = require("eslint-codemod-utils");
8
+ var _createRule = require("../utils/create-rule");
8
9
  var _utils = require("./utils");
9
10
  var boxDocsUrl = 'https://atlassian.design/components/primitves/box/examples';
10
11
  var inlineDocsUrl = 'https://atlassian.design/components/primitves/inline/examples';
11
12
  var stackDocsUrl = 'https://atlassian.design/components/primitves/stack/examples';
12
- var rule = {
13
+ var rule = (0, _createRule.createLintRule)({
13
14
  meta: {
15
+ name: 'use-primitives',
14
16
  type: 'suggestion',
15
17
  fixable: 'code',
16
18
  docs: {
@@ -104,6 +106,6 @@ var rule = {
104
106
  }
105
107
  };
106
108
  }
107
- };
109
+ });
108
110
  var _default = rule;
109
111
  exports.default = _default;
@@ -7,20 +7,20 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = void 0;
8
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
9
  var _eslintCodemodUtils = require("eslint-codemod-utils");
10
+ var _createRule = require("../utils/create-rule");
10
11
  var _isNode = require("../utils/is-node");
11
12
  var _fixJsx = _interopRequireDefault(require("./fix-jsx"));
12
13
  var _fixVanilla = _interopRequireDefault(require("./fix-vanilla"));
13
14
  var _utils = require("./utils");
14
- /* eslint-disable @atlaskit/design-system/use-visually-hidden */
15
-
16
15
  var THEME_IMPORT_NAMES = ['visuallyHidden', 'assistive'];
17
- var rule = {
16
+ var rule = (0, _createRule.createLintRule)({
18
17
  meta: {
18
+ name: 'use-visually-hidden',
19
19
  type: 'suggestion',
20
20
  fixable: 'code',
21
21
  docs: {
22
22
  description: 'Enforce usage of the visually hidden component.',
23
- recommended: true
23
+ recommended: 'error'
24
24
  },
25
25
  messages: {
26
26
  noDeprecatedUsage: 'Using the export `{{local}}` from `{{import}}` as a mixin is discouraged. Please use `@atlaskit/visually-hidden` instead.',
@@ -166,6 +166,6 @@ var rule = {
166
166
  }
167
167
  };
168
168
  }
169
- };
169
+ });
170
170
  var _default = rule;
171
171
  exports.default = _default;
@@ -3,9 +3,29 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createRule = void 0;
6
+ exports.createRule = exports.createLintRule = void 0;
7
7
  var _utils = require("@typescript-eslint/utils");
8
+ /**
9
+ * We are moving to our own small abstraction to create a lint rule that we have the power
10
+ * to change and mold to our own needs.
11
+ *
12
+ * @see createLintRule
13
+ *
14
+ * @private
15
+ * @deprecated
16
+ */
8
17
  var createRule = _utils.ESLintUtils.RuleCreator(function (name) {
9
- return "https://atlassian.design/components/eslint-plugin-design-system/examples#".concat(name);
18
+ return "https://atlassian.design/components/eslint-plugin-design-system/usage#".concat(name);
10
19
  });
11
- exports.createRule = createRule;
20
+ exports.createRule = createRule;
21
+ /**
22
+ * Tiny wrapped over the ESLint rule module type that ensures
23
+ * there is a docs link to our ESLint plugin documentation page,
24
+ * as well as improving type support.
25
+ */
26
+ var createLintRule = function createLintRule(rule) {
27
+ var url = "https://atlassian.design/components/eslint-plugin-design-system/usage#".concat(rule.meta.name);
28
+ rule.meta.docs.url = url;
29
+ return rule;
30
+ };
31
+ exports.createLintRule = createLintRule;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/eslint-plugin-design-system",
3
- "version": "4.20.0",
3
+ "version": "5.0.1",
4
4
  "sideEffects": false
5
5
  }
@@ -1,15 +1,18 @@
1
1
  /**
2
2
  * THIS FILE WAS CREATED VIA CODEGEN DO NOT MODIFY {@see http://go/af-codegen}
3
- * @codegen <<SignedSource::bd61b874ee0323855e0ad920b54e84cc>>
3
+ * @codegen <<SignedSource::b3d2f24d8d37a87fc2bbd964dfdcb87c>>
4
4
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
5
5
  */
6
6
  export default {
7
7
  plugins: ['@atlaskit/design-system'],
8
8
  rules: {
9
+ '@atlaskit/design-system/ensure-design-token-usage': 'error',
9
10
  '@atlaskit/design-system/icon-label': 'warn',
10
11
  '@atlaskit/design-system/no-banned-imports': 'error',
11
- '@atlaskit/design-system/no-deprecated-apis': 'warn',
12
- '@atlaskit/design-system/no-deprecated-imports': 'warn',
12
+ '@atlaskit/design-system/no-deprecated-apis': 'error',
13
+ '@atlaskit/design-system/no-deprecated-design-token-usage': 'warn',
14
+ '@atlaskit/design-system/no-deprecated-imports': 'error',
15
+ '@atlaskit/design-system/no-unsafe-design-token-usage': 'error',
13
16
  '@atlaskit/design-system/use-visually-hidden': 'error'
14
17
  }
15
18
  };