@atlaskit/eslint-plugin-design-system 4.7.1 → 4.7.2
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 +8 -0
- package/dist/cjs/index.js +6 -2
- package/dist/cjs/rules/ensure-design-token-usage/index.js +0 -1
- package/dist/cjs/rules/icon-label/index.js +7 -1
- package/dist/cjs/rules/no-deprecated-apis/index.js +6 -12
- package/dist/cjs/rules/no-raw-spacing-values/index.js +135 -0
- package/dist/cjs/rules/no-raw-spacing-values/utils.js +223 -0
- package/dist/cjs/rules/use-visually-hidden/utils.js +8 -5
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/index.js +5 -2
- package/dist/es2019/rules/ensure-design-token-usage/index.js +0 -1
- package/dist/es2019/rules/icon-label/index.js +6 -1
- package/dist/es2019/rules/no-deprecated-apis/index.js +4 -0
- package/dist/es2019/rules/no-raw-spacing-values/index.js +118 -0
- package/dist/es2019/rules/no-raw-spacing-values/utils.js +193 -0
- package/dist/es2019/rules/use-visually-hidden/utils.js +4 -5
- package/dist/es2019/version.json +1 -1
- package/dist/esm/index.js +5 -2
- package/dist/esm/rules/ensure-design-token-usage/index.js +0 -1
- package/dist/esm/rules/icon-label/index.js +6 -1
- package/dist/esm/rules/no-deprecated-apis/index.js +6 -12
- package/dist/esm/rules/no-raw-spacing-values/index.js +122 -0
- package/dist/esm/rules/no-raw-spacing-values/utils.js +198 -0
- package/dist/esm/rules/use-visually-hidden/utils.js +7 -6
- package/dist/esm/version.json +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/rules/no-raw-spacing-values/index.d.ts +3 -0
- package/dist/types/rules/no-raw-spacing-values/utils.d.ts +11 -0
- package/dist/types/rules/use-visually-hidden/utils.d.ts +2 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/eslint-plugin-design-system
|
|
2
2
|
|
|
3
|
+
## 4.7.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`9f64ab9d5ea`](https://bitbucket.org/atlassian/atlassian-frontend/commits/9f64ab9d5ea) - Improvements / added robustness to edge cases previously unhandled.
|
|
8
|
+
- [`8e848e3a4a6`](https://bitbucket.org/atlassian/atlassian-frontend/commits/8e848e3a4a6) - Internal updates to a number of rules. Introduced a custom formatter for the rule 'no-raw-spacing-values'.
|
|
9
|
+
- [`31494c13aaa`](https://bitbucket.org/atlassian/atlassian-frontend/commits/31494c13aaa) - Type fixes to the internals of a number of rules.
|
|
10
|
+
|
|
3
11
|
## 4.7.1
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
package/dist/cjs/index.js
CHANGED
|
@@ -19,6 +19,8 @@ var _noDeprecatedDesignTokenUsage = _interopRequireDefault(require("./rules/no-d
|
|
|
19
19
|
|
|
20
20
|
var _noDeprecatedImports = _interopRequireDefault(require("./rules/no-deprecated-imports"));
|
|
21
21
|
|
|
22
|
+
var _noRawSpacingValues = _interopRequireDefault(require("./rules/no-raw-spacing-values"));
|
|
23
|
+
|
|
22
24
|
var _noUnsafeDesignTokenUsage = _interopRequireDefault(require("./rules/no-unsafe-design-token-usage"));
|
|
23
25
|
|
|
24
26
|
var _useVisuallyHidden = _interopRequireDefault(require("./rules/use-visually-hidden"));
|
|
@@ -31,7 +33,8 @@ var rules = {
|
|
|
31
33
|
'no-deprecated-imports': _noDeprecatedImports.default,
|
|
32
34
|
'no-banned-imports': _noBannedImports.default,
|
|
33
35
|
'no-unsafe-design-token-usage': _noUnsafeDesignTokenUsage.default,
|
|
34
|
-
'use-visually-hidden': _useVisuallyHidden.default
|
|
36
|
+
'use-visually-hidden': _useVisuallyHidden.default,
|
|
37
|
+
'no-raw-spacing-values': _noRawSpacingValues.default
|
|
35
38
|
};
|
|
36
39
|
exports.rules = rules;
|
|
37
40
|
var configs = {
|
|
@@ -53,7 +56,8 @@ var configs = {
|
|
|
53
56
|
'@atlaskit/design-system/no-deprecated-imports': 'error',
|
|
54
57
|
'@atlaskit/design-system/use-visually-hidden': 'error',
|
|
55
58
|
'@atlaskit/design-system/ensure-design-token-usage': 'error',
|
|
56
|
-
'@atlaskit/design-system/no-banned-imports': 'error'
|
|
59
|
+
'@atlaskit/design-system/no-banned-imports': 'error',
|
|
60
|
+
'@atlaskit/design-system/no-raw-spacing-values': 'error'
|
|
57
61
|
}
|
|
58
62
|
}
|
|
59
63
|
};
|
|
@@ -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 _jsx = require("../utils/jsx");
|
|
9
11
|
|
|
10
12
|
var elements = ['AkButton', 'AKButton', 'Button', 'MenuItem', 'ButtonItem', 'CustomItem', 'CustomThemeButton', 'LoadingButton', 'BreadcrumbsItem'];
|
|
@@ -59,7 +61,11 @@ var rule = {
|
|
|
59
61
|
|
|
60
62
|
return JSXElement;
|
|
61
63
|
}(function (node) {
|
|
62
|
-
if (node
|
|
64
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'JSXElement')) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node.openingElement.name, 'JSXIdentifier')) {
|
|
63
69
|
return;
|
|
64
70
|
}
|
|
65
71
|
|
|
@@ -30,19 +30,13 @@ var rule = {
|
|
|
30
30
|
create: function create(context) {
|
|
31
31
|
return {
|
|
32
32
|
// find JSX atribute - find name of attribute - get source and find relevant identifiers.
|
|
33
|
-
JSXAttribute: function (
|
|
34
|
-
function JSXAttribute(_x) {
|
|
35
|
-
return _JSXAttribute.apply(this, arguments);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
JSXAttribute.toString = function () {
|
|
39
|
-
return _JSXAttribute.toString();
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
return JSXAttribute;
|
|
43
|
-
}(function (node) {
|
|
33
|
+
JSXAttribute: function JSXAttribute(node) {
|
|
44
34
|
var _node$name;
|
|
45
35
|
|
|
36
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'JSXAttribute')) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
46
40
|
if (!unsafeOverrides.includes(node === null || node === void 0 ? void 0 : (_node$name = node.name) === null || _node$name === void 0 ? void 0 : _node$name.name)) {
|
|
47
41
|
return;
|
|
48
42
|
}
|
|
@@ -83,7 +77,7 @@ var rule = {
|
|
|
83
77
|
}
|
|
84
78
|
});
|
|
85
79
|
});
|
|
86
|
-
}
|
|
80
|
+
}
|
|
87
81
|
};
|
|
88
82
|
}
|
|
89
83
|
};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _eslintCodemodUtils = require("eslint-codemod-utils");
|
|
13
|
+
|
|
14
|
+
var _utils = require("./utils");
|
|
15
|
+
|
|
16
|
+
var rule = {
|
|
17
|
+
meta: {
|
|
18
|
+
type: 'problem',
|
|
19
|
+
docs: {
|
|
20
|
+
description: 'No raw spacing values',
|
|
21
|
+
recommended: true
|
|
22
|
+
},
|
|
23
|
+
messages: {
|
|
24
|
+
noRawSpacingValues: 'Prefer the use of spacing primitives over the direct application of spacing properties.\n\n@meta <<{{payload}}>>'
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
create: function create(context) {
|
|
28
|
+
return {
|
|
29
|
+
// CSSObjectExpression
|
|
30
|
+
// const styles = css({ color: 'red', margin: '4px' })
|
|
31
|
+
'CallExpression[callee.name=css] > ObjectExpression': function CallExpressionCalleeNameCssObjectExpression(parentNode) {
|
|
32
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(parentNode, 'ObjectExpression')) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* We do this in case we the fontSize for a style object is declared alongside the `em` or `lineHeight` declaration
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
var fontSizeNode = parentNode.properties.find(function (node) {
|
|
41
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'Property')) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node.key, 'Identifier')) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return node.key.name === 'fontSize';
|
|
50
|
+
});
|
|
51
|
+
var fontSizeValue = (0, _utils.getValue)( // @ts-ignore
|
|
52
|
+
(fontSizeNode === null || fontSizeNode === void 0 ? void 0 : fontSizeNode.type) === 'Property' && fontSizeNode.value, context);
|
|
53
|
+
var fontSize = Array.isArray(fontSizeValue) ? fontSizeValue[0] : fontSizeValue;
|
|
54
|
+
parentNode.properties.forEach(function (node) {
|
|
55
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'Property')) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node.key, 'Identifier')) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (!(0, _utils.isSpacingProperty)(node.key.name)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
var value = (0, _utils.getValue)(node.value, context);
|
|
68
|
+
|
|
69
|
+
if (value) {
|
|
70
|
+
var values = typeof value === 'number' || typeof value === 'string' ? [value] : value;
|
|
71
|
+
values.forEach(function (value) {
|
|
72
|
+
context.report({
|
|
73
|
+
node: node,
|
|
74
|
+
messageId: 'noRawSpacingValues',
|
|
75
|
+
data: {
|
|
76
|
+
payload: "".concat(node.key.name, ":").concat((0, _utils.emToPixels)(value, fontSize))
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
return;
|
|
81
|
+
} else {
|
|
82
|
+
context.report({
|
|
83
|
+
node: node,
|
|
84
|
+
messageId: 'noRawSpacingValues',
|
|
85
|
+
data: {
|
|
86
|
+
payload: "".concat(node.key.name, ":NaN")
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
},
|
|
92
|
+
// CSSTemplateLiteral and StyledTemplateLiteral
|
|
93
|
+
// const cssTemplateLiteral = css`color: red; padding: 12px`;
|
|
94
|
+
// const styledTemplateLiteral = styled.p`color: red; padding: 8px`;
|
|
95
|
+
'TaggedTemplateExpression[tag.name="css"],TaggedTemplateExpression[tag.object.name="styled"]': function TaggedTemplateExpressionTagNameCssTaggedTemplateExpressionTagObjectNameStyled(node) {
|
|
96
|
+
if (node.type !== 'TaggedTemplateExpression') {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
var combinedString = node.quasi.quasis.map(function (q, i) {
|
|
101
|
+
return "".concat(q.value.raw).concat(node.quasi.expressions[i] ? (0, _utils.getValue)(node.quasi.expressions[i], context) : '');
|
|
102
|
+
}).join('');
|
|
103
|
+
/**
|
|
104
|
+
* Attempts to remove all non-essential words & characters from a style block.
|
|
105
|
+
* Including selectors and queries
|
|
106
|
+
* Adapted from ensure-design-token-usage
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
var cssProperties = combinedString.replace(/\n/g, '').split(/;|{|}/).map(function (el) {
|
|
110
|
+
return el.trim() || '';
|
|
111
|
+
});
|
|
112
|
+
cssProperties.map(function (style) {
|
|
113
|
+
var _style$split = style.split(':'),
|
|
114
|
+
_style$split2 = (0, _slicedToArray2.default)(_style$split, 2),
|
|
115
|
+
property = _style$split2[0],
|
|
116
|
+
value = _style$split2[1];
|
|
117
|
+
|
|
118
|
+
if ((0, _utils.isSpacingProperty)(property)) {
|
|
119
|
+
context.report({
|
|
120
|
+
node: node,
|
|
121
|
+
messageId: 'noRawSpacingValues',
|
|
122
|
+
data: {
|
|
123
|
+
payload: "".concat(property, ":").concat((0, _utils.removePixelSuffix)(value.trim()))
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return;
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
var _default = rule;
|
|
135
|
+
exports.default = _default;
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.emToPixels = void 0;
|
|
7
|
+
exports.findIdentifierInParentScope = findIdentifierInParentScope;
|
|
8
|
+
exports.removePixelSuffix = exports.isSpacingProperty = exports.getValueFromShorthand = exports.getValue = void 0;
|
|
9
|
+
|
|
10
|
+
var _eslintCodemodUtils = require("eslint-codemod-utils");
|
|
11
|
+
|
|
12
|
+
var properties = ['padding', 'paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom', 'marginLeft', 'marginTop', 'marginRight', 'marginBottom', 'margin', 'gap', 'fontSize', 'lineHeight', 'width', 'height'];
|
|
13
|
+
|
|
14
|
+
function findIdentifierInParentScope(_ref) {
|
|
15
|
+
var scope = _ref.scope,
|
|
16
|
+
identifierName = _ref.identifierName;
|
|
17
|
+
var traversingScope = scope;
|
|
18
|
+
|
|
19
|
+
while (traversingScope && traversingScope.type !== 'global') {
|
|
20
|
+
var matchedVariable = traversingScope.variables.find(function (variable) {
|
|
21
|
+
return variable.name === identifierName;
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
if (matchedVariable) {
|
|
25
|
+
return matchedVariable;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
traversingScope = traversingScope.upper;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
var isSpacingProperty = function isSpacingProperty(prop) {
|
|
35
|
+
return properties.includes(prop);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
exports.isSpacingProperty = isSpacingProperty;
|
|
39
|
+
|
|
40
|
+
var getValueFromShorthand = function getValueFromShorthand(str) {
|
|
41
|
+
// If we want to filter out NaN just add .filter(Boolean)
|
|
42
|
+
return String(str).trim().split(' ').map(removePixelSuffix);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
exports.getValueFromShorthand = getValueFromShorthand;
|
|
46
|
+
|
|
47
|
+
var isGridSize = function isGridSize(node) {
|
|
48
|
+
return (0, _eslintCodemodUtils.isNodeOfType)(node, 'CallExpression') && (0, _eslintCodemodUtils.isNodeOfType)(node.callee, 'Identifier') && (node.callee.name === 'gridSize' || node.callee.name === 'getGridSize');
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
var isFontSize = function isFontSize(node) {
|
|
52
|
+
return (0, _eslintCodemodUtils.isNodeOfType)(node, 'CallExpression') && (0, _eslintCodemodUtils.isNodeOfType)(node.callee, 'Identifier') && (node.callee.name === 'fontSize' || node.callee.name === 'getFontSize');
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
var isFontSizeSmall = function isFontSizeSmall(node) {
|
|
56
|
+
return (0, _eslintCodemodUtils.isNodeOfType)(node, 'CallExpression') && (0, _eslintCodemodUtils.isNodeOfType)(node.callee, 'Identifier') && node.callee.name === 'fontSizeSmall';
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
var getValueFromCallExpression = function getValueFromCallExpression(node, context) {
|
|
60
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'CallExpression')) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (isGridSize(node)) {
|
|
65
|
+
return 8;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (isFontSize(node)) {
|
|
69
|
+
return 14;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (isFontSizeSmall(node)) {
|
|
73
|
+
return 11;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return null;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
var getValue = function getValue(node, context) {
|
|
80
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(node, 'Literal')) {
|
|
81
|
+
return getValueFromShorthand(node.value);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(node, 'BinaryExpression')) {
|
|
85
|
+
return getValueFromBinaryExpression(node, context);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(node, 'UnaryExpression')) {
|
|
89
|
+
return getValueFromUnaryExpression(node, context);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(node, 'CallExpression')) {
|
|
93
|
+
return getValueFromCallExpression(node, context);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(node, 'Identifier')) {
|
|
97
|
+
return getValueFromIdentifier(node, context);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(node, 'TemplateLiteral')) {
|
|
101
|
+
return getValueFromTemplateLiteral(node, context);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return null;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
exports.getValue = getValue;
|
|
108
|
+
|
|
109
|
+
var getValueFromIdentifier = function getValueFromIdentifier(node, context) {
|
|
110
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'Identifier')) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
var scope = context.getScope();
|
|
115
|
+
var variable = findIdentifierInParentScope({
|
|
116
|
+
scope: scope,
|
|
117
|
+
identifierName: node.name
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
if (!variable) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
var definition = variable.defs[0];
|
|
125
|
+
|
|
126
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(definition.node, 'VariableDeclarator')) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (!definition.node.init) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return getValue(definition.node.init, context);
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
var getValueFromUnaryExpression = function getValueFromUnaryExpression(node, context) {
|
|
138
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'UnaryExpression')) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
var value = getValue(node.argument, context);
|
|
143
|
+
|
|
144
|
+
if (!value) {
|
|
145
|
+
return null;
|
|
146
|
+
} // eslint-disable-next-line no-eval
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
return eval("".concat(node.operator).concat(value));
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* @example
|
|
153
|
+
* ```js
|
|
154
|
+
* `2 ${variable} 0`
|
|
155
|
+
*
|
|
156
|
+
* // results in [2, NaN, 0]
|
|
157
|
+
* ```
|
|
158
|
+
* ```js
|
|
159
|
+
* const variable = 4;
|
|
160
|
+
* `2 ${variable} 0`
|
|
161
|
+
*
|
|
162
|
+
* // results in [2, 4, 0]
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
var getValueFromTemplateLiteral = function getValueFromTemplateLiteral(node, context) {
|
|
168
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node, "TemplateLiteral")) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
var combinedString = node.quasis.map(function (q, i) {
|
|
173
|
+
return "".concat(q.value.raw).concat(node.expressions[i] ? getValue(node.expressions[i], context) : '');
|
|
174
|
+
}).join('').trim().split(' ');
|
|
175
|
+
return combinedString.map(removePixelSuffix);
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
var getValueFromBinaryExpression = function getValueFromBinaryExpression(node, context) {
|
|
179
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'BinaryExpression')) {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
var left = node.left,
|
|
184
|
+
right = node.right,
|
|
185
|
+
operator = node.operator;
|
|
186
|
+
var leftValue = getValue(left, context);
|
|
187
|
+
var rightValue = getValue(right, context);
|
|
188
|
+
var final = rightValue && leftValue ? // eslint-disable-next-line no-eval
|
|
189
|
+
eval("".concat(leftValue).concat(operator).concat(rightValue)) : null;
|
|
190
|
+
return final;
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
var emRegex = /(.*\d+)em$/;
|
|
194
|
+
|
|
195
|
+
var emToPixels = function emToPixels(value, fontSize) {
|
|
196
|
+
if (typeof value === 'string') {
|
|
197
|
+
var match = value.match(emRegex);
|
|
198
|
+
|
|
199
|
+
if (match && typeof fontSize === 'number') {
|
|
200
|
+
return Number(match[1]) * fontSize;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return 'NaN';
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return value;
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
exports.emToPixels = emToPixels;
|
|
210
|
+
var percentageOrEm = /(%$)|(\d+em$)/;
|
|
211
|
+
|
|
212
|
+
var removePixelSuffix = function removePixelSuffix(value) {
|
|
213
|
+
var isString = typeof value === 'string'; // @ts-ignore This shouldn't be a type error but CI is complaining
|
|
214
|
+
|
|
215
|
+
if (isString && percentageOrEm.test(value)) {
|
|
216
|
+
return value;
|
|
217
|
+
} // @ts-ignore This shouldn't be a type error but CI is complaining
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
return Number(isString ? value.replace('px', '') : value);
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
exports.removePixelSuffix = removePixelSuffix;
|
|
@@ -4,7 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.makeTemplateLiteralIntoEntries = exports.getObjectLikeness = exports.getFirstImport = exports.countMatchingKeyValues = void 0;
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
var _eslintCodemodUtils = require("eslint-codemod-utils");
|
|
9
|
+
|
|
8
10
|
// eslint-disable-next-line @atlaskit/design-system/use-visually-hidden
|
|
9
11
|
var referenceObject = {
|
|
10
12
|
width: '1px',
|
|
@@ -53,12 +55,13 @@ var makeTemplateLiteralIntoEntries = function makeTemplateLiteralIntoEntries(tem
|
|
|
53
55
|
exports.makeTemplateLiteralIntoEntries = makeTemplateLiteralIntoEntries;
|
|
54
56
|
|
|
55
57
|
var getObjectLikeness = function getObjectLikeness(node) {
|
|
56
|
-
var styleEntries = node.properties.
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
var styleEntries = node.properties.filter(function (node) {
|
|
59
|
+
return (0, _eslintCodemodUtils.isNodeOfType)(node, 'Property');
|
|
60
|
+
}).map(function (_ref) {
|
|
61
|
+
var key = _ref.key,
|
|
59
62
|
value = _ref.value;
|
|
60
63
|
|
|
61
|
-
if (
|
|
64
|
+
if (key.type === 'Identifier') {
|
|
62
65
|
return {
|
|
63
66
|
key: key.name,
|
|
64
67
|
value: value.type === 'Literal' && value.value
|
package/dist/cjs/version.json
CHANGED
package/dist/es2019/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import noBannedImports from './rules/no-banned-imports';
|
|
|
4
4
|
import noDeprecatedAPIs from './rules/no-deprecated-apis';
|
|
5
5
|
import noDeprecatedUsage from './rules/no-deprecated-design-token-usage';
|
|
6
6
|
import noDeprecatedImports from './rules/no-deprecated-imports';
|
|
7
|
+
import noRawSpacingValues from './rules/no-raw-spacing-values';
|
|
7
8
|
import noUnsafeUsage from './rules/no-unsafe-design-token-usage';
|
|
8
9
|
import useVisuallyHidden from './rules/use-visually-hidden';
|
|
9
10
|
export const rules = {
|
|
@@ -14,7 +15,8 @@ export const rules = {
|
|
|
14
15
|
'no-deprecated-imports': noDeprecatedImports,
|
|
15
16
|
'no-banned-imports': noBannedImports,
|
|
16
17
|
'no-unsafe-design-token-usage': noUnsafeUsage,
|
|
17
|
-
'use-visually-hidden': useVisuallyHidden
|
|
18
|
+
'use-visually-hidden': useVisuallyHidden,
|
|
19
|
+
'no-raw-spacing-values': noRawSpacingValues
|
|
18
20
|
};
|
|
19
21
|
export const configs = {
|
|
20
22
|
recommended: {
|
|
@@ -35,7 +37,8 @@ export const configs = {
|
|
|
35
37
|
'@atlaskit/design-system/no-deprecated-imports': 'error',
|
|
36
38
|
'@atlaskit/design-system/use-visually-hidden': 'error',
|
|
37
39
|
'@atlaskit/design-system/ensure-design-token-usage': 'error',
|
|
38
|
-
'@atlaskit/design-system/no-banned-imports': 'error'
|
|
40
|
+
'@atlaskit/design-system/no-banned-imports': 'error',
|
|
41
|
+
'@atlaskit/design-system/no-raw-spacing-values': 'error'
|
|
39
42
|
}
|
|
40
43
|
}
|
|
41
44
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isNodeOfType } from 'eslint-codemod-utils';
|
|
1
2
|
import { findProp } from '../utils/jsx';
|
|
2
3
|
const elements = ['AkButton', 'AKButton', 'Button', 'MenuItem', 'ButtonItem', 'CustomItem', 'CustomThemeButton', 'LoadingButton', 'BreadcrumbsItem'];
|
|
3
4
|
const elementsIconProps = ['iconBefore', 'iconAfter', 'icon'];
|
|
@@ -39,7 +40,11 @@ const rule = {
|
|
|
39
40
|
},
|
|
40
41
|
|
|
41
42
|
JSXElement(node) {
|
|
42
|
-
if (node
|
|
43
|
+
if (!isNodeOfType(node, 'JSXElement')) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (!isNodeOfType(node.openingElement.name, 'JSXIdentifier')) {
|
|
43
48
|
return;
|
|
44
49
|
}
|
|
45
50
|
|
|
@@ -25,6 +25,10 @@ const rule = {
|
|
|
25
25
|
JSXAttribute(node) {
|
|
26
26
|
var _node$name;
|
|
27
27
|
|
|
28
|
+
if (!isNodeOfType(node, 'JSXAttribute')) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
28
32
|
if (!unsafeOverrides.includes(node === null || node === void 0 ? void 0 : (_node$name = node.name) === null || _node$name === void 0 ? void 0 : _node$name.name)) {
|
|
29
33
|
return;
|
|
30
34
|
}
|