@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.
- package/CHANGELOG.md +12 -0
- package/README.md +1 -1
- package/constellation/index/usage.mdx +1 -1
- package/dist/cjs/presets/all.codegen.js +5 -5
- package/dist/cjs/rules/ensure-design-token-usage/index.js +140 -64
- package/dist/cjs/rules/icon-label/index.js +2 -1
- package/dist/cjs/rules/no-banned-imports/index.js +2 -1
- package/dist/cjs/rules/no-deprecated-design-token-usage/index.js +2 -1
- package/dist/cjs/rules/no-margin/index.js +1 -0
- package/dist/cjs/rules/no-unsafe-design-token-usage/index.js +2 -1
- package/dist/cjs/rules/use-primitives/index.js +3 -1
- package/dist/cjs/rules/use-visually-hidden/index.js +2 -1
- package/dist/cjs/rules/utils/is-color.js +12 -2
- package/dist/cjs/rules/utils/is-node.js +1 -8
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/presets/all.codegen.js +5 -5
- package/dist/es2019/rules/ensure-design-token-usage/index.js +140 -65
- package/dist/es2019/rules/icon-label/index.js +2 -1
- package/dist/es2019/rules/no-banned-imports/index.js +2 -1
- package/dist/es2019/rules/no-deprecated-design-token-usage/index.js +2 -1
- package/dist/es2019/rules/no-margin/index.js +1 -0
- package/dist/es2019/rules/no-unsafe-design-token-usage/index.js +2 -1
- package/dist/es2019/rules/use-primitives/index.js +3 -1
- package/dist/es2019/rules/use-visually-hidden/index.js +2 -1
- package/dist/es2019/rules/utils/is-color.js +4 -1
- package/dist/es2019/rules/utils/is-node.js +0 -6
- package/dist/es2019/version.json +1 -1
- package/dist/esm/presets/all.codegen.js +5 -5
- package/dist/esm/rules/ensure-design-token-usage/index.js +140 -66
- package/dist/esm/rules/icon-label/index.js +2 -1
- package/dist/esm/rules/no-banned-imports/index.js +2 -1
- package/dist/esm/rules/no-deprecated-design-token-usage/index.js +2 -1
- package/dist/esm/rules/no-margin/index.js +1 -0
- package/dist/esm/rules/no-unsafe-design-token-usage/index.js +2 -1
- package/dist/esm/rules/use-primitives/index.js +3 -1
- package/dist/esm/rules/use-visually-hidden/index.js +2 -1
- package/dist/esm/rules/utils/is-color.js +9 -0
- package/dist/esm/rules/utils/is-node.js +0 -6
- package/dist/esm/version.json +1 -1
- package/dist/types/presets/all.codegen.d.ts +1 -1
- package/dist/types/rules/utils/create-rule.d.ts +6 -3
- package/dist/types/rules/utils/is-color.d.ts +1 -0
- package/dist/types/rules/utils/is-node.d.ts +0 -1
- package/dist/types-ts4.0/index.codegen.d.ts +32 -0
- package/dist/types-ts4.0/index.d.ts +2 -0
- package/dist/types-ts4.0/presets/all.codegen.d.ts +22 -0
- package/dist/types-ts4.0/presets/recommended.codegen.d.ts +19 -0
- package/dist/types-ts4.0/rules/ensure-design-token-usage/index.d.ts +3 -0
- package/dist/types-ts4.0/rules/ensure-design-token-usage-spacing/index.d.ts +9 -0
- package/dist/types-ts4.0/rules/ensure-design-token-usage-spacing/utils.d.ts +166 -0
- package/dist/types-ts4.0/rules/icon-label/index.d.ts +2 -0
- package/dist/types-ts4.0/rules/index.codegen.d.ts +27 -0
- package/dist/types-ts4.0/rules/no-banned-imports/index.d.ts +2 -0
- package/dist/types-ts4.0/rules/no-banned-imports/paths.d.ts +4 -0
- package/dist/types-ts4.0/rules/no-deprecated-apis/helpers/filter-actionable-deprecations.d.ts +1 -0
- package/dist/types-ts4.0/rules/no-deprecated-apis/helpers/validate-deprecated-apis-config.d.ts +2 -0
- package/dist/types-ts4.0/rules/no-deprecated-apis/index.d.ts +10 -0
- package/dist/types-ts4.0/rules/no-deprecated-design-token-usage/index.d.ts +3 -0
- package/dist/types-ts4.0/rules/no-deprecated-imports/index.d.ts +37 -0
- package/dist/types-ts4.0/rules/no-margin/index.d.ts +3 -0
- package/dist/types-ts4.0/rules/no-unsafe-design-token-usage/index.d.ts +3 -0
- package/dist/types-ts4.0/rules/use-primitives/index.d.ts +2 -0
- package/dist/types-ts4.0/rules/use-primitives/types.d.ts +3 -0
- package/dist/types-ts4.0/rules/use-primitives/utils.d.ts +7 -0
- package/dist/types-ts4.0/rules/use-visually-hidden/constants.d.ts +3 -0
- package/dist/types-ts4.0/rules/use-visually-hidden/fix-jsx.d.ts +3 -0
- package/dist/types-ts4.0/rules/use-visually-hidden/fix-vanilla.d.ts +3 -0
- package/dist/types-ts4.0/rules/use-visually-hidden/index.d.ts +3 -0
- package/dist/types-ts4.0/rules/use-visually-hidden/utils.d.ts +35 -0
- package/dist/types-ts4.0/rules/utils/create-rule.d.ts +48 -0
- package/dist/types-ts4.0/rules/utils/get-deprecated-config.d.ts +2 -0
- package/dist/types-ts4.0/rules/utils/get-import-node-by-source.d.ts +8 -0
- package/dist/types-ts4.0/rules/utils/get-is-exception.d.ts +2 -0
- package/dist/types-ts4.0/rules/utils/is-color.d.ts +5 -0
- package/dist/types-ts4.0/rules/utils/is-elevation.d.ts +5 -0
- package/dist/types-ts4.0/rules/utils/is-node.d.ts +10 -0
- package/dist/types-ts4.0/rules/utils/is-token.d.ts +1 -0
- package/dist/types-ts4.0/rules/utils/jsx.d.ts +2 -0
- package/dist/types-ts4.0/rules/utils/types.d.ts +22 -0
- 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::
|
|
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': '
|
|
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': '
|
|
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': '
|
|
22
|
+
'@atlaskit/design-system/no-margin': 'warn',
|
|
23
23
|
'@atlaskit/design-system/no-unsafe-design-token-usage': 'error',
|
|
24
|
-
'@atlaskit/design-system/use-primitives': '
|
|
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:
|
|
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 (
|
|
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
|
-
|
|
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.
|
|
175
|
+
if (!(0, _isNode.isDecendantOfStyleBlock)(node) && !(0, _isNode.isDecendantOfType)(node, 'JSXExpressionContainer')) {
|
|
145
176
|
return;
|
|
146
177
|
}
|
|
147
|
-
|
|
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(
|
|
183
|
+
suggest: getTokenSuggestion(node, "'".concat(nodeVal, "'"), config)
|
|
152
184
|
});
|
|
153
|
-
return;
|
|
154
185
|
}
|
|
155
186
|
},
|
|
156
|
-
CallExpression: function
|
|
157
|
-
if (node.type !== 'CallExpression'
|
|
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.
|
|
194
|
+
if (!(0, _isNode.isDecendantOfStyleBlock)(node) && !(0, _isNode.isDecendantOfType)(node, 'JSXExpressionContainer')) {
|
|
161
195
|
return;
|
|
162
196
|
}
|
|
163
|
-
if (
|
|
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
|
|
173
|
-
if (
|
|
209
|
+
'JSXAttribute > Literal': function JSXAttributeLiteral(node) {
|
|
210
|
+
if (node.type !== 'Literal') {
|
|
174
211
|
return;
|
|
175
212
|
}
|
|
176
|
-
|
|
213
|
+
|
|
214
|
+
// @ts-expect-error
|
|
215
|
+
if (['alt', 'src', 'label', 'key'].includes(node.parent.name.name)) {
|
|
177
216
|
return;
|
|
178
217
|
}
|
|
179
|
-
if (node.
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
16
|
+
recommended: true,
|
|
17
|
+
severity: 'warn'
|
|
17
18
|
},
|
|
18
19
|
fixable: 'code',
|
|
19
20
|
type: 'problem',
|
|
@@ -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:
|
|
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:
|
|
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.
|
|
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') {
|
package/dist/cjs/version.json
CHANGED
|
@@ -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::
|
|
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': '
|
|
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': '
|
|
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': '
|
|
16
|
+
'@atlaskit/design-system/no-margin': 'warn',
|
|
17
17
|
'@atlaskit/design-system/no-unsafe-design-token-usage': 'error',
|
|
18
|
-
'@atlaskit/design-system/use-primitives': '
|
|
18
|
+
'@atlaskit/design-system/use-primitives': 'warn',
|
|
19
19
|
'@atlaskit/design-system/use-visually-hidden': 'error'
|
|
20
20
|
}
|
|
21
21
|
};
|