From 1bf3d91f0f7a77253140a0131bda2b935348191e Mon Sep 17 00:00:00 2001 From: Nicholas Jamieson Date: Fri, 31 Dec 2021 12:35:05 +1000 Subject: [PATCH] fix: Separate compound selector. --- source/rules/no-unsafe-takeuntil.ts | 89 ++++++++++++++++------------- 1 file changed, 48 insertions(+), 41 deletions(-) diff --git a/source/rules/no-unsafe-takeuntil.ts b/source/rules/no-unsafe-takeuntil.ts index 5ed3318a..b30aeb49 100644 --- a/source/rules/no-unsafe-takeuntil.ts +++ b/source/rules/no-unsafe-takeuntil.ts @@ -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, }; }, });