UNPKG

tslint-react-set-state-usage

Version:

TSLint rule for detection non-functional setState statements

34 lines (26 loc) 1.04 kB
import * as ts from "typescript"; import { isCallExpression, isPropertyAccessExpression, isParenthesizedExpression, } from "tsutils"; import { isThisKeyword } from "./syntaxKindUtils"; export const isThisPropertyAccess = (node: ts.Node): node is ts.PropertyAccessExpression => isPropertyAccessExpression(node) && isThisKeyword(node.expression); export const isThisSetState = (node: ts.Node): node is ts.CallExpression => isCallExpression(node) && isPropertyAccessExpression(node.expression) && isThisKeyword(node.expression.expression) && node.expression.name.text === "setState"; export function getFirstSetStateAncestor(node: ts.Node): ts.CallExpression { if (node.kind === ts.SyntaxKind.SourceFile) { return null; } if (isThisSetState(node)) { return node as ts.CallExpression; } return getFirstSetStateAncestor(node.parent); } export const removeParentheses = (node: ts.Node) => isParenthesizedExpression(node) ? removeParentheses(node.expression) : node;