pasika 0.10.92 → 0.10.93

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.
@@ -6489,6 +6489,27 @@ function enumValueResolver(context) {
6489
6489
  return typeSymbol ? isEnumSymbol(typeSymbol) : localEnumBinding(context, node);
6490
6490
  };
6491
6491
  }
6492
+ function detachableCallResolver(context) {
6493
+ const services = typedParserServices(context.sourceCode.parserServices);
6494
+ if (!services) return () => false;
6495
+ const checker = services.program.getTypeChecker();
6496
+ const { esTreeNodeToTSNodeMap: nodeMap } = services;
6497
+ const isUnboundFunctionType = (type) => ts9.isFunctionTypeNode(type) && !type.parameters.some((parameter) => ts9.isIdentifier(parameter.name) && parameter.name.text === "this");
6498
+ return (member) => {
6499
+ const node = nodeMap.get(member);
6500
+ if (!node || !ts9.isPropertyAccessExpression(node)) return false;
6501
+ const symbol = checker.getSymbolAtLocation(node.name);
6502
+ const declarations = symbol?.declarations;
6503
+ if (!declarations?.length) return false;
6504
+ return declarations.every((declaration) => {
6505
+ if (ts9.isPropertySignature(declaration) || ts9.isPropertyDeclaration(declaration)) {
6506
+ return declaration.type !== void 0 && isUnboundFunctionType(declaration.type) || ts9.isPropertyDeclaration(declaration) && declaration.initializer !== void 0 && ts9.isArrowFunction(declaration.initializer);
6507
+ }
6508
+ if (ts9.isPropertyAssignment(declaration)) return ts9.isArrowFunction(declaration.initializer);
6509
+ return false;
6510
+ });
6511
+ };
6512
+ }
6492
6513
  function directMappingRequiresQualifiedAccess(context, ownershipResolver, member) {
6493
6514
  const mapping = renamedDirectMapping(context, member);
6494
6515
  if (!mapping || !ownershipResolver) return false;
@@ -6507,14 +6528,15 @@ function objectUsage(scope, sourceText) {
6507
6528
  }
6508
6529
  return usage;
6509
6530
  }
6510
- function memberIsRead(context, member) {
6531
+ function memberIsRead(context, member, detachableCall) {
6511
6532
  const parent = context.sourceCode.getAncestors(member).at(-1);
6512
6533
  if (!parent) return true;
6513
6534
  if (parent.type === "AssignmentExpression" && parent.left === member) return false;
6514
6535
  if (parent.type === "UpdateExpression" && parent.argument === member) return false;
6515
6536
  if (parent.type === "UnaryExpression" && parent.operator === "delete" && parent.argument === member) return false;
6516
6537
  if ((parent.type === "ForInStatement" || parent.type === "ForOfStatement") && parent.left === member) return false;
6517
- if ((parent.type === "CallExpression" || parent.type === "NewExpression") && parent.callee === member) return false;
6538
+ if (parent.type === "CallExpression" && parent.callee === member) return detachableCall(member);
6539
+ if (parent.type === "NewExpression" && parent.callee === member) return false;
6518
6540
  if (parent.type === "TaggedTemplateExpression" && parent.tag === member) return false;
6519
6541
  return true;
6520
6542
  }
@@ -6522,10 +6544,10 @@ function memberIsDirectVariableInitializer(context, member) {
6522
6544
  const parent = context.sourceCode.getAncestors(member).at(-1);
6523
6545
  return parent?.type === "VariableDeclarator" && parent.init === member;
6524
6546
  }
6525
- function recordMemberUsage(context, scope, ownershipResolver, member, isEnumValue) {
6547
+ function recordMemberUsage(context, scope, ownershipResolver, member, isEnumValue, detachableCall) {
6526
6548
  if (!scope || member.computed || member.optional || member.property.type !== "Identifier") return;
6527
6549
  if (!memberCanBeDestructured(context, ownershipResolver, member, isEnumValue)) return;
6528
- if (!isGroupedUsageSource(member.object) || !memberIsRead(context, member)) return;
6550
+ if (!isGroupedUsageSource(member.object) || !memberIsRead(context, member, detachableCall)) return;
6529
6551
  const sourceText = context.sourceCode.getText(member.object);
6530
6552
  const usage = objectUsage(scope, sourceText);
6531
6553
  const propertyName5 = member.property.name;
@@ -6698,6 +6720,7 @@ var preferObjectDestructuringRule = {
6698
6720
  create(context) {
6699
6721
  const ownershipResolver = contractOwnershipResolver(context);
6700
6722
  const isEnumValue = enumValueResolver(context);
6723
+ const detachableCall = detachableCallResolver(context);
6701
6724
  const grouped = /* @__PURE__ */ new Set();
6702
6725
  const usageScopes = [];
6703
6726
  const currentUsageScope = () => usageScopes.at(-1);
@@ -6726,6 +6749,12 @@ var preferObjectDestructuringRule = {
6726
6749
  node: firstDirectMember,
6727
6750
  message: scopeUsageMessage(sourceText, usage.propertyNames),
6728
6751
  fix(fixer) {
6752
+ if (usage.directMembers.some(({ member }) => {
6753
+ const parent = context.sourceCode.getAncestors(member).at(-1);
6754
+ return parent?.type === "CallExpression" && parent.callee === member;
6755
+ })) {
6756
+ return null;
6757
+ }
6729
6758
  const memberFixes = usage.directMembers.map(
6730
6759
  ({ member, propertyName: propertyName5 }) => fixer.replaceText(member, propertyName5)
6731
6760
  );
@@ -6787,7 +6816,7 @@ ${indentation}`;
6787
6816
  ArrowFunctionExpression: enterUsageBarrier,
6788
6817
  "ArrowFunctionExpression:exit": exitUsageScope,
6789
6818
  MemberExpression(node) {
6790
- recordMemberUsage(context, currentUsageScope(), ownershipResolver, node, isEnumValue);
6819
+ recordMemberUsage(context, currentUsageScope(), ownershipResolver, node, isEnumValue, detachableCall);
6791
6820
  },
6792
6821
  VariableDeclaration(node) {
6793
6822
  for (const declarator of node.declarations) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pasika",
3
- "version": "0.10.92",
3
+ "version": "0.10.93",
4
4
  "description": "Reusable agent setup package",
5
5
  "repository": {
6
6
  "type": "git",