@atlaskit/eslint-plugin-design-system 9.2.4 → 9.3.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 (95) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +1 -0
  3. package/constellation/index/usage.mdx +1 -0
  4. package/constellation/use-heading/usage.mdx +28 -0
  5. package/dist/cjs/ast-nodes/root.js +32 -0
  6. package/dist/cjs/presets/all.codegen.js +2 -1
  7. package/dist/cjs/rules/index.codegen.js +3 -1
  8. package/dist/cjs/rules/use-heading/config/index.js +15 -0
  9. package/dist/cjs/rules/use-heading/index.js +39 -0
  10. package/dist/cjs/rules/use-heading/transformers/common.js +19 -0
  11. package/dist/cjs/rules/use-heading/transformers/index.js +12 -0
  12. package/dist/cjs/rules/use-heading/transformers/native-elements.js +99 -0
  13. package/dist/cjs/rules/use-primitives/transformers/compiled-styled/index.js +1 -2
  14. package/dist/cjs/rules/use-primitives/transformers/emotion-css/index.js +1 -2
  15. package/dist/cjs/rules/use-primitives/utils/validate-styles.js +10 -3
  16. package/dist/cjs/rules/use-primitives-text/transformers/emphasis-elements.js +1 -2
  17. package/dist/cjs/rules/use-primitives-text/transformers/paragraph-elements.js +2 -3
  18. package/dist/cjs/rules/use-primitives-text/transformers/span-elements.js +1 -2
  19. package/dist/cjs/rules/use-primitives-text/transformers/strong-elements.js +1 -2
  20. package/dist/cjs/rules/use-tokens-space/transformers/style-property/index.js +1 -2
  21. package/dist/cjs/rules/utils/create-rule.js +4 -7
  22. package/dist/es2019/ast-nodes/root.js +34 -0
  23. package/dist/es2019/presets/all.codegen.js +2 -1
  24. package/dist/es2019/rules/index.codegen.js +3 -1
  25. package/dist/es2019/rules/use-heading/config/index.js +9 -0
  26. package/dist/es2019/rules/use-heading/index.js +33 -0
  27. package/dist/es2019/rules/use-heading/transformers/common.js +9 -0
  28. package/dist/es2019/rules/use-heading/transformers/index.js +1 -0
  29. package/dist/es2019/rules/use-heading/transformers/native-elements.js +89 -0
  30. package/dist/es2019/rules/use-primitives/transformers/compiled-styled/index.js +1 -2
  31. package/dist/es2019/rules/use-primitives/transformers/emotion-css/index.js +1 -2
  32. package/dist/es2019/rules/use-primitives/utils/validate-styles.js +10 -3
  33. package/dist/es2019/rules/use-primitives-text/transformers/emphasis-elements.js +1 -2
  34. package/dist/es2019/rules/use-primitives-text/transformers/paragraph-elements.js +2 -3
  35. package/dist/es2019/rules/use-primitives-text/transformers/span-elements.js +1 -2
  36. package/dist/es2019/rules/use-primitives-text/transformers/strong-elements.js +1 -2
  37. package/dist/es2019/rules/use-tokens-space/transformers/style-property/index.js +1 -2
  38. package/dist/es2019/rules/utils/create-rule.js +4 -6
  39. package/dist/esm/ast-nodes/root.js +32 -0
  40. package/dist/esm/presets/all.codegen.js +2 -1
  41. package/dist/esm/rules/index.codegen.js +3 -1
  42. package/dist/esm/rules/use-heading/config/index.js +9 -0
  43. package/dist/esm/rules/use-heading/index.js +33 -0
  44. package/dist/esm/rules/use-heading/transformers/common.js +9 -0
  45. package/dist/esm/rules/use-heading/transformers/index.js +1 -0
  46. package/dist/esm/rules/use-heading/transformers/native-elements.js +89 -0
  47. package/dist/esm/rules/use-primitives/transformers/compiled-styled/index.js +1 -2
  48. package/dist/esm/rules/use-primitives/transformers/emotion-css/index.js +1 -2
  49. package/dist/esm/rules/use-primitives/utils/validate-styles.js +10 -3
  50. package/dist/esm/rules/use-primitives-text/transformers/emphasis-elements.js +1 -2
  51. package/dist/esm/rules/use-primitives-text/transformers/paragraph-elements.js +2 -3
  52. package/dist/esm/rules/use-primitives-text/transformers/span-elements.js +1 -2
  53. package/dist/esm/rules/use-primitives-text/transformers/strong-elements.js +1 -2
  54. package/dist/esm/rules/use-tokens-space/transformers/style-property/index.js +1 -2
  55. package/dist/esm/rules/utils/create-rule.js +4 -6
  56. package/dist/types/ast-nodes/jsx-element.d.ts +2 -2
  57. package/dist/types/ast-nodes/root.d.ts +8 -0
  58. package/dist/types/index.codegen.d.ts +1 -0
  59. package/dist/types/presets/all.codegen.d.ts +2 -1
  60. package/dist/types/rules/ensure-design-token-usage/rule-meta.d.ts +1 -1
  61. package/dist/types/rules/index.codegen.d.ts +1 -0
  62. package/dist/types/rules/use-heading/config/index.d.ts +6 -0
  63. package/dist/types/rules/use-heading/index.d.ts +3 -0
  64. package/dist/types/rules/use-heading/transformers/common.d.ts +9 -0
  65. package/dist/types/rules/use-heading/transformers/index.d.ts +1 -0
  66. package/dist/types/rules/use-heading/transformers/native-elements.d.ts +18 -0
  67. package/dist/types/rules/utils/create-rule.d.ts +1 -37
  68. package/dist/types-ts4.5/ast-nodes/jsx-element.d.ts +2 -2
  69. package/dist/types-ts4.5/ast-nodes/root.d.ts +8 -0
  70. package/dist/types-ts4.5/index.codegen.d.ts +1 -0
  71. package/dist/types-ts4.5/presets/all.codegen.d.ts +2 -1
  72. package/dist/types-ts4.5/rules/ensure-design-token-usage/rule-meta.d.ts +1 -1
  73. package/dist/types-ts4.5/rules/index.codegen.d.ts +1 -0
  74. package/dist/types-ts4.5/rules/use-heading/config/index.d.ts +6 -0
  75. package/dist/types-ts4.5/rules/use-heading/index.d.ts +3 -0
  76. package/dist/types-ts4.5/rules/use-heading/transformers/common.d.ts +9 -0
  77. package/dist/types-ts4.5/rules/use-heading/transformers/index.d.ts +1 -0
  78. package/dist/types-ts4.5/rules/use-heading/transformers/native-elements.d.ts +18 -0
  79. package/dist/types-ts4.5/rules/utils/create-rule.d.ts +1 -37
  80. package/package.json +2 -2
  81. package/dist/cjs/rules/use-primitives/transformers/compiled-styled/upsert-import-declaration.js +0 -37
  82. package/dist/cjs/rules/use-primitives/transformers/emotion-css/upsert-import-declaration.js +0 -37
  83. package/dist/cjs/rules/use-tokens-space/transformers/style-property/upsert-import-declaration.js +0 -37
  84. package/dist/es2019/rules/use-primitives/transformers/compiled-styled/upsert-import-declaration.js +0 -30
  85. package/dist/es2019/rules/use-primitives/transformers/emotion-css/upsert-import-declaration.js +0 -30
  86. package/dist/es2019/rules/use-tokens-space/transformers/style-property/upsert-import-declaration.js +0 -30
  87. package/dist/esm/rules/use-primitives/transformers/compiled-styled/upsert-import-declaration.js +0 -29
  88. package/dist/esm/rules/use-primitives/transformers/emotion-css/upsert-import-declaration.js +0 -29
  89. package/dist/esm/rules/use-tokens-space/transformers/style-property/upsert-import-declaration.js +0 -29
  90. package/dist/types/rules/use-primitives/transformers/compiled-styled/upsert-import-declaration.d.ts +0 -14
  91. package/dist/types/rules/use-primitives/transformers/emotion-css/upsert-import-declaration.d.ts +0 -14
  92. package/dist/types/rules/use-tokens-space/transformers/style-property/upsert-import-declaration.d.ts +0 -14
  93. package/dist/types-ts4.5/rules/use-primitives/transformers/compiled-styled/upsert-import-declaration.d.ts +0 -14
  94. package/dist/types-ts4.5/rules/use-primitives/transformers/emotion-css/upsert-import-declaration.d.ts +0 -14
  95. package/dist/types-ts4.5/rules/use-tokens-space/transformers/style-property/upsert-import-declaration.d.ts +0 -14
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @atlaskit/eslint-plugin-design-system
2
2
 
3
+ ## 9.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#87586](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/87586) [`47d9f5fb1b11`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/47d9f5fb1b11) - Added use-heading rule
8
+
9
+ ### Patch Changes
10
+
11
+ - [#87476](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/87476) [`af296d200ad2`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/af296d200ad2) - Internal refactoring to use `getCreateLintRule` from `@atlaskit/eslint-utils`
12
+ - Updated dependencies
13
+
14
+ ## 9.2.5
15
+
16
+ ### Patch Changes
17
+
18
+ - [#87434](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/87434) [`dda5ca94da13`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/dda5ca94da13) - `use-primitives` - bail on dimension properties that have token call values.
19
+
3
20
  ## 9.2.4
4
21
 
5
22
  ### Patch Changes
package/README.md CHANGED
@@ -74,6 +74,7 @@ module.exports = {
74
74
  | <a href="./src/rules/prefer-primitives/README.md">prefer-primitives</a> | Increase awareness of primitive components via code hints. Strictly used for education purposes and discoverability. To enforce usage please refer to the `use-primitives` rule. | | | |
75
75
  | <a href="./src/rules/use-button-group-label/README.md">use-button-group-label</a> | Ensures button groups are described to assistive technology by a direct label or by another element. | Yes | | Yes |
76
76
  | <a href="./src/rules/use-drawer-label/README.md">use-drawer-label</a> | Encourages to provide accessible name for Atlassian Design System Drawer component. | Yes | | Yes |
77
+ | <a href="./src/rules/use-heading/README.md">use-heading</a> | Encourage the usage of heading components. | | Yes | Yes |
77
78
  | <a href="./src/rules/use-heading-level-in-spotlight-card/README.md">use-heading-level-in-spotlight-card</a> | Inform developers of eventual requirement of `headingLevel` prop in `SpotlightCard` component. The heading level should be the appropriate level according to the surrounding context. | Yes | Yes | |
78
79
  | <a href="./src/rules/use-href-in-link-item/README.md">use-href-in-link-item</a> | Inform developers of eventual requirement of `href` prop in `LinkItem` component. Elements with a `link` role require an `href` attribute for users to properly navigate, particularly those using assistive technologies. If no valid `href` is required for your use case, consider using a `ButtonItem` instead. | Yes | Yes | Yes |
79
80
  | <a href="./src/rules/use-primitives/README.md">use-primitives</a> | Encourage the usage of primitives components. | | Yes | Yes |
@@ -36,6 +36,7 @@ This plugin contains rules that should be used when working with the [Atlassian
36
36
  | <a href="prefer-primitives/usage">prefer-primitives</a> | Increase awareness of primitive components via code hints. Strictly used for education purposes and discoverability. To enforce usage please refer to the `use-primitives` rule. | | | |
37
37
  | <a href="use-button-group-label/usage">use-button-group-label</a> | Ensures button groups are described to assistive technology by a direct label or by another element. | Yes | | Yes |
38
38
  | <a href="use-drawer-label/usage">use-drawer-label</a> | Encourages to provide accessible name for Atlassian Design System Drawer component. | Yes | | Yes |
39
+ | <a href="use-heading/usage">use-heading</a> | Encourage the usage of heading components. | | Yes | Yes |
39
40
  | <a href="use-heading-level-in-spotlight-card/usage">use-heading-level-in-spotlight-card</a> | Inform developers of eventual requirement of `headingLevel` prop in `SpotlightCard` component. The heading level should be the appropriate level according to the surrounding context. | Yes | Yes | |
40
41
  | <a href="use-href-in-link-item/usage">use-href-in-link-item</a> | Inform developers of eventual requirement of `href` prop in `LinkItem` component. Elements with a `link` role require an `href` attribute for users to properly navigate, particularly those using assistive technologies. If no valid `href` is required for your use case, consider using a `ButtonItem` instead. | Yes | Yes | Yes |
41
42
  | <a href="use-primitives/usage">use-primitives</a> | Encourage the usage of primitives components. | | Yes | Yes |
@@ -0,0 +1,28 @@
1
+ # use-heading
2
+
3
+ Using primitives allows you to delete bespoke component code and replace it with ready made solutions made by the Atlassian Design System Team.
4
+
5
+ ## Examples
6
+
7
+ This rule marks code as violations when it can be replaced 1:1 with a heading component.
8
+
9
+ ### Incorrect
10
+
11
+ ```jsx
12
+ <div>
13
+ <h1>text</hi>
14
+ <p>content</p>
15
+ </div>
16
+ ^^^^
17
+ ```
18
+
19
+ ### Correct
20
+
21
+ ```jsx
22
+ <div>
23
+ <Heading size="xlarge">text</Heading>
24
+ <p>content</p>
25
+ </div>
26
+ ```
27
+
28
+ Currently, the rule is extremely defensive, only reporting on `h1`, `h2`, `h3`, `h4`, `h5` and `h6` elements that don't have any props outside of `key`, `id` and `data-testid`. We're only targeting instances that are the first child of their siblings.
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Root = void 0;
7
7
  var _eslintCodemodUtils = require("eslint-codemod-utils");
8
+ var _import = require("./import");
8
9
  /* eslint-disable @repo/internal/react/require-jsdoc */
9
10
 
10
11
  // Little bit unreadable, but better than duplicating the type
@@ -30,5 +31,36 @@ var Root = exports.Root = {
30
31
  },
31
32
  insertImport: function insertImport(root, data, fixer) {
32
33
  return fixer.insertTextBefore(root[0], "".concat((0, _eslintCodemodUtils.insertImportDeclaration)(data.module, data.specifiers), ";\n"));
34
+ },
35
+ upsertNamedImportDeclaration: function upsertNamedImportDeclaration(_ref, context, fixer) {
36
+ var module = _ref.module,
37
+ specifiers = _ref.specifiers;
38
+ // Find any imports that match the packageName
39
+ var root = context.getSourceCode().ast.body;
40
+ var importDeclarations = this.findImportsByModule(root, module);
41
+
42
+ // The named import doesn't exist yet, we can just insert a whole new one
43
+ if (importDeclarations.length === 0) {
44
+ return this.insertImport(root, {
45
+ module: module,
46
+ specifiers: specifiers
47
+ }, fixer);
48
+ }
49
+
50
+ // The import exists so, modify the existing one
51
+ return _import.Import.insertNamedSpecifiers(importDeclarations[0], specifiers, fixer);
52
+ },
53
+ upsertDefaultImportDeclaration: function upsertDefaultImportDeclaration(_ref2, context, fixer) {
54
+ var module = _ref2.module,
55
+ localName = _ref2.localName;
56
+ // Find any imports that match the packageName
57
+ var root = context.getSourceCode().ast.body;
58
+ var importDeclarations = this.findImportsByModule(root, module);
59
+
60
+ // The import already exist exist
61
+ if (importDeclarations.length > 0) {
62
+ return undefined;
63
+ }
64
+ return fixer.insertTextBefore(root[0], "import ".concat(localName, " from '").concat(module, "';\n"));
33
65
  }
34
66
  };
@@ -6,7 +6,7 @@ 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::d95217b658f807294de3c81123068bf1>>
9
+ * @codegen <<SignedSource::2e2cf6c0ecfe1b01f3eb24caa223f09e>>
10
10
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
11
11
  */
12
12
  var _default = exports.default = {
@@ -37,6 +37,7 @@ var _default = exports.default = {
37
37
  '@atlaskit/design-system/prefer-primitives': 'warn',
38
38
  '@atlaskit/design-system/use-button-group-label': 'warn',
39
39
  '@atlaskit/design-system/use-drawer-label': 'warn',
40
+ '@atlaskit/design-system/use-heading': 'warn',
40
41
  '@atlaskit/design-system/use-heading-level-in-spotlight-card': 'warn',
41
42
  '@atlaskit/design-system/use-href-in-link-item': 'warn',
42
43
  '@atlaskit/design-system/use-primitives': 'warn',
@@ -30,6 +30,7 @@ var _noUnsupportedDragAndDropLibraries = _interopRequireDefault(require("./no-un
30
30
  var _preferPrimitives = _interopRequireDefault(require("./prefer-primitives"));
31
31
  var _useButtonGroupLabel = _interopRequireDefault(require("./use-button-group-label"));
32
32
  var _useDrawerLabel = _interopRequireDefault(require("./use-drawer-label"));
33
+ var _useHeading = _interopRequireDefault(require("./use-heading"));
33
34
  var _useHeadingLevelInSpotlightCard = _interopRequireDefault(require("./use-heading-level-in-spotlight-card"));
34
35
  var _useHrefInLinkItem = _interopRequireDefault(require("./use-href-in-link-item"));
35
36
  var _usePrimitives = _interopRequireDefault(require("./use-primitives"));
@@ -39,7 +40,7 @@ var _useTokensTypography = _interopRequireDefault(require("./use-tokens-typograp
39
40
  var _useVisuallyHidden = _interopRequireDefault(require("./use-visually-hidden"));
40
41
  /**
41
42
  * THIS FILE WAS CREATED VIA CODEGEN DO NOT MODIFY {@see http://go/af-codegen}
42
- * @codegen <<SignedSource::d1c25758089a050334359276ede0ca3a>>
43
+ * @codegen <<SignedSource::eb5c94901f711e67446ba88f0630bf76>>
43
44
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
44
45
  */
45
46
  var _default = exports.default = {
@@ -68,6 +69,7 @@ var _default = exports.default = {
68
69
  'prefer-primitives': _preferPrimitives.default,
69
70
  'use-button-group-label': _useButtonGroupLabel.default,
70
71
  'use-drawer-label': _useDrawerLabel.default,
72
+ 'use-heading': _useHeading.default,
71
73
  'use-heading-level-in-spotlight-card': _useHeadingLevelInSpotlightCard.default,
72
74
  'use-href-in-link-item': _useHrefInLinkItem.default,
73
75
  'use-primitives': _usePrimitives.default,
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getConfig = void 0;
7
+ var defaults = {
8
+ patterns: ['native-elements']
9
+ };
10
+ var getConfig = exports.getConfig = function getConfig(overrides) {
11
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
12
+ // start with an empty object, then merge in the defaults, then merge in overrides.
13
+ // The empty object is returned, as well as modified in place
14
+ return Object.assign({}, defaults, overrides);
15
+ };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _createRule = require("../utils/create-rule");
8
+ var _config = require("./config");
9
+ var _transformers = require("./transformers");
10
+ var docsUrl = 'https://atlassian.design/components/heading';
11
+ var rule = (0, _createRule.createLintRule)({
12
+ meta: {
13
+ name: 'use-heading',
14
+ type: 'suggestion',
15
+ fixable: 'code',
16
+ hasSuggestions: true,
17
+ docs: {
18
+ description: 'Encourage the usage of heading components.',
19
+ recommended: false,
20
+ severity: 'warn'
21
+ },
22
+ messages: {
23
+ preferHeading: "This element can be replaced with a \"Heading\" component. See ".concat(docsUrl, " for additional guidance.")
24
+ }
25
+ },
26
+ create: function create(context) {
27
+ var config = (0, _config.getConfig)(context.options[0]);
28
+ return {
29
+ // transforms <h1>...</h1> usages
30
+ 'JSXElement[openingElement.name.name=/^h[0-6]$/]': function JSXElementOpeningElementNameNameH06$(node) {
31
+ return _transformers.NativeElements.lint(node, {
32
+ context: context,
33
+ config: config
34
+ });
35
+ }
36
+ };
37
+ }
38
+ });
39
+ var _default = exports.default = rule;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.allowedAttrs = void 0;
8
+ exports.updateTestIdAttributeFix = updateTestIdAttributeFix;
9
+ var ast = _interopRequireWildcard(require("../../../ast-nodes"));
10
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
11
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
12
+ // Rename data-testid prop to testId if present
13
+ function updateTestIdAttributeFix(node, fixer) {
14
+ var testIdAttr = ast.JSXElement.getAttributeByName(node, 'data-testid');
15
+ if (testIdAttr) {
16
+ return ast.JSXAttribute.updateName(testIdAttr, 'testId', fixer);
17
+ }
18
+ }
19
+ var allowedAttrs = exports.allowedAttrs = ['id', 'data-testid', 'key'];
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "NativeElements", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _nativeElements.NativeElements;
10
+ }
11
+ });
12
+ var _nativeElements = require("./native-elements");
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.NativeElements = void 0;
9
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
+ var _eslintCodemodUtils = require("eslint-codemod-utils");
11
+ var ast = _interopRequireWildcard(require("../../../ast-nodes"));
12
+ var _common = require("./common");
13
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
14
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
+ /* eslint-disable @repo/internal/react/require-jsdoc */
16
+
17
+ var tagSizeMap = {
18
+ h1: 'xlarge',
19
+ h2: 'large',
20
+ h3: 'medium',
21
+ h4: 'small',
22
+ h5: 'xsmall',
23
+ h6: 'xxsmall'
24
+ };
25
+ var NativeElements = exports.NativeElements = {
26
+ lint: function lint(node, _ref) {
27
+ var context = _ref.context,
28
+ config = _ref.config;
29
+ // Check whether all criteria needed to make a transformation are met
30
+ if (!NativeElements._check(node, {
31
+ context: context,
32
+ config: config
33
+ })) {
34
+ return;
35
+ }
36
+ context.report({
37
+ node: node,
38
+ messageId: 'preferHeading',
39
+ suggest: [{
40
+ desc: 'Convert to Heading',
41
+ fix: NativeElements._fix(node, {
42
+ context: context,
43
+ config: config
44
+ })
45
+ }]
46
+ });
47
+ },
48
+ _check: function _check(node, _ref2) {
49
+ var config = _ref2.config;
50
+ if (!config.patterns.includes('native-elements')) {
51
+ return false;
52
+ }
53
+ if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'JSXElement')) {
54
+ return false;
55
+ }
56
+ if (!node.parent) {
57
+ return false;
58
+ }
59
+ var elementName = ast.JSXElement.getName(node);
60
+ if (!Object.keys(tagSizeMap).includes(elementName)) {
61
+ return false;
62
+ }
63
+
64
+ // Element has to be first element of its siblings
65
+ if (!((0, _eslintCodemodUtils.isNodeOfType)(node.parent, 'JSXElement') || (0, _eslintCodemodUtils.isNodeOfType)(node.parent, 'JSXFragment'))) {
66
+ return false;
67
+ }
68
+ var siblings = ast.JSXElement.getChildren(node.parent);
69
+ if (siblings.length > 1) {
70
+ var _siblings$0$range, _node$range, _siblings$0$range2, _node$range2;
71
+ // Only report if element is first child element
72
+ if (((_siblings$0$range = siblings[0].range) === null || _siblings$0$range === void 0 ? void 0 : _siblings$0$range[0]) !== ((_node$range = node.range) === null || _node$range === void 0 ? void 0 : _node$range[0]) || ((_siblings$0$range2 = siblings[0].range) === null || _siblings$0$range2 === void 0 ? void 0 : _siblings$0$range2[1]) !== ((_node$range2 = node.range) === null || _node$range2 === void 0 ? void 0 : _node$range2[1])) {
73
+ return false;
74
+ }
75
+ }
76
+ if (!ast.JSXElement.hasAllowedAttrsOnly(node, _common.allowedAttrs)) {
77
+ return false;
78
+ }
79
+ return true;
80
+ },
81
+ _fix: function _fix(node, _ref3) {
82
+ var context = _ref3.context;
83
+ return function (fixer) {
84
+ // change to default import
85
+ var importFix = ast.Root.upsertDefaultImportDeclaration({
86
+ module: '@atlaskit/heading',
87
+ localName: 'Heading'
88
+ }, context, fixer);
89
+ var elementName = ast.JSXElement.getName(node);
90
+ var elementNameFixes = ast.JSXElement.updateName(node, 'Heading', fixer);
91
+ var size = tagSizeMap[elementName];
92
+ var asAttributeFix = ast.JSXElement.addAttribute(node, 'size', size, fixer);
93
+ var testAttributeFix = (0, _common.updateTestIdAttributeFix)(node, fixer);
94
+ return [importFix].concat((0, _toConsumableArray2.default)(elementNameFixes), [asAttributeFix, testAttributeFix]).filter(function (fix) {
95
+ return Boolean(fix);
96
+ }); // Some of the transformers can return arrays with undefined, so filter them out
97
+ };
98
+ }
99
+ };
@@ -15,7 +15,6 @@ var _convertJsxCallSite = require("./convert-jsx-call-site");
15
15
  var _convertStyledComponentCallToJsx = require("./convert-styled-component-call-to-jsx");
16
16
  var _findValidJsxUsageToTransform = require("./find-valid-jsx-usage-to-transform");
17
17
  var _findValidStyledComponentCall = require("./find-valid-styled-component-call");
18
- var _upsertImportDeclaration = require("./upsert-import-declaration");
19
18
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
20
19
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
20
  /* eslint-disable @repo/internal/react/require-jsdoc */
@@ -105,7 +104,7 @@ var CompiledStyled = exports.CompiledStyled = {
105
104
  if (!calculatedStylesVariableName) {
106
105
  return [];
107
106
  }
108
- var importFixes = (0, _upsertImportDeclaration.upsertImportDeclaration)({
107
+ var importFixes = ast.Root.upsertNamedImportDeclaration({
109
108
  module: '@atlaskit/primitives',
110
109
  specifiers: ['Box', 'xcss']
111
110
  }, context, fixer);
@@ -13,7 +13,6 @@ var _utils = require("../../utils");
13
13
  var _validateStyles = require("../../utils/validate-styles");
14
14
  var _cssToXcss = require("../css-to-xcss");
15
15
  var supported = _interopRequireWildcard(require("./supported"));
16
- var _upsertImportDeclaration = require("./upsert-import-declaration");
17
16
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
18
17
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
19
18
  /* eslint-disable @repo/internal/react/require-jsdoc */
@@ -108,7 +107,7 @@ var EmotionCSS = exports.EmotionCSS = {
108
107
  _fix: function _fix(node, _ref3) {
109
108
  var context = _ref3.context;
110
109
  return function (fixer) {
111
- var importFix = (0, _upsertImportDeclaration.upsertImportDeclaration)({
110
+ var importFix = ast.Root.upsertNamedImportDeclaration({
112
111
  module: '@atlaskit/primitives',
113
112
  specifiers: ['Box', 'xcss']
114
113
  }, context, fixer);
@@ -46,6 +46,7 @@ var validateStyles = exports.validateStyles = function validateStyles(node, conf
46
46
  if (!property) {
47
47
  return false;
48
48
  }
49
+ var isDimensionProperty = !!_cssToXcss.supportedDimensionAttributesMap[property];
49
50
 
50
51
  // Currently, we handle values like `'8px'` (a 'Literal') or `token('space.100')` (a 'CallExpression')
51
52
  if ((0, _eslintCodemodUtils.isNodeOfType)(value, 'Literal')) {
@@ -60,8 +61,15 @@ var validateStyles = exports.validateStyles = function validateStyles(node, conf
60
61
  // If it's a function call, then make sure it's the `token` function (and we have `css-property-with-tokens` enabled)
61
62
 
62
63
  // Short-circuit when token calls are found but pattern is not enabled in config
63
- if (isTokenCall(value) && !config.patterns.includes('css-property-with-tokens')) {
64
- return false;
64
+ if (isTokenCall(value)) {
65
+ if (!config.patterns.includes('css-property-with-tokens')) {
66
+ return false;
67
+ }
68
+
69
+ // Don't attempt to convert `width: token('space.100') -> width: 'size.100'`
70
+ if (isDimensionProperty) {
71
+ return false;
72
+ }
65
73
  }
66
74
 
67
75
  // Bail if it's a function, but that function call is not `tokens('<token>')`
@@ -75,7 +83,6 @@ var validateStyles = exports.validateStyles = function validateStyles(node, conf
75
83
  // Bail if dimension property is found but pattern is not enabled in config
76
84
  // Note: We don't need to exhaustively re-check the key/value pair here. That's already been done above.
77
85
  // This is just to check wether 'dimension-properties' pattern is enabled and can be removed when the pattern is completely rolled out
78
- var isDimensionProperty = !!_cssToXcss.supportedDimensionAttributesMap[property];
79
86
  if (isDimensionProperty && !config.patterns.includes('dimension-properties')) {
80
87
  return false;
81
88
  }
@@ -9,7 +9,6 @@ exports.EmphasisElements = void 0;
9
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
10
  var _eslintCodemodUtils = require("eslint-codemod-utils");
11
11
  var ast = _interopRequireWildcard(require("../../../ast-nodes"));
12
- var _upsertImportDeclaration = require("../../use-primitives/transformers/emotion-css/upsert-import-declaration");
13
12
  var _common = require("./common");
14
13
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
14
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -69,7 +68,7 @@ var EmphasisElements = exports.EmphasisElements = {
69
68
  var context = _ref3.context,
70
69
  config = _ref3.config;
71
70
  return function (fixer) {
72
- var importFix = (0, _upsertImportDeclaration.upsertImportDeclaration)({
71
+ var importFix = ast.Root.upsertNamedImportDeclaration({
73
72
  module: '@atlaskit/primitives',
74
73
  specifiers: ['Text']
75
74
  }, context, fixer);
@@ -9,7 +9,6 @@ exports.ParagraphElements = void 0;
9
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
10
  var _eslintCodemodUtils = require("eslint-codemod-utils");
11
11
  var ast = _interopRequireWildcard(require("../../../ast-nodes"));
12
- var _upsertImportDeclaration = require("../../use-primitives/transformers/emotion-css/upsert-import-declaration");
13
12
  var _common = require("./common");
14
13
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
14
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -162,7 +161,7 @@ var ParagraphElements = exports.ParagraphElements = {
162
161
  var context = _ref3.context,
163
162
  config = _ref3.config;
164
163
  return function (fixer) {
165
- var importFix = (0, _upsertImportDeclaration.upsertImportDeclaration)({
164
+ var importFix = ast.Root.upsertNamedImportDeclaration({
166
165
  module: '@atlaskit/primitives',
167
166
  specifiers: ['Text']
168
167
  }, context, fixer);
@@ -183,7 +182,7 @@ var ParagraphElements = exports.ParagraphElements = {
183
182
  if (!(0, _eslintCodemodUtils.isNodeOfType)(node.parent, 'JSXElement') || !node.parent.closingElement) {
184
183
  return [];
185
184
  }
186
- var importFix = (0, _upsertImportDeclaration.upsertImportDeclaration)({
185
+ var importFix = ast.Root.upsertNamedImportDeclaration({
187
186
  module: '@atlaskit/primitives',
188
187
  specifiers: ['Text', 'Stack']
189
188
  }, context, fixer);
@@ -9,7 +9,6 @@ exports.SpanElements = void 0;
9
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
10
  var _eslintCodemodUtils = require("eslint-codemod-utils");
11
11
  var ast = _interopRequireWildcard(require("../../../ast-nodes"));
12
- var _upsertImportDeclaration = require("../../use-primitives/transformers/emotion-css/upsert-import-declaration");
13
12
  var _common = require("./common");
14
13
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
14
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -74,7 +73,7 @@ var SpanElements = exports.SpanElements = {
74
73
  var context = _ref3.context,
75
74
  config = _ref3.config;
76
75
  return function (fixer) {
77
- var importFix = (0, _upsertImportDeclaration.upsertImportDeclaration)({
76
+ var importFix = ast.Root.upsertNamedImportDeclaration({
78
77
  module: '@atlaskit/primitives',
79
78
  specifiers: ['Text']
80
79
  }, context, fixer);
@@ -9,7 +9,6 @@ exports.StrongElements = void 0;
9
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
10
  var _eslintCodemodUtils = require("eslint-codemod-utils");
11
11
  var ast = _interopRequireWildcard(require("../../../ast-nodes"));
12
- var _upsertImportDeclaration = require("../../use-primitives/transformers/emotion-css/upsert-import-declaration");
13
12
  var _common = require("./common");
14
13
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
14
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -69,7 +68,7 @@ var StrongElements = exports.StrongElements = {
69
68
  var context = _ref3.context,
70
69
  config = _ref3.config;
71
70
  return function (fixer) {
72
- var importFix = (0, _upsertImportDeclaration.upsertImportDeclaration)({
71
+ var importFix = ast.Root.upsertNamedImportDeclaration({
73
72
  module: '@atlaskit/primitives',
74
73
  specifiers: ['Text']
75
74
  }, context, fixer);
@@ -11,7 +11,6 @@ var ast = _interopRequireWildcard(require("../../../../ast-nodes"));
11
11
  var _utils = require("../../utils");
12
12
  var _styleMap = require("./style-map");
13
13
  var _supported = _interopRequireDefault(require("./supported"));
14
- var _upsertImportDeclaration = require("./upsert-import-declaration");
15
14
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
16
15
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
16
  /* eslint-disable @repo/internal/react/require-jsdoc */
@@ -116,7 +115,7 @@ var StyleProperty = exports.StyleProperty = {
116
115
  */
117
116
  _fix: function _fix(ref, context) {
118
117
  return function (fixer) {
119
- var importFix = (0, _upsertImportDeclaration.upsertImportDeclaration)({
118
+ var importFix = ast.Root.upsertNamedImportDeclaration({
120
119
  module: '@atlaskit/tokens',
121
120
  specifiers: ['token']
122
121
  }, context, fixer);
@@ -5,8 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createRule = exports.createLintRule = void 0;
7
7
  var _utils = require("@typescript-eslint/utils");
8
- // eslint-disable-next-line import/no-extraneous-dependencies
9
-
8
+ var _createRule = require("@atlaskit/eslint-utils/create-rule");
10
9
  /**
11
10
  * We are moving to our own small abstraction to create a lint rule that we have the power
12
11
  * to change and mold to our own needs.
@@ -19,16 +18,14 @@ var _utils = require("@typescript-eslint/utils");
19
18
  var createRule = exports.createRule = _utils.ESLintUtils.RuleCreator(function (name) {
20
19
  return getRuleUrl(name);
21
20
  });
21
+
22
22
  /**
23
23
  * Tiny wrapped over the ESLint rule module type that ensures
24
24
  * there is a docs link to our ESLint plugin documentation page,
25
25
  * as well as improving type support.
26
26
  */
27
- var createLintRule = exports.createLintRule = function createLintRule(rule) {
28
- rule.meta.docs.url = getRuleUrl(rule.meta.name);
29
- return rule;
30
- };
27
+ var createLintRule = exports.createLintRule = (0, _createRule.getCreateLintRule)(getRuleUrl);
31
28
  function getRuleUrl(ruleName) {
32
- var name = ruleName.replace('/', '-'); // If it's a nested rule, ensure the url is clean and matches codegen/gatsby
29
+ var name = (0, _createRule.getPathSafeName)(ruleName);
33
30
  return "https://atlassian.design/components/eslint-plugin-design-system/".concat(name, "/usage");
34
31
  }
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable @repo/internal/react/require-jsdoc */
2
2
 
3
3
  import { hasImportDeclaration, insertImportDeclaration, isNodeOfType } from 'eslint-codemod-utils';
4
+ import { Import } from './import';
4
5
  // Little bit unreadable, but better than duplicating the type
5
6
 
6
7
  export const Root = {
@@ -24,5 +25,38 @@ export const Root = {
24
25
  },
25
26
  insertImport(root, data, fixer) {
26
27
  return fixer.insertTextBefore(root[0], `${insertImportDeclaration(data.module, data.specifiers)};\n`);
28
+ },
29
+ upsertNamedImportDeclaration({
30
+ module,
31
+ specifiers
32
+ }, context, fixer) {
33
+ // Find any imports that match the packageName
34
+ const root = context.getSourceCode().ast.body;
35
+ const importDeclarations = this.findImportsByModule(root, module);
36
+
37
+ // The named import doesn't exist yet, we can just insert a whole new one
38
+ if (importDeclarations.length === 0) {
39
+ return this.insertImport(root, {
40
+ module,
41
+ specifiers
42
+ }, fixer);
43
+ }
44
+
45
+ // The import exists so, modify the existing one
46
+ return Import.insertNamedSpecifiers(importDeclarations[0], specifiers, fixer);
47
+ },
48
+ upsertDefaultImportDeclaration({
49
+ module,
50
+ localName
51
+ }, context, fixer) {
52
+ // Find any imports that match the packageName
53
+ const root = context.getSourceCode().ast.body;
54
+ const importDeclarations = this.findImportsByModule(root, module);
55
+
56
+ // The import already exist exist
57
+ if (importDeclarations.length > 0) {
58
+ return undefined;
59
+ }
60
+ return fixer.insertTextBefore(root[0], `import ${localName} from '${module}';\n`);
27
61
  }
28
62
  };
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * THIS FILE WAS CREATED VIA CODEGEN DO NOT MODIFY {@see http://go/af-codegen}
3
- * @codegen <<SignedSource::d95217b658f807294de3c81123068bf1>>
3
+ * @codegen <<SignedSource::2e2cf6c0ecfe1b01f3eb24caa223f09e>>
4
4
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
5
5
  */
6
6
  export default {
@@ -31,6 +31,7 @@ export default {
31
31
  '@atlaskit/design-system/prefer-primitives': 'warn',
32
32
  '@atlaskit/design-system/use-button-group-label': 'warn',
33
33
  '@atlaskit/design-system/use-drawer-label': 'warn',
34
+ '@atlaskit/design-system/use-heading': 'warn',
34
35
  '@atlaskit/design-system/use-heading-level-in-spotlight-card': 'warn',
35
36
  '@atlaskit/design-system/use-href-in-link-item': 'warn',
36
37
  '@atlaskit/design-system/use-primitives': 'warn',