@atlaskit/eslint-plugin-design-system 13.4.0 → 13.5.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 (161) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +1 -0
  3. package/dist/cjs/ast-nodes/object.js +0 -2
  4. package/dist/cjs/presets/all-flat.codegen.js +2 -1
  5. package/dist/cjs/presets/all.codegen.js +2 -1
  6. package/dist/cjs/presets/recommended-flat.codegen.js +2 -1
  7. package/dist/cjs/presets/recommended.codegen.js +2 -1
  8. package/dist/cjs/rules/consistent-css-prop-usage/index.js +0 -2
  9. package/dist/cjs/rules/ensure-design-token-usage/color.js +0 -2
  10. package/dist/cjs/rules/ensure-design-token-usage/index.js +0 -2
  11. package/dist/cjs/rules/ensure-design-token-usage/spacing.js +1 -1
  12. package/dist/cjs/rules/ensure-design-token-usage/utils.js +0 -2
  13. package/dist/cjs/rules/ensure-icon-color/index.js +0 -2
  14. package/dist/cjs/rules/index.codegen.js +3 -1
  15. package/dist/cjs/rules/no-boolean-autofocus-on-modal-dialog/index.js +0 -2
  16. package/dist/cjs/rules/no-custom-icons/index.js +0 -2
  17. package/dist/cjs/rules/no-deprecated-design-token-usage/index.js +0 -2
  18. package/dist/cjs/rules/no-direct-use-of-web-platform-drag-and-drop/checks/is-blocked-bind-all.js +1 -1
  19. package/dist/cjs/rules/no-direct-use-of-web-platform-drag-and-drop/checks/is-blocked-bind.js +1 -1
  20. package/dist/cjs/rules/no-direct-use-of-web-platform-drag-and-drop/checks/is-blocked-jsx-attribute.js +0 -2
  21. package/dist/cjs/rules/no-html-anchor/node-types/jsx-element/index.js +1 -1
  22. package/dist/cjs/rules/no-html-button/node-types/jsx-element/index.js +0 -2
  23. package/dist/cjs/rules/no-margin/index.js +0 -2
  24. package/dist/cjs/rules/no-nested-styles/index.js +0 -2
  25. package/dist/cjs/rules/no-physical-properties/index.js +0 -2
  26. package/dist/cjs/rules/no-unsafe-design-token-usage/index.js +1 -1
  27. package/dist/cjs/rules/use-button-group-label/index.js +0 -2
  28. package/dist/cjs/rules/use-datetime-picker-calendar-button/index.js +0 -2
  29. package/dist/cjs/rules/use-drawer-label/index.js +0 -2
  30. package/dist/cjs/rules/use-heading-level-in-spotlight-card/index.js +0 -2
  31. package/dist/cjs/rules/use-href-in-link-item/index.js +0 -2
  32. package/dist/cjs/rules/use-href-in-link-item/utils.js +0 -2
  33. package/dist/cjs/rules/use-menu-section-title/index.js +0 -2
  34. package/dist/cjs/rules/use-modal-dialog-close-button/index.js +25 -13
  35. package/dist/cjs/rules/use-onboarding-spotlight-label/index.js +0 -2
  36. package/dist/cjs/rules/use-popup-label/index.js +0 -2
  37. package/dist/cjs/rules/use-should-render-to-parent/index.js +113 -0
  38. package/dist/cjs/rules/use-tag-group-label/index.js +0 -2
  39. package/dist/cjs/rules/use-visually-hidden/fix-jsx.js +0 -2
  40. package/dist/cjs/rules/use-visually-hidden/fix-vanilla.js +0 -2
  41. package/dist/cjs/rules/use-visually-hidden/index.js +0 -2
  42. package/dist/cjs/rules/use-visually-hidden/utils.js +0 -3
  43. package/dist/cjs/rules/utils/create-no-tagged-template-expression-rule/get-tagged-template-expression-offset.js +0 -1
  44. package/dist/cjs/rules/utils/create-no-tagged-template-expression-rule/index.js +0 -4
  45. package/dist/cjs/rules/utils/create-no-tagged-template-expression-rule/to-arguments.js +0 -1
  46. package/dist/cjs/rules/utils/error-boundary.js +0 -2
  47. package/dist/cjs/rules/utils/find-in-parent.js +0 -2
  48. package/dist/cjs/rules/utils/get-import-node-by-source.js +0 -2
  49. package/dist/cjs/rules/utils/get-is-exception.js +0 -2
  50. package/dist/cjs/rules/utils/is-node.js +0 -2
  51. package/dist/es2019/ast-nodes/object.js +0 -2
  52. package/dist/es2019/presets/all-flat.codegen.js +2 -1
  53. package/dist/es2019/presets/all.codegen.js +2 -1
  54. package/dist/es2019/presets/recommended-flat.codegen.js +2 -1
  55. package/dist/es2019/presets/recommended.codegen.js +2 -1
  56. package/dist/es2019/rules/consistent-css-prop-usage/index.js +0 -2
  57. package/dist/es2019/rules/ensure-design-token-usage/color.js +0 -2
  58. package/dist/es2019/rules/ensure-design-token-usage/index.js +0 -2
  59. package/dist/es2019/rules/ensure-design-token-usage/spacing.js +0 -2
  60. package/dist/es2019/rules/ensure-design-token-usage/utils.js +0 -2
  61. package/dist/es2019/rules/ensure-icon-color/index.js +0 -2
  62. package/dist/es2019/rules/index.codegen.js +3 -1
  63. package/dist/es2019/rules/no-boolean-autofocus-on-modal-dialog/index.js +0 -2
  64. package/dist/es2019/rules/no-custom-icons/index.js +0 -2
  65. package/dist/es2019/rules/no-deprecated-design-token-usage/index.js +0 -2
  66. package/dist/es2019/rules/no-direct-use-of-web-platform-drag-and-drop/checks/is-blocked-bind-all.js +0 -2
  67. package/dist/es2019/rules/no-direct-use-of-web-platform-drag-and-drop/checks/is-blocked-bind.js +0 -2
  68. package/dist/es2019/rules/no-direct-use-of-web-platform-drag-and-drop/checks/is-blocked-jsx-attribute.js +0 -2
  69. package/dist/es2019/rules/no-html-anchor/node-types/jsx-element/index.js +0 -2
  70. package/dist/es2019/rules/no-html-button/node-types/jsx-element/index.js +0 -2
  71. package/dist/es2019/rules/no-margin/index.js +0 -2
  72. package/dist/es2019/rules/no-nested-styles/index.js +0 -2
  73. package/dist/es2019/rules/no-physical-properties/index.js +0 -2
  74. package/dist/es2019/rules/no-unsafe-design-token-usage/index.js +0 -2
  75. package/dist/es2019/rules/use-button-group-label/index.js +0 -2
  76. package/dist/es2019/rules/use-datetime-picker-calendar-button/index.js +0 -2
  77. package/dist/es2019/rules/use-drawer-label/index.js +0 -2
  78. package/dist/es2019/rules/use-heading-level-in-spotlight-card/index.js +0 -2
  79. package/dist/es2019/rules/use-href-in-link-item/index.js +0 -2
  80. package/dist/es2019/rules/use-href-in-link-item/utils.js +0 -2
  81. package/dist/es2019/rules/use-menu-section-title/index.js +0 -2
  82. package/dist/es2019/rules/use-modal-dialog-close-button/index.js +24 -14
  83. package/dist/es2019/rules/use-onboarding-spotlight-label/index.js +0 -2
  84. package/dist/es2019/rules/use-popup-label/index.js +0 -2
  85. package/dist/es2019/rules/use-should-render-to-parent/index.js +97 -0
  86. package/dist/es2019/rules/use-tag-group-label/index.js +0 -2
  87. package/dist/es2019/rules/use-visually-hidden/fix-jsx.js +0 -2
  88. package/dist/es2019/rules/use-visually-hidden/fix-vanilla.js +0 -2
  89. package/dist/es2019/rules/use-visually-hidden/index.js +0 -2
  90. package/dist/es2019/rules/use-visually-hidden/utils.js +0 -4
  91. package/dist/es2019/rules/utils/create-no-tagged-template-expression-rule/get-tagged-template-expression-offset.js +0 -1
  92. package/dist/es2019/rules/utils/create-no-tagged-template-expression-rule/index.js +0 -4
  93. package/dist/es2019/rules/utils/create-no-tagged-template-expression-rule/to-arguments.js +0 -1
  94. package/dist/es2019/rules/utils/error-boundary.js +0 -2
  95. package/dist/es2019/rules/utils/find-in-parent.js +0 -2
  96. package/dist/es2019/rules/utils/get-import-node-by-source.js +0 -2
  97. package/dist/es2019/rules/utils/get-is-exception.js +0 -2
  98. package/dist/es2019/rules/utils/is-node.js +0 -2
  99. package/dist/esm/ast-nodes/object.js +0 -2
  100. package/dist/esm/presets/all-flat.codegen.js +2 -1
  101. package/dist/esm/presets/all.codegen.js +2 -1
  102. package/dist/esm/presets/recommended-flat.codegen.js +2 -1
  103. package/dist/esm/presets/recommended.codegen.js +2 -1
  104. package/dist/esm/rules/consistent-css-prop-usage/index.js +0 -2
  105. package/dist/esm/rules/ensure-design-token-usage/color.js +0 -2
  106. package/dist/esm/rules/ensure-design-token-usage/index.js +0 -2
  107. package/dist/esm/rules/ensure-design-token-usage/spacing.js +0 -2
  108. package/dist/esm/rules/ensure-design-token-usage/utils.js +0 -2
  109. package/dist/esm/rules/ensure-icon-color/index.js +0 -2
  110. package/dist/esm/rules/index.codegen.js +3 -1
  111. package/dist/esm/rules/no-boolean-autofocus-on-modal-dialog/index.js +0 -2
  112. package/dist/esm/rules/no-custom-icons/index.js +0 -2
  113. package/dist/esm/rules/no-deprecated-design-token-usage/index.js +0 -2
  114. package/dist/esm/rules/no-direct-use-of-web-platform-drag-and-drop/checks/is-blocked-bind-all.js +0 -2
  115. package/dist/esm/rules/no-direct-use-of-web-platform-drag-and-drop/checks/is-blocked-bind.js +0 -2
  116. package/dist/esm/rules/no-direct-use-of-web-platform-drag-and-drop/checks/is-blocked-jsx-attribute.js +0 -2
  117. package/dist/esm/rules/no-html-anchor/node-types/jsx-element/index.js +0 -2
  118. package/dist/esm/rules/no-html-button/node-types/jsx-element/index.js +0 -2
  119. package/dist/esm/rules/no-margin/index.js +0 -2
  120. package/dist/esm/rules/no-nested-styles/index.js +0 -2
  121. package/dist/esm/rules/no-physical-properties/index.js +0 -2
  122. package/dist/esm/rules/no-unsafe-design-token-usage/index.js +0 -2
  123. package/dist/esm/rules/use-button-group-label/index.js +0 -2
  124. package/dist/esm/rules/use-datetime-picker-calendar-button/index.js +0 -2
  125. package/dist/esm/rules/use-drawer-label/index.js +0 -2
  126. package/dist/esm/rules/use-heading-level-in-spotlight-card/index.js +0 -2
  127. package/dist/esm/rules/use-href-in-link-item/index.js +0 -2
  128. package/dist/esm/rules/use-href-in-link-item/utils.js +0 -2
  129. package/dist/esm/rules/use-menu-section-title/index.js +0 -2
  130. package/dist/esm/rules/use-modal-dialog-close-button/index.js +24 -14
  131. package/dist/esm/rules/use-onboarding-spotlight-label/index.js +0 -2
  132. package/dist/esm/rules/use-popup-label/index.js +0 -2
  133. package/dist/esm/rules/use-should-render-to-parent/index.js +107 -0
  134. package/dist/esm/rules/use-tag-group-label/index.js +0 -2
  135. package/dist/esm/rules/use-visually-hidden/fix-jsx.js +0 -2
  136. package/dist/esm/rules/use-visually-hidden/fix-vanilla.js +0 -2
  137. package/dist/esm/rules/use-visually-hidden/index.js +0 -2
  138. package/dist/esm/rules/use-visually-hidden/utils.js +0 -4
  139. package/dist/esm/rules/utils/create-no-tagged-template-expression-rule/get-tagged-template-expression-offset.js +0 -1
  140. package/dist/esm/rules/utils/create-no-tagged-template-expression-rule/index.js +0 -4
  141. package/dist/esm/rules/utils/create-no-tagged-template-expression-rule/to-arguments.js +0 -1
  142. package/dist/esm/rules/utils/error-boundary.js +0 -2
  143. package/dist/esm/rules/utils/find-in-parent.js +0 -2
  144. package/dist/esm/rules/utils/get-import-node-by-source.js +0 -2
  145. package/dist/esm/rules/utils/get-is-exception.js +0 -2
  146. package/dist/esm/rules/utils/is-node.js +0 -2
  147. package/dist/types/index.codegen.d.ts +9 -0
  148. package/dist/types/presets/all-flat.codegen.d.ts +1 -0
  149. package/dist/types/presets/all.codegen.d.ts +1 -0
  150. package/dist/types/presets/recommended-flat.codegen.d.ts +1 -0
  151. package/dist/types/presets/recommended.codegen.d.ts +1 -0
  152. package/dist/types/rules/index.codegen.d.ts +1 -0
  153. package/dist/types/rules/use-should-render-to-parent/index.d.ts +6 -0
  154. package/dist/types-ts4.5/index.codegen.d.ts +9 -0
  155. package/dist/types-ts4.5/presets/all-flat.codegen.d.ts +1 -0
  156. package/dist/types-ts4.5/presets/all.codegen.d.ts +1 -0
  157. package/dist/types-ts4.5/presets/recommended-flat.codegen.d.ts +1 -0
  158. package/dist/types-ts4.5/presets/recommended.codegen.d.ts +1 -0
  159. package/dist/types-ts4.5/rules/index.codegen.d.ts +1 -0
  160. package/dist/types-ts4.5/rules/use-should-render-to-parent/index.d.ts +6 -0
  161. package/package.json +4 -4
@@ -6,8 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _eslintCodemodUtils = require("eslint-codemod-utils");
8
8
  var _createRule = require("../utils/create-rule");
9
- // eslint-disable-next-line import/no-extraneous-dependencies
10
-
11
9
  var elementsAccessibleNameProps = ['label', 'titleId'];
12
10
  var rule = (0, _createRule.createLintRule)({
13
11
  meta: {
@@ -8,8 +8,6 @@ var _eslintCodemodUtils = require("eslint-codemod-utils");
8
8
  var _getImportNodeBySource = require("../utils/get-import-node-by-source");
9
9
  var _constants = require("./constants");
10
10
  var _utils = require("./utils");
11
- // eslint-disable-next-line import/no-extraneous-dependencies
12
-
13
11
  var fixJsx = function fixJsx(source, node) {
14
12
  return function (fixer) {
15
13
  var fixes = [];
@@ -7,8 +7,6 @@ exports.default = void 0;
7
7
  var _getImportNodeBySource = require("../utils/get-import-node-by-source");
8
8
  var _constants = require("./constants");
9
9
  var _utils = require("./utils");
10
- // eslint-disable-next-line import/no-extraneous-dependencies
11
-
12
10
  var fixVanilla = function fixVanilla(source, node) {
13
11
  return function (fixer) {
14
12
  var fixes = [];
@@ -13,8 +13,6 @@ var _isNode = require("../utils/is-node");
13
13
  var _fixJsx = _interopRequireDefault(require("./fix-jsx"));
14
14
  var _fixVanilla = _interopRequireDefault(require("./fix-vanilla"));
15
15
  var _utils = require("./utils");
16
- // eslint-disable-next-line import/no-extraneous-dependencies
17
-
18
16
  var THEME_IMPORT_NAMES = ['visuallyHidden', 'assistive'];
19
17
  var rule = (0, _createRule.createLintRule)({
20
18
  meta: {
@@ -5,9 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.makeTemplateLiteralIntoEntries = exports.getObjectLikeness = exports.getFirstImport = exports.countMatchingKeyValues = void 0;
7
7
  var _eslintCodemodUtils = require("eslint-codemod-utils");
8
- // eslint-disable-next-line import/no-extraneous-dependencies
9
-
10
- // eslint-disable-next-line @atlaskit/design-system/use-visually-hidden
11
8
  var referenceObject = {
12
9
  width: '1px',
13
10
  height: '1px',
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getTaggedTemplateExpressionOffset = void 0;
7
7
  // Original source from Compiled https://github.com/atlassian-labs/compiled/blob/master/packages/eslint-plugin/src/utils/create-no-tagged-template-expression-rule/get-tagged-template-expression-offset.ts
8
- // eslint-disable-next-line import/no-extraneous-dependencies
9
8
 
10
9
  var getTaggedTemplateExpressionOffset = exports.getTaggedTemplateExpressionOffset = function getTaggedTemplateExpressionOffset(node) {
11
10
  var parent = node.parent;
@@ -12,12 +12,8 @@ var _isSupportedImport = require("@atlaskit/eslint-utils/is-supported-import");
12
12
  var _generate = require("./generate");
13
13
  var _getTaggedTemplateExpressionOffset = require("./get-tagged-template-expression-offset");
14
14
  var _toArguments = require("./to-arguments");
15
- /* eslint-disable @atlassian/tangerine/import/entry-points */
16
-
17
15
  // Original source from Compiled https://github.com/atlassian-labs/compiled/blob/master/packages/eslint-plugin/src/utils/create-no-tagged-template-expression-rule/index.ts
18
16
 
19
- // eslint-disable-next-line import/no-extraneous-dependencies
20
-
21
17
  var noTaggedTemplateExpressionRuleSchema = exports.noTaggedTemplateExpressionRuleSchema = [{
22
18
  type: 'object',
23
19
  properties: {
@@ -11,7 +11,6 @@ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol
11
11
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
12
12
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
13
13
  // Original source from Compiled https://github.com/atlassian-labs/compiled/blob/master/packages/eslint-plugin/src/utils/create-no-tagged-template-expression-rule/to-arguments.ts
14
- // eslint-disable-next-line import/no-extraneous-dependencies
15
14
 
16
15
  var getArguments = function getArguments(chars) {
17
16
  var expressions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
@@ -7,8 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.errorBoundary = errorBoundary;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
10
- // eslint-disable-next-line import/no-extraneous-dependencies
11
-
12
10
  // Need to intersect type RuleListener with a generic function to allow use of Parameters<...> to be used
13
11
 
14
12
  // Allow config to be to be easily passed from rules
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.findIdentifierInParentScope = findIdentifierInParentScope;
7
- // eslint-disable-next-line import/no-extraneous-dependencies
8
-
9
7
  /**
10
8
  * This will search first matched identifier in same and parent scopes.
11
9
  * Returns first matched identifer otherwise null.
@@ -7,8 +7,6 @@ exports.getModuleOfIdentifier = exports.getImportedNodeBySource = void 0;
7
7
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
8
8
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
9
9
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
10
- // eslint-disable-next-line import/no-extraneous-dependencies
11
-
12
10
  /**
13
11
  * @param {SourceCode} source The eslint source
14
12
  * @param {string} path The path specified to find
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.getIsException = void 0;
7
- // eslint-disable-next-line import/no-extraneous-dependencies
8
-
9
7
  var getNodeValue = function getNodeValue(node) {
10
8
  var _node$value;
11
9
  switch (node.type) {
@@ -8,8 +8,6 @@ var _eslintCodemodUtils = require("eslint-codemod-utils");
8
8
  var _contextCompat = require("@atlaskit/eslint-utils/context-compat");
9
9
  var _isSupportedImport = require("@atlaskit/eslint-utils/is-supported-import");
10
10
  var _astNodes = require("../../ast-nodes");
11
- // eslint-disable-next-line import/no-extraneous-dependencies
12
-
13
11
  var _isDecendantOfGlobalToken = exports.isDecendantOfGlobalToken = function isDecendantOfGlobalToken(node) {
14
12
  if ((0, _eslintCodemodUtils.isNodeOfType)(node, 'CallExpression') && (0, _eslintCodemodUtils.isNodeOfType)(node.callee, 'Identifier') && (node.callee.name === 'token' || node.callee.name === 'getTokenValue')) {
15
13
  return true;
@@ -1,5 +1,3 @@
1
- /* eslint-disable @repo/internal/react/require-jsdoc */
2
-
3
1
  import { identifier, isNodeOfType, literal, property } from 'eslint-codemod-utils';
4
2
  const ASTObjectExpression = {
5
3
  /**
@@ -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::9b616276b6c3b9db3c1d886bf8de4fc4>>
3
+ * @codegen <<SignedSource::d6f1473b4b8a65399a9c887b4ba1912e>>
4
4
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
5
5
  */
6
6
 
@@ -53,6 +53,7 @@ export default {
53
53
  '@atlaskit/design-system/use-popup-label': 'warn',
54
54
  '@atlaskit/design-system/use-primitives': 'warn',
55
55
  '@atlaskit/design-system/use-primitives-text': 'warn',
56
+ '@atlaskit/design-system/use-should-render-to-parent': 'warn',
56
57
  '@atlaskit/design-system/use-tag-group-label': 'warn',
57
58
  '@atlaskit/design-system/use-tokens-space': 'error',
58
59
  '@atlaskit/design-system/use-tokens-typography': 'warn',
@@ -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::96ec2e315f96de68a6448317cce334ce>>
3
+ * @codegen <<SignedSource::011cbb2ac5166d9a4a1d1cab68d0156d>>
4
4
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
5
5
  */
6
6
 
@@ -52,6 +52,7 @@ export default {
52
52
  '@atlaskit/design-system/use-popup-label': 'warn',
53
53
  '@atlaskit/design-system/use-primitives': 'warn',
54
54
  '@atlaskit/design-system/use-primitives-text': 'warn',
55
+ '@atlaskit/design-system/use-should-render-to-parent': 'warn',
55
56
  '@atlaskit/design-system/use-tag-group-label': 'warn',
56
57
  '@atlaskit/design-system/use-tokens-space': 'error',
57
58
  '@atlaskit/design-system/use-tokens-typography': 'warn',
@@ -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::4f6ee2ae56e1c0534f0f8e3fde314cc7>>
3
+ * @codegen <<SignedSource::abef9d23f187fcebf6ab9cdeb874229b>>
4
4
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
5
5
  */
6
6
 
@@ -39,6 +39,7 @@ export default {
39
39
  '@atlaskit/design-system/use-modal-dialog-close-button': 'warn',
40
40
  '@atlaskit/design-system/use-onboarding-spotlight-label': 'warn',
41
41
  '@atlaskit/design-system/use-popup-label': 'warn',
42
+ '@atlaskit/design-system/use-should-render-to-parent': 'warn',
42
43
  '@atlaskit/design-system/use-tag-group-label': 'warn',
43
44
  '@atlaskit/design-system/use-visually-hidden': 'error'
44
45
  }
@@ -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::85c1f4ada9dac0f66e87e3734a36cb6b>>
3
+ * @codegen <<SignedSource::3d1a55011e92acf33daaf53e8bfc3532>>
4
4
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
5
5
  */
6
6
 
@@ -38,6 +38,7 @@ export default {
38
38
  '@atlaskit/design-system/use-modal-dialog-close-button': 'warn',
39
39
  '@atlaskit/design-system/use-onboarding-spotlight-label': 'warn',
40
40
  '@atlaskit/design-system/use-popup-label': 'warn',
41
+ '@atlaskit/design-system/use-should-render-to-parent': 'warn',
41
42
  '@atlaskit/design-system/use-tag-group-label': 'warn',
42
43
  '@atlaskit/design-system/use-visually-hidden': 'error'
43
44
  }
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { getIdentifierInParentScope, insertAtStartOfFile, insertImportDeclaration, isNodeOfType } from 'eslint-codemod-utils';
4
2
  import estraverse from 'estraverse';
5
3
  import assign from 'lodash/assign';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { node as generate, isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { getIsException } from '../utils/get-is-exception';
5
3
  import { includesHardCodedColor, isHardCodedColor, isLegacyColor, isLegacyNamedColor } from '../utils/is-color';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { getScope, getSourceCode } from '@atlaskit/eslint-utils/context-compat';
5
3
  import { getImportSources } from '@atlaskit/eslint-utils/is-supported-import';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType, property } from 'eslint-codemod-utils';
4
2
  import { emToPixels, findTokenNameByPropertyValue, getRawExpression, getTokenNodeForValue, getTokenReplacement, getValue, insertTokensImport, isAuto, isCalc, isValidSpacingValue, isZero, splitShorthandValues } from './utils';
5
3
  export const lintObjectForSpacing = (node, context, ruleConfig, fontSize, tokenNode) => {
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { callExpression, identifier, insertAtStartOfFile, insertImportDeclaration, isNodeOfType, literal } from 'eslint-codemod-utils';
4
2
  import { getScope, getSourceCode } from '@atlaskit/eslint-utils/context-compat';
5
3
  import { spacing as spacingScale } from '@atlaskit/tokens/tokens-raw';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { createIsFromImportSourceFor } from '../no-custom-icons/checks/is-from-import-source';
5
3
  import { createLintRule } from '../utils/create-rule';
@@ -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::66749852497ab0f2dc3214dd47aaf598>>
3
+ * @codegen <<SignedSource::f169e765038e90ec6531f19333f70cfb>>
4
4
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
5
5
  */
6
6
  import consistentCssPropUsage from './consistent-css-prop-usage';
@@ -49,6 +49,7 @@ import useOnboardingSpotlightLabel from './use-onboarding-spotlight-label';
49
49
  import usePopupLabel from './use-popup-label';
50
50
  import usePrimitives from './use-primitives';
51
51
  import usePrimitivesText from './use-primitives-text';
52
+ import useShouldRenderToParent from './use-should-render-to-parent';
52
53
  import useTagGroupLabel from './use-tag-group-label';
53
54
  import useTokensSpace from './use-tokens-space';
54
55
  import useTokensTypography from './use-tokens-typography';
@@ -100,6 +101,7 @@ export const rules = {
100
101
  'use-popup-label': usePopupLabel,
101
102
  'use-primitives': usePrimitives,
102
103
  'use-primitives-text': usePrimitivesText,
104
+ 'use-should-render-to-parent': useShouldRenderToParent,
103
105
  'use-tag-group-label': useTagGroupLabel,
104
106
  'use-tokens-space': useTokensSpace,
105
107
  'use-tokens-typography': useTokensTypography,
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { JSXAttribute } from '../../ast-nodes/jsx-attribute';
5
3
  import { JSXElementHelper } from '../../ast-nodes/jsx-element';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { createLintRule } from '../utils/create-rule';
4
2
  import { errorBoundary } from '../utils/error-boundary';
5
3
  import { hasProp } from './checks/has-prop';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import renameMapping from '@atlaskit/tokens/rename-mapping';
4
2
  import { getTokenId } from '@atlaskit/tokens/token-ids';
5
3
  import { createLintRule } from '../utils/create-rule';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { getSourceCode } from '@atlaskit/eslint-utils/context-compat';
5
3
  import { getModuleOfIdentifier } from '../../utils/get-import-node-by-source';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { getSourceCode } from '@atlaskit/eslint-utils/context-compat';
5
3
  import { getModuleOfIdentifier } from '../../utils/get-import-node-by-source';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { getSourceCode } from '@atlaskit/eslint-utils/context-compat';
5
3
  import { getModuleOfIdentifier } from '../../utils/get-import-node-by-source';
@@ -1,5 +1,3 @@
1
- /* eslint-disable @repo/internal/react/require-jsdoc */
2
-
3
1
  import { getSourceCode } from '@atlaskit/eslint-utils/context-compat';
4
2
  import * as ast from '../../../../ast-nodes';
5
3
  import { isSupportedForLint } from '../supported';
@@ -1,5 +1,3 @@
1
- /* eslint-disable @repo/internal/react/require-jsdoc */
2
-
3
1
  import * as ast from '../../../../ast-nodes';
4
2
  import { isSupportedForLint } from '../supported';
5
3
  export const JSXElement = {
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { createLintRule } from '../utils/create-rule';
5
3
  const rule = createLintRule({
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { getScope } from '@atlaskit/eslint-utils/context-compat';
5
3
  import { createLintRule } from '../utils/create-rule';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { createLintRule } from '../utils/create-rule';
5
3
  import { physicalLogicalMap } from './logical-physical-map';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import renameMapping from '@atlaskit/tokens/rename-mapping';
5
3
  import tokenDefaultValues from '@atlaskit/tokens/token-default-values';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { createLintRule } from '../utils/create-rule';
5
3
  const elementsAccessibleNameProps = ['label', 'titleId'];
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { JSXAttribute } from '../../ast-nodes/jsx-attribute';
5
3
  import { JSXElementHelper } from '../../ast-nodes/jsx-element';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { createLintRule } from '../utils/create-rule';
5
3
  const elementsAccessibleNameProps = ['label', 'titleId'];
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { getScope } from '@atlaskit/eslint-utils/context-compat';
5
3
  import { createLintRule } from '../utils/create-rule';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { getScope } from '@atlaskit/eslint-utils/context-compat';
5
3
  import { createLintRule } from '../utils/create-rule';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { findIdentifierInParentScope } from '../utils/find-in-parent';
5
3
  const invalidHrefValues = ['', '#', null, undefined];
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { createLintRule } from '../utils/create-rule';
5
3
  const elementsAccessibleNameProps = ['title', 'titleId'];
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { JSXAttribute } from '../../ast-nodes/jsx-attribute';
5
3
  import { JSXElementHelper } from '../../ast-nodes/jsx-element';
@@ -65,7 +63,7 @@ const rule = createLintRule({
65
63
  return;
66
64
  }
67
65
  const name = node.openingElement.name.name;
68
- if (name !== defaultImportLocalName) {
66
+ if (![defaultImportLocalName, modalHeaderLocalName].includes(name)) {
69
67
  return;
70
68
  }
71
69
  let modalHeaderNode = null;
@@ -120,13 +118,31 @@ const rule = createLintRule({
120
118
  checkNode(child);
121
119
  }
122
120
  };
123
- searchNode(node);
121
+ if (name === defaultImportLocalName) {
122
+ searchNode(node);
123
+
124
+ // If there is a close button, skip the rest, as this satisfies the
125
+ // rule. If there is a modal header, it will be recognized in later
126
+ // scans, so don't add duplicate errors
127
+ if (closeButtonNode || modalHeaderNode) {
128
+ return;
129
+ // No close button or modal header exists
130
+ } else {
131
+ return context.report({
132
+ node,
133
+ messageId: 'noCloseButtonExists'
134
+ });
135
+ }
136
+ } else if (name === modalHeaderLocalName) {
137
+ modalHeaderNode = node;
138
+ searchNode(node);
139
+
140
+ // If there is a close button, skip the rest, as this satisfies the rule.
141
+ if (closeButtonNode) {
142
+ return;
143
+ }
124
144
 
125
- // If there is a close button, skip the rest, as this satisfies the rule.
126
- if (closeButtonNode) {
127
- return;
128
145
  // No close button exists, so check the modal header
129
- } else if (modalHeaderNode !== null) {
130
146
  const prop = JSXElementHelper.getAttributeByName(modalHeaderNode, PROP_NAME);
131
147
 
132
148
  // If the prop exists
@@ -155,12 +171,6 @@ const rule = createLintRule({
155
171
  }]
156
172
  });
157
173
  }
158
- // No close button or modal header exists
159
- } else {
160
- return context.report({
161
- node,
162
- messageId: 'noCloseButtonExists'
163
- });
164
174
  }
165
175
  }
166
176
  };
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { createLintRule } from '../utils/create-rule';
5
3
  const elementsAccessibleNameProps = ['label', 'titleId', 'heading'];
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { createLintRule } from '../utils/create-rule';
5
3
  const elementsAccessibleNameProps = ['label', 'titleId'];
@@ -0,0 +1,97 @@
1
+ // eslint-disable-next-line import/no-extraneous-dependencies
2
+
3
+ import { isNodeOfType } from 'eslint-codemod-utils';
4
+ import { createLintRule } from '../utils/create-rule';
5
+ export const RULE_NAME = 'use-should-render-to-parent';
6
+ const PROP_NAME = 'shouldRenderToParent';
7
+ const message = `Setting the \`${PROP_NAME}\` prop to anything other than \`true\` causes accessibility issues. Only set to \`false\` as a last resort.`;
8
+ export const addProp = `Add \`${PROP_NAME}\` prop.`;
9
+ export const setPropToTrue = `Set \`${PROP_NAME}\` prop to \`true\`.`;
10
+ const components = ['@atlaskit/popup', '@atlaskit/dropdown-menu'];
11
+ const rule = createLintRule({
12
+ meta: {
13
+ name: RULE_NAME,
14
+ type: 'suggestion',
15
+ docs: {
16
+ description: `Encourages makers to use the \`${PROP_NAME}\` where possible in Atlassian Design System \`Popup\` and \`DropdownMenu\` components.`,
17
+ recommended: true,
18
+ severity: 'warn'
19
+ },
20
+ messages: {
21
+ missingShouldRenderToParentProp: `The default value of \`${PROP_NAME}\` is \`false\`. ${message}`,
22
+ falseShouldRenderToParentProp: message
23
+ },
24
+ hasSuggestions: true
25
+ },
26
+ create(context) {
27
+ let componentLocalName;
28
+ return {
29
+ ImportDeclaration(node) {
30
+ const source = node.source.value;
31
+ if (typeof source !== 'string') {
32
+ return;
33
+ }
34
+ if (!components.includes(source)) {
35
+ return;
36
+ }
37
+ if (!node.specifiers.length) {
38
+ return;
39
+ }
40
+ const defaultImport = node.specifiers.filter(spec => spec.type === 'ImportDefaultSpecifier');
41
+ const namedImport = node.specifiers.filter(spec => spec.type === 'ImportSpecifier');
42
+
43
+ // If popup or dropdown menu and using a default import
44
+ if (defaultImport.length && defaultImport[0].local) {
45
+ componentLocalName = defaultImport[0].local.name;
46
+ // or if popup and using a named import
47
+ } else if (namedImport.length && namedImport[0].type === 'ImportSpecifier' && namedImport[0].imported.name === 'Popup') {
48
+ componentLocalName = namedImport[0].local.name;
49
+ }
50
+ },
51
+ JSXElement(node) {
52
+ if (!isNodeOfType(node, 'JSXElement')) {
53
+ return;
54
+ }
55
+ if (!isNodeOfType(node.openingElement.name, 'JSXIdentifier')) {
56
+ return;
57
+ }
58
+ const name = node.openingElement.name.name;
59
+ if (name === componentLocalName) {
60
+ const prop = node.openingElement.attributes.find(attr => isNodeOfType(attr, 'JSXAttribute') && isNodeOfType(attr.name, 'JSXIdentifier') && attr.name.name === PROP_NAME);
61
+
62
+ // If the prop does not exist, throw
63
+ if (!prop) {
64
+ return context.report({
65
+ node: node.openingElement.name,
66
+ messageId: 'missingShouldRenderToParentProp',
67
+ suggest: [{
68
+ desc: addProp,
69
+ fix: fixer => [fixer.insertTextAfter(node.openingElement.name, ` ${PROP_NAME}`)]
70
+ }]
71
+ });
72
+ }
73
+
74
+ // If the prop is a boolean attribute with no value (set to `true`),
75
+ // it's valid
76
+ if (!('value' in prop) || prop.value === null) {
77
+ return;
78
+ }
79
+
80
+ // If the prop has a falsy literal value or a falsy value in an
81
+ // expression container, throw
82
+ if (isNodeOfType(prop.value, 'Literal') && !prop.value.value || isNodeOfType(prop.value, 'JSXExpressionContainer') && prop.value.expression.type === 'Literal' && !prop.value.expression.value) {
83
+ return context.report({
84
+ node: prop,
85
+ messageId: 'falseShouldRenderToParentProp',
86
+ suggest: [{
87
+ desc: setPropToTrue,
88
+ fix: fixer => [fixer.replaceText(prop, PROP_NAME)]
89
+ }]
90
+ });
91
+ }
92
+ }
93
+ }
94
+ };
95
+ }
96
+ });
97
+ export default rule;
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { createLintRule } from '../utils/create-rule';
5
3
  const elementsAccessibleNameProps = ['label', 'titleId'];
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { closestOfType } from 'eslint-codemod-utils';
4
2
  import { getImportedNodeBySource } from '../utils/get-import-node-by-source';
5
3
  import { IMPORT_NAME, VISUALLY_HIDDEN_IMPORT, VISUALLY_HIDDEN_SOURCE } from './constants';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { getImportedNodeBySource } from '../utils/get-import-node-by-source';
4
2
  import { IMPORT_NAME, VISUALLY_HIDDEN_IMPORT, VISUALLY_HIDDEN_SOURCE } from './constants';
5
3
  import { getFirstImport } from './utils';
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
1
  import { closestOfType, hasImportDeclaration, isNodeOfType } from 'eslint-codemod-utils';
4
2
  import { getDeclaredVariables, getSourceCode } from '@atlaskit/eslint-utils/context-compat';
5
3
  import { createLintRule } from '../utils/create-rule';