diff --git a/packages/utils/src/ast-utils/helpers.ts b/packages/utils/src/ast-utils/helpers.ts index f2a4ac2e244..baf4daf6810 100644 --- a/packages/utils/src/ast-utils/helpers.ts +++ b/packages/utils/src/ast-utils/helpers.ts @@ -56,3 +56,24 @@ export const isTokenOfTypeWithConditions = < token?.type === tokenType && entries.every(([key, value]) => token[key] === value); }; + +export const isNotTokenOfTypeWithConditions = + < + TokenType extends AST_TOKEN_TYPES, + Conditions extends Partial, + >( + tokenType: TokenType, + conditions: Conditions, + ): (( + token: TSESTree.Token | null | undefined, + ) => token is Exclude< + TSESTree.Token, + TSESTree.Token & { type: TokenType } & Conditions + >) => + ( + token, + ): token is Exclude< + TSESTree.Token, + TSESTree.Token & { type: TokenType } & Conditions + > => + !isTokenOfTypeWithConditions(tokenType, conditions)(token); diff --git a/packages/utils/src/ast-utils/predicates.ts b/packages/utils/src/ast-utils/predicates.ts index 0038f092bbe..10e50522d67 100644 --- a/packages/utils/src/ast-utils/predicates.ts +++ b/packages/utils/src/ast-utils/predicates.ts @@ -4,6 +4,7 @@ import { isNodeOfType, isNodeOfTypes, isNodeOfTypeWithConditions, + isNotTokenOfTypeWithConditions, isTokenOfTypeWithConditions, } from './helpers'; @@ -12,25 +13,20 @@ const isOptionalChainPunctuator = isTokenOfTypeWithConditions( { value: '?.' }, ); -function isNotOptionalChainPunctuator( - token: TSESTree.Token, -): token is Exclude< - TSESTree.Token, - TSESTree.PunctuatorToken & { value: '?.' } -> { - return !isOptionalChainPunctuator(token); -} +const isNotOptionalChainPunctuator = isNotTokenOfTypeWithConditions( + AST_TOKEN_TYPES.Punctuator, + { value: '?.' }, +); const isNonNullAssertionPunctuator = isTokenOfTypeWithConditions( AST_TOKEN_TYPES.Punctuator, { value: '!' }, ); -function isNotNonNullAssertionPunctuator( - token: TSESTree.Token, -): token is Exclude { - return !isNonNullAssertionPunctuator(token); -} +const isNotNonNullAssertionPunctuator = isNotTokenOfTypeWithConditions( + AST_TOKEN_TYPES.Punctuator, + { value: '!' }, +); /** * Returns true if and only if the node represents: foo?.() or foo.bar?.()