tslint-react-set-state-usage
Version:
TSLint rule for detection non-functional setState statements
34 lines (26 loc) • 1.04 kB
text/typescript
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;