@eslint-react/var 1.17.3-beta.0 → 1.17.3-beta.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/dist/index.js CHANGED
@@ -238,24 +238,46 @@ function isNodeValueEqual(a, b, initialScopes) {
238
238
  if (a.type === types.AST_NODE_TYPES.Identifier && b.type === types.AST_NODE_TYPES.Identifier) {
239
239
  const va = findVariable(a, aScope);
240
240
  const vb = findVariable(b, bScope);
241
+ const da = tools.O.flatMap(va, getVariableDef(0));
242
+ const db = tools.O.flatMap(vb, getVariableDef(0));
243
+ const dapp = tools.O.flatMapNullable(da, (d) => d.parent?.parent);
244
+ const dbpp = tools.O.flatMapNullable(db, (d) => d.parent?.parent);
241
245
  const na = tools.O.flatMap(va, getVariableNode(0));
242
246
  const nb = tools.O.flatMap(vb, getVariableNode(0));
243
- if (tools.O.isNone(na) || tools.O.isNone(nb)) return false;
244
- if (tools.O.exists(na, AST__namespace.isFunction) && tools.O.exists(nb, AST__namespace.isFunction)) {
245
- const fa = na.value;
246
- const fb = nb.value;
247
- const pa = fa.parent;
248
- const pb = fb.parent;
249
- if (pa.type !== types.AST_NODE_TYPES.CallExpression || pb.type !== types.AST_NODE_TYPES.CallExpression) return false;
250
- if (!AST__namespace.isNodeEqual(pa.callee, pb.callee)) return false;
251
- const paramsA = fa.params;
252
- const paramsB = fb.params;
253
- const posA = paramsA.findIndex((p) => AST__namespace.isNodeEqual(p, a));
254
- const posB = paramsB.findIndex((p) => AST__namespace.isNodeEqual(p, b));
255
- if (posA === -1 || posB === -1) return false;
256
- return posA === posB;
247
+ const nap = tools.O.flatMapNullable(na, (n) => n.parent);
248
+ const nbp = tools.O.flatMapNullable(nb, (n) => n.parent);
249
+ switch (true) {
250
+ case (tools.O.exists(nap, AST__namespace.is(types.AST_NODE_TYPES.CallExpression)) && tools.O.exists(nbp, AST__namespace.is(types.AST_NODE_TYPES.CallExpression)) && tools.O.exists(na, AST__namespace.isFunction) && tools.O.exists(nb, AST__namespace.isFunction)): {
251
+ const hasSameCallee = tools.F.pipe(
252
+ tools.O.Do,
253
+ tools.O.bind("ca", () => tools.O.map(nap, (n) => n.callee)),
254
+ tools.O.bind("cb", () => tools.O.map(nbp, (n) => n.callee)),
255
+ tools.O.exists(({ ca, cb }) => AST__namespace.isNodeEqual(ca, cb))
256
+ );
257
+ if (!hasSameCallee) return false;
258
+ return tools.F.pipe(
259
+ tools.O.Do,
260
+ tools.O.bind("paramsA", () => tools.O.map(na, (n) => n.params)),
261
+ tools.O.bind("paramsB", () => tools.O.map(nb, (n) => n.params)),
262
+ tools.O.let("posA", ({ paramsA }) => paramsA.findIndex((p) => AST__namespace.isNodeEqual(p, a))),
263
+ tools.O.let("posB", ({ paramsB }) => paramsB.findIndex((p) => AST__namespace.isNodeEqual(p, b))),
264
+ tools.O.filter(({ posA, posB }) => posA !== -1 && posB !== -1),
265
+ tools.O.exists(({ posA, posB }) => posA === posB)
266
+ );
267
+ }
268
+ case (tools.O.exists(dapp, AST__namespace.is(types.AST_NODE_TYPES.ForOfStatement)) && tools.O.exists(dbpp, AST__namespace.is(types.AST_NODE_TYPES.ForOfStatement))): {
269
+ return tools.F.pipe(
270
+ tools.O.Do,
271
+ tools.O.bind("rightA", () => tools.O.map(dapp, (d) => d.right)),
272
+ tools.O.bind("rightB", () => tools.O.map(dbpp, (d) => d.right)),
273
+ tools.O.exists(({ rightA, rightB }) => AST__namespace.isNodeEqual(rightA, rightB))
274
+ );
275
+ }
276
+ default: {
277
+ if (tools.O.isNone(na) || tools.O.isNone(nb)) return false;
278
+ return na.value === nb.value;
279
+ }
257
280
  }
258
- return na.value === nb.value;
259
281
  }
260
282
  if (a.type === types.AST_NODE_TYPES.MemberExpression && b.type === types.AST_NODE_TYPES.MemberExpression) {
261
283
  return AST__namespace.isNodeEqual(a.property, b.property) && isNodeValueEqual(a.object, b.object, initialScopes);
package/dist/index.mjs CHANGED
@@ -216,24 +216,46 @@ function isNodeValueEqual(a, b, initialScopes) {
216
216
  if (a.type === AST_NODE_TYPES.Identifier && b.type === AST_NODE_TYPES.Identifier) {
217
217
  const va = findVariable(a, aScope);
218
218
  const vb = findVariable(b, bScope);
219
+ const da = O.flatMap(va, getVariableDef(0));
220
+ const db = O.flatMap(vb, getVariableDef(0));
221
+ const dapp = O.flatMapNullable(da, (d) => d.parent?.parent);
222
+ const dbpp = O.flatMapNullable(db, (d) => d.parent?.parent);
219
223
  const na = O.flatMap(va, getVariableNode(0));
220
224
  const nb = O.flatMap(vb, getVariableNode(0));
221
- if (O.isNone(na) || O.isNone(nb)) return false;
222
- if (O.exists(na, AST.isFunction) && O.exists(nb, AST.isFunction)) {
223
- const fa = na.value;
224
- const fb = nb.value;
225
- const pa = fa.parent;
226
- const pb = fb.parent;
227
- if (pa.type !== AST_NODE_TYPES.CallExpression || pb.type !== AST_NODE_TYPES.CallExpression) return false;
228
- if (!AST.isNodeEqual(pa.callee, pb.callee)) return false;
229
- const paramsA = fa.params;
230
- const paramsB = fb.params;
231
- const posA = paramsA.findIndex((p) => AST.isNodeEqual(p, a));
232
- const posB = paramsB.findIndex((p) => AST.isNodeEqual(p, b));
233
- if (posA === -1 || posB === -1) return false;
234
- return posA === posB;
225
+ const nap = O.flatMapNullable(na, (n) => n.parent);
226
+ const nbp = O.flatMapNullable(nb, (n) => n.parent);
227
+ switch (true) {
228
+ case (O.exists(nap, AST.is(AST_NODE_TYPES.CallExpression)) && O.exists(nbp, AST.is(AST_NODE_TYPES.CallExpression)) && O.exists(na, AST.isFunction) && O.exists(nb, AST.isFunction)): {
229
+ const hasSameCallee = F.pipe(
230
+ O.Do,
231
+ O.bind("ca", () => O.map(nap, (n) => n.callee)),
232
+ O.bind("cb", () => O.map(nbp, (n) => n.callee)),
233
+ O.exists(({ ca, cb }) => AST.isNodeEqual(ca, cb))
234
+ );
235
+ if (!hasSameCallee) return false;
236
+ return F.pipe(
237
+ O.Do,
238
+ O.bind("paramsA", () => O.map(na, (n) => n.params)),
239
+ O.bind("paramsB", () => O.map(nb, (n) => n.params)),
240
+ O.let("posA", ({ paramsA }) => paramsA.findIndex((p) => AST.isNodeEqual(p, a))),
241
+ O.let("posB", ({ paramsB }) => paramsB.findIndex((p) => AST.isNodeEqual(p, b))),
242
+ O.filter(({ posA, posB }) => posA !== -1 && posB !== -1),
243
+ O.exists(({ posA, posB }) => posA === posB)
244
+ );
245
+ }
246
+ case (O.exists(dapp, AST.is(AST_NODE_TYPES.ForOfStatement)) && O.exists(dbpp, AST.is(AST_NODE_TYPES.ForOfStatement))): {
247
+ return F.pipe(
248
+ O.Do,
249
+ O.bind("rightA", () => O.map(dapp, (d) => d.right)),
250
+ O.bind("rightB", () => O.map(dbpp, (d) => d.right)),
251
+ O.exists(({ rightA, rightB }) => AST.isNodeEqual(rightA, rightB))
252
+ );
253
+ }
254
+ default: {
255
+ if (O.isNone(na) || O.isNone(nb)) return false;
256
+ return na.value === nb.value;
257
+ }
235
258
  }
236
- return na.value === nb.value;
237
259
  }
238
260
  if (a.type === AST_NODE_TYPES.MemberExpression && b.type === AST_NODE_TYPES.MemberExpression) {
239
261
  return AST.isNodeEqual(a.property, b.property) && isNodeValueEqual(a.object, b.object, initialScopes);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eslint-react/var",
3
- "version": "1.17.3-beta.0",
3
+ "version": "1.17.3-beta.2",
4
4
  "description": "TSESTree AST utility module for static analysis of variables",
5
5
  "homepage": "https://github.com/rel1cx/eslint-react",
6
6
  "bugs": {
@@ -35,13 +35,13 @@
35
35
  "./package.json"
36
36
  ],
37
37
  "dependencies": {
38
- "@typescript-eslint/scope-manager": "^8.16.0",
39
- "@typescript-eslint/types": "^8.16.0",
40
- "@typescript-eslint/utils": "^8.16.0",
38
+ "@typescript-eslint/scope-manager": "^8.17.0",
39
+ "@typescript-eslint/types": "^8.17.0",
40
+ "@typescript-eslint/utils": "^8.17.0",
41
41
  "ts-pattern": "^5.5.0",
42
- "@eslint-react/ast": "1.17.3-beta.0",
43
- "@eslint-react/types": "1.17.3-beta.0",
44
- "@eslint-react/tools": "1.17.3-beta.0"
42
+ "@eslint-react/ast": "1.17.3-beta.2",
43
+ "@eslint-react/types": "1.17.3-beta.2",
44
+ "@eslint-react/tools": "1.17.3-beta.2"
45
45
  },
46
46
  "devDependencies": {
47
47
  "string-ts": "^2.2.0",