Skip to content

Commit

Permalink
Use rule logic to check for this mutation
Browse files Browse the repository at this point in the history
  • Loading branch information
bearfriend committed Sep 11, 2024
1 parent 70ac89e commit b3b8f93
Showing 1 changed file with 24 additions and 6 deletions.
30 changes: 24 additions & 6 deletions src/rules/no-this-assign-in-render.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,21 +84,39 @@ const rule: Rule.RuleModule = {
inRender = false;
}

/**
* Walk members and return first non-member
*
* @param {ESTree.MemberExpression} member Member entered
* @return {ESTree.Node}
*/
function walkMembers(member: ESTree.MemberExpression): ESTree.Node {
if (member.object.type === 'MemberExpression') {
return walkMembers(member.object);
} else {
return member.object;
}
}

/**
* Left side of an assignment expr found
*
* @param {Rule.Node} node Node entered
* @return {void}
*/
function assignmentFound(node: Rule.Node): void {
if (!inRender) {
if (!inRender || node.type !== 'MemberExpression') {
return;
}

context.report({
node: node.parent,
messageId: 'noThis'
});
const nonMember = walkMembers(node);

if (nonMember.type === 'ThisExpression') {
context.report({
node: node.parent,
messageId: 'noThis'
});
}
}

return {
Expand All @@ -112,7 +130,7 @@ const rule: Rule.RuleModule = {
methodEnter(node as ESTree.MethodDefinition),
'MethodDefinition:exit': methodExit,
// eslint-disable-next-line max-len
'AssignmentExpression > .left:has(ThisExpression:not(:matches(.property ThisExpression, CallExpression ThisExpression)))': (
'AssignmentExpression > .left:has(ThisExpression)': (
node: Rule.Node
): void => assignmentFound(node)
};
Expand Down

0 comments on commit b3b8f93

Please sign in to comment.