@atlaskit/eslint-plugin-design-system 5.1.0 → 5.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 (80) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/constellation/index/usage.mdx +1 -1
  4. package/dist/cjs/presets/all.codegen.js +5 -5
  5. package/dist/cjs/rules/ensure-design-token-usage/index.js +140 -64
  6. package/dist/cjs/rules/icon-label/index.js +2 -1
  7. package/dist/cjs/rules/no-banned-imports/index.js +2 -1
  8. package/dist/cjs/rules/no-deprecated-design-token-usage/index.js +2 -1
  9. package/dist/cjs/rules/no-margin/index.js +1 -0
  10. package/dist/cjs/rules/no-unsafe-design-token-usage/index.js +2 -1
  11. package/dist/cjs/rules/use-primitives/index.js +3 -1
  12. package/dist/cjs/rules/use-visually-hidden/index.js +2 -1
  13. package/dist/cjs/rules/utils/is-color.js +12 -2
  14. package/dist/cjs/rules/utils/is-node.js +1 -8
  15. package/dist/cjs/version.json +1 -1
  16. package/dist/es2019/presets/all.codegen.js +5 -5
  17. package/dist/es2019/rules/ensure-design-token-usage/index.js +140 -65
  18. package/dist/es2019/rules/icon-label/index.js +2 -1
  19. package/dist/es2019/rules/no-banned-imports/index.js +2 -1
  20. package/dist/es2019/rules/no-deprecated-design-token-usage/index.js +2 -1
  21. package/dist/es2019/rules/no-margin/index.js +1 -0
  22. package/dist/es2019/rules/no-unsafe-design-token-usage/index.js +2 -1
  23. package/dist/es2019/rules/use-primitives/index.js +3 -1
  24. package/dist/es2019/rules/use-visually-hidden/index.js +2 -1
  25. package/dist/es2019/rules/utils/is-color.js +4 -1
  26. package/dist/es2019/rules/utils/is-node.js +0 -6
  27. package/dist/es2019/version.json +1 -1
  28. package/dist/esm/presets/all.codegen.js +5 -5
  29. package/dist/esm/rules/ensure-design-token-usage/index.js +140 -66
  30. package/dist/esm/rules/icon-label/index.js +2 -1
  31. package/dist/esm/rules/no-banned-imports/index.js +2 -1
  32. package/dist/esm/rules/no-deprecated-design-token-usage/index.js +2 -1
  33. package/dist/esm/rules/no-margin/index.js +1 -0
  34. package/dist/esm/rules/no-unsafe-design-token-usage/index.js +2 -1
  35. package/dist/esm/rules/use-primitives/index.js +3 -1
  36. package/dist/esm/rules/use-visually-hidden/index.js +2 -1
  37. package/dist/esm/rules/utils/is-color.js +9 -0
  38. package/dist/esm/rules/utils/is-node.js +0 -6
  39. package/dist/esm/version.json +1 -1
  40. package/dist/types/presets/all.codegen.d.ts +1 -1
  41. package/dist/types/rules/utils/create-rule.d.ts +6 -3
  42. package/dist/types/rules/utils/is-color.d.ts +1 -0
  43. package/dist/types/rules/utils/is-node.d.ts +0 -1
  44. package/dist/types-ts4.0/index.codegen.d.ts +32 -0
  45. package/dist/types-ts4.0/index.d.ts +2 -0
  46. package/dist/types-ts4.0/presets/all.codegen.d.ts +22 -0
  47. package/dist/types-ts4.0/presets/recommended.codegen.d.ts +19 -0
  48. package/dist/types-ts4.0/rules/ensure-design-token-usage/index.d.ts +3 -0
  49. package/dist/types-ts4.0/rules/ensure-design-token-usage-spacing/index.d.ts +9 -0
  50. package/dist/types-ts4.0/rules/ensure-design-token-usage-spacing/utils.d.ts +166 -0
  51. package/dist/types-ts4.0/rules/icon-label/index.d.ts +2 -0
  52. package/dist/types-ts4.0/rules/index.codegen.d.ts +27 -0
  53. package/dist/types-ts4.0/rules/no-banned-imports/index.d.ts +2 -0
  54. package/dist/types-ts4.0/rules/no-banned-imports/paths.d.ts +4 -0
  55. package/dist/types-ts4.0/rules/no-deprecated-apis/helpers/filter-actionable-deprecations.d.ts +1 -0
  56. package/dist/types-ts4.0/rules/no-deprecated-apis/helpers/validate-deprecated-apis-config.d.ts +2 -0
  57. package/dist/types-ts4.0/rules/no-deprecated-apis/index.d.ts +10 -0
  58. package/dist/types-ts4.0/rules/no-deprecated-design-token-usage/index.d.ts +3 -0
  59. package/dist/types-ts4.0/rules/no-deprecated-imports/index.d.ts +37 -0
  60. package/dist/types-ts4.0/rules/no-margin/index.d.ts +3 -0
  61. package/dist/types-ts4.0/rules/no-unsafe-design-token-usage/index.d.ts +3 -0
  62. package/dist/types-ts4.0/rules/use-primitives/index.d.ts +2 -0
  63. package/dist/types-ts4.0/rules/use-primitives/types.d.ts +3 -0
  64. package/dist/types-ts4.0/rules/use-primitives/utils.d.ts +7 -0
  65. package/dist/types-ts4.0/rules/use-visually-hidden/constants.d.ts +3 -0
  66. package/dist/types-ts4.0/rules/use-visually-hidden/fix-jsx.d.ts +3 -0
  67. package/dist/types-ts4.0/rules/use-visually-hidden/fix-vanilla.d.ts +3 -0
  68. package/dist/types-ts4.0/rules/use-visually-hidden/index.d.ts +3 -0
  69. package/dist/types-ts4.0/rules/use-visually-hidden/utils.d.ts +35 -0
  70. package/dist/types-ts4.0/rules/utils/create-rule.d.ts +48 -0
  71. package/dist/types-ts4.0/rules/utils/get-deprecated-config.d.ts +2 -0
  72. package/dist/types-ts4.0/rules/utils/get-import-node-by-source.d.ts +8 -0
  73. package/dist/types-ts4.0/rules/utils/get-is-exception.d.ts +2 -0
  74. package/dist/types-ts4.0/rules/utils/is-color.d.ts +5 -0
  75. package/dist/types-ts4.0/rules/utils/is-elevation.d.ts +5 -0
  76. package/dist/types-ts4.0/rules/utils/is-node.d.ts +10 -0
  77. package/dist/types-ts4.0/rules/utils/is-token.d.ts +1 -0
  78. package/dist/types-ts4.0/rules/utils/jsx.d.ts +2 -0
  79. package/dist/types-ts4.0/rules/utils/types.d.ts +22 -0
  80. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/eslint-plugin-design-system
2
2
 
3
+ ## 5.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`51a48a1bb1b`](https://bitbucket.org/atlassian/atlassian-frontend/commits/51a48a1bb1b) - Update docs to accept a `severity` property so the purpose of `recommended` is no longer double. "all" preset now respects this preference - before it was always "error". This makes the presets more aligned with the underlying implementations."
8
+
9
+ ## 5.2.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [`11e5168f1c2`](https://bitbucket.org/atlassian/atlassian-frontend/commits/11e5168f1c2) - Internal refactor of ensure-design-token-usage which also addresses some false positives
14
+
3
15
  ## 5.1.0
4
16
 
5
17
  ### Minor Changes
package/README.md CHANGED
@@ -58,7 +58,7 @@ module.exports = {
58
58
  | <a href="./src/rules/no-deprecated-imports/README.md">no-deprecated-imports</a> | Disallow importing deprecated modules. | Yes | | |
59
59
  | <a href="./src/rules/no-margin/README.md">no-margin</a> | Disallow using the margin CSS property. | | | |
60
60
  | <a href="./src/rules/no-unsafe-design-token-usage/README.md">no-unsafe-design-token-usage</a> | Enforces design token usage is statically and locally analyzable. | Yes | Yes | |
61
- | <a href="./src/rules/use-primitives/README.md">use-primitives</a> | Encourage the usage of primitives components. | | Yes | |
61
+ | <a href="./src/rules/use-primitives/README.md">use-primitives</a> | Encourage the usage of primitives components. | | Yes | Yes |
62
62
  | <a href="./src/rules/use-visually-hidden/README.md">use-visually-hidden</a> | Enforce usage of the visually hidden component. | Yes | Yes | |
63
63
 
64
64
  <!-- END_RULE_TABLE_CODEGEN -->
@@ -22,7 +22,7 @@ This plugin contains rules that should be used when working with the [Atlassian
22
22
  | <a href="#no-deprecated-imports">no-deprecated-imports</a> | Disallow importing deprecated modules. | Yes | | |
23
23
  | <a href="#no-margin">no-margin</a> | Disallow using the margin CSS property. | | | |
24
24
  | <a href="#no-unsafe-design-token-usage">no-unsafe-design-token-usage</a> | Enforces design token usage is statically and locally analyzable. | Yes | Yes | |
25
- | <a href="#use-primitives">use-primitives</a> | Encourage the usage of primitives components. | | Yes | |
25
+ | <a href="#use-primitives">use-primitives</a> | Encourage the usage of primitives components. | | Yes | Yes |
26
26
  | <a href="#use-visually-hidden">use-visually-hidden</a> | Enforce usage of the visually hidden component. | Yes | Yes | |
27
27
 
28
28
  <!-- END_RULE_TABLE_CODEGEN -->
@@ -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::536ea9ab01a5dbae76af59e8ca84f921>>
9
+ * @codegen <<SignedSource::3f9b973d6350522de7bd32f13c58ce56>>
10
10
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
11
11
  */
12
12
  var _default = {
@@ -14,14 +14,14 @@ var _default = {
14
14
  rules: {
15
15
  '@atlaskit/design-system/ensure-design-token-usage': 'error',
16
16
  '@atlaskit/design-system/ensure-design-token-usage-spacing': 'error',
17
- '@atlaskit/design-system/icon-label': 'error',
17
+ '@atlaskit/design-system/icon-label': 'warn',
18
18
  '@atlaskit/design-system/no-banned-imports': 'error',
19
19
  '@atlaskit/design-system/no-deprecated-apis': 'error',
20
- '@atlaskit/design-system/no-deprecated-design-token-usage': 'error',
20
+ '@atlaskit/design-system/no-deprecated-design-token-usage': 'warn',
21
21
  '@atlaskit/design-system/no-deprecated-imports': 'error',
22
- '@atlaskit/design-system/no-margin': 'error',
22
+ '@atlaskit/design-system/no-margin': 'warn',
23
23
  '@atlaskit/design-system/no-unsafe-design-token-usage': 'error',
24
- '@atlaskit/design-system/use-primitives': 'error',
24
+ '@atlaskit/design-system/use-primitives': 'warn',
25
25
  '@atlaskit/design-system/use-visually-hidden': 'error'
26
26
  }
27
27
  };
@@ -1,21 +1,22 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.default = void 0;
8
+ var _escodegenWallaby = _interopRequireDefault(require("escodegen-wallaby"));
7
9
  var _eslintCodemodUtils = require("eslint-codemod-utils");
8
10
  var _createRule = require("../utils/create-rule");
9
11
  var _getIsException = require("../utils/get-is-exception");
10
12
  var _isColor = require("../utils/is-color");
11
13
  var _isElevation = require("../utils/is-elevation");
12
14
  var _isNode = require("../utils/is-node");
15
+ // @ts-expect-error
16
+
13
17
  var defaultConfig = {
14
18
  shouldEnforceFallbacks: false
15
19
  };
16
- var getNodeColumn = function getNodeColumn(node) {
17
- return node.loc ? node.loc.start.column : 0;
18
- };
19
20
  var getTokenSuggestion = function getTokenSuggestion(node, reference, config) {
20
21
  return [{
21
22
  shouldReturnSuggestion: !(0, _isNode.isDecendantOfGlobalToken)(node) && config.shouldEnforceFallbacks === false,
@@ -31,6 +32,9 @@ var getTokenSuggestion = function getTokenSuggestion(node, reference, config) {
31
32
  }
32
33
  }].filter(filterSuggestion);
33
34
  };
35
+ var getNodeColumn = function getNodeColumn(node) {
36
+ return node.loc ? node.loc.start.column : 0;
37
+ };
34
38
  var filterSuggestion = function filterSuggestion(_ref) {
35
39
  var shouldReturnSuggestion = _ref.shouldReturnSuggestion;
36
40
  return shouldReturnSuggestion;
@@ -41,7 +45,8 @@ var rule = (0, _createRule.createLintRule)({
41
45
  hasSuggestions: true,
42
46
  docs: {
43
47
  description: 'Enforces usage of design tokens.',
44
- recommended: 'error'
48
+ recommended: true,
49
+ severity: 'error'
45
50
  },
46
51
  fixable: 'code',
47
52
  type: 'problem',
@@ -55,43 +60,10 @@ var rule = (0, _createRule.createLintRule)({
55
60
  var isException = (0, _getIsException.getIsException)(config.exceptions);
56
61
  return {
57
62
  'TemplateLiteral > Identifier': function TemplateLiteralIdentifier(node) {
58
- if (!(0, _isNode.isDecendantOfStyleBlock)(node)) {
59
- return;
60
- }
61
- if (node.type === 'Identifier' && (0, _isColor.isLegacyNamedColor)(node.name) && !isException(node)) {
62
- context.report({
63
- messageId: 'hardCodedColor',
64
- node: node,
65
- suggest: getTokenSuggestion(node, node.name, config)
66
- });
63
+ if (node.type !== 'Identifier') {
67
64
  return;
68
65
  }
69
- },
70
- Identifier: function Identifier(node) {
71
- if (isException(node) || (0, _isNode.isDecendantOfGlobalToken)(node) || (0, _isNode.isDecendantOfType)(node, 'SwitchCase') || (0, _isNode.isDecendantOfType)(node, 'ImportDeclaration') || (0, _isNode.isDecendantOfType)(node, 'IfStatement') || (0, _isNode.isPropertyKey)(node) || (0, _isNode.isVariableName)(node)) {
72
- return;
73
- }
74
- var isNodeLegacyColor = (0, _isColor.isLegacyColor)(node.name);
75
- if (isNodeLegacyColor || (0, _isColor.isHardCodedColor)(node.name)) {
76
- if (node.parent.type === 'MemberExpression') {
77
- if (node.parent.object.type === 'Identifier') {
78
- // Object members as named colors, like obj.ivory, should be valid,
79
- // and hexes and color functions cannot be property names anyway.
80
- if (isNodeLegacyColor) {
81
- context.report({
82
- messageId: 'hardCodedColor',
83
- node: node,
84
- suggest: getTokenSuggestion(node.parent, "".concat(node.parent.object.name, ".").concat(node.name), config)
85
- });
86
- }
87
- }
88
- return;
89
- }
90
- context.report({
91
- messageId: 'hardCodedColor',
92
- node: node,
93
- suggest: getTokenSuggestion(node, node.name, config)
94
- });
66
+ if ((0, _isNode.isDecendantOfGlobalToken)(node) || !(0, _isNode.isDecendantOfStyleBlock)(node)) {
95
67
  return;
96
68
  }
97
69
  var elevation = (0, _isElevation.isLegacyElevation)(node.name);
@@ -110,6 +82,14 @@ var rule = (0, _createRule.createLintRule)({
110
82
  }
111
83
  });
112
84
  }
85
+ if (((0, _isColor.isLegacyColor)(node.name) || (0, _isColor.isLegacyNamedColor)(node.name)) && !isException(node)) {
86
+ context.report({
87
+ messageId: 'hardCodedColor',
88
+ node: node,
89
+ suggest: getTokenSuggestion(node, node.name, config)
90
+ });
91
+ return;
92
+ }
113
93
  },
114
94
  'TaggedTemplateExpression[tag.name="css"],TaggedTemplateExpression[tag.object.name="styled"]': function TaggedTemplateExpressionTagNameCssTaggedTemplateExpressionTagObjectNameStyled(node) {
115
95
  if (node.type !== 'TaggedTemplateExpression') {
@@ -137,58 +117,154 @@ var rule = (0, _createRule.createLintRule)({
137
117
  }
138
118
  });
139
119
  },
120
+ 'ObjectExpression > Property > Identifier, ObjectExpression > Property > MemberExpression': function ObjectExpressionPropertyIdentifierObjectExpressionPropertyMemberExpression(node) {
121
+ if ((0, _isNode.isDecendantOfGlobalToken)(node)) {
122
+ return;
123
+ }
124
+ var property = node.parent;
125
+ var propertyKey = '';
126
+ if (property.key.type === 'Identifier') {
127
+ propertyKey = property.key.name.toString();
128
+ }
129
+ if (property.key.type === 'Literal') {
130
+ var _property$key$value;
131
+ propertyKey = ((_property$key$value = property.key.value) === null || _property$key$value === void 0 ? void 0 : _property$key$value.toString()) || '';
132
+ }
133
+ if (!(0, _isColor.isColorCssPropertyName)(propertyKey)) {
134
+ return;
135
+ }
136
+ if (!(0, _isNode.isDecendantOfStyleBlock)(node) && !(0, _isNode.isDecendantOfType)(node, 'JSXExpressionContainer')) {
137
+ return;
138
+ }
139
+ var identifierNode;
140
+ if (node.type === 'Identifier') {
141
+ // identifier is the key and not the value
142
+ if (node.name === propertyKey) {
143
+ return;
144
+ }
145
+ identifierNode = node;
146
+ }
147
+ if (node.type === 'MemberExpression') {
148
+ if (node.property.type !== 'Identifier') {
149
+ context.report({
150
+ messageId: 'hardCodedColor',
151
+ node: node,
152
+ suggest: getTokenSuggestion(node, _escodegenWallaby.default.generate(node), config)
153
+ });
154
+ return;
155
+ }
156
+ identifierNode = node.property;
157
+ }
158
+ if (((0, _isColor.isHardCodedColor)(identifierNode.name) || (0, _isColor.includesHardCodedColor)(identifierNode.name) || (0, _isColor.isLegacyColor)(identifierNode.name)) && !isException(identifierNode)) {
159
+ context.report({
160
+ messageId: 'hardCodedColor',
161
+ node: identifierNode,
162
+ suggest: getTokenSuggestion(identifierNode, identifierNode.name, config)
163
+ });
164
+ return;
165
+ }
166
+ },
140
167
  'ObjectExpression > Property > Literal': function ObjectExpressionPropertyLiteral(node) {
141
- if (node.type !== 'Literal' || typeof node.value !== 'string') {
168
+ var _node$value;
169
+ if (node.type !== 'Literal') {
170
+ return;
171
+ }
172
+ if ((0, _isNode.isDecendantOfGlobalToken)(node)) {
142
173
  return;
143
174
  }
144
- if (!(0, _isNode.isDecendantOfStyleBlock)(node) && !(0, _isNode.isDecendantOfStyleJsxAttribute)(node)) {
175
+ if (!(0, _isNode.isDecendantOfStyleBlock)(node) && !(0, _isNode.isDecendantOfType)(node, 'JSXExpressionContainer')) {
145
176
  return;
146
177
  }
147
- if (((0, _isColor.isHardCodedColor)(node.value) || (0, _isColor.includesHardCodedColor)(node.value)) && !isException(node)) {
178
+ var nodeVal = ((_node$value = node.value) === null || _node$value === void 0 ? void 0 : _node$value.toString()) || '';
179
+ if (((0, _isColor.isHardCodedColor)(nodeVal) || (0, _isColor.includesHardCodedColor)(nodeVal)) && !isException(node)) {
148
180
  context.report({
149
181
  messageId: 'hardCodedColor',
150
182
  node: node,
151
- suggest: getTokenSuggestion(node, "'".concat(node.value, "'"), config)
183
+ suggest: getTokenSuggestion(node, "'".concat(nodeVal, "'"), config)
152
184
  });
153
- return;
154
185
  }
155
186
  },
156
- CallExpression: function CallExpression(node) {
157
- if (node.type !== 'CallExpression' || node.callee.type !== 'Identifier') {
187
+ 'ObjectExpression > Property > CallExpression': function ObjectExpressionPropertyCallExpression(node) {
188
+ if (node.type !== 'CallExpression') {
189
+ return;
190
+ }
191
+ if ((0, _isNode.isDecendantOfGlobalToken)(node)) {
158
192
  return;
159
193
  }
160
- if (!(0, _isNode.isDecendantOfStyleBlock)(node) && !(0, _isNode.isDecendantOfStyleJsxAttribute)(node)) {
194
+ if (!(0, _isNode.isDecendantOfStyleBlock)(node) && !(0, _isNode.isDecendantOfType)(node, 'JSXExpressionContainer')) {
161
195
  return;
162
196
  }
163
- if (!(0, _isColor.isLegacyNamedColor)(node.callee.name) || (0, _isNode.isDecendantOfGlobalToken)(node) || isException(node)) {
197
+ if (
198
+ // @ts-expect-error
199
+ !(0, _isColor.isLegacyNamedColor)(node.callee.name) || isException(node)) {
164
200
  return;
165
201
  }
166
202
  context.report({
167
203
  messageId: 'hardCodedColor',
168
204
  node: node,
205
+ // @ts-expect-error
169
206
  suggest: getTokenSuggestion(node, "".concat(node.callee.name, "()"), config)
170
207
  });
171
208
  },
172
- JSXAttribute: function JSXAttribute(node) {
173
- if (!node.value) {
209
+ 'JSXAttribute > Literal': function JSXAttributeLiteral(node) {
210
+ if (node.type !== 'Literal') {
174
211
  return;
175
212
  }
176
- if (['alt', 'src', 'label'].includes(node.name.name)) {
213
+
214
+ // @ts-expect-error
215
+ if (['alt', 'src', 'label', 'key'].includes(node.parent.name.name)) {
177
216
  return;
178
217
  }
179
- if (node.value.type === 'Literal') {
180
- if (isException(node)) {
181
- return;
182
- }
183
- var literalValue = node.value.value;
184
- if ((0, _isColor.isHardCodedColor)(literalValue) || (0, _isColor.includesHardCodedColor)(literalValue)) {
185
- context.report({
186
- messageId: 'hardCodedColor',
187
- node: node,
188
- suggest: getTokenSuggestion(node.value, literalValue, config)
189
- });
190
- return;
191
- }
218
+ if (isException(node.parent)) {
219
+ return;
220
+ }
221
+ if (
222
+ // @ts-expect-error
223
+ (0, _isColor.isHardCodedColor)(node.value) ||
224
+ // @ts-expect-error
225
+ (0, _isColor.includesHardCodedColor)(node.value)) {
226
+ context.report({
227
+ messageId: 'hardCodedColor',
228
+ node: node,
229
+ // @ts-expect-error
230
+ suggest: getTokenSuggestion(node, node.value, config)
231
+ });
232
+ return;
233
+ }
234
+ },
235
+ 'JSXExpressionContainer > MemberExpression': function JSXExpressionContainerMemberExpression(node) {
236
+ if (node.type !== 'MemberExpression') {
237
+ return;
238
+ }
239
+ if (
240
+ // @ts-expect-error
241
+ (0, _isColor.isLegacyColor)(node.property.name) ||
242
+ // @ts-expect-error
243
+ node.object.name === 'colors' &&
244
+ // @ts-expect-error
245
+ (0, _isColor.isLegacyNamedColor)(node.property.name)) {
246
+ context.report({
247
+ messageId: 'hardCodedColor',
248
+ node: node,
249
+ suggest: getTokenSuggestion(node, // @ts-expect-error
250
+ "".concat(node.object.name, ".").concat(node.property.name), config)
251
+ });
252
+ }
253
+ },
254
+ 'JSXExpressionContainer > Identifier': function JSXExpressionContainerIdentifier(node) {
255
+ if (node.type !== 'Identifier') {
256
+ return;
257
+ }
258
+ if (isException(node)) {
259
+ return;
260
+ }
261
+ if ((0, _isColor.isLegacyColor)(node.name) || (0, _isColor.includesHardCodedColor)(node.name)) {
262
+ context.report({
263
+ messageId: 'hardCodedColor',
264
+ node: node,
265
+ suggest: getTokenSuggestion(node, node.name, config)
266
+ });
267
+ return;
192
268
  }
193
269
  }
194
270
  };
@@ -16,7 +16,8 @@ var rule = (0, _createRule.createLintRule)({
16
16
  type: 'suggestion',
17
17
  docs: {
18
18
  description: 'Enforces accessible usage of icon labels when composed with Atlassian Design System components.',
19
- recommended: 'warn'
19
+ recommended: true,
20
+ severity: 'warn'
20
21
  },
21
22
  messages: {
22
23
  unneededLabelPropContents: 'Label prop should be an empty string to prevent duplicate screen reader announcements. Learn more here: http://go/adsc/icon/usage#accessibility-guidelines.',
@@ -13,7 +13,8 @@ var rule = (0, _createRule.createLintRule)({
13
13
  type: 'problem',
14
14
  docs: {
15
15
  description: 'Disallow importing banned modules.',
16
- recommended: 'error'
16
+ recommended: true,
17
+ severity: 'error'
17
18
  },
18
19
  messages: {
19
20
  path: "The '{{importSource}}' import is restricted from being used. {{customMessage}}"
@@ -13,7 +13,8 @@ var rule = (0, _createRule.createLintRule)({
13
13
  name: 'no-deprecated-design-token-usage',
14
14
  docs: {
15
15
  description: 'Disallow using deprecated design tokens.',
16
- recommended: 'warn'
16
+ recommended: true,
17
+ severity: 'warn'
17
18
  },
18
19
  fixable: 'code',
19
20
  type: 'problem',
@@ -12,6 +12,7 @@ var rule = (0, _createRule.createLintRule)({
12
12
  type: 'problem',
13
13
  docs: {
14
14
  recommended: false,
15
+ severity: 'warn',
15
16
  description: 'Disallow using the margin CSS property.'
16
17
  },
17
18
  messages: {
@@ -20,7 +20,8 @@ var rule = (0, _createRule.createLintRule)({
20
20
  name: 'no-unsafe-design-token-usage',
21
21
  docs: {
22
22
  description: 'Enforces design token usage is statically and locally analyzable.',
23
- recommended: 'error'
23
+ recommended: true,
24
+ severity: 'error'
24
25
  },
25
26
  fixable: 'code',
26
27
  type: 'problem',
@@ -15,9 +15,11 @@ var rule = (0, _createRule.createLintRule)({
15
15
  name: 'use-primitives',
16
16
  type: 'suggestion',
17
17
  fixable: 'code',
18
+ hasSuggestions: true,
18
19
  docs: {
19
20
  description: 'Encourage the usage of primitives components.',
20
- recommended: false
21
+ recommended: false,
22
+ severity: 'warn'
21
23
  },
22
24
  messages: {
23
25
  preferPrimitivesBox: "This \"{{element}}\" may be able to be replaced with a \"Box\". See ".concat(boxDocsUrl, " for guidance."),
@@ -20,7 +20,8 @@ var rule = (0, _createRule.createLintRule)({
20
20
  fixable: 'code',
21
21
  docs: {
22
22
  description: 'Enforce usage of the visually hidden component.',
23
- recommended: 'error'
23
+ recommended: true,
24
+ severity: 'error'
24
25
  },
25
26
  messages: {
26
27
  noDeprecatedUsage: 'Using the export `{{local}}` from `{{import}}` as a mixin is discouraged. Please use `@atlaskit/visually-hidden` instead.',
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isLegacyNamedColor = exports.isLegacyColor = exports.isHardCodedColor = exports.includesHardCodedColor = void 0;
6
+ exports.isLegacyNamedColor = exports.isLegacyColor = exports.isHardCodedColor = exports.isColorCssPropertyName = exports.includesHardCodedColor = void 0;
7
7
  var namedColors = new Set(['black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia', 'green', 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua', 'orange', 'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'blanchedalmond', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'limegreen', 'linen', 'magenta', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'oldlace', 'olivedrab', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'whitesmoke', 'yellowgreen', 'rebeccapurple']);
8
8
  var legacyColors = new Set(['R50', 'R75', 'R100', 'R200', 'R300', 'R400', 'R500', 'Y50', 'Y75', 'Y100', 'Y200', 'Y300', 'Y400', 'Y500', 'G50', 'G75', 'G100', 'G200', 'G300', 'G400', 'G500', 'B50', 'B75', 'B100', 'B200', 'B300', 'B400', 'B500', 'P50', 'P75', 'P100', 'P200', 'P300', 'P400', 'P500', 'T50', 'T75', 'T100', 'T200', 'T300', 'T400', 'T500', 'N0', 'N10', 'N20', 'N30', 'N40', 'N50', 'N60', 'N70', 'N80', 'N90', 'N100', 'N200', 'N300', 'N400', 'N500', 'N600', 'N700', 'N800', 'N900', 'N10A', 'N20A', 'N30A', 'N40A', 'N50A', 'N60A', 'N70A', 'N80A', 'N90A', 'N100A', 'N200A', 'N300A', 'N400A', 'N500A', 'N600A', 'N700A', 'N800A', 'DN900', 'DN800', 'DN700', 'DN600', 'DN500', 'DN400', 'DN300', 'DN200', 'DN100', 'DN90', 'DN80', 'DN70', 'DN60', 'DN50', 'DN40', 'DN30', 'DN20', 'DN10', 'DN0', 'DN800A', 'DN700A', 'DN600A', 'DN500A', 'DN400A', 'DN300A', 'DN200A', 'DN100A', 'DN90A', 'DN80A', 'DN70A', 'DN60A', 'DN50A', 'DN40A', 'DN30A', 'DN20A', 'DN10A',
9
9
  // Legacy Trello colors:
@@ -48,4 +48,14 @@ var isHardCodedColor = function isHardCodedColor(value) {
48
48
  }
49
49
  return false;
50
50
  };
51
- exports.isHardCodedColor = isHardCodedColor;
51
+ exports.isHardCodedColor = isHardCodedColor;
52
+ var validColorPropertyNames = new Set(['color', 'background', 'background-color', 'border', 'border-left', 'border-right', 'border-top', 'border-bottom', 'border-color', 'border-left-color', 'border-right-color', 'border-top-color', 'border-bottom-color', 'outline', 'outline-color', 'box-shadow']);
53
+ var kebabize = function kebabize(str) {
54
+ return str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, function ($, ofs) {
55
+ return (ofs ? '-' : '') + $.toLowerCase();
56
+ });
57
+ };
58
+ var isColorCssPropertyName = function isColorCssPropertyName(value) {
59
+ return validColorPropertyNames.has(kebabize(value));
60
+ };
61
+ exports.isColorCssPropertyName = isColorCssPropertyName;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isVariableName = exports.isStyledTemplateNode = exports.isStyledObjectNode = exports.isPropertyKey = exports.isDecendantOfType = exports.isDecendantOfStyleJsxAttribute = exports.isDecendantOfStyleBlock = exports.isDecendantOfGlobalToken = exports.isChildOfType = void 0;
6
+ exports.isStyledTemplateNode = exports.isStyledObjectNode = exports.isPropertyKey = exports.isDecendantOfType = exports.isDecendantOfStyleJsxAttribute = exports.isDecendantOfStyleBlock = exports.isDecendantOfGlobalToken = exports.isChildOfType = void 0;
7
7
  var _eslintCodemodUtils = require("eslint-codemod-utils");
8
8
  var isDecendantOfGlobalToken = function isDecendantOfGlobalToken(node) {
9
9
  if ((0, _eslintCodemodUtils.isNodeOfType)(node, 'CallExpression') && (0, _eslintCodemodUtils.isNodeOfType)(node.callee, 'Identifier') && (node.callee.name === 'token' || node.callee.name === 'getTokenValue')) {
@@ -34,13 +34,6 @@ var isPropertyKey = function isPropertyKey(node) {
34
34
  return false;
35
35
  };
36
36
  exports.isPropertyKey = isPropertyKey;
37
- var isVariableName = function isVariableName(node) {
38
- if ((0, _eslintCodemodUtils.isNodeOfType)(node, 'Identifier') && isDecendantOfType(node, 'VariableDeclarator')) {
39
- return node === node.parent.id;
40
- }
41
- return false;
42
- };
43
- exports.isVariableName = isVariableName;
44
37
  var isDecendantOfStyleJsxAttribute = function isDecendantOfStyleJsxAttribute(node) {
45
38
  // @ts-ignore
46
39
  if (node.type === 'JSXAttribute') {
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/eslint-plugin-design-system",
3
- "version": "5.1.0",
3
+ "version": "5.3.0",
4
4
  "sideEffects": false
5
5
  }
@@ -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::536ea9ab01a5dbae76af59e8ca84f921>>
3
+ * @codegen <<SignedSource::3f9b973d6350522de7bd32f13c58ce56>>
4
4
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
5
5
  */
6
6
  export default {
@@ -8,14 +8,14 @@ export default {
8
8
  rules: {
9
9
  '@atlaskit/design-system/ensure-design-token-usage': 'error',
10
10
  '@atlaskit/design-system/ensure-design-token-usage-spacing': 'error',
11
- '@atlaskit/design-system/icon-label': 'error',
11
+ '@atlaskit/design-system/icon-label': 'warn',
12
12
  '@atlaskit/design-system/no-banned-imports': 'error',
13
13
  '@atlaskit/design-system/no-deprecated-apis': 'error',
14
- '@atlaskit/design-system/no-deprecated-design-token-usage': 'error',
14
+ '@atlaskit/design-system/no-deprecated-design-token-usage': 'warn',
15
15
  '@atlaskit/design-system/no-deprecated-imports': 'error',
16
- '@atlaskit/design-system/no-margin': 'error',
16
+ '@atlaskit/design-system/no-margin': 'warn',
17
17
  '@atlaskit/design-system/no-unsafe-design-token-usage': 'error',
18
- '@atlaskit/design-system/use-primitives': 'error',
18
+ '@atlaskit/design-system/use-primitives': 'warn',
19
19
  '@atlaskit/design-system/use-visually-hidden': 'error'
20
20
  }
21
21
  };