@atlaskit/eslint-plugin-design-system 4.4.2 → 4.4.5

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 (39) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/constellation/index/examples.mdx +5 -0
  3. package/constellation/index/props.mdx +0 -0
  4. package/constellation/index/usage.mdx +5 -0
  5. package/dist/cjs/rules/ensure-design-token-usage/index.js +3 -2
  6. package/dist/cjs/rules/no-deprecated-apis/index.js +5 -7
  7. package/dist/cjs/rules/no-deprecated-imports/paths.js +1 -1
  8. package/dist/cjs/rules/no-unsafe-design-token-usage/index.js +4 -2
  9. package/dist/cjs/rules/use-visually-hidden/fix-jsx.js +3 -3
  10. package/dist/cjs/rules/use-visually-hidden/index.js +5 -3
  11. package/dist/cjs/rules/utils/get-import-node-by-source.js +0 -2
  12. package/dist/cjs/rules/utils/is-node.js +5 -21
  13. package/dist/cjs/version.json +1 -1
  14. package/dist/es2019/rules/ensure-design-token-usage/index.js +2 -2
  15. package/dist/es2019/rules/no-deprecated-apis/index.js +4 -6
  16. package/dist/es2019/rules/no-deprecated-imports/paths.js +1 -1
  17. package/dist/es2019/rules/no-unsafe-design-token-usage/index.js +3 -2
  18. package/dist/es2019/rules/use-visually-hidden/fix-jsx.js +2 -2
  19. package/dist/es2019/rules/use-visually-hidden/index.js +5 -4
  20. package/dist/es2019/rules/utils/get-import-node-by-source.js +0 -2
  21. package/dist/es2019/rules/utils/is-node.js +2 -16
  22. package/dist/es2019/version.json +1 -1
  23. package/dist/esm/rules/ensure-design-token-usage/index.js +2 -2
  24. package/dist/esm/rules/no-deprecated-apis/index.js +4 -6
  25. package/dist/esm/rules/no-deprecated-imports/paths.js +1 -1
  26. package/dist/esm/rules/no-unsafe-design-token-usage/index.js +3 -2
  27. package/dist/esm/rules/use-visually-hidden/fix-jsx.js +2 -2
  28. package/dist/esm/rules/use-visually-hidden/index.js +5 -4
  29. package/dist/esm/rules/utils/get-import-node-by-source.js +0 -2
  30. package/dist/esm/rules/utils/is-node.js +2 -16
  31. package/dist/esm/version.json +1 -1
  32. package/dist/types/rules/use-visually-hidden/utils.d.ts +1 -1
  33. package/dist/types/rules/utils/get-import-node-by-source.d.ts +1 -1
  34. package/dist/types/rules/utils/is-node.d.ts +3 -7
  35. package/package.json +13 -4
  36. package/dist/cjs/rules/utils/remove-named-import.js +0 -29
  37. package/dist/es2019/rules/utils/remove-named-import.js +0 -16
  38. package/dist/esm/rules/utils/remove-named-import.js +0 -20
  39. package/dist/types/rules/utils/remove-named-import.d.ts +0 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @atlaskit/eslint-plugin-design-system
2
2
 
3
+ ## 4.4.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [`344784eec9e`](https://bitbucket.org/atlassian/atlassian-frontend/commits/344784eec9e) - Fix linting error message for focusRing import
8
+
9
+ ## 4.4.4
10
+
11
+ ### Patch Changes
12
+
13
+ - [`55a212b8b01`](https://bitbucket.org/atlassian/atlassian-frontend/commits/55a212b8b01) - Adds an additional rule for DS users to opt into to using 'noop' as a common reference rather than rewriting anonymous functions.
14
+
15
+ ## 4.4.3
16
+
17
+ ### Patch Changes
18
+
19
+ - [`cb2392f6d33`](https://bitbucket.org/atlassian/atlassian-frontend/commits/cb2392f6d33) - Upgrade to TypeScript 4.2.4
20
+
3
21
  ## 4.4.2
4
22
 
5
23
  ### Patch Changes
@@ -0,0 +1,5 @@
1
+ ---
2
+ order: 0
3
+ ---
4
+
5
+ examples
File without changes
@@ -0,0 +1,5 @@
1
+ ---
2
+ order: 2
3
+ ---
4
+
5
+ usage
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
+ var _eslintCodemodUtils = require("eslint-codemod-utils");
9
+
8
10
  var _isColor = require("../utils/is-color");
9
11
 
10
12
  var _isElevation = require("../utils/is-elevation");
@@ -30,8 +32,7 @@ var getTokenSuggestion = function getTokenSuggestion(node, reference, config) {
30
32
  shouldReturnSuggestion: !(0, _isNode.isDecendantOfGlobalToken)(node) && config.shouldEnforceFallbacks === true,
31
33
  desc: "Convert to token with fallback",
32
34
  fix: function fix(fixer) {
33
- return fixer.replaceText(node, // @ts-ignore JSXAttribute is not available in @types/estree
34
- node.parent.type === 'JSXAttribute' ? "{token('', ".concat(reference, ")}") : "token('', ".concat(reference, ")"));
35
+ return fixer.replaceText(node, (0, _eslintCodemodUtils.isNodeOfType)(node.parent, 'JSXAttribute') ? "{token('', ".concat(reference, ")}") : "token('', ".concat(reference, ")"));
35
36
  }
36
37
  }].filter(filterSuggestion);
37
38
  };
@@ -5,11 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _getImportNodeBySource = require("../utils/get-import-node-by-source");
8
+ var _eslintCodemodUtils = require("eslint-codemod-utils");
9
9
 
10
- var _isNode = require("../utils/is-node");
10
+ var _getImportNodeBySource = require("../utils/get-import-node-by-source");
11
11
 
12
- // eslint-disable-next-line import/no-unresolved
13
12
  var unsafeOverridesConfig = {
14
13
  cssFn: ['@atlaskit/menu', '@atlaskit/side-navigation'],
15
14
  overrides: ['@atlaskit/drawer', '@atlaskit/menu', '@atlaskit/side-navigation']
@@ -40,7 +39,7 @@ var rule = {
40
39
 
41
40
  return JSXAttribute;
42
41
  }(function (node) {
43
- var _node$name, _closesetJSXElement$n;
42
+ var _node$name;
44
43
 
45
44
  if (!unsafeOverrides.includes(node === null || node === void 0 ? void 0 : (_node$name = node.name) === null || _node$name === void 0 ? void 0 : _node$name.name)) {
46
45
  return;
@@ -49,9 +48,8 @@ var rule = {
49
48
  var source = context.getSourceCode();
50
49
  var bannedApi = node.name.name; // traverse the tree to the nearest JSX Element and get its name
51
50
 
52
- var closesetJSXElement = (0, _isNode.getClosestNodeOfType)(node, 'JSXOpeningElement'); // @ts-ignore
53
-
54
- var jsxElementName = closesetJSXElement === null || closesetJSXElement === void 0 ? void 0 : (_closesetJSXElement$n = closesetJSXElement.name) === null || _closesetJSXElement$n === void 0 ? void 0 : _closesetJSXElement$n.name;
51
+ var closesetJSXElement = (0, _eslintCodemodUtils.closestOfType)(node, 'JSXOpeningElement');
52
+ var jsxElementName = (0, _eslintCodemodUtils.isNodeOfType)(closesetJSXElement === null || closesetJSXElement === void 0 ? void 0 : closesetJSXElement.name, 'JSXIdentifier') && closesetJSXElement.name.name;
55
53
 
56
54
  if (!jsxElementName) {
57
55
  return;
@@ -12,7 +12,7 @@ var namedThemeExports = [{
12
12
  message: 'The visuallyHidden mixin is deprecated. Please use `@atlaskit/visually-hidden` instead.'
13
13
  }, {
14
14
  importName: 'focusRing',
15
- message: 'The focusRing mixin is deprecated. Please use `@atlaskit/visually-hidden` instead.'
15
+ message: 'The focusRing mixin is deprecated. Please use `@atlaskit/focus-ring` instead.'
16
16
  }];
17
17
  exports.namedThemeExports = namedThemeExports;
18
18
  var restrictedPaths = [{
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
 
10
+ var _eslintCodemodUtils = require("eslint-codemod-utils");
11
+
10
12
  var _renameMapping = _interopRequireDefault(require("@atlaskit/tokens/rename-mapping"));
11
13
 
12
14
  var _tokenIds = require("@atlaskit/tokens/token-ids");
@@ -40,7 +42,7 @@ var rule = {
40
42
  var config = context.options[0] || defaultConfig;
41
43
  return {
42
44
  'TaggedTemplateExpression[tag.name="css"],TaggedTemplateExpression[tag.object.name="styled"]': function TaggedTemplateExpressionTagNameCssTaggedTemplateExpressionTagObjectNameStyled(node) {
43
- if (node.type !== 'TaggedTemplateExpression') {
45
+ if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'TaggedTemplateExpression')) {
44
46
  return;
45
47
  }
46
48
 
@@ -91,7 +93,7 @@ var rule = {
91
93
  }
92
94
  },
93
95
  'CallExpression[callee.name="token"]': function CallExpressionCalleeNameToken(node) {
94
- if (node.type !== 'CallExpression') {
96
+ if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'CallExpression')) {
95
97
  return;
96
98
  }
97
99
 
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _getImportNodeBySource = require("../utils/get-import-node-by-source");
8
+ var _eslintCodemodUtils = require("eslint-codemod-utils");
9
9
 
10
- var _isNode = require("../utils/is-node");
10
+ var _getImportNodeBySource = require("../utils/get-import-node-by-source");
11
11
 
12
12
  var _constants = require("./constants");
13
13
 
@@ -23,7 +23,7 @@ var _default = function _default(source, node) {
23
23
  return [];
24
24
  }
25
25
 
26
- var jsxOpeningElement = (0, _isNode.getClosestNodeOfType)(node, 'JSXOpeningElement');
26
+ var jsxOpeningElement = (0, _eslintCodemodUtils.closestOfType)(node, 'JSXOpeningElement');
27
27
 
28
28
  if (visuallyHiddenNode) {
29
29
  fixes.push(fixer.replaceText(jsxOpeningElement, visuallyHiddenNode.specifiers[0].local.name));
@@ -9,6 +9,8 @@ exports.default = void 0;
9
9
 
10
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
11
 
12
+ var _eslintCodemodUtils = require("eslint-codemod-utils");
13
+
12
14
  var _isNode = require("../utils/is-node");
13
15
 
14
16
  var _fixJsx = _interopRequireDefault(require("./fix-jsx"));
@@ -37,7 +39,7 @@ var rule = {
37
39
  var source = context.getSourceCode();
38
40
  return {
39
41
  ImportDeclaration: function ImportDeclaration(node) {
40
- var isThemeNode = node.source.value === '@atlaskit/theme' || node.source.value === '@atlaskit/theme/constants';
42
+ var isThemeNode = (0, _eslintCodemodUtils.hasImportDeclaration)(node, '@atlaskit/theme') || (0, _eslintCodemodUtils.hasImportDeclaration)(node, '@atlaskit/theme/constants');
41
43
 
42
44
  if (!isThemeNode) {
43
45
  return;
@@ -89,7 +91,7 @@ var rule = {
89
91
  import: "".concat(node.source.value),
90
92
  local: visuallyHiddenOrAssistive.local.name
91
93
  },
92
- fix: (0, _fixVanilla.default)(source, (0, _isNode.getClosestNodeOfType)(idNode.parent, 'TaggedTemplateExpression'))
94
+ fix: (0, _fixVanilla.default)(source, (0, _eslintCodemodUtils.closestOfType)(idNode.parent, 'TaggedTemplateExpression'))
93
95
  });
94
96
  }
95
97
  }
@@ -155,7 +157,7 @@ var rule = {
155
157
  }
156
158
  },
157
159
  'TaggedTemplateExpression[tag.name="css"],TaggedTemplateExpression[tag.object.name="styled"]': function TaggedTemplateExpressionTagNameCssTaggedTemplateExpressionTagObjectNameStyled(node) {
158
- if (node.type !== 'TaggedTemplateExpression') {
160
+ if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'TaggedTemplateExpression')) {
159
161
  return;
160
162
  }
161
163
 
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getImportedNodeBySource = void 0;
7
7
 
8
- /* eslint-disable import/no-unresolved */
9
-
10
8
  /**
11
9
  * @param {SourceCode} source The eslint source
12
10
  * @param {string} path The path specified to find
@@ -3,7 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isStyledTemplateNode = exports.isStyledObjectNode = exports.isDecendantOfType = exports.isDecendantOfStyleJsxAttribute = exports.isDecendantOfStyleBlock = exports.isDecendantOfGlobalToken = exports.isChildOfType = exports.getClosestNodeOfType = void 0;
6
+ exports.isStyledTemplateNode = exports.isStyledObjectNode = exports.isDecendantOfType = exports.isDecendantOfStyleJsxAttribute = exports.isDecendantOfStyleBlock = exports.isDecendantOfGlobalToken = exports.isChildOfType = void 0;
7
+
8
+ var _eslintCodemodUtils = require("eslint-codemod-utils");
7
9
 
8
10
  var isDecendantOfGlobalToken = function isDecendantOfGlobalToken(node) {
9
11
  if (node.type === 'CallExpression' && node.callee.type === 'Identifier' && node.callee.name === 'token') {
@@ -112,25 +114,7 @@ var isDecendantOfStyleBlock = function isDecendantOfStyleBlock(node) {
112
114
  exports.isDecendantOfStyleBlock = isDecendantOfStyleBlock;
113
115
 
114
116
  var isChildOfType = function isChildOfType(node, type) {
115
- return node.parent.type === type;
116
- };
117
- /**
118
- * Given a node, walk up the tree until there is no parent OR a common ancestor of the correct type is found
119
- */
120
-
121
-
122
- exports.isChildOfType = isChildOfType;
123
-
124
- var getClosestNodeOfType = function getClosestNodeOfType(node, type) {
125
- if (!node) {
126
- return node;
127
- }
128
-
129
- if (node.type === type) {
130
- return node;
131
- }
132
-
133
- return getClosestNodeOfType(node.parent, type);
117
+ return (0, _eslintCodemodUtils.isNodeOfType)(node.parent, type);
134
118
  };
135
119
 
136
- exports.getClosestNodeOfType = getClosestNodeOfType;
120
+ exports.isChildOfType = isChildOfType;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/eslint-plugin-design-system",
3
- "version": "4.4.2",
3
+ "version": "4.4.5",
4
4
  "sideEffects": false
5
5
  }
@@ -1,3 +1,4 @@
1
+ import { isNodeOfType } from 'eslint-codemod-utils';
1
2
  import { includesHardCodedColor, isHardCodedColor, isLegacyColor, isLegacyNamedColor } from '../utils/is-color';
2
3
  import { isLegacyElevation } from '../utils/is-elevation';
3
4
  import { isChildOfType, isDecendantOfGlobalToken, isDecendantOfStyleBlock, isDecendantOfStyleJsxAttribute, isDecendantOfType } from '../utils/is-node';
@@ -14,8 +15,7 @@ const getTokenSuggestion = (node, reference, config) => [{
14
15
  }, {
15
16
  shouldReturnSuggestion: !isDecendantOfGlobalToken(node) && config.shouldEnforceFallbacks === true,
16
17
  desc: `Convert to token with fallback`,
17
- fix: fixer => fixer.replaceText(node, // @ts-ignore JSXAttribute is not available in @types/estree
18
- node.parent.type === 'JSXAttribute' ? `{token('', ${reference})}` : `token('', ${reference})`)
18
+ fix: fixer => fixer.replaceText(node, isNodeOfType(node.parent, 'JSXAttribute') ? `{token('', ${reference})}` : `token('', ${reference})`)
19
19
  }].filter(filterSuggestion);
20
20
 
21
21
  const filterSuggestion = ({
@@ -1,6 +1,5 @@
1
- // eslint-disable-next-line import/no-unresolved
1
+ import { closestOfType, isNodeOfType } from 'eslint-codemod-utils';
2
2
  import { getImportedNodeBySource } from '../utils/get-import-node-by-source';
3
- import { getClosestNodeOfType } from '../utils/is-node';
4
3
  const unsafeOverridesConfig = {
5
4
  cssFn: ['@atlaskit/menu', '@atlaskit/side-navigation'],
6
5
  overrides: ['@atlaskit/drawer', '@atlaskit/menu', '@atlaskit/side-navigation']
@@ -22,7 +21,7 @@ const rule = {
22
21
  return {
23
22
  // find JSX atribute - find name of attribute - get source and find relevant identifiers.
24
23
  JSXAttribute(node) {
25
- var _node$name, _closesetJSXElement$n;
24
+ var _node$name;
26
25
 
27
26
  if (!unsafeOverrides.includes(node === null || node === void 0 ? void 0 : (_node$name = node.name) === null || _node$name === void 0 ? void 0 : _node$name.name)) {
28
27
  return;
@@ -31,9 +30,8 @@ const rule = {
31
30
  const source = context.getSourceCode();
32
31
  const bannedApi = node.name.name; // traverse the tree to the nearest JSX Element and get its name
33
32
 
34
- const closesetJSXElement = getClosestNodeOfType(node, 'JSXOpeningElement'); // @ts-ignore
35
-
36
- const jsxElementName = closesetJSXElement === null || closesetJSXElement === void 0 ? void 0 : (_closesetJSXElement$n = closesetJSXElement.name) === null || _closesetJSXElement$n === void 0 ? void 0 : _closesetJSXElement$n.name;
33
+ const closesetJSXElement = closestOfType(node, 'JSXOpeningElement');
34
+ const jsxElementName = isNodeOfType(closesetJSXElement === null || closesetJSXElement === void 0 ? void 0 : closesetJSXElement.name, 'JSXIdentifier') && closesetJSXElement.name.name;
37
35
 
38
36
  if (!jsxElementName) {
39
37
  return;
@@ -6,7 +6,7 @@ export const namedThemeExports = [{
6
6
  message: 'The visuallyHidden mixin is deprecated. Please use `@atlaskit/visually-hidden` instead.'
7
7
  }, {
8
8
  importName: 'focusRing',
9
- message: 'The focusRing mixin is deprecated. Please use `@atlaskit/visually-hidden` instead.'
9
+ message: 'The focusRing mixin is deprecated. Please use `@atlaskit/focus-ring` instead.'
10
10
  }];
11
11
  export const restrictedPaths = [{
12
12
  path: '@atlaskit/navigation-next',
@@ -1,3 +1,4 @@
1
+ import { isNodeOfType } from 'eslint-codemod-utils';
1
2
  import renameMapping from '@atlaskit/tokens/rename-mapping';
2
3
  import { getTokenId } from '@atlaskit/tokens/token-ids';
3
4
  import tokens from '@atlaskit/tokens/token-names';
@@ -49,7 +50,7 @@ token('color.background.blanket');
49
50
  const config = context.options[0] || defaultConfig;
50
51
  return {
51
52
  'TaggedTemplateExpression[tag.name="css"],TaggedTemplateExpression[tag.object.name="styled"]': node => {
52
- if (node.type !== 'TaggedTemplateExpression') {
53
+ if (!isNodeOfType(node, 'TaggedTemplateExpression')) {
53
54
  return;
54
55
  }
55
56
 
@@ -96,7 +97,7 @@ token('color.background.blanket');
96
97
  }
97
98
  },
98
99
  'CallExpression[callee.name="token"]': node => {
99
- if (node.type !== 'CallExpression') {
100
+ if (!isNodeOfType(node, 'CallExpression')) {
100
101
  return;
101
102
  }
102
103
 
@@ -1,5 +1,5 @@
1
+ import { closestOfType } from 'eslint-codemod-utils';
1
2
  import { getImportedNodeBySource } from '../utils/get-import-node-by-source';
2
- import { getClosestNodeOfType } from '../utils/is-node';
3
3
  import { IMPORT_NAME, VISUALLY_HIDDEN_IMPORT, VISUALLY_HIDDEN_SOURCE } from './constants';
4
4
  import { getFirstImport } from './utils';
5
5
  export default ((source, node) => fixer => {
@@ -11,7 +11,7 @@ export default ((source, node) => fixer => {
11
11
  return [];
12
12
  }
13
13
 
14
- const jsxOpeningElement = getClosestNodeOfType(node, 'JSXOpeningElement');
14
+ const jsxOpeningElement = closestOfType(node, 'JSXOpeningElement');
15
15
 
16
16
  if (visuallyHiddenNode) {
17
17
  fixes.push(fixer.replaceText(jsxOpeningElement, visuallyHiddenNode.specifiers[0].local.name));
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable @atlaskit/design-system/use-visually-hidden */
2
- import { getClosestNodeOfType, isStyledObjectNode, isStyledTemplateNode } from '../utils/is-node';
2
+ import { closestOfType, hasImportDeclaration, isNodeOfType } from 'eslint-codemod-utils';
3
+ import { isStyledObjectNode, isStyledTemplateNode } from '../utils/is-node';
3
4
  import fixJsx from './fix-jsx';
4
5
  import fixVanilla from './fix-vanilla';
5
6
  import { countMatchingKeyValues, getObjectLikeness, makeTemplateLiteralIntoEntries } from './utils';
@@ -23,7 +24,7 @@ const rule = {
23
24
  const source = context.getSourceCode();
24
25
  return {
25
26
  ImportDeclaration(node) {
26
- const isThemeNode = node.source.value === '@atlaskit/theme' || node.source.value === '@atlaskit/theme/constants';
27
+ const isThemeNode = hasImportDeclaration(node, '@atlaskit/theme') || hasImportDeclaration(node, '@atlaskit/theme/constants');
27
28
 
28
29
  if (!isThemeNode) {
29
30
  return;
@@ -69,7 +70,7 @@ const rule = {
69
70
  import: `${node.source.value}`,
70
71
  local: visuallyHiddenOrAssistive.local.name
71
72
  },
72
- fix: fixVanilla(source, getClosestNodeOfType(idNode.parent, 'TaggedTemplateExpression'))
73
+ fix: fixVanilla(source, closestOfType(idNode.parent, 'TaggedTemplateExpression'))
73
74
  });
74
75
  }
75
76
  }
@@ -138,7 +139,7 @@ const rule = {
138
139
  },
139
140
 
140
141
  'TaggedTemplateExpression[tag.name="css"],TaggedTemplateExpression[tag.object.name="styled"]': node => {
141
- if (node.type !== 'TaggedTemplateExpression') {
142
+ if (!isNodeOfType(node, 'TaggedTemplateExpression')) {
142
143
  return;
143
144
  }
144
145
 
@@ -1,5 +1,3 @@
1
- /* eslint-disable import/no-unresolved */
2
-
3
1
  /**
4
2
  * @param {SourceCode} source The eslint source
5
3
  * @param {string} path The path specified to find
@@ -1,3 +1,4 @@
1
+ import { isNodeOfType } from 'eslint-codemod-utils';
1
2
  export const isDecendantOfGlobalToken = node => {
2
3
  if (node.type === 'CallExpression' && node.callee.type === 'Identifier' && node.callee.name === 'token') {
3
4
  return true;
@@ -76,19 +77,4 @@ export const isDecendantOfStyleBlock = node => {
76
77
 
77
78
  return false;
78
79
  };
79
- export const isChildOfType = (node, type) => node.parent.type === type;
80
- /**
81
- * Given a node, walk up the tree until there is no parent OR a common ancestor of the correct type is found
82
- */
83
-
84
- export const getClosestNodeOfType = (node, type) => {
85
- if (!node) {
86
- return node;
87
- }
88
-
89
- if (node.type === type) {
90
- return node;
91
- }
92
-
93
- return getClosestNodeOfType(node.parent, type);
94
- };
80
+ export const isChildOfType = (node, type) => isNodeOfType(node.parent, type);
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/eslint-plugin-design-system",
3
- "version": "4.4.2",
3
+ "version": "4.4.5",
4
4
  "sideEffects": false
5
5
  }
@@ -1,3 +1,4 @@
1
+ import { isNodeOfType } from 'eslint-codemod-utils';
1
2
  import { includesHardCodedColor, isHardCodedColor, isLegacyColor, isLegacyNamedColor } from '../utils/is-color';
2
3
  import { isLegacyElevation } from '../utils/is-elevation';
3
4
  import { isChildOfType, isDecendantOfGlobalToken, isDecendantOfStyleBlock, isDecendantOfStyleJsxAttribute, isDecendantOfType } from '../utils/is-node';
@@ -20,8 +21,7 @@ var getTokenSuggestion = function getTokenSuggestion(node, reference, config) {
20
21
  shouldReturnSuggestion: !isDecendantOfGlobalToken(node) && config.shouldEnforceFallbacks === true,
21
22
  desc: "Convert to token with fallback",
22
23
  fix: function fix(fixer) {
23
- return fixer.replaceText(node, // @ts-ignore JSXAttribute is not available in @types/estree
24
- node.parent.type === 'JSXAttribute' ? "{token('', ".concat(reference, ")}") : "token('', ".concat(reference, ")"));
24
+ return fixer.replaceText(node, isNodeOfType(node.parent, 'JSXAttribute') ? "{token('', ".concat(reference, ")}") : "token('', ".concat(reference, ")"));
25
25
  }
26
26
  }].filter(filterSuggestion);
27
27
  };
@@ -1,6 +1,5 @@
1
- // eslint-disable-next-line import/no-unresolved
1
+ import { closestOfType, isNodeOfType } from 'eslint-codemod-utils';
2
2
  import { getImportedNodeBySource } from '../utils/get-import-node-by-source';
3
- import { getClosestNodeOfType } from '../utils/is-node';
4
3
  var unsafeOverridesConfig = {
5
4
  cssFn: ['@atlaskit/menu', '@atlaskit/side-navigation'],
6
5
  overrides: ['@atlaskit/drawer', '@atlaskit/menu', '@atlaskit/side-navigation']
@@ -31,7 +30,7 @@ var rule = {
31
30
 
32
31
  return JSXAttribute;
33
32
  }(function (node) {
34
- var _node$name, _closesetJSXElement$n;
33
+ var _node$name;
35
34
 
36
35
  if (!unsafeOverrides.includes(node === null || node === void 0 ? void 0 : (_node$name = node.name) === null || _node$name === void 0 ? void 0 : _node$name.name)) {
37
36
  return;
@@ -40,9 +39,8 @@ var rule = {
40
39
  var source = context.getSourceCode();
41
40
  var bannedApi = node.name.name; // traverse the tree to the nearest JSX Element and get its name
42
41
 
43
- var closesetJSXElement = getClosestNodeOfType(node, 'JSXOpeningElement'); // @ts-ignore
44
-
45
- var jsxElementName = closesetJSXElement === null || closesetJSXElement === void 0 ? void 0 : (_closesetJSXElement$n = closesetJSXElement.name) === null || _closesetJSXElement$n === void 0 ? void 0 : _closesetJSXElement$n.name;
42
+ var closesetJSXElement = closestOfType(node, 'JSXOpeningElement');
43
+ var jsxElementName = isNodeOfType(closesetJSXElement === null || closesetJSXElement === void 0 ? void 0 : closesetJSXElement.name, 'JSXIdentifier') && closesetJSXElement.name.name;
46
44
 
47
45
  if (!jsxElementName) {
48
46
  return;
@@ -6,7 +6,7 @@ export var namedThemeExports = [{
6
6
  message: 'The visuallyHidden mixin is deprecated. Please use `@atlaskit/visually-hidden` instead.'
7
7
  }, {
8
8
  importName: 'focusRing',
9
- message: 'The focusRing mixin is deprecated. Please use `@atlaskit/visually-hidden` instead.'
9
+ message: 'The focusRing mixin is deprecated. Please use `@atlaskit/focus-ring` instead.'
10
10
  }];
11
11
  export var restrictedPaths = [{
12
12
  path: '@atlaskit/navigation-next',
@@ -1,3 +1,4 @@
1
+ import { isNodeOfType } from 'eslint-codemod-utils';
1
2
  import renameMapping from '@atlaskit/tokens/rename-mapping';
2
3
  import { getTokenId } from '@atlaskit/tokens/token-ids';
3
4
  import tokens from '@atlaskit/tokens/token-names';
@@ -26,7 +27,7 @@ var rule = {
26
27
  var config = context.options[0] || defaultConfig;
27
28
  return {
28
29
  'TaggedTemplateExpression[tag.name="css"],TaggedTemplateExpression[tag.object.name="styled"]': function TaggedTemplateExpressionTagNameCssTaggedTemplateExpressionTagObjectNameStyled(node) {
29
- if (node.type !== 'TaggedTemplateExpression') {
30
+ if (!isNodeOfType(node, 'TaggedTemplateExpression')) {
30
31
  return;
31
32
  }
32
33
 
@@ -77,7 +78,7 @@ var rule = {
77
78
  }
78
79
  },
79
80
  'CallExpression[callee.name="token"]': function CallExpressionCalleeNameToken(node) {
80
- if (node.type !== 'CallExpression') {
81
+ if (!isNodeOfType(node, 'CallExpression')) {
81
82
  return;
82
83
  }
83
84
 
@@ -1,5 +1,5 @@
1
+ import { closestOfType } from 'eslint-codemod-utils';
1
2
  import { getImportedNodeBySource } from '../utils/get-import-node-by-source';
2
- import { getClosestNodeOfType } from '../utils/is-node';
3
3
  import { IMPORT_NAME, VISUALLY_HIDDEN_IMPORT, VISUALLY_HIDDEN_SOURCE } from './constants';
4
4
  import { getFirstImport } from './utils';
5
5
  export default (function (source, node) {
@@ -12,7 +12,7 @@ export default (function (source, node) {
12
12
  return [];
13
13
  }
14
14
 
15
- var jsxOpeningElement = getClosestNodeOfType(node, 'JSXOpeningElement');
15
+ var jsxOpeningElement = closestOfType(node, 'JSXOpeningElement');
16
16
 
17
17
  if (visuallyHiddenNode) {
18
18
  fixes.push(fixer.replaceText(jsxOpeningElement, visuallyHiddenNode.specifiers[0].local.name));
@@ -1,7 +1,8 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
 
3
3
  /* eslint-disable @atlaskit/design-system/use-visually-hidden */
4
- import { getClosestNodeOfType, isStyledObjectNode, isStyledTemplateNode } from '../utils/is-node';
4
+ import { closestOfType, hasImportDeclaration, isNodeOfType } from 'eslint-codemod-utils';
5
+ import { isStyledObjectNode, isStyledTemplateNode } from '../utils/is-node';
5
6
  import fixJsx from './fix-jsx';
6
7
  import fixVanilla from './fix-vanilla';
7
8
  import { countMatchingKeyValues, getObjectLikeness, makeTemplateLiteralIntoEntries } from './utils';
@@ -24,7 +25,7 @@ var rule = {
24
25
  var source = context.getSourceCode();
25
26
  return {
26
27
  ImportDeclaration: function ImportDeclaration(node) {
27
- var isThemeNode = node.source.value === '@atlaskit/theme' || node.source.value === '@atlaskit/theme/constants';
28
+ var isThemeNode = hasImportDeclaration(node, '@atlaskit/theme') || hasImportDeclaration(node, '@atlaskit/theme/constants');
28
29
 
29
30
  if (!isThemeNode) {
30
31
  return;
@@ -76,7 +77,7 @@ var rule = {
76
77
  import: "".concat(node.source.value),
77
78
  local: visuallyHiddenOrAssistive.local.name
78
79
  },
79
- fix: fixVanilla(source, getClosestNodeOfType(idNode.parent, 'TaggedTemplateExpression'))
80
+ fix: fixVanilla(source, closestOfType(idNode.parent, 'TaggedTemplateExpression'))
80
81
  });
81
82
  }
82
83
  }
@@ -142,7 +143,7 @@ var rule = {
142
143
  }
143
144
  },
144
145
  'TaggedTemplateExpression[tag.name="css"],TaggedTemplateExpression[tag.object.name="styled"]': function TaggedTemplateExpressionTagNameCssTaggedTemplateExpressionTagObjectNameStyled(node) {
145
- if (node.type !== 'TaggedTemplateExpression') {
146
+ if (!isNodeOfType(node, 'TaggedTemplateExpression')) {
146
147
  return;
147
148
  }
148
149
 
@@ -1,5 +1,3 @@
1
- /* eslint-disable import/no-unresolved */
2
-
3
1
  /**
4
2
  * @param {SourceCode} source The eslint source
5
3
  * @param {string} path The path specified to find
@@ -1,3 +1,4 @@
1
+ import { isNodeOfType } from 'eslint-codemod-utils';
1
2
  export var isDecendantOfGlobalToken = function isDecendantOfGlobalToken(node) {
2
3
  if (node.type === 'CallExpression' && node.callee.type === 'Identifier' && node.callee.name === 'token') {
3
4
  return true;
@@ -87,20 +88,5 @@ export var isDecendantOfStyleBlock = function isDecendantOfStyleBlock(node) {
87
88
  return false;
88
89
  };
89
90
  export var isChildOfType = function isChildOfType(node, type) {
90
- return node.parent.type === type;
91
- };
92
- /**
93
- * Given a node, walk up the tree until there is no parent OR a common ancestor of the correct type is found
94
- */
95
-
96
- export var getClosestNodeOfType = function getClosestNodeOfType(node, type) {
97
- if (!node) {
98
- return node;
99
- }
100
-
101
- if (node.type === type) {
102
- return node;
103
- }
104
-
105
- return getClosestNodeOfType(node.parent, type);
91
+ return isNodeOfType(node.parent, type);
106
92
  };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/eslint-plugin-design-system",
3
- "version": "4.4.2",
3
+ "version": "4.4.5",
4
4
  "sideEffects": false
5
5
  }
@@ -18,7 +18,7 @@ export declare type ReferenceObject = typeof referenceObject;
18
18
  /**
19
19
  * Returns the first import in the esprima AST.
20
20
  */
21
- export declare const getFirstImport: (source: SourceCode) => import("estree").FunctionDeclaration | import("estree").ExpressionStatement | import("estree").BlockStatement | import("estree").EmptyStatement | import("estree").DebuggerStatement | import("estree").WithStatement | import("estree").ReturnStatement | import("estree").LabeledStatement | import("estree").BreakStatement | import("estree").ContinueStatement | import("estree").IfStatement | import("estree").SwitchStatement | import("estree").ThrowStatement | import("estree").TryStatement | import("estree").WhileStatement | import("estree").DoWhileStatement | import("estree").ForStatement | import("estree").ForInStatement | import("estree").ForOfStatement | import("estree").VariableDeclaration | import("estree").ClassDeclaration | import("estree").ImportDeclaration | import("estree").ExportNamedDeclaration | import("estree").ExportDefaultDeclaration | import("estree").ExportAllDeclaration | import("estree").Directive | undefined;
21
+ export declare const getFirstImport: (source: SourceCode) => import("estree").Statement | import("estree").ModuleDeclaration | import("estree").Directive | undefined;
22
22
  /**
23
23
  * Takes a template literal and returns [key, value] array of the css properties
24
24
  */
@@ -1,5 +1,5 @@
1
1
  import type { SourceCode } from 'eslint';
2
- import type { ImportDeclaration } from 'estree';
2
+ import type { ImportDeclaration } from 'eslint-codemod-utils';
3
3
  /**
4
4
  * @param {SourceCode} source The eslint source
5
5
  * @param {string} path The path specified to find
@@ -1,13 +1,9 @@
1
1
  import type { Rule } from 'eslint';
2
- import type { CallExpression, TaggedTemplateExpression } from 'estree';
2
+ import { CallExpression, Expression, TaggedTemplateExpression } from 'eslint-codemod-utils';
3
3
  export declare const isDecendantOfGlobalToken: (node: Rule.Node) => boolean;
4
4
  export declare const isDecendantOfType: (node: Rule.Node, type: Rule.Node['type'], skipNode?: boolean) => boolean;
5
5
  export declare const isDecendantOfStyleJsxAttribute: (node: Rule.Node) => boolean;
6
- export declare const isStyledTemplateNode: (node?: import("estree").Identifier | import("estree").SimpleLiteral | import("estree").RegExpLiteral | import("estree").FunctionExpression | import("estree").ArrowFunctionExpression | import("estree").ThisExpression | import("estree").ArrayExpression | import("estree").ObjectExpression | import("estree").YieldExpression | import("estree").UnaryExpression | import("estree").UpdateExpression | import("estree").BinaryExpression | import("estree").AssignmentExpression | import("estree").LogicalExpression | import("estree").MemberExpression | import("estree").ConditionalExpression | import("estree").SimpleCallExpression | import("estree").NewExpression | import("estree").SequenceExpression | import("estree").TemplateLiteral | TaggedTemplateExpression | import("estree").ClassExpression | import("estree").MetaProperty | import("estree").AwaitExpression | null | undefined) => node is TaggedTemplateExpression;
7
- export declare const isStyledObjectNode: (node?: import("estree").Identifier | import("estree").SimpleLiteral | import("estree").RegExpLiteral | import("estree").FunctionExpression | import("estree").ArrowFunctionExpression | import("estree").ThisExpression | import("estree").ArrayExpression | import("estree").ObjectExpression | import("estree").YieldExpression | import("estree").UnaryExpression | import("estree").UpdateExpression | import("estree").BinaryExpression | import("estree").AssignmentExpression | import("estree").LogicalExpression | import("estree").MemberExpression | import("estree").ConditionalExpression | import("estree").SimpleCallExpression | import("estree").NewExpression | import("estree").SequenceExpression | import("estree").TemplateLiteral | TaggedTemplateExpression | import("estree").ClassExpression | import("estree").MetaProperty | import("estree").AwaitExpression | null | undefined) => node is CallExpression;
6
+ export declare const isStyledTemplateNode: (node?: Expression | null | undefined) => node is TaggedTemplateExpression;
7
+ export declare const isStyledObjectNode: (node?: Expression | null | undefined) => node is CallExpression;
8
8
  export declare const isDecendantOfStyleBlock: (node: Rule.Node) => boolean;
9
9
  export declare const isChildOfType: (node: Rule.Node, type: Rule.Node['type']) => boolean;
10
- /**
11
- * Given a node, walk up the tree until there is no parent OR a common ancestor of the correct type is found
12
- */
13
- export declare const getClosestNodeOfType: (node: Rule.Node, type: Rule.NodeTypes) => Rule.Node;
package/package.json CHANGED
@@ -1,13 +1,19 @@
1
1
  {
2
2
  "name": "@atlaskit/eslint-plugin-design-system",
3
- "version": "4.4.2",
3
+ "description": "The essential plugin for use with the Atlassian Design System.",
4
+ "version": "4.4.5",
4
5
  "author": "Atlassian Pty Ltd",
5
6
  "publishConfig": {
6
7
  "registry": "https://registry.npmjs.org/"
7
8
  },
8
9
  "atlassian": {
9
10
  "team": "Design System Team",
10
- "releaseModel": "scheduled"
11
+ "releaseModel": "scheduled",
12
+ "website": {
13
+ "name": "ESLint plugin",
14
+ "category": "Tooling",
15
+ "draft": true
16
+ }
11
17
  },
12
18
  "repository": "https://bitbucket.org/atlassian/atlassian-frontend",
13
19
  "main": "dist/cjs/index.js",
@@ -21,9 +27,11 @@
21
27
  },
22
28
  "dependencies": {
23
29
  "@atlaskit/tokens": "^0.9.0",
24
- "@babel/runtime": "^7.0.0"
30
+ "@babel/runtime": "^7.0.0",
31
+ "eslint-codemod-utils": "^1.3.2"
25
32
  },
26
33
  "devDependencies": {
34
+ "@atlaskit/ds-lib": "^1.4.1",
27
35
  "@atlaskit/theme": "^12.0.2",
28
36
  "@atlassian/atlassian-frontend-prettier-config-1.0.1": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.1",
29
37
  "@emotion/core": "^10.0.9",
@@ -32,7 +40,7 @@
32
40
  "react": "^16.8.0",
33
41
  "ts-node": "^10.0.0",
34
42
  "tsconfig-paths": "^3.9.0",
35
- "typescript": "3.9.10"
43
+ "typescript": "4.2.4"
36
44
  },
37
45
  "techstack": {
38
46
  "@atlassian/frontend": {
@@ -48,5 +56,6 @@
48
56
  ]
49
57
  }
50
58
  },
59
+ "homepage": "https://atlassian.design/components/eslint-plugin-design-system",
51
60
  "prettier": "@atlassian/atlassian-frontend-prettier-config-1.0.1"
52
61
  }
@@ -1,29 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.removeNamedImport = void 0;
7
-
8
- /* eslint-disable import/no-unresolved */
9
-
10
- /**
11
- * @param {SourceCode} source The eslint source
12
- * @param {string} path The path specified to find
13
- * @returns FixerObject
14
- */
15
- var removeNamedImport = function removeNamedImport(fixer, importNode, name) {
16
- var filteredSpecifers = importNode.specifiers.filter(function (node) {
17
- return node.type === 'ImportSpecifier' && node.imported.name !== name;
18
- });
19
-
20
- if (filteredSpecifers.length) {
21
- return fixer.remove(importNode.specifiers.find(function (node) {
22
- return node.type === 'ImportSpecifier' && node.imported.name === name;
23
- }));
24
- }
25
-
26
- return fixer.remove(importNode);
27
- };
28
-
29
- exports.removeNamedImport = removeNamedImport;
@@ -1,16 +0,0 @@
1
- /* eslint-disable import/no-unresolved */
2
-
3
- /**
4
- * @param {SourceCode} source The eslint source
5
- * @param {string} path The path specified to find
6
- * @returns FixerObject
7
- */
8
- export const removeNamedImport = (fixer, importNode, name) => {
9
- const filteredSpecifers = importNode.specifiers.filter(node => node.type === 'ImportSpecifier' && node.imported.name !== name);
10
-
11
- if (filteredSpecifers.length) {
12
- return fixer.remove(importNode.specifiers.find(node => node.type === 'ImportSpecifier' && node.imported.name === name));
13
- }
14
-
15
- return fixer.remove(importNode);
16
- };
@@ -1,20 +0,0 @@
1
- /* eslint-disable import/no-unresolved */
2
-
3
- /**
4
- * @param {SourceCode} source The eslint source
5
- * @param {string} path The path specified to find
6
- * @returns FixerObject
7
- */
8
- export var removeNamedImport = function removeNamedImport(fixer, importNode, name) {
9
- var filteredSpecifers = importNode.specifiers.filter(function (node) {
10
- return node.type === 'ImportSpecifier' && node.imported.name !== name;
11
- });
12
-
13
- if (filteredSpecifers.length) {
14
- return fixer.remove(importNode.specifiers.find(function (node) {
15
- return node.type === 'ImportSpecifier' && node.imported.name === name;
16
- }));
17
- }
18
-
19
- return fixer.remove(importNode);
20
- };
@@ -1,8 +0,0 @@
1
- import type { Rule } from 'eslint';
2
- import type { ImportDeclaration } from 'estree';
3
- /**
4
- * @param {SourceCode} source The eslint source
5
- * @param {string} path The path specified to find
6
- * @returns FixerObject
7
- */
8
- export declare const removeNamedImport: (fixer: Rule.RuleFixer, importNode: ImportDeclaration, name: string) => Rule.Fix;