Skip to content

Commit 7d80d74

Browse files
committed
Use rule logic to check for this mutation
1 parent 70ac89e commit 7d80d74

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

src/rules/no-this-assign-in-render.ts

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,21 +84,39 @@ const rule: Rule.RuleModule = {
8484
inRender = false;
8585
}
8686

87+
/**
88+
* Walk left side assignment members and return first non-member
89+
*
90+
* @param {ESTree.MemberExpression} member Member entered
91+
* @return {ESTree.Node}
92+
*/
93+
function walkMembers(member: ESTree.MemberExpression): ESTree.Node {
94+
if (member.object.type === 'MemberExpression') {
95+
return walkMembers(member.object);
96+
} else {
97+
return member.object;
98+
}
99+
}
100+
87101
/**
88102
* Left side of an assignment expr found
89103
*
90104
* @param {Rule.Node} node Node entered
91105
* @return {void}
92106
*/
93107
function assignmentFound(node: Rule.Node): void {
94-
if (!inRender) {
108+
if (!inRender || node.type !== 'MemberExpression') {
95109
return;
96110
}
97111

98-
context.report({
99-
node: node.parent,
100-
messageId: 'noThis'
101-
});
112+
const nonMember = walkMembers(node);
113+
114+
if (nonMember.type === 'ThisExpression') {
115+
context.report({
116+
node: node.parent,
117+
messageId: 'noThis'
118+
});
119+
}
102120
}
103121

104122
return {
@@ -112,7 +130,7 @@ const rule: Rule.RuleModule = {
112130
methodEnter(node as ESTree.MethodDefinition),
113131
'MethodDefinition:exit': methodExit,
114132
// eslint-disable-next-line max-len
115-
'AssignmentExpression > .left:has(ThisExpression:not(:matches(.property ThisExpression, CallExpression ThisExpression)))': (
133+
'AssignmentExpression > .left:has(ThisExpression)': (
116134
node: Rule.Node
117135
): void => assignmentFound(node)
118136
};

0 commit comments

Comments
 (0)