40 lines
873 B
JavaScript
40 lines
873 B
JavaScript
const MESSAGE_ID = 'no-this-assignment';
|
|
const messages = {
|
|
[MESSAGE_ID]: 'Do not assign `this` to `{{name}}`.',
|
|
};
|
|
|
|
function getProblem(variableNode, valueNode) {
|
|
if (
|
|
variableNode.type !== 'Identifier'
|
|
|| valueNode?.type !== 'ThisExpression'
|
|
) {
|
|
return;
|
|
}
|
|
|
|
return {
|
|
node: valueNode.parent,
|
|
data: {name: variableNode.name},
|
|
messageId: MESSAGE_ID,
|
|
};
|
|
}
|
|
|
|
/** @param {import('eslint').Rule.RuleContext} context */
|
|
const create = context => {
|
|
context.on('VariableDeclarator', node => getProblem(node.id, node.init));
|
|
context.on('AssignmentExpression', node => getProblem(node.left, node.right));
|
|
};
|
|
|
|
/** @type {import('eslint').Rule.RuleModule} */
|
|
const config = {
|
|
create,
|
|
meta: {
|
|
type: 'suggestion',
|
|
docs: {
|
|
description: 'Disallow assigning `this` to a variable.',
|
|
recommended: 'unopinionated',
|
|
},
|
|
messages,
|
|
},
|
|
};
|
|
|
|
export default config;
|