@agilebot/eslint-plugin 0.1.1 → 0.1.3
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/lib/index.js +59 -52
- package/lib/rules/import/monorepo.js +49 -44
- package/lib/rules/intl/id-unused.js +117 -117
- package/lib/rules/react/better-exhaustive-deps.js +1921 -1935
- package/lib/rules/react/prefer-named-property-access.js +105 -105
- package/lib/rules/tss/class-naming.js +43 -43
- package/lib/rules/tss/no-color-value.js +58 -59
- package/lib/rules/tss/unused-classes.js +108 -108
- package/lib/util/import.js +71 -71
- package/lib/util/intl.js +127 -127
- package/lib/util/translations.js +66 -67
- package/lib/util/tss.js +109 -104
- package/package.json +10 -4
package/lib/util/tss.js
CHANGED
@@ -1,104 +1,109 @@
|
|
1
|
-
// Helper function to get the basic identifier from various node types
|
2
|
-
function getBasicIdentifier(node) {
|
3
|
-
if (node.type === 'Identifier') {
|
4
|
-
// Return the identifier name for simple cases like classes.foo
|
5
|
-
return node.name;
|
6
|
-
}
|
7
|
-
|
8
|
-
if (node.type === 'Literal') {
|
9
|
-
// Return the literal value for cases like classes['foo']
|
10
|
-
return node.value;
|
11
|
-
}
|
12
|
-
|
13
|
-
if (node.type === 'TemplateLiteral') {
|
14
|
-
// Handle template literals, e.g., classes[`foo`]
|
15
|
-
if (node.expressions.length) {
|
16
|
-
// Template literals with expressions, e.g., classes[`foo${bar}`]
|
17
|
-
return null;
|
18
|
-
}
|
19
|
-
return node.quasis[0].value.raw;
|
20
|
-
}
|
21
|
-
|
22
|
-
// Handle other cases, e.g., classes['foo' + bar]
|
23
|
-
return null;
|
24
|
-
}
|
25
|
-
|
26
|
-
// Helper function to recursively get the base identifier from a MemberExpression node
|
27
|
-
function getBaseIdentifier(node) {
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
}
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
}
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
1
|
+
// Helper function to get the basic identifier from various node types
|
2
|
+
function getBasicIdentifier(node) {
|
3
|
+
if (node.type === 'Identifier') {
|
4
|
+
// Return the identifier name for simple cases like classes.foo
|
5
|
+
return node.name;
|
6
|
+
}
|
7
|
+
|
8
|
+
if (node.type === 'Literal') {
|
9
|
+
// Return the literal value for cases like classes['foo']
|
10
|
+
return node.value;
|
11
|
+
}
|
12
|
+
|
13
|
+
if (node.type === 'TemplateLiteral') {
|
14
|
+
// Handle template literals, e.g., classes[`foo`]
|
15
|
+
if (node.expressions.length > 0) {
|
16
|
+
// Template literals with expressions, e.g., classes[`foo${bar}`]
|
17
|
+
return null;
|
18
|
+
}
|
19
|
+
return node.quasis[0].value.raw;
|
20
|
+
}
|
21
|
+
|
22
|
+
// Handle other cases, e.g., classes['foo' + bar]
|
23
|
+
return null;
|
24
|
+
}
|
25
|
+
|
26
|
+
// Helper function to recursively get the base identifier from a MemberExpression node
|
27
|
+
function getBaseIdentifier(node) {
|
28
|
+
switch (node.type) {
|
29
|
+
case 'Identifier': {
|
30
|
+
return node;
|
31
|
+
}
|
32
|
+
case 'CallExpression': {
|
33
|
+
return getBaseIdentifier(node.callee);
|
34
|
+
}
|
35
|
+
case 'MemberExpression': {
|
36
|
+
return getBaseIdentifier(node.object);
|
37
|
+
}
|
38
|
+
// No default
|
39
|
+
}
|
40
|
+
return null;
|
41
|
+
}
|
42
|
+
|
43
|
+
function getStyesObj(node) {
|
44
|
+
const isMakeStyles = node.callee.name === 'makeStyles';
|
45
|
+
|
46
|
+
const isModernApi =
|
47
|
+
node.callee.type === 'MemberExpression' &&
|
48
|
+
node.callee.property.name === 'create' &&
|
49
|
+
getBaseIdentifier(node.callee.object) &&
|
50
|
+
getBaseIdentifier(node.callee.object).name === 'tss';
|
51
|
+
|
52
|
+
if (!isMakeStyles && !isModernApi) {
|
53
|
+
return;
|
54
|
+
}
|
55
|
+
|
56
|
+
const styles = (() => {
|
57
|
+
if (isMakeStyles) {
|
58
|
+
return node.parent.arguments[0];
|
59
|
+
}
|
60
|
+
|
61
|
+
if (isModernApi) {
|
62
|
+
return node.callee.parent.arguments[0];
|
63
|
+
}
|
64
|
+
})();
|
65
|
+
|
66
|
+
if (!styles) {
|
67
|
+
return;
|
68
|
+
}
|
69
|
+
|
70
|
+
switch (styles.type) {
|
71
|
+
case 'ObjectExpression':
|
72
|
+
return styles;
|
73
|
+
case 'ArrowFunctionExpression':
|
74
|
+
{
|
75
|
+
const { body } = styles;
|
76
|
+
|
77
|
+
switch (body.type) {
|
78
|
+
case 'ObjectExpression':
|
79
|
+
return body;
|
80
|
+
case 'BlockStatement': {
|
81
|
+
let stylesObj;
|
82
|
+
|
83
|
+
body.body.forEach(bodyNode => {
|
84
|
+
if (
|
85
|
+
bodyNode.type === 'ReturnStatement' &&
|
86
|
+
bodyNode.argument.type === 'ObjectExpression'
|
87
|
+
) {
|
88
|
+
stylesObj = bodyNode.argument;
|
89
|
+
}
|
90
|
+
});
|
91
|
+
|
92
|
+
return stylesObj;
|
93
|
+
}
|
94
|
+
}
|
95
|
+
}
|
96
|
+
break;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
|
100
|
+
function isCamelCase(value) {
|
101
|
+
return /^[a-z][a-zA-Z0-9]*$/.test(value);
|
102
|
+
}
|
103
|
+
|
104
|
+
module.exports = {
|
105
|
+
getBasicIdentifier: getBasicIdentifier,
|
106
|
+
getBaseIdentifier: getBaseIdentifier,
|
107
|
+
getStyesObj: getStyesObj,
|
108
|
+
isCamelCase: isCamelCase
|
109
|
+
};
|
package/package.json
CHANGED
@@ -1,24 +1,30 @@
|
|
1
1
|
{
|
2
2
|
"name": "@agilebot/eslint-plugin",
|
3
|
-
"version": "0.1.
|
3
|
+
"version": "0.1.3",
|
4
4
|
"description": "Agilebot's ESLint plugin",
|
5
5
|
"main": "lib",
|
6
6
|
"license": "MIT",
|
7
|
+
"keywords": [
|
8
|
+
"eslint",
|
9
|
+
"eslint-plugin"
|
10
|
+
],
|
7
11
|
"repository": {
|
8
12
|
"url": "sh-agilebot/frontend-toolkit",
|
9
13
|
"directory": "packages/eslint-plugin"
|
10
14
|
},
|
11
15
|
"homepage": "https://github.com/sh-agilebot/frontend-toolkit/tree/master/packages/eslint-plugin#readme",
|
16
|
+
"engines": {
|
17
|
+
"node": "^18.18.0 || >=20.0.0"
|
18
|
+
},
|
12
19
|
"dependencies": {
|
13
20
|
"@typescript-eslint/utils": "^7.1.1",
|
14
|
-
"consola": "^3.2.3",
|
15
21
|
"fast-glob": "^3.3.2",
|
16
22
|
"get-tsconfig": "^4.7.3",
|
17
23
|
"jiti": "^1.21.0",
|
18
24
|
"sucrase": "^3.35.0"
|
19
25
|
},
|
20
|
-
"
|
21
|
-
"
|
26
|
+
"peerDependencies": {
|
27
|
+
"eslint": "^7.0.0 || ^8.0.0"
|
22
28
|
},
|
23
29
|
"files": [
|
24
30
|
"lib"
|