@eslint-react/core 1.27.1-next.8 → 1.28.0-next.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/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
- return false;
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
- return false;
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
- return false;
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
- return false;
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
- return false;
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
- return false;
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.27.1-next.8",
3
+ "version": "1.28.0-next.0",
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.27.1-next.8",
45
- "@eslint-react/eff": "1.27.1-next.8",
46
- "@eslint-react/shared": "1.27.1-next.8",
47
- "@eslint-react/var": "1.27.1-next.8",
48
- "@eslint-react/jsx": "1.27.1-next.8"
44
+ "@eslint-react/ast": "1.28.0-next.0",
45
+ "@eslint-react/eff": "1.28.0-next.0",
46
+ "@eslint-react/shared": "1.28.0-next.0",
47
+ "@eslint-react/var": "1.28.0-next.0",
48
+ "@eslint-react/jsx": "1.28.0-next.0"
49
49
  },
50
50
  "devDependencies": {
51
51
  "tsup": "^8.3.6",