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.
- package/dist/eslint/pasika/index.js +34 -5
- package/package.json +1 -1
|
@@ -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 (
|
|
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) {
|