@atlaskit/eslint-plugin-design-system 4.19.1 → 5.0.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.
Files changed (52) 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/utils.js +1 -1
  7. package/dist/cjs/rules/icon-label/index.js +4 -5
  8. package/dist/cjs/rules/no-banned-imports/index.js +5 -3
  9. package/dist/cjs/rules/no-deprecated-apis/index.js +1 -1
  10. package/dist/cjs/rules/no-deprecated-design-token-usage/index.js +5 -3
  11. package/dist/cjs/rules/no-deprecated-imports/index.js +1 -1
  12. package/dist/cjs/rules/no-margin/index.js +5 -2
  13. package/dist/cjs/rules/no-unsafe-design-token-usage/index.js +5 -3
  14. package/dist/cjs/rules/use-primitives/index.js +4 -2
  15. package/dist/cjs/rules/use-visually-hidden/index.js +5 -5
  16. package/dist/cjs/rules/utils/create-rule.js +23 -3
  17. package/dist/cjs/version.json +1 -1
  18. package/dist/es2019/presets/recommended.codegen.js +6 -3
  19. package/dist/es2019/rules/ensure-design-token-usage/index.js +7 -16
  20. package/dist/es2019/rules/ensure-design-token-usage-spacing/utils.js +1 -1
  21. package/dist/es2019/rules/icon-label/index.js +4 -5
  22. package/dist/es2019/rules/no-banned-imports/index.js +5 -3
  23. package/dist/es2019/rules/no-deprecated-apis/index.js +1 -1
  24. package/dist/es2019/rules/no-deprecated-design-token-usage/index.js +5 -3
  25. package/dist/es2019/rules/no-deprecated-imports/index.js +1 -1
  26. package/dist/es2019/rules/no-margin/index.js +5 -2
  27. package/dist/es2019/rules/no-unsafe-design-token-usage/index.js +5 -3
  28. package/dist/es2019/rules/use-primitives/index.js +4 -2
  29. package/dist/es2019/rules/use-visually-hidden/index.js +5 -5
  30. package/dist/es2019/rules/utils/create-rule.js +20 -1
  31. package/dist/es2019/version.json +1 -1
  32. package/dist/esm/presets/recommended.codegen.js +6 -3
  33. package/dist/esm/rules/ensure-design-token-usage/index.js +7 -6
  34. package/dist/esm/rules/ensure-design-token-usage-spacing/utils.js +1 -1
  35. package/dist/esm/rules/icon-label/index.js +4 -5
  36. package/dist/esm/rules/no-banned-imports/index.js +5 -3
  37. package/dist/esm/rules/no-deprecated-apis/index.js +1 -1
  38. package/dist/esm/rules/no-deprecated-design-token-usage/index.js +5 -3
  39. package/dist/esm/rules/no-deprecated-imports/index.js +1 -1
  40. package/dist/esm/rules/no-margin/index.js +5 -2
  41. package/dist/esm/rules/no-unsafe-design-token-usage/index.js +5 -3
  42. package/dist/esm/rules/use-primitives/index.js +4 -2
  43. package/dist/esm/rules/use-visually-hidden/index.js +5 -5
  44. package/dist/esm/rules/utils/create-rule.js +21 -2
  45. package/dist/esm/version.json +1 -1
  46. package/dist/types/index.codegen.d.ts +3 -0
  47. package/dist/types/presets/recommended.codegen.d.ts +4 -1
  48. package/dist/types/rules/icon-label/index.d.ts +1 -2
  49. package/dist/types/rules/no-banned-imports/index.d.ts +1 -2
  50. package/dist/types/rules/use-primitives/index.d.ts +1 -2
  51. package/dist/types/rules/utils/create-rule.d.ts +43 -0
  52. 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.0
4
+
5
+ ### Major Changes
6
+
7
+ - [`b910bbe6130`](https://bitbucket.org/atlassian/atlassian-frontend/commits/b910bbe6130) - The following rules are now included in the recommended preset as errors:
8
+
9
+ - ensure-design-token-usage
10
+ - no-deprecated-apis
11
+ - no-deprecated-imports
12
+ - no-unsafe-design-token-usage
13
+
14
+ The following rules are now included in the recommended preset as warnings:
15
+
16
+ - no-deprecated-design-token-usage
17
+
18
+ ### Minor Changes
19
+
20
+ - [`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.
21
+
22
+ ## 4.20.0
23
+
24
+ ### Minor Changes
25
+
26
+ - [`fa50be73bfe`](https://bitbucket.org/atlassian/atlassian-frontend/commits/fa50be73bfe) - [ux] Spacing rule now also looks at and attempts to parse additional properties.
27
+
3
28
  ## 4.19.1
4
29
 
5
30
  ### Patch 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;
@@ -28,7 +28,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
28
28
  var _eslintCodemodUtils = require("eslint-codemod-utils");
29
29
  var _tokensRaw = require("@atlaskit/tokens/tokens-raw");
30
30
  var typographyProperties = ['fontSize', 'fontWeight', 'fontFamily', 'lineHeight'];
31
- var properties = ['padding', 'paddingBlock', 'paddingInline', 'paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd', 'marginLeft', 'marginTop', 'marginRight', 'marginBottom', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd', 'margin', 'gap', 'rowGap', 'gridRowGap', 'columnGap', 'gridColumnGap'];
31
+ var properties = ['padding', 'paddingBlock', 'paddingInline', 'paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd', 'marginLeft', 'marginTop', 'marginRight', 'marginBottom', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd', 'margin', 'gap', 'rowGap', 'gridRowGap', 'columnGap', 'gridColumnGap', 'top', 'left', 'right', 'bottom', 'inlineStart', 'inlineEnd', 'blockStart', 'blockEnd', 'outline-offset'];
32
32
  /**
33
33
  * Currently we have a wide range of experimental spacing tokens that we are testing.
34
34
  * We only want transforms to apply to the stable scale values, not the rest.
@@ -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.19.1",
3
+ "version": "5.0.0",
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
  };
@@ -1,4 +1,5 @@
1
1
  import { isNodeOfType } from 'eslint-codemod-utils';
2
+ import { createLintRule } from '../utils/create-rule';
2
3
  import { getIsException } from '../utils/get-is-exception';
3
4
  import { includesHardCodedColor, isHardCodedColor, isLegacyColor, isLegacyNamedColor } from '../utils/is-color';
4
5
  import { isLegacyElevation } from '../utils/is-elevation';
@@ -19,29 +20,19 @@ const getTokenSuggestion = (node, reference, config) => [{
19
20
  const filterSuggestion = ({
20
21
  shouldReturnSuggestion
21
22
  }) => shouldReturnSuggestion;
22
- const rule = {
23
+ const rule = createLintRule({
23
24
  meta: {
24
- // We need to upgrade the version of ESLint.
25
+ name: 'ensure-design-token-usage',
25
26
  hasSuggestions: true,
26
27
  docs: {
27
28
  description: 'Enforces usage of design tokens.',
28
- recommended: false
29
+ recommended: 'error'
29
30
  },
30
31
  fixable: 'code',
31
32
  type: 'problem',
32
33
  messages: {
33
- 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.
34
-
35
- {{example}}
36
- `,
37
- hardCodedColor: `Colors can be sourced from the global theme using the token function.
38
-
39
- \`\`\`
40
- import { token } from '@atlaskit/tokens';
41
-
42
- token('color.background.blanket');
43
- \`\`\`
44
- `
34
+ 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.`,
35
+ hardCodedColor: `Colors can be sourced from the global theme using the token function.`
45
36
  }
46
37
  },
47
38
  create(context) {
@@ -191,5 +182,5 @@ ${' '.repeat(getNodeColumn(node) - 2)}box-shadow: \${token('${elevation.shadow}'
191
182
  }
192
183
  };
193
184
  }
194
- };
185
+ });
195
186
  export default rule;
@@ -1,7 +1,7 @@
1
1
  import { callExpression, identifier, insertAtStartOfFile, insertImportDeclaration, isNodeOfType, literal } from 'eslint-codemod-utils';
2
2
  import { spacing as spacingScale, typography as typographyTokens } from '@atlaskit/tokens/tokens-raw';
3
3
  const typographyProperties = ['fontSize', 'fontWeight', 'fontFamily', 'lineHeight'];
4
- const properties = ['padding', 'paddingBlock', 'paddingInline', 'paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd', 'marginLeft', 'marginTop', 'marginRight', 'marginBottom', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd', 'margin', 'gap', 'rowGap', 'gridRowGap', 'columnGap', 'gridColumnGap'];
4
+ const properties = ['padding', 'paddingBlock', 'paddingInline', 'paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd', 'marginLeft', 'marginTop', 'marginRight', 'marginBottom', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd', 'margin', 'gap', 'rowGap', 'gridRowGap', 'columnGap', 'gridColumnGap', 'top', 'left', 'right', 'bottom', 'inlineStart', 'inlineEnd', 'blockStart', 'blockEnd', 'outline-offset'];
5
5
  /**
6
6
  * Currently we have a wide range of experimental spacing tokens that we are testing.
7
7
  * We only want transforms to apply to the stable scale values, not the rest.
@@ -1,16 +1,15 @@
1
1
  import { isNodeOfType } from 'eslint-codemod-utils';
2
+ import { createLintRule } from '../utils/create-rule';
2
3
  import { findProp } from '../utils/jsx';
3
4
  const elements = ['AkButton', 'AKButton', 'Button', 'MenuItem', 'ButtonItem', 'CustomItem', 'CustomThemeButton', 'LoadingButton', 'BreadcrumbsItem'];
4
5
  const elementsIconProps = ['iconBefore', 'iconAfter', 'icon'];
5
- const rule = {
6
+ const rule = createLintRule({
6
7
  meta: {
8
+ name: 'icon-label',
7
9
  fixable: 'code',
8
10
  type: 'suggestion',
9
11
  docs: {
10
- url: 'http://go/adsc/icon/usage#accessibility-guidelines',
11
12
  description: 'Enforces accessible usage of icon labels when composed with Atlassian Design System components.',
12
- // TODO: Move to createRule() api
13
- // @ts-expect-error
14
13
  recommended: 'warn'
15
14
  },
16
15
  messages: {
@@ -97,5 +96,5 @@ const rule = {
97
96
  }
98
97
  };
99
98
  }
100
- };
99
+ });
101
100
  export default rule;
@@ -1,11 +1,13 @@
1
1
  import { isNodeOfType } from 'eslint-codemod-utils';
2
+ import { createLintRule } from '../utils/create-rule';
2
3
  import { restrictedPaths } from './paths';
3
- const rule = {
4
+ const rule = createLintRule({
4
5
  meta: {
6
+ name: 'no-banned-imports',
5
7
  type: 'problem',
6
8
  docs: {
7
9
  description: 'Disallow importing banned modules.',
8
- recommended: true
10
+ recommended: 'error'
9
11
  },
10
12
  messages: {
11
13
  path: "The '{{importSource}}' import is restricted from being used. {{customMessage}}"
@@ -40,5 +42,5 @@ const rule = {
40
42
  ExportDefaultDeclaration: checkNode
41
43
  };
42
44
  }
43
- };
45
+ });
44
46
  export default rule;
@@ -27,7 +27,7 @@ const rule = createRule({
27
27
  type: 'suggestion',
28
28
  docs: {
29
29
  description: 'Disallow using deprecated APIs.',
30
- recommended: 'warn'
30
+ recommended: 'error'
31
31
  },
32
32
  messages: {
33
33
  noDeprecatedJSXAttributes: 'The JSX attribute {{propName}} has been deprecated.'
@@ -1,10 +1,12 @@
1
1
  import renameMapping from '@atlaskit/tokens/rename-mapping';
2
2
  import { getTokenId } from '@atlaskit/tokens/token-ids';
3
- const rule = {
3
+ import { createLintRule } from '../utils/create-rule';
4
+ const rule = createLintRule({
4
5
  meta: {
6
+ name: 'no-deprecated-design-token-usage',
5
7
  docs: {
6
8
  description: 'Disallow using deprecated design tokens.',
7
- recommended: false
9
+ recommended: 'warn'
8
10
  },
9
11
  fixable: 'code',
10
12
  type: 'problem',
@@ -45,5 +47,5 @@ const rule = {
45
47
  }
46
48
  };
47
49
  }
48
- };
50
+ });
49
51
  export default rule;
@@ -40,7 +40,7 @@ const rule = createRule({
40
40
  type: 'suggestion',
41
41
  docs: {
42
42
  description: 'Disallow importing deprecated modules.',
43
- recommended: 'warn'
43
+ recommended: 'error'
44
44
  },
45
45
  messages: {
46
46
  pathWithCustomMessage: "'{{importSource}}' import is restricted from being used. {{customMessage}}",
@@ -1,8 +1,11 @@
1
1
  import { isNodeOfType } from 'eslint-codemod-utils';
2
- const rule = {
2
+ import { createLintRule } from '../utils/create-rule';
3
+ const rule = createLintRule({
3
4
  meta: {
5
+ name: 'no-margin',
4
6
  type: 'problem',
5
7
  docs: {
8
+ recommended: false,
6
9
  description: 'Disallow using the margin CSS property.'
7
10
  },
8
11
  messages: {
@@ -66,5 +69,5 @@ const rule = {
66
69
  }
67
70
  };
68
71
  }
69
- };
72
+ });
70
73
  export default rule;
@@ -2,16 +2,18 @@ import { isNodeOfType } from 'eslint-codemod-utils';
2
2
  import renameMapping from '@atlaskit/tokens/rename-mapping';
3
3
  import { getTokenId } from '@atlaskit/tokens/token-ids';
4
4
  import tokens from '@atlaskit/tokens/token-names';
5
+ import { createLintRule } from '../utils/create-rule';
5
6
  import { isDecendantOfStyleBlock, isDecendantOfStyleJsxAttribute } from '../utils/is-node';
6
7
  import { isToken } from '../utils/is-token';
7
8
  const defaultConfig = {
8
9
  shouldEnforceFallbacks: false
9
10
  };
10
- const rule = {
11
+ const rule = createLintRule({
11
12
  meta: {
13
+ name: 'no-unsafe-design-token-usage',
12
14
  docs: {
13
15
  description: 'Enforces design token usage is statically and locally analyzable.',
14
- recommended: false
16
+ recommended: 'error'
15
17
  },
16
18
  fixable: 'code',
17
19
  type: 'problem',
@@ -172,5 +174,5 @@ token('color.background.blanket');
172
174
  }
173
175
  };
174
176
  }
175
- };
177
+ });
176
178
  export default rule;
@@ -1,10 +1,12 @@
1
1
  import { isNodeOfType } from 'eslint-codemod-utils';
2
+ import { createLintRule } from '../utils/create-rule';
2
3
  import { primitiveFixer, shouldSuggestBox, shouldSuggestInline, shouldSuggestStack } from './utils';
3
4
  const boxDocsUrl = 'https://atlassian.design/components/primitves/box/examples';
4
5
  const inlineDocsUrl = 'https://atlassian.design/components/primitves/inline/examples';
5
6
  const stackDocsUrl = 'https://atlassian.design/components/primitves/stack/examples';
6
- const rule = {
7
+ const rule = createLintRule({
7
8
  meta: {
9
+ name: 'use-primitives',
8
10
  type: 'suggestion',
9
11
  fixable: 'code',
10
12
  docs: {
@@ -98,5 +100,5 @@ const rule = {
98
100
  }
99
101
  };
100
102
  }
101
- };
103
+ });
102
104
  export default rule;
@@ -1,18 +1,18 @@
1
- /* eslint-disable @atlaskit/design-system/use-visually-hidden */
2
-
3
1
  import { closestOfType, hasImportDeclaration, isNodeOfType } from 'eslint-codemod-utils';
2
+ import { createLintRule } from '../utils/create-rule';
4
3
  import { isStyledObjectNode, isStyledTemplateNode } from '../utils/is-node';
5
4
  import fixJsx from './fix-jsx';
6
5
  import fixVanilla from './fix-vanilla';
7
6
  import { countMatchingKeyValues, getObjectLikeness, makeTemplateLiteralIntoEntries } from './utils';
8
7
  const THEME_IMPORT_NAMES = ['visuallyHidden', 'assistive'];
9
- const rule = {
8
+ const rule = createLintRule({
10
9
  meta: {
10
+ name: 'use-visually-hidden',
11
11
  type: 'suggestion',
12
12
  fixable: 'code',
13
13
  docs: {
14
14
  description: 'Enforce usage of the visually hidden component.',
15
- recommended: true
15
+ recommended: 'error'
16
16
  },
17
17
  messages: {
18
18
  noDeprecatedUsage: 'Using the export `{{local}}` from `{{import}}` as a mixin is discouraged. Please use `@atlaskit/visually-hidden` instead.',
@@ -145,5 +145,5 @@ const rule = {
145
145
  }
146
146
  };
147
147
  }
148
- };
148
+ });
149
149
  export default rule;
@@ -1,2 +1,21 @@
1
1
  import { ESLintUtils } from '@typescript-eslint/utils';
2
- export const createRule = ESLintUtils.RuleCreator(name => `https://atlassian.design/components/eslint-plugin-design-system/examples#${name}`);
2
+ /**
3
+ * We are moving to our own small abstraction to create a lint rule that we have the power
4
+ * to change and mold to our own needs.
5
+ *
6
+ * @see createLintRule
7
+ *
8
+ * @private
9
+ * @deprecated
10
+ */
11
+ export const createRule = ESLintUtils.RuleCreator(name => `https://atlassian.design/components/eslint-plugin-design-system/usage#${name}`);
12
+ /**
13
+ * Tiny wrapped over the ESLint rule module type that ensures
14
+ * there is a docs link to our ESLint plugin documentation page,
15
+ * as well as improving type support.
16
+ */
17
+ export const createLintRule = rule => {
18
+ const url = `https://atlassian.design/components/eslint-plugin-design-system/usage#${rule.meta.name}`;
19
+ rule.meta.docs.url = url;
20
+ return rule;
21
+ };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/eslint-plugin-design-system",
3
- "version": "4.19.1",
3
+ "version": "5.0.0",
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
  };
@@ -1,4 +1,5 @@
1
1
  import { isNodeOfType } from 'eslint-codemod-utils';
2
+ import { createLintRule } from '../utils/create-rule';
2
3
  import { getIsException } from '../utils/get-is-exception';
3
4
  import { includesHardCodedColor, isHardCodedColor, isLegacyColor, isLegacyNamedColor } from '../utils/is-color';
4
5
  import { isLegacyElevation } from '../utils/is-elevation';
@@ -28,19 +29,19 @@ var filterSuggestion = function filterSuggestion(_ref) {
28
29
  var shouldReturnSuggestion = _ref.shouldReturnSuggestion;
29
30
  return shouldReturnSuggestion;
30
31
  };
31
- var rule = {
32
+ var rule = createLintRule({
32
33
  meta: {
33
- // We need to upgrade the version of ESLint.
34
+ name: 'ensure-design-token-usage',
34
35
  hasSuggestions: true,
35
36
  docs: {
36
37
  description: 'Enforces usage of design tokens.',
37
- recommended: false
38
+ recommended: 'error'
38
39
  },
39
40
  fixable: 'code',
40
41
  type: 'problem',
41
42
  messages: {
42
- 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",
43
- 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"
43
+ 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.",
44
+ hardCodedColor: "Colors can be sourced from the global theme using the token function."
44
45
  }
45
46
  },
46
47
  create: function create(context) {
@@ -186,5 +187,5 @@ var rule = {
186
187
  }
187
188
  };
188
189
  }
189
- };
190
+ });
190
191
  export default rule;
@@ -2,7 +2,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import { callExpression, identifier, insertAtStartOfFile, insertImportDeclaration, isNodeOfType, literal } from 'eslint-codemod-utils';
3
3
  import { spacing as spacingScale, typography as typographyTokens } from '@atlaskit/tokens/tokens-raw';
4
4
  var typographyProperties = ['fontSize', 'fontWeight', 'fontFamily', 'lineHeight'];
5
- var properties = ['padding', 'paddingBlock', 'paddingInline', 'paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd', 'marginLeft', 'marginTop', 'marginRight', 'marginBottom', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd', 'margin', 'gap', 'rowGap', 'gridRowGap', 'columnGap', 'gridColumnGap'];
5
+ var properties = ['padding', 'paddingBlock', 'paddingInline', 'paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd', 'marginLeft', 'marginTop', 'marginRight', 'marginBottom', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd', 'margin', 'gap', 'rowGap', 'gridRowGap', 'columnGap', 'gridColumnGap', 'top', 'left', 'right', 'bottom', 'inlineStart', 'inlineEnd', 'blockStart', 'blockEnd', 'outline-offset'];
6
6
  /**
7
7
  * Currently we have a wide range of experimental spacing tokens that we are testing.
8
8
  * We only want transforms to apply to the stable scale values, not the rest.
@@ -1,16 +1,15 @@
1
1
  import { isNodeOfType } from 'eslint-codemod-utils';
2
+ import { createLintRule } from '../utils/create-rule';
2
3
  import { findProp } from '../utils/jsx';
3
4
  var elements = ['AkButton', 'AKButton', 'Button', 'MenuItem', 'ButtonItem', 'CustomItem', 'CustomThemeButton', 'LoadingButton', 'BreadcrumbsItem'];
4
5
  var elementsIconProps = ['iconBefore', 'iconAfter', 'icon'];
5
- var rule = {
6
+ var rule = createLintRule({
6
7
  meta: {
8
+ name: 'icon-label',
7
9
  fixable: 'code',
8
10
  type: 'suggestion',
9
11
  docs: {
10
- url: 'http://go/adsc/icon/usage#accessibility-guidelines',
11
12
  description: 'Enforces accessible usage of icon labels when composed with Atlassian Design System components.',
12
- // TODO: Move to createRule() api
13
- // @ts-expect-error
14
13
  recommended: 'warn'
15
14
  },
16
15
  messages: {
@@ -111,5 +110,5 @@ var rule = {
111
110
  })
112
111
  };
113
112
  }
114
- };
113
+ });
115
114
  export default rule;
@@ -1,11 +1,13 @@
1
1
  import { isNodeOfType } from 'eslint-codemod-utils';
2
+ import { createLintRule } from '../utils/create-rule';
2
3
  import { restrictedPaths } from './paths';
3
- var rule = {
4
+ var rule = createLintRule({
4
5
  meta: {
6
+ name: 'no-banned-imports',
5
7
  type: 'problem',
6
8
  docs: {
7
9
  description: 'Disallow importing banned modules.',
8
- recommended: true
10
+ recommended: 'error'
9
11
  },
10
12
  messages: {
11
13
  path: "The '{{importSource}}' import is restricted from being used. {{customMessage}}"
@@ -39,5 +41,5 @@ var rule = {
39
41
  ExportDefaultDeclaration: checkNode
40
42
  };
41
43
  }
42
- };
44
+ });
43
45
  export default rule;
@@ -30,7 +30,7 @@ var rule = createRule({
30
30
  type: 'suggestion',
31
31
  docs: {
32
32
  description: 'Disallow using deprecated APIs.',
33
- recommended: 'warn'
33
+ recommended: 'error'
34
34
  },
35
35
  messages: {
36
36
  noDeprecatedJSXAttributes: 'The JSX attribute {{propName}} has been deprecated.'
@@ -1,10 +1,12 @@
1
1
  import renameMapping from '@atlaskit/tokens/rename-mapping';
2
2
  import { getTokenId } from '@atlaskit/tokens/token-ids';
3
- var rule = {
3
+ import { createLintRule } from '../utils/create-rule';
4
+ var rule = createLintRule({
4
5
  meta: {
6
+ name: 'no-deprecated-design-token-usage',
5
7
  docs: {
6
8
  description: 'Disallow using deprecated design tokens.',
7
- recommended: false
9
+ recommended: 'warn'
8
10
  },
9
11
  fixable: 'code',
10
12
  type: 'problem',
@@ -51,5 +53,5 @@ var rule = {
51
53
  }
52
54
  };
53
55
  }
54
- };
56
+ });
55
57
  export default rule;
@@ -44,7 +44,7 @@ var rule = createRule({
44
44
  type: 'suggestion',
45
45
  docs: {
46
46
  description: 'Disallow importing deprecated modules.',
47
- recommended: 'warn'
47
+ recommended: 'error'
48
48
  },
49
49
  messages: {
50
50
  pathWithCustomMessage: "'{{importSource}}' import is restricted from being used. {{customMessage}}",
@@ -1,8 +1,11 @@
1
1
  import { isNodeOfType } from 'eslint-codemod-utils';
2
- var rule = {
2
+ import { createLintRule } from '../utils/create-rule';
3
+ var rule = createLintRule({
3
4
  meta: {
5
+ name: 'no-margin',
4
6
  type: 'problem',
5
7
  docs: {
8
+ recommended: false,
6
9
  description: 'Disallow using the margin CSS property.'
7
10
  },
8
11
  messages: {
@@ -72,5 +75,5 @@ var rule = {
72
75
  }
73
76
  };
74
77
  }
75
- };
78
+ });
76
79
  export default rule;
@@ -2,16 +2,18 @@ import { isNodeOfType } from 'eslint-codemod-utils';
2
2
  import renameMapping from '@atlaskit/tokens/rename-mapping';
3
3
  import { getTokenId } from '@atlaskit/tokens/token-ids';
4
4
  import tokens from '@atlaskit/tokens/token-names';
5
+ import { createLintRule } from '../utils/create-rule';
5
6
  import { isDecendantOfStyleBlock, isDecendantOfStyleJsxAttribute } from '../utils/is-node';
6
7
  import { isToken } from '../utils/is-token';
7
8
  var defaultConfig = {
8
9
  shouldEnforceFallbacks: false
9
10
  };
10
- var rule = {
11
+ var rule = createLintRule({
11
12
  meta: {
13
+ name: 'no-unsafe-design-token-usage',
12
14
  docs: {
13
15
  description: 'Enforces design token usage is statically and locally analyzable.',
14
- recommended: false
16
+ recommended: 'error'
15
17
  },
16
18
  fixable: 'code',
17
19
  type: 'problem',
@@ -166,5 +168,5 @@ var rule = {
166
168
  }
167
169
  };
168
170
  }
169
- };
171
+ });
170
172
  export default rule;
@@ -1,10 +1,12 @@
1
1
  import { isNodeOfType } from 'eslint-codemod-utils';
2
+ import { createLintRule } from '../utils/create-rule';
2
3
  import { primitiveFixer, shouldSuggestBox, shouldSuggestInline, shouldSuggestStack } from './utils';
3
4
  var boxDocsUrl = 'https://atlassian.design/components/primitves/box/examples';
4
5
  var inlineDocsUrl = 'https://atlassian.design/components/primitves/inline/examples';
5
6
  var stackDocsUrl = 'https://atlassian.design/components/primitves/stack/examples';
6
- var rule = {
7
+ var rule = createLintRule({
7
8
  meta: {
9
+ name: 'use-primitives',
8
10
  type: 'suggestion',
9
11
  fixable: 'code',
10
12
  docs: {
@@ -98,5 +100,5 @@ var rule = {
98
100
  }
99
101
  };
100
102
  }
101
- };
103
+ });
102
104
  export default rule;
@@ -1,19 +1,19 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
- /* eslint-disable @atlaskit/design-system/use-visually-hidden */
3
-
4
2
  import { closestOfType, hasImportDeclaration, isNodeOfType } from 'eslint-codemod-utils';
3
+ import { createLintRule } from '../utils/create-rule';
5
4
  import { isStyledObjectNode, isStyledTemplateNode } from '../utils/is-node';
6
5
  import fixJsx from './fix-jsx';
7
6
  import fixVanilla from './fix-vanilla';
8
7
  import { countMatchingKeyValues, getObjectLikeness, makeTemplateLiteralIntoEntries } from './utils';
9
8
  var THEME_IMPORT_NAMES = ['visuallyHidden', 'assistive'];
10
- var rule = {
9
+ var rule = createLintRule({
11
10
  meta: {
11
+ name: 'use-visually-hidden',
12
12
  type: 'suggestion',
13
13
  fixable: 'code',
14
14
  docs: {
15
15
  description: 'Enforce usage of the visually hidden component.',
16
- recommended: true
16
+ recommended: 'error'
17
17
  },
18
18
  messages: {
19
19
  noDeprecatedUsage: 'Using the export `{{local}}` from `{{import}}` as a mixin is discouraged. Please use `@atlaskit/visually-hidden` instead.',
@@ -159,5 +159,5 @@ var rule = {
159
159
  }
160
160
  };
161
161
  }
162
- };
162
+ });
163
163
  export default rule;
@@ -1,4 +1,23 @@
1
1
  import { ESLintUtils } from '@typescript-eslint/utils';
2
+ /**
3
+ * We are moving to our own small abstraction to create a lint rule that we have the power
4
+ * to change and mold to our own needs.
5
+ *
6
+ * @see createLintRule
7
+ *
8
+ * @private
9
+ * @deprecated
10
+ */
2
11
  export var createRule = ESLintUtils.RuleCreator(function (name) {
3
- return "https://atlassian.design/components/eslint-plugin-design-system/examples#".concat(name);
4
- });
12
+ return "https://atlassian.design/components/eslint-plugin-design-system/usage#".concat(name);
13
+ });
14
+ /**
15
+ * Tiny wrapped over the ESLint rule module type that ensures
16
+ * there is a docs link to our ESLint plugin documentation page,
17
+ * as well as improving type support.
18
+ */
19
+ export var createLintRule = function createLintRule(rule) {
20
+ var url = "https://atlassian.design/components/eslint-plugin-design-system/usage#".concat(rule.meta.name);
21
+ rule.meta.docs.url = url;
22
+ return rule;
23
+ };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/eslint-plugin-design-system",
3
- "version": "4.19.1",
3
+ "version": "5.0.0",
4
4
  "sideEffects": false
5
5
  }
@@ -19,10 +19,13 @@ export declare const configs: {
19
19
  recommended: {
20
20
  plugins: string[];
21
21
  rules: {
22
+ '@atlaskit/design-system/ensure-design-token-usage': string;
22
23
  '@atlaskit/design-system/icon-label': string;
23
24
  '@atlaskit/design-system/no-banned-imports': string;
24
25
  '@atlaskit/design-system/no-deprecated-apis': string;
26
+ '@atlaskit/design-system/no-deprecated-design-token-usage': string;
25
27
  '@atlaskit/design-system/no-deprecated-imports': string;
28
+ '@atlaskit/design-system/no-unsafe-design-token-usage': string;
26
29
  '@atlaskit/design-system/use-visually-hidden': string;
27
30
  };
28
31
  };
@@ -1,16 +1,19 @@
1
1
  declare const _default: {
2
2
  plugins: string[];
3
3
  rules: {
4
+ '@atlaskit/design-system/ensure-design-token-usage': string;
4
5
  '@atlaskit/design-system/icon-label': string;
5
6
  '@atlaskit/design-system/no-banned-imports': string;
6
7
  '@atlaskit/design-system/no-deprecated-apis': string;
8
+ '@atlaskit/design-system/no-deprecated-design-token-usage': string;
7
9
  '@atlaskit/design-system/no-deprecated-imports': string;
10
+ '@atlaskit/design-system/no-unsafe-design-token-usage': string;
8
11
  '@atlaskit/design-system/use-visually-hidden': string;
9
12
  };
10
13
  };
11
14
  /**
12
15
  * THIS FILE WAS CREATED VIA CODEGEN DO NOT MODIFY {@see http://go/af-codegen}
13
- * @codegen <<SignedSource::bd61b874ee0323855e0ad920b54e84cc>>
16
+ * @codegen <<SignedSource::b3d2f24d8d37a87fc2bbd964dfdcb87c>>
14
17
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
15
18
  */
16
19
  export default _default;
@@ -1,3 +1,2 @@
1
- import type { Rule } from 'eslint';
2
- declare const rule: Rule.RuleModule;
1
+ declare const rule: import("eslint").Rule.RuleModule;
3
2
  export default rule;
@@ -1,3 +1,2 @@
1
- import type { Rule } from 'eslint';
2
- declare const rule: Rule.RuleModule;
1
+ declare const rule: import("eslint").Rule.RuleModule;
3
2
  export default rule;
@@ -1,3 +1,2 @@
1
- import type { Rule } from 'eslint';
2
- declare const rule: Rule.RuleModule;
1
+ declare const rule: import("eslint").Rule.RuleModule;
3
2
  export default rule;
@@ -1,2 +1,45 @@
1
1
  import { ESLintUtils } from '@typescript-eslint/utils';
2
+ import type { Rule } from 'eslint';
3
+ /**
4
+ * We are moving to our own small abstraction to create a lint rule that we have the power
5
+ * to change and mold to our own needs.
6
+ *
7
+ * @see createLintRule
8
+ *
9
+ * @private
10
+ * @deprecated
11
+ */
2
12
  export declare const createRule: <TOptions extends readonly unknown[], TMessageIds extends string, TRuleListener extends import("@typescript-eslint/utils/dist/ts-eslint/Rule").RuleListener = import("@typescript-eslint/utils/dist/ts-eslint/Rule").RuleListener>({ name, meta, ...rule }: Readonly<ESLintUtils.RuleWithMetaAndName<TOptions, TMessageIds, TRuleListener>>) => import("@typescript-eslint/utils/dist/ts-eslint/Rule").RuleModule<TMessageIds, TOptions, TRuleListener>;
13
+ export interface LintRule extends Omit<Rule.RuleModule, 'meta'> {
14
+ /**
15
+ * Including this for backwards compat moving from the typescript-eslint util.
16
+ */
17
+ name?: never;
18
+ meta: LintRuleMeta;
19
+ }
20
+ export interface LintRuleMeta extends Omit<Rule.RuleMetaData, 'docs'> {
21
+ /**
22
+ * Name of the rule.
23
+ * Must match the folder it is in exactly else build will throw.
24
+ */
25
+ name: string;
26
+ docs: {
27
+ /**
28
+ * Short description of what this rule does.
29
+ */
30
+ description: string;
31
+ /**
32
+ * If this rule should be in the recommended preset or not.
33
+ * When setting to `"error"` it will mean releasing a breaking change.
34
+ *
35
+ * Set to `false` to exclude it from the recommended preset.
36
+ */
37
+ recommended: 'warn' | 'error' | false;
38
+ };
39
+ }
40
+ /**
41
+ * Tiny wrapped over the ESLint rule module type that ensures
42
+ * there is a docs link to our ESLint plugin documentation page,
43
+ * as well as improving type support.
44
+ */
45
+ export declare const createLintRule: (rule: LintRule) => Rule.RuleModule;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@atlaskit/eslint-plugin-design-system",
3
3
  "description": "The essential plugin for use with the Atlassian Design System.",
4
- "version": "4.19.1",
4
+ "version": "5.0.0",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "publishConfig": {
7
7
  "registry": "https://registry.npmjs.org/"