@eslint-react/core 1.27.1-next.8 → 1.28.0-beta.1
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/dist/index.js +10 -31
- package/dist/index.mjs +11 -32
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ var JSX3 = require('@eslint-react/jsx');
|
|
|
6
6
|
var shared = require('@eslint-react/shared');
|
|
7
7
|
var types = require('@typescript-eslint/types');
|
|
8
8
|
var VAR = require('@eslint-react/var');
|
|
9
|
+
var tsPattern = require('ts-pattern');
|
|
9
10
|
var birecord = require('birecord');
|
|
10
11
|
|
|
11
12
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -45,6 +46,9 @@ function isDisplayNameAssignment(node) {
|
|
|
45
46
|
if (node == null) return false;
|
|
46
47
|
return node.type === types.AST_NODE_TYPES.AssignmentExpression && node.operator === "=" && node.left.type === types.AST_NODE_TYPES.MemberExpression && node.left.property.type === types.AST_NODE_TYPES.Identifier && node.left.property.name === "displayName";
|
|
47
48
|
}
|
|
49
|
+
function getRequireExpressionArguments(node) {
|
|
50
|
+
return tsPattern.match(node).with({ type: types.AST_NODE_TYPES.CallExpression, arguments: tsPattern.P.select(), callee: { type: types.AST_NODE_TYPES.Identifier, name: "require" } }, eff.identity).with({ type: types.AST_NODE_TYPES.MemberExpression, object: tsPattern.P.select() }, getRequireExpressionArguments).otherwise(() => eff._);
|
|
51
|
+
}
|
|
48
52
|
function isInitializedFromReact(name, source, initialScope) {
|
|
49
53
|
if (name.toLowerCase() === "react") return true;
|
|
50
54
|
const latestDef = VAR__namespace.findVariable(name, initialScope)?.defs.at(-1);
|
|
@@ -67,19 +71,6 @@ function isInitializedFromReact(name, source, initialScope) {
|
|
|
67
71
|
}
|
|
68
72
|
return parent?.type === types.AST_NODE_TYPES.ImportDeclaration && parent.source.value === source;
|
|
69
73
|
}
|
|
70
|
-
function getRequireExpressionArguments(node) {
|
|
71
|
-
switch (true) {
|
|
72
|
-
// require('source')
|
|
73
|
-
case (node.type === types.AST_NODE_TYPES.CallExpression && node.callee.type === types.AST_NODE_TYPES.Identifier && node.callee.name === "require"): {
|
|
74
|
-
return node.arguments;
|
|
75
|
-
}
|
|
76
|
-
// require('source').variable
|
|
77
|
-
case node.type === types.AST_NODE_TYPES.MemberExpression: {
|
|
78
|
-
return getRequireExpressionArguments(node.object);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return eff._;
|
|
82
|
-
}
|
|
83
74
|
|
|
84
75
|
// src/utils/is-from-react.ts
|
|
85
76
|
function isFromReact(name) {
|
|
@@ -106,12 +97,8 @@ function isFromReactMember(memberName, name) {
|
|
|
106
97
|
return (node, context) => {
|
|
107
98
|
const settings = shared.unsafeDecodeSettings(context.settings);
|
|
108
99
|
if (!settings.strictImportCheck) {
|
|
109
|
-
if (node.property.type !== types.AST_NODE_TYPES.Identifier || node.property.name !== name)
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
if (node.object.type === types.AST_NODE_TYPES.Identifier && node.object.name === memberName) {
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
100
|
+
if (node.property.type !== types.AST_NODE_TYPES.Identifier || node.property.name !== name) return false;
|
|
101
|
+
if (node.object.type === types.AST_NODE_TYPES.Identifier && node.object.name === memberName) return true;
|
|
115
102
|
if (node.object.type === types.AST_NODE_TYPES.MemberExpression && node.object.object.type === types.AST_NODE_TYPES.Identifier && node.object.property.type === types.AST_NODE_TYPES.Identifier) {
|
|
116
103
|
return node.object.property.name === memberName;
|
|
117
104
|
}
|
|
@@ -133,23 +120,15 @@ function isFromReactMember(memberName, name) {
|
|
|
133
120
|
}
|
|
134
121
|
function isCallFromReact(name) {
|
|
135
122
|
return eff.dual(2, (node, context) => {
|
|
136
|
-
if (node.type !== types.AST_NODE_TYPES.CallExpression)
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
if (!AST9__namespace.isOneOf([types.AST_NODE_TYPES.Identifier, types.AST_NODE_TYPES.MemberExpression])(node.callee)) {
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
123
|
+
if (node.type !== types.AST_NODE_TYPES.CallExpression) return false;
|
|
124
|
+
if (!AST9__namespace.isOneOf([types.AST_NODE_TYPES.Identifier, types.AST_NODE_TYPES.MemberExpression])(node.callee)) return false;
|
|
142
125
|
return isFromReact(name)(node.callee, context);
|
|
143
126
|
});
|
|
144
127
|
}
|
|
145
128
|
function isCallFromReactMember(pragmaMemberName, name) {
|
|
146
129
|
return eff.dual(2, (node, context) => {
|
|
147
|
-
if (node.type !== types.AST_NODE_TYPES.CallExpression)
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
if (!AST9__namespace.is(types.AST_NODE_TYPES.MemberExpression)(node.callee)) {
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
130
|
+
if (node.type !== types.AST_NODE_TYPES.CallExpression) return false;
|
|
131
|
+
if (!AST9__namespace.is(types.AST_NODE_TYPES.MemberExpression)(node.callee)) return false;
|
|
153
132
|
return isFromReactMember(pragmaMemberName, name)(node.callee, context);
|
|
154
133
|
});
|
|
155
134
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as AST9 from '@eslint-react/ast';
|
|
2
|
-
import { flip, dual, constFalse, _ } from '@eslint-react/eff';
|
|
2
|
+
import { flip, dual, constFalse, identity, _ } from '@eslint-react/eff';
|
|
3
3
|
import * as JSX3 from '@eslint-react/jsx';
|
|
4
4
|
import { unsafeDecodeSettings, DEFAULT_ESLINT_REACT_SETTINGS, getId } from '@eslint-react/shared';
|
|
5
5
|
import { AST_NODE_TYPES } from '@typescript-eslint/types';
|
|
6
6
|
import * as VAR from '@eslint-react/var';
|
|
7
|
+
import { match, P } from 'ts-pattern';
|
|
7
8
|
import birecord from 'birecord';
|
|
8
9
|
|
|
9
10
|
// src/component/component-collector.ts
|
|
@@ -18,6 +19,9 @@ function isDisplayNameAssignment(node) {
|
|
|
18
19
|
if (node == null) return false;
|
|
19
20
|
return node.type === AST_NODE_TYPES.AssignmentExpression && node.operator === "=" && node.left.type === AST_NODE_TYPES.MemberExpression && node.left.property.type === AST_NODE_TYPES.Identifier && node.left.property.name === "displayName";
|
|
20
21
|
}
|
|
22
|
+
function getRequireExpressionArguments(node) {
|
|
23
|
+
return match(node).with({ type: AST_NODE_TYPES.CallExpression, arguments: P.select(), callee: { type: AST_NODE_TYPES.Identifier, name: "require" } }, identity).with({ type: AST_NODE_TYPES.MemberExpression, object: P.select() }, getRequireExpressionArguments).otherwise(() => _);
|
|
24
|
+
}
|
|
21
25
|
function isInitializedFromReact(name, source, initialScope) {
|
|
22
26
|
if (name.toLowerCase() === "react") return true;
|
|
23
27
|
const latestDef = VAR.findVariable(name, initialScope)?.defs.at(-1);
|
|
@@ -40,19 +44,6 @@ function isInitializedFromReact(name, source, initialScope) {
|
|
|
40
44
|
}
|
|
41
45
|
return parent?.type === AST_NODE_TYPES.ImportDeclaration && parent.source.value === source;
|
|
42
46
|
}
|
|
43
|
-
function getRequireExpressionArguments(node) {
|
|
44
|
-
switch (true) {
|
|
45
|
-
// require('source')
|
|
46
|
-
case (node.type === AST_NODE_TYPES.CallExpression && node.callee.type === AST_NODE_TYPES.Identifier && node.callee.name === "require"): {
|
|
47
|
-
return node.arguments;
|
|
48
|
-
}
|
|
49
|
-
// require('source').variable
|
|
50
|
-
case node.type === AST_NODE_TYPES.MemberExpression: {
|
|
51
|
-
return getRequireExpressionArguments(node.object);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return _;
|
|
55
|
-
}
|
|
56
47
|
|
|
57
48
|
// src/utils/is-from-react.ts
|
|
58
49
|
function isFromReact(name) {
|
|
@@ -79,12 +70,8 @@ function isFromReactMember(memberName, name) {
|
|
|
79
70
|
return (node, context) => {
|
|
80
71
|
const settings = unsafeDecodeSettings(context.settings);
|
|
81
72
|
if (!settings.strictImportCheck) {
|
|
82
|
-
if (node.property.type !== AST_NODE_TYPES.Identifier || node.property.name !== name)
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
if (node.object.type === AST_NODE_TYPES.Identifier && node.object.name === memberName) {
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
73
|
+
if (node.property.type !== AST_NODE_TYPES.Identifier || node.property.name !== name) return false;
|
|
74
|
+
if (node.object.type === AST_NODE_TYPES.Identifier && node.object.name === memberName) return true;
|
|
88
75
|
if (node.object.type === AST_NODE_TYPES.MemberExpression && node.object.object.type === AST_NODE_TYPES.Identifier && node.object.property.type === AST_NODE_TYPES.Identifier) {
|
|
89
76
|
return node.object.property.name === memberName;
|
|
90
77
|
}
|
|
@@ -106,23 +93,15 @@ function isFromReactMember(memberName, name) {
|
|
|
106
93
|
}
|
|
107
94
|
function isCallFromReact(name) {
|
|
108
95
|
return dual(2, (node, context) => {
|
|
109
|
-
if (node.type !== AST_NODE_TYPES.CallExpression)
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
if (!AST9.isOneOf([AST_NODE_TYPES.Identifier, AST_NODE_TYPES.MemberExpression])(node.callee)) {
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
96
|
+
if (node.type !== AST_NODE_TYPES.CallExpression) return false;
|
|
97
|
+
if (!AST9.isOneOf([AST_NODE_TYPES.Identifier, AST_NODE_TYPES.MemberExpression])(node.callee)) return false;
|
|
115
98
|
return isFromReact(name)(node.callee, context);
|
|
116
99
|
});
|
|
117
100
|
}
|
|
118
101
|
function isCallFromReactMember(pragmaMemberName, name) {
|
|
119
102
|
return dual(2, (node, context) => {
|
|
120
|
-
if (node.type !== AST_NODE_TYPES.CallExpression)
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
if (!AST9.is(AST_NODE_TYPES.MemberExpression)(node.callee)) {
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
103
|
+
if (node.type !== AST_NODE_TYPES.CallExpression) return false;
|
|
104
|
+
if (!AST9.is(AST_NODE_TYPES.MemberExpression)(node.callee)) return false;
|
|
126
105
|
return isFromReactMember(pragmaMemberName, name)(node.callee, context);
|
|
127
106
|
});
|
|
128
107
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eslint-react/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.28.0-beta.1",
|
|
4
4
|
"description": "ESLint React's ESLint utility module for static analysis of React core APIs and Patterns.",
|
|
5
5
|
"homepage": "https://github.com/Rel1cx/eslint-react",
|
|
6
6
|
"bugs": {
|
|
@@ -41,11 +41,11 @@
|
|
|
41
41
|
"@typescript-eslint/utils": "^8.25.0",
|
|
42
42
|
"birecord": "^0.1.1",
|
|
43
43
|
"ts-pattern": "^5.6.2",
|
|
44
|
-
"@eslint-react/ast": "1.
|
|
45
|
-
"@eslint-react/eff": "1.
|
|
46
|
-
"@eslint-react/shared": "1.
|
|
47
|
-
"@eslint-react/var": "1.
|
|
48
|
-
"@eslint-react/jsx": "1.
|
|
44
|
+
"@eslint-react/ast": "1.28.0-beta.1",
|
|
45
|
+
"@eslint-react/eff": "1.28.0-beta.1",
|
|
46
|
+
"@eslint-react/shared": "1.28.0-beta.1",
|
|
47
|
+
"@eslint-react/var": "1.28.0-beta.1",
|
|
48
|
+
"@eslint-react/jsx": "1.28.0-beta.1"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"tsup": "^8.3.6",
|