Skip to content

Commit

Permalink
fix: Separate compound selector.
Browse files Browse the repository at this point in the history
  • Loading branch information
cartant committed Dec 31, 2021
1 parent 2492214 commit 1bf3d91
Showing 1 changed file with 48 additions and 41 deletions.
89 changes: 48 additions & 41 deletions source/rules/no-unsafe-takeuntil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,53 +83,60 @@ const rule = ruleCreator({

const { couldBeObservable } = getTypeServices(context);

return {
[`CallExpression[callee.property.name='pipe'] > CallExpression[callee.name=${checkedOperatorsRegExp}], CallExpression[callee.property.name=${checkedOperatorsRegExp}]`]:
(node: es.CallExpression) => {
const pipeCallExpression = getParent(node) as es.CallExpression;
if (
!pipeCallExpression.arguments ||
!couldBeObservable(pipeCallExpression)
) {
return;
}
function checkNode(node: es.CallExpression) {
const pipeCallExpression = getParent(node) as es.CallExpression;
if (
!pipeCallExpression.arguments ||
!couldBeObservable(pipeCallExpression)
) {
return;
}

type State = "allowed" | "disallowed" | "taken";
type State = "allowed" | "disallowed" | "taken";

pipeCallExpression.arguments.reduceRight((state, arg) => {
if (state === "taken") {
return state;
}
pipeCallExpression.arguments.reduceRight((state, arg) => {
if (state === "taken") {
return state;
}

if (!isCallExpression(arg)) {
return "disallowed";
}
if (!isCallExpression(arg)) {
return "disallowed";
}

let operatorName: string
if (isIdentifier(arg.callee)) {
operatorName = arg.callee.name
} else if (isMemberExpression(arg.callee) && isIdentifier(arg.callee.property)) {
operatorName = arg.callee.property.name;
} else {
return "disallowed";
}
let operatorName: string;
if (isIdentifier(arg.callee)) {
operatorName = arg.callee.name;
} else if (
isMemberExpression(arg.callee) &&
isIdentifier(arg.callee.property)
) {
operatorName = arg.callee.property.name;
} else {
return "disallowed";
}

if (checkedOperatorsRegExp.test(operatorName)) {
if (state === "disallowed") {
context.report({
messageId: "forbidden",
node: arg.callee,
});
}
return "taken";
}
if (checkedOperatorsRegExp.test(operatorName)) {
if (state === "disallowed") {
context.report({
messageId: "forbidden",
node: arg.callee,
});
}
return "taken";
}

if (!allow.includes(operatorName)) {
return "disallowed";
}
return state;
}, "allowed" as State);
},
if (!allow.includes(operatorName)) {
return "disallowed";
}
return state;
}, "allowed" as State);
}

return {
[`CallExpression[callee.property.name='pipe'] > CallExpression[callee.name=${checkedOperatorsRegExp}]`]:
checkNode,
[`CallExpression[callee.property.name='pipe'] > CallExpression[callee.property.name=${checkedOperatorsRegExp}]`]:
checkNode,
};
},
});
Expand Down

0 comments on commit 1bf3d91

Please sign in to comment.