@atlaskit/eslint-plugin-design-system 8.37.2 → 8.38.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 -0
- package/constellation/index/usage.mdx +1 -0
- package/constellation/use-tokens-space/usage.mdx +30 -0
- package/dist/cjs/ast-nodes/object-entry.js +35 -0
- package/dist/cjs/ast-nodes/object.js +12 -0
- package/dist/cjs/presets/all.codegen.js +2 -1
- package/dist/cjs/rules/index.codegen.js +3 -1
- package/dist/cjs/rules/use-primitives/utils/validate-styles.js +11 -2
- package/dist/cjs/rules/use-tokens-space/index.js +54 -0
- package/dist/cjs/rules/use-tokens-space/transformers/index.js +12 -0
- package/dist/cjs/rules/use-tokens-space/transformers/style-property/index.js +130 -0
- package/dist/cjs/rules/use-tokens-space/transformers/style-property/style-map.js +80 -0
- package/dist/cjs/rules/use-tokens-space/transformers/style-property/supported.js +14 -0
- package/dist/cjs/rules/use-tokens-space/transformers/style-property/upsert-import-declaration.js +37 -0
- package/dist/cjs/rules/use-tokens-space/utils/index.js +12 -0
- package/dist/cjs/rules/use-tokens-space/utils/is-string-or-number.js +9 -0
- package/dist/es2019/ast-nodes/object-entry.js +37 -3
- package/dist/es2019/ast-nodes/object.js +12 -0
- package/dist/es2019/presets/all.codegen.js +2 -1
- package/dist/es2019/rules/index.codegen.js +3 -1
- package/dist/es2019/rules/use-primitives/utils/validate-styles.js +11 -2
- package/dist/es2019/rules/use-tokens-space/index.js +38 -0
- package/dist/es2019/rules/use-tokens-space/transformers/index.js +1 -0
- package/dist/es2019/rules/use-tokens-space/transformers/style-property/index.js +121 -0
- package/dist/es2019/rules/use-tokens-space/transformers/style-property/style-map.js +152 -0
- package/dist/es2019/rules/use-tokens-space/transformers/style-property/supported.js +8 -0
- package/dist/es2019/rules/use-tokens-space/transformers/style-property/upsert-import-declaration.js +30 -0
- package/dist/es2019/rules/use-tokens-space/utils/index.js +1 -0
- package/dist/es2019/rules/use-tokens-space/utils/is-string-or-number.js +3 -0
- package/dist/esm/ast-nodes/object-entry.js +37 -3
- package/dist/esm/ast-nodes/object.js +12 -0
- package/dist/esm/presets/all.codegen.js +2 -1
- package/dist/esm/rules/index.codegen.js +3 -1
- package/dist/esm/rules/use-primitives/utils/validate-styles.js +11 -2
- package/dist/esm/rules/use-tokens-space/index.js +48 -0
- package/dist/esm/rules/use-tokens-space/transformers/index.js +1 -0
- package/dist/esm/rules/use-tokens-space/transformers/style-property/index.js +120 -0
- package/dist/esm/rules/use-tokens-space/transformers/style-property/style-map.js +73 -0
- package/dist/esm/rules/use-tokens-space/transformers/style-property/supported.js +8 -0
- package/dist/esm/rules/use-tokens-space/transformers/style-property/upsert-import-declaration.js +29 -0
- package/dist/esm/rules/use-tokens-space/utils/index.js +1 -0
- package/dist/esm/rules/use-tokens-space/utils/is-string-or-number.js +3 -0
- package/dist/types/ast-nodes/object-entry.d.ts +12 -2
- package/dist/types/ast-nodes/object.d.ts +1 -0
- package/dist/types/index.codegen.d.ts +1 -0
- package/dist/types/presets/all.codegen.d.ts +2 -1
- package/dist/types/rules/index.codegen.d.ts +5 -4
- package/dist/types/rules/use-tokens-space/index.d.ts +3 -0
- package/dist/types/rules/use-tokens-space/transformers/index.d.ts +1 -0
- package/dist/types/rules/use-tokens-space/transformers/style-property/index.d.ts +26 -0
- package/dist/types/rules/use-tokens-space/transformers/style-property/style-map.d.ts +7 -0
- package/dist/types/rules/use-tokens-space/transformers/style-property/supported.d.ts +6 -0
- package/dist/types/rules/use-tokens-space/transformers/style-property/upsert-import-declaration.d.ts +14 -0
- package/dist/types/rules/use-tokens-space/utils/index.d.ts +1 -0
- package/dist/types/rules/use-tokens-space/utils/is-string-or-number.d.ts +1 -0
- package/dist/types/rules/use-visually-hidden/constants.d.ts +1 -1
- package/dist/types/rules/utils/create-rule.d.ts +1 -1
- package/dist/types-ts4.5/ast-nodes/object-entry.d.ts +12 -2
- package/dist/types-ts4.5/ast-nodes/object.d.ts +1 -0
- package/dist/types-ts4.5/index.codegen.d.ts +1 -0
- package/dist/types-ts4.5/presets/all.codegen.d.ts +2 -1
- package/dist/types-ts4.5/rules/index.codegen.d.ts +5 -4
- package/dist/types-ts4.5/rules/use-tokens-space/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/use-tokens-space/transformers/index.d.ts +1 -0
- package/dist/types-ts4.5/rules/use-tokens-space/transformers/style-property/index.d.ts +26 -0
- package/dist/types-ts4.5/rules/use-tokens-space/transformers/style-property/style-map.d.ts +7 -0
- package/dist/types-ts4.5/rules/use-tokens-space/transformers/style-property/supported.d.ts +6 -0
- package/dist/types-ts4.5/rules/use-tokens-space/transformers/style-property/upsert-import-declaration.d.ts +14 -0
- package/dist/types-ts4.5/rules/use-tokens-space/utils/index.d.ts +1 -0
- package/dist/types-ts4.5/rules/use-tokens-space/utils/is-string-or-number.d.ts +1 -0
- package/dist/types-ts4.5/rules/use-visually-hidden/constants.d.ts +1 -1
- package/dist/types-ts4.5/rules/utils/create-rule.d.ts +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @atlaskit/eslint-plugin-design-system
|
|
2
2
|
|
|
3
|
+
## 8.38.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#74844](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/74844) [`7c7b8a771792`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/7c7b8a771792) - Created `use-tokens-space` lint rule to replace `ensure-design-token-usage` rule for space values.
|
|
8
|
+
|
|
9
|
+
## 8.37.3
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#83116](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/83116) [`8d4e99057fe0`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/8d4e99057fe0) - Upgrade Typescript from `4.9.5` to `5.4.2`
|
|
14
|
+
|
|
3
15
|
## 8.37.2
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -78,6 +78,7 @@ module.exports = {
|
|
|
78
78
|
| <a href="./src/rules/use-href-in-link-item/README.md">use-href-in-link-item</a> | Inform developers of eventual requirement of `href` prop in `LinkItem` component. Elements with a `link` role require an `href` attribute for users to properly navigate, particularly those using assistive technologies. If no valid `href` is required for your use case, consider using a `ButtonItem` instead. | Yes | Yes | Yes |
|
|
79
79
|
| <a href="./src/rules/use-primitives/README.md">use-primitives</a> | Encourage the usage of primitives components. | | Yes | Yes |
|
|
80
80
|
| <a href="./src/rules/use-primitives-text/README.md">use-primitives-text</a> | Encourage the usage of text components. | | Yes | Yes |
|
|
81
|
+
| <a href="./src/rules/use-tokens-space/README.md">use-tokens-space</a> | Enforces usage of space design tokens rather than hard-coded values. | | Yes | Yes |
|
|
81
82
|
| <a href="./src/rules/use-tokens-typography/README.md">use-tokens-typography</a> | Enforces usage of design tokens for typography properties rather than hard-coded values. | | Yes | Yes |
|
|
82
83
|
| <a href="./src/rules/use-visually-hidden/README.md">use-visually-hidden</a> | Enforce usage of the visually hidden component. | Yes | Yes | |
|
|
83
84
|
|
|
@@ -40,6 +40,7 @@ This plugin contains rules that should be used when working with the [Atlassian
|
|
|
40
40
|
| <a href="use-href-in-link-item/usage">use-href-in-link-item</a> | Inform developers of eventual requirement of `href` prop in `LinkItem` component. Elements with a `link` role require an `href` attribute for users to properly navigate, particularly those using assistive technologies. If no valid `href` is required for your use case, consider using a `ButtonItem` instead. | Yes | Yes | Yes |
|
|
41
41
|
| <a href="use-primitives/usage">use-primitives</a> | Encourage the usage of primitives components. | | Yes | Yes |
|
|
42
42
|
| <a href="use-primitives-text/usage">use-primitives-text</a> | Encourage the usage of text components. | | Yes | Yes |
|
|
43
|
+
| <a href="use-tokens-space/usage">use-tokens-space</a> | Enforces usage of space design tokens rather than hard-coded values. | | Yes | Yes |
|
|
43
44
|
| <a href="use-tokens-typography/usage">use-tokens-typography</a> | Enforces usage of design tokens for typography properties rather than hard-coded values. | | Yes | Yes |
|
|
44
45
|
| <a href="use-visually-hidden/usage">use-visually-hidden</a> | Enforce usage of the visually hidden component. | Yes | Yes | |
|
|
45
46
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# use-tokens-space
|
|
2
|
+
|
|
3
|
+
## Examples
|
|
4
|
+
|
|
5
|
+
This rule marks code as violations when a space token should be used. It will auto-fix values that can be mapped 1:1 with an ADS space token. Values that can't be mapped to a token will still be reported, however no auto-fix will happen.
|
|
6
|
+
|
|
7
|
+
### Incorrect
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
const someStyles = css({
|
|
11
|
+
padding: '8px';
|
|
12
|
+
^^^^^
|
|
13
|
+
})
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### Correct
|
|
17
|
+
|
|
18
|
+
```jsx
|
|
19
|
+
import { token } from '@atlaskit/tokens'
|
|
20
|
+
|
|
21
|
+
const someStyles = css({
|
|
22
|
+
padding: token('space.100');
|
|
23
|
+
})
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
See the list of available space tokens on the [ADS website](https://atlassian.design/foundations/spacing#space-tokens).
|
|
27
|
+
|
|
28
|
+
For Atlassians:
|
|
29
|
+
|
|
30
|
+
- See the [Token Migration Guide](https://go.atlassian.com/space-token-migration) for instructions on how to migrate to tokens when a suggestion is not provided by the ESLint rule.
|
|
@@ -5,7 +5,42 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.ObjectEntry = void 0;
|
|
7
7
|
var _eslintCodemodUtils = require("eslint-codemod-utils");
|
|
8
|
+
/* eslint-disable @repo/internal/react/require-jsdoc */
|
|
9
|
+
|
|
8
10
|
var ObjectEntry = exports.ObjectEntry = {
|
|
11
|
+
getProperty: function getProperty(node) {
|
|
12
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(node.key, 'Identifier')) {
|
|
13
|
+
return {
|
|
14
|
+
type: 'Identifier',
|
|
15
|
+
value: node.key.name
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(node.key, 'Literal') && node.key.value) {
|
|
19
|
+
return {
|
|
20
|
+
type: 'Literal',
|
|
21
|
+
value: node.key.value.toString()
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
type: undefined,
|
|
26
|
+
value: undefined
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
getValue: function getValue(node) {
|
|
30
|
+
// The value is a number, like `-3`
|
|
31
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(node.value, 'UnaryExpression') && (0, _eslintCodemodUtils.isNodeOfType)(node.value.argument, 'Literal') && node.value.argument.raw) {
|
|
32
|
+
if (node.value.operator === '-') {
|
|
33
|
+
return -1 * Number.parseInt(node.value.argument.raw);
|
|
34
|
+
}
|
|
35
|
+
return Number.parseInt(node.value.argument.raw);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// The value is a string, like `'4px'`
|
|
39
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(node.value, 'Literal') && node.value.value) {
|
|
40
|
+
return node.value.value;
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
},
|
|
9
44
|
deleteEntry: function deleteEntry(node, context, fixer) {
|
|
10
45
|
var _lastToken;
|
|
11
46
|
// context.getSourceCode() is deprecated in favour of context.sourceCode, however this returns undefined for some reason
|
|
@@ -105,5 +105,17 @@ var ASTObjectExpression = exports.Object = {
|
|
|
105
105
|
key: (0, _eslintCodemodUtils.identifier)(key),
|
|
106
106
|
value: (0, _eslintCodemodUtils.literal)(value)
|
|
107
107
|
}).toString(), ", "));
|
|
108
|
+
},
|
|
109
|
+
recurse: function recurse(node, callback) {
|
|
110
|
+
node.properties.forEach(function (entry) {
|
|
111
|
+
// Call the callback first, in case the user wants to do something with SpreadElements
|
|
112
|
+
callback(entry);
|
|
113
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(entry, 'Property')) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if ((0, _eslintCodemodUtils.isNodeOfType)(entry.value, 'ObjectExpression')) {
|
|
117
|
+
ASTObjectExpression.recurse(entry.value, callback);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
108
120
|
}
|
|
109
121
|
};
|
|
@@ -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::d95217b658f807294de3c81123068bf1>>
|
|
10
10
|
* @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
|
|
11
11
|
*/
|
|
12
12
|
var _default = exports.default = {
|
|
@@ -41,6 +41,7 @@ var _default = exports.default = {
|
|
|
41
41
|
'@atlaskit/design-system/use-href-in-link-item': 'warn',
|
|
42
42
|
'@atlaskit/design-system/use-primitives': 'warn',
|
|
43
43
|
'@atlaskit/design-system/use-primitives-text': 'warn',
|
|
44
|
+
'@atlaskit/design-system/use-tokens-space': 'error',
|
|
44
45
|
'@atlaskit/design-system/use-tokens-typography': 'warn',
|
|
45
46
|
'@atlaskit/design-system/use-visually-hidden': 'error'
|
|
46
47
|
}
|
|
@@ -34,11 +34,12 @@ var _useHeadingLevelInSpotlightCard = _interopRequireDefault(require("./use-head
|
|
|
34
34
|
var _useHrefInLinkItem = _interopRequireDefault(require("./use-href-in-link-item"));
|
|
35
35
|
var _usePrimitives = _interopRequireDefault(require("./use-primitives"));
|
|
36
36
|
var _usePrimitivesText = _interopRequireDefault(require("./use-primitives-text"));
|
|
37
|
+
var _useTokensSpace = _interopRequireDefault(require("./use-tokens-space"));
|
|
37
38
|
var _useTokensTypography = _interopRequireDefault(require("./use-tokens-typography"));
|
|
38
39
|
var _useVisuallyHidden = _interopRequireDefault(require("./use-visually-hidden"));
|
|
39
40
|
/**
|
|
40
41
|
* THIS FILE WAS CREATED VIA CODEGEN DO NOT MODIFY {@see http://go/af-codegen}
|
|
41
|
-
* @codegen <<SignedSource::
|
|
42
|
+
* @codegen <<SignedSource::d1c25758089a050334359276ede0ca3a>>
|
|
42
43
|
* @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
|
|
43
44
|
*/
|
|
44
45
|
var _default = exports.default = {
|
|
@@ -71,6 +72,7 @@ var _default = exports.default = {
|
|
|
71
72
|
'use-href-in-link-item': _useHrefInLinkItem.default,
|
|
72
73
|
'use-primitives': _usePrimitives.default,
|
|
73
74
|
'use-primitives-text': _usePrimitivesText.default,
|
|
75
|
+
'use-tokens-space': _useTokensSpace.default,
|
|
74
76
|
'use-tokens-typography': _useTokensTypography.default,
|
|
75
77
|
'use-visually-hidden': _useVisuallyHidden.default
|
|
76
78
|
};
|
|
@@ -93,7 +93,6 @@ var isTokenCall = function isTokenCall(node) {
|
|
|
93
93
|
return false;
|
|
94
94
|
}
|
|
95
95
|
var token = ast.FunctionCall.getArgumentAtPos(node, 0);
|
|
96
|
-
var fallback = ast.FunctionCall.getArgumentAtPos(node, 1);
|
|
97
96
|
if (!token || token.type !== 'Literal') {
|
|
98
97
|
return false;
|
|
99
98
|
}
|
|
@@ -104,7 +103,17 @@ var isTokenCall = function isTokenCall(node) {
|
|
|
104
103
|
}
|
|
105
104
|
|
|
106
105
|
// Not all `token()` calls have a fall back. This is fine, but if there is a fallback, make sure it's the same as the fallback xcss will use
|
|
107
|
-
if (
|
|
106
|
+
if (node.arguments.length === 2) {
|
|
107
|
+
var fallback = ast.FunctionCall.getArgumentAtPos(node, 1);
|
|
108
|
+
|
|
109
|
+
// `getArgumentAtPos` is only able to understand `Literal` and `ObjectExpression` statements
|
|
110
|
+
// If there are 2 args, but `fallback` is undefined, then the fallback is something wild, like `token('space.100, `${gridSize * rem(3)`})`
|
|
111
|
+
if (!fallback) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
if (fallback.type !== 'Literal') {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
108
117
|
if (_transformers.spaceTokenMap[fallback.value] !== token.value) {
|
|
109
118
|
return false;
|
|
110
119
|
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _createRule = require("../utils/create-rule");
|
|
8
|
+
var _transformers = require("./transformers");
|
|
9
|
+
var rule = (0, _createRule.createLintRule)({
|
|
10
|
+
meta: {
|
|
11
|
+
name: 'use-tokens-space',
|
|
12
|
+
type: 'problem',
|
|
13
|
+
fixable: 'code',
|
|
14
|
+
hasSuggestions: true,
|
|
15
|
+
docs: {
|
|
16
|
+
description: 'Enforces usage of space design tokens rather than hard-coded values.',
|
|
17
|
+
recommended: false,
|
|
18
|
+
severity: 'error'
|
|
19
|
+
},
|
|
20
|
+
messages: {
|
|
21
|
+
noRawSpacingValues: 'The use of spacing primitives or tokens is preferred over the direct application of spacing properties.'
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
create: function create(context) {
|
|
25
|
+
return {
|
|
26
|
+
'CallExpression[callee.name="css"] ObjectExpression Property': function CallExpressionCalleeNameCssObjectExpressionProperty(node) {
|
|
27
|
+
return _transformers.StyleProperty.lint(node, {
|
|
28
|
+
context: context
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
'CallExpression[callee.name="keyframes"] ObjectExpression Property': function CallExpressionCalleeNameKeyframesObjectExpressionProperty(node) {
|
|
32
|
+
return _transformers.StyleProperty.lint(node, {
|
|
33
|
+
context: context
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
'CallExpression[callee.name="cssMap"] ObjectExpression Property': function CallExpressionCalleeNameCssMapObjectExpressionProperty(node) {
|
|
37
|
+
return _transformers.StyleProperty.lint(node, {
|
|
38
|
+
context: context
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
'CallExpression[callee.object.name=styled] ObjectExpression Property': function CallExpressionCalleeObjectNameStyledObjectExpressionProperty(node) {
|
|
42
|
+
return _transformers.StyleProperty.lint(node, {
|
|
43
|
+
context: context
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
'CallExpression[callee.object.name=styled2] ObjectExpression Property': function CallExpressionCalleeObjectNameStyled2ObjectExpressionProperty(node) {
|
|
47
|
+
return _transformers.StyleProperty.lint(node, {
|
|
48
|
+
context: context
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
var _default = exports.default = rule;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "StyleProperty", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _styleProperty.StyleProperty;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _styleProperty = require("./style-property");
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.StyleProperty = void 0;
|
|
9
|
+
var _eslintCodemodUtils = require("eslint-codemod-utils");
|
|
10
|
+
var ast = _interopRequireWildcard(require("../../../../ast-nodes"));
|
|
11
|
+
var _utils = require("../../utils");
|
|
12
|
+
var _styleMap = require("./style-map");
|
|
13
|
+
var _supported = _interopRequireDefault(require("./supported"));
|
|
14
|
+
var _upsertImportDeclaration = require("./upsert-import-declaration");
|
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
17
|
+
/* eslint-disable @repo/internal/react/require-jsdoc */
|
|
18
|
+
|
|
19
|
+
var messageId = 'noRawSpacingValues';
|
|
20
|
+
var StyleProperty = exports.StyleProperty = {
|
|
21
|
+
lint: function lint(node, _ref) {
|
|
22
|
+
var context = _ref.context;
|
|
23
|
+
// Check whether all criteria needed to make a transformation are met
|
|
24
|
+
var _StyleProperty$_check = StyleProperty._check(node),
|
|
25
|
+
success = _StyleProperty$_check.success,
|
|
26
|
+
ref = _StyleProperty$_check.ref;
|
|
27
|
+
if (!success) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
context.report({
|
|
31
|
+
node: ref.node.value,
|
|
32
|
+
messageId: messageId,
|
|
33
|
+
fix: ref.token ? StyleProperty._fix(ref, context) : undefined
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
_check: function _check(node) {
|
|
37
|
+
if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'Property')) {
|
|
38
|
+
return {
|
|
39
|
+
success: false,
|
|
40
|
+
ref: undefined
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Currently, we support values like:
|
|
46
|
+
* ```
|
|
47
|
+
* {
|
|
48
|
+
* padding: '8px', // value.type is Literal
|
|
49
|
+
* margin: -8, // value.type is UnaryExpression
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
if (!((0, _eslintCodemodUtils.isNodeOfType)(node.value, 'Literal') || (0, _eslintCodemodUtils.isNodeOfType)(node.value, 'UnaryExpression'))) {
|
|
54
|
+
return {
|
|
55
|
+
success: false,
|
|
56
|
+
ref: undefined
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
var _ast$ObjectEntry$getP = ast.ObjectEntry.getProperty(node),
|
|
60
|
+
property = _ast$ObjectEntry$getP.value;
|
|
61
|
+
|
|
62
|
+
// Bail if the property is not `padding`, `margin`, etc
|
|
63
|
+
if (!property || !_styleMap.styleMap[property]) {
|
|
64
|
+
return {
|
|
65
|
+
success: false,
|
|
66
|
+
ref: undefined
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
var value = ast.ObjectEntry.getValue(node);
|
|
70
|
+
|
|
71
|
+
// This is mainly useful as a type guard, so the checks after don't have to have duplicate checks for other types.
|
|
72
|
+
if (!(0, _utils.isStringOrNumber)(value)) {
|
|
73
|
+
return {
|
|
74
|
+
success: false,
|
|
75
|
+
ref: undefined
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ignore CSS vars. See: https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/74844/overview?commentId=6741571
|
|
80
|
+
if (value.toString().startsWith('var(')) {
|
|
81
|
+
return {
|
|
82
|
+
success: false,
|
|
83
|
+
ref: undefined
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// There are valid values to ignore, such as `margin: auto`
|
|
88
|
+
if (_supported.default.values.ignore.includes(value)) {
|
|
89
|
+
return {
|
|
90
|
+
success: false,
|
|
91
|
+
ref: undefined
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Don't report on stuff like `padding: '8px 16px'`.
|
|
96
|
+
// We may iterate to handle values like this in future.
|
|
97
|
+
if (value.toString().includes(' ')) {
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
ref: undefined
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
var ref = {
|
|
104
|
+
node: node,
|
|
105
|
+
token: _styleMap.styleMap[property][value],
|
|
106
|
+
fallback: value
|
|
107
|
+
};
|
|
108
|
+
return {
|
|
109
|
+
success: true,
|
|
110
|
+
ref: ref
|
|
111
|
+
};
|
|
112
|
+
},
|
|
113
|
+
/**
|
|
114
|
+
* All required validation steps have been taken care of before this
|
|
115
|
+
* transformer is called, so it just goes ahead providing all necessary fixes
|
|
116
|
+
*/
|
|
117
|
+
_fix: function _fix(ref, context) {
|
|
118
|
+
return function (fixer) {
|
|
119
|
+
var importFix = (0, _upsertImportDeclaration.upsertImportDeclaration)({
|
|
120
|
+
module: '@atlaskit/tokens',
|
|
121
|
+
specifiers: ['token']
|
|
122
|
+
}, context, fixer);
|
|
123
|
+
var tokenCall = ref.fallback ? "token('".concat(ref.token, "', '").concat(ref.fallback, "')") : "token('".concat(ref.token, "')");
|
|
124
|
+
var tokenFix = fixer.replaceText(ref.node.value, tokenCall);
|
|
125
|
+
return [importFix, tokenFix].filter(function (fix) {
|
|
126
|
+
return Boolean(fix);
|
|
127
|
+
}); // Some of the transformers can return arrays with undefined, so filter them out
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.styleMap = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _tokenMap;
|
|
10
|
+
// TODO: https://product-fabric.atlassian.net/browse/DSP-16054
|
|
11
|
+
var tokenMap = (_tokenMap = {
|
|
12
|
+
'-2px': 'space.negative.025',
|
|
13
|
+
'-4px': 'space.negative.050',
|
|
14
|
+
'-6px': 'space.negative.075',
|
|
15
|
+
'-8px': 'space.negative.100',
|
|
16
|
+
'-12px': 'space.negative.150',
|
|
17
|
+
'-16px': 'space.negative.200',
|
|
18
|
+
'-20px': 'space.negative.250',
|
|
19
|
+
'-24px': 'space.negative.300',
|
|
20
|
+
'-32px': 'space.negative.400'
|
|
21
|
+
}, (0, _defineProperty2.default)(_tokenMap, -2, 'space.negative.025'), (0, _defineProperty2.default)(_tokenMap, -4, 'space.negative.050'), (0, _defineProperty2.default)(_tokenMap, -6, 'space.negative.075'), (0, _defineProperty2.default)(_tokenMap, -8, 'space.negative.100'), (0, _defineProperty2.default)(_tokenMap, -12, 'space.negative.150'), (0, _defineProperty2.default)(_tokenMap, -16, 'space.negative.200'), (0, _defineProperty2.default)(_tokenMap, -20, 'space.negative.250'), (0, _defineProperty2.default)(_tokenMap, -24, 'space.negative.300'), (0, _defineProperty2.default)(_tokenMap, -32, 'space.negative.400'), (0, _defineProperty2.default)(_tokenMap, '2px', 'space.025'), (0, _defineProperty2.default)(_tokenMap, '4px', 'space.050'), (0, _defineProperty2.default)(_tokenMap, '6px', 'space.075'), (0, _defineProperty2.default)(_tokenMap, '8px', 'space.100'), (0, _defineProperty2.default)(_tokenMap, '12px', 'space.150'), (0, _defineProperty2.default)(_tokenMap, '16px', 'space.200'), (0, _defineProperty2.default)(_tokenMap, '20px', 'space.250'), (0, _defineProperty2.default)(_tokenMap, '24px', 'space.300'), (0, _defineProperty2.default)(_tokenMap, '32px', 'space.400'), (0, _defineProperty2.default)(_tokenMap, '40px', 'space.500'), (0, _defineProperty2.default)(_tokenMap, '48px', 'space.600'), (0, _defineProperty2.default)(_tokenMap, '64px', 'space.800'), (0, _defineProperty2.default)(_tokenMap, '80px', 'space.1000'), (0, _defineProperty2.default)(_tokenMap, 2, 'space.025'), (0, _defineProperty2.default)(_tokenMap, 4, 'space.050'), (0, _defineProperty2.default)(_tokenMap, 6, 'space.075'), (0, _defineProperty2.default)(_tokenMap, 8, 'space.100'), (0, _defineProperty2.default)(_tokenMap, 12, 'space.150'), (0, _defineProperty2.default)(_tokenMap, 16, 'space.200'), (0, _defineProperty2.default)(_tokenMap, 20, 'space.250'), (0, _defineProperty2.default)(_tokenMap, 24, 'space.300'), (0, _defineProperty2.default)(_tokenMap, 32, 'space.400'), (0, _defineProperty2.default)(_tokenMap, 40, 'space.500'), (0, _defineProperty2.default)(_tokenMap, 48, 'space.600'), (0, _defineProperty2.default)(_tokenMap, 64, 'space.800'), (0, _defineProperty2.default)(_tokenMap, 80, 'space.1000'), (0, _defineProperty2.default)(_tokenMap, '-0.125rem', 'space.negative.025'), (0, _defineProperty2.default)(_tokenMap, '-0.25rem', 'space.negative.050'), (0, _defineProperty2.default)(_tokenMap, '-0.375rem', 'space.negative.075'), (0, _defineProperty2.default)(_tokenMap, '-0.5rem', 'space.negative.100'), (0, _defineProperty2.default)(_tokenMap, '-0.75rem', 'space.negative.150'), (0, _defineProperty2.default)(_tokenMap, '-1rem', 'space.negative.200'), (0, _defineProperty2.default)(_tokenMap, '-1.25rem', 'space.negative.250'), (0, _defineProperty2.default)(_tokenMap, '-1.5rem', 'space.negative.300'), (0, _defineProperty2.default)(_tokenMap, '-2rem', 'space.negative.400'), (0, _defineProperty2.default)(_tokenMap, '0.125rem', 'space.025'), (0, _defineProperty2.default)(_tokenMap, '0.25rem', 'space.050'), (0, _defineProperty2.default)(_tokenMap, '0.375rem', 'space.075'), (0, _defineProperty2.default)(_tokenMap, '0.5rem', 'space.100'), (0, _defineProperty2.default)(_tokenMap, '0.75rem', 'space.150'), (0, _defineProperty2.default)(_tokenMap, '1rem', 'space.200'), (0, _defineProperty2.default)(_tokenMap, '1.25rem', 'space.250'), (0, _defineProperty2.default)(_tokenMap, '1.5rem', 'space.300'), (0, _defineProperty2.default)(_tokenMap, '2rem', 'space.400'), (0, _defineProperty2.default)(_tokenMap, '2.5rem', 'space.500'), (0, _defineProperty2.default)(_tokenMap, '3rem', 'space.600'), (0, _defineProperty2.default)(_tokenMap, '4rem', 'space.800'), (0, _defineProperty2.default)(_tokenMap, '5rem', 'space.1000'), (0, _defineProperty2.default)(_tokenMap, '-0.125em', 'space.negative.025'), (0, _defineProperty2.default)(_tokenMap, '-0.25em', 'space.negative.050'), (0, _defineProperty2.default)(_tokenMap, '-0.375em', 'space.negative.075'), (0, _defineProperty2.default)(_tokenMap, '-0.5em', 'space.negative.100'), (0, _defineProperty2.default)(_tokenMap, '-0.75em', 'space.negative.150'), (0, _defineProperty2.default)(_tokenMap, '-1em', 'space.negative.200'), (0, _defineProperty2.default)(_tokenMap, '-1.25em', 'space.negative.250'), (0, _defineProperty2.default)(_tokenMap, '-1.5em', 'space.negative.300'), (0, _defineProperty2.default)(_tokenMap, '-2em', 'space.negative.400'), (0, _defineProperty2.default)(_tokenMap, '0.125em', 'space.025'), (0, _defineProperty2.default)(_tokenMap, '0.25em', 'space.050'), (0, _defineProperty2.default)(_tokenMap, '0.375em', 'space.075'), (0, _defineProperty2.default)(_tokenMap, '0.5em', 'space.100'), (0, _defineProperty2.default)(_tokenMap, '0.75em', 'space.150'), (0, _defineProperty2.default)(_tokenMap, '1em', 'space.200'), (0, _defineProperty2.default)(_tokenMap, '1.25em', 'space.250'), (0, _defineProperty2.default)(_tokenMap, '1.5em', 'space.300'), (0, _defineProperty2.default)(_tokenMap, '2em', 'space.400'), (0, _defineProperty2.default)(_tokenMap, '2.5em', 'space.500'), (0, _defineProperty2.default)(_tokenMap, '3em', 'space.600'), (0, _defineProperty2.default)(_tokenMap, '4em', 'space.800'), (0, _defineProperty2.default)(_tokenMap, '5em', 'space.1000'), _tokenMap);
|
|
22
|
+
var styleMap = exports.styleMap = {
|
|
23
|
+
'column-gap': tokenMap,
|
|
24
|
+
columnGap: tokenMap,
|
|
25
|
+
gap: tokenMap,
|
|
26
|
+
'grid-column-gap': tokenMap,
|
|
27
|
+
'grid-row-gap': tokenMap,
|
|
28
|
+
gridColumnGap: tokenMap,
|
|
29
|
+
gridRowGap: tokenMap,
|
|
30
|
+
'margin-block-end': tokenMap,
|
|
31
|
+
'margin-block-start': tokenMap,
|
|
32
|
+
'margin-block': tokenMap,
|
|
33
|
+
'margin-bottom': tokenMap,
|
|
34
|
+
'margin-inline-end': tokenMap,
|
|
35
|
+
'margin-inline-start': tokenMap,
|
|
36
|
+
'margin-inline': tokenMap,
|
|
37
|
+
'margin-left': tokenMap,
|
|
38
|
+
'margin-right': tokenMap,
|
|
39
|
+
'margin-top': tokenMap,
|
|
40
|
+
'outline-offset': tokenMap,
|
|
41
|
+
outlineOffset: tokenMap,
|
|
42
|
+
'padding-block-end': tokenMap,
|
|
43
|
+
'padding-block-start': tokenMap,
|
|
44
|
+
'padding-block': tokenMap,
|
|
45
|
+
'padding-bottom': tokenMap,
|
|
46
|
+
'padding-inline-end': tokenMap,
|
|
47
|
+
'padding-inline-start': tokenMap,
|
|
48
|
+
'padding-inline': tokenMap,
|
|
49
|
+
'padding-left': tokenMap,
|
|
50
|
+
'padding-right': tokenMap,
|
|
51
|
+
'padding-top': tokenMap,
|
|
52
|
+
'row-gap': tokenMap,
|
|
53
|
+
rowGap: tokenMap,
|
|
54
|
+
margin: tokenMap,
|
|
55
|
+
marginBlock: tokenMap,
|
|
56
|
+
marginBlockEnd: tokenMap,
|
|
57
|
+
marginBlockStart: tokenMap,
|
|
58
|
+
marginBottom: tokenMap,
|
|
59
|
+
marginInline: tokenMap,
|
|
60
|
+
marginInlineEnd: tokenMap,
|
|
61
|
+
marginInlineStart: tokenMap,
|
|
62
|
+
marginLeft: tokenMap,
|
|
63
|
+
marginRight: tokenMap,
|
|
64
|
+
marginTop: tokenMap,
|
|
65
|
+
padding: tokenMap,
|
|
66
|
+
paddingBlock: tokenMap,
|
|
67
|
+
paddingBlockEnd: tokenMap,
|
|
68
|
+
paddingBlockStart: tokenMap,
|
|
69
|
+
paddingBottom: tokenMap,
|
|
70
|
+
paddingInline: tokenMap,
|
|
71
|
+
paddingInlineEnd: tokenMap,
|
|
72
|
+
paddingInlineStart: tokenMap,
|
|
73
|
+
paddingLeft: tokenMap,
|
|
74
|
+
paddingRight: tokenMap,
|
|
75
|
+
paddingTop: tokenMap
|
|
76
|
+
// bottom: tokenMap,
|
|
77
|
+
// left: tokenMap,
|
|
78
|
+
// right: tokenMap,
|
|
79
|
+
// top: tokenMap,
|
|
80
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _default = exports.default = {
|
|
8
|
+
values: {
|
|
9
|
+
ignore: ['auto', 'initial', 'inherit', 'unset', 'revert', 'revert-layer', 'none',
|
|
10
|
+
// outline-offset can be set to none
|
|
11
|
+
// Currently the DST opinion is that 0 is valid. It doesn't need to be converted to `space.0`
|
|
12
|
+
0, '0', '0px', '0em', '0rem']
|
|
13
|
+
}
|
|
14
|
+
};
|
package/dist/cjs/rules/use-tokens-space/transformers/style-property/upsert-import-declaration.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.upsertImportDeclaration = void 0;
|
|
8
|
+
var ast = _interopRequireWildcard(require("../../../../ast-nodes"));
|
|
9
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
10
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
11
|
+
/**
|
|
12
|
+
* Currently this is defined here because it's not very general purpose.
|
|
13
|
+
* If we were to move this to `ast-nodes`, half the implementation would be in `Root`,
|
|
14
|
+
* and the other half would be in `Import`.
|
|
15
|
+
*
|
|
16
|
+
* TODO: Refactor and move to `ast-nodes`
|
|
17
|
+
*
|
|
18
|
+
* Note: It does not handle default imports, namespace imports, or aliased imports.
|
|
19
|
+
*/
|
|
20
|
+
var upsertImportDeclaration = exports.upsertImportDeclaration = function upsertImportDeclaration(_ref, context, fixer) {
|
|
21
|
+
var module = _ref.module,
|
|
22
|
+
specifiers = _ref.specifiers;
|
|
23
|
+
// Find any imports that match the packageName
|
|
24
|
+
var root = context.getSourceCode().ast.body;
|
|
25
|
+
var importDeclarations = ast.Root.findImportsByModule(root, module);
|
|
26
|
+
|
|
27
|
+
// The import doesn't exist yet, we can just insert a whole new one
|
|
28
|
+
if (importDeclarations.length === 0) {
|
|
29
|
+
return ast.Root.insertImport(root, {
|
|
30
|
+
module: module,
|
|
31
|
+
specifiers: specifiers
|
|
32
|
+
}, fixer);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// The import exists so, modify the existing one
|
|
36
|
+
return ast.Import.insertNamedSpecifiers(importDeclarations[0], specifiers, fixer);
|
|
37
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "isStringOrNumber", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _isStringOrNumber.isStringOrNumber;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _isStringOrNumber = require("./is-string-or-number");
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isStringOrNumber = void 0;
|
|
7
|
+
var isStringOrNumber = exports.isStringOrNumber = function isStringOrNumber(value) {
|
|
8
|
+
return typeof value === 'string' || typeof value === 'number';
|
|
9
|
+
};
|
|
@@ -1,5 +1,40 @@
|
|
|
1
|
+
/* eslint-disable @repo/internal/react/require-jsdoc */
|
|
2
|
+
|
|
1
3
|
import { isNodeOfType } from 'eslint-codemod-utils';
|
|
2
|
-
const ObjectEntry = {
|
|
4
|
+
export const ObjectEntry = {
|
|
5
|
+
getProperty(node) {
|
|
6
|
+
if (isNodeOfType(node.key, 'Identifier')) {
|
|
7
|
+
return {
|
|
8
|
+
type: 'Identifier',
|
|
9
|
+
value: node.key.name
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
if (isNodeOfType(node.key, 'Literal') && node.key.value) {
|
|
13
|
+
return {
|
|
14
|
+
type: 'Literal',
|
|
15
|
+
value: node.key.value.toString()
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
type: undefined,
|
|
20
|
+
value: undefined
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
getValue(node) {
|
|
24
|
+
// The value is a number, like `-3`
|
|
25
|
+
if (isNodeOfType(node.value, 'UnaryExpression') && isNodeOfType(node.value.argument, 'Literal') && node.value.argument.raw) {
|
|
26
|
+
if (node.value.operator === '-') {
|
|
27
|
+
return -1 * Number.parseInt(node.value.argument.raw);
|
|
28
|
+
}
|
|
29
|
+
return Number.parseInt(node.value.argument.raw);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// The value is a string, like `'4px'`
|
|
33
|
+
if (isNodeOfType(node.value, 'Literal') && node.value.value) {
|
|
34
|
+
return node.value.value;
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
},
|
|
3
38
|
deleteEntry(node, context, fixer) {
|
|
4
39
|
var _lastToken;
|
|
5
40
|
// context.getSourceCode() is deprecated in favour of context.sourceCode, however this returns undefined for some reason
|
|
@@ -31,5 +66,4 @@ const ObjectEntry = {
|
|
|
31
66
|
return node.key.name;
|
|
32
67
|
}
|
|
33
68
|
}
|
|
34
|
-
};
|
|
35
|
-
export { ObjectEntry };
|
|
69
|
+
};
|
|
@@ -99,6 +99,18 @@ const ASTObjectExpression = {
|
|
|
99
99
|
key: identifier(key),
|
|
100
100
|
value: literal(value)
|
|
101
101
|
}).toString()}, `);
|
|
102
|
+
},
|
|
103
|
+
recurse(node, callback) {
|
|
104
|
+
node.properties.forEach(entry => {
|
|
105
|
+
// Call the callback first, in case the user wants to do something with SpreadElements
|
|
106
|
+
callback(entry);
|
|
107
|
+
if (!isNodeOfType(entry, 'Property')) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (isNodeOfType(entry.value, 'ObjectExpression')) {
|
|
111
|
+
ASTObjectExpression.recurse(entry.value, callback);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
102
114
|
}
|
|
103
115
|
};
|
|
104
116
|
export { ASTObjectExpression as Object };
|
|
@@ -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::d95217b658f807294de3c81123068bf1>>
|
|
4
4
|
* @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
|
|
5
5
|
*/
|
|
6
6
|
export default {
|
|
@@ -35,6 +35,7 @@ export default {
|
|
|
35
35
|
'@atlaskit/design-system/use-href-in-link-item': 'warn',
|
|
36
36
|
'@atlaskit/design-system/use-primitives': 'warn',
|
|
37
37
|
'@atlaskit/design-system/use-primitives-text': 'warn',
|
|
38
|
+
'@atlaskit/design-system/use-tokens-space': 'error',
|
|
38
39
|
'@atlaskit/design-system/use-tokens-typography': 'warn',
|
|
39
40
|
'@atlaskit/design-system/use-visually-hidden': 'error'
|
|
40
41
|
}
|