From ed5e45983fa052accf3a7b5fcdbfcb15ed09490f Mon Sep 17 00:00:00 2001 From: Rafael Santana Date: Mon, 20 Sep 2021 18:39:56 -0300 Subject: [PATCH] fix(eslint-plugin): [no-var-requires] report problems within `NewExpression` (#3884) --- .../src/rules/no-var-requires.ts | 20 +++++++++++-------- .../tests/rules/no-var-requires.test.ts | 19 ++++++++++++++++++ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-var-requires.ts b/packages/eslint-plugin/src/rules/no-var-requires.ts index 26c49cc9dd2..d7ed1d16f7f 100644 --- a/packages/eslint-plugin/src/rules/no-var-requires.ts +++ b/packages/eslint-plugin/src/rules/no-var-requires.ts @@ -25,20 +25,24 @@ export default util.createRule({ defaultOptions: [], create(context) { return { - CallExpression(node: TSESTree.CallExpression): void { + 'CallExpression[callee.name="require"]'( + node: TSESTree.CallExpression, + ): void { const parent = node.parent?.type === AST_NODE_TYPES.ChainExpression ? node.parent.parent : node.parent; + if ( - node.callee.type === AST_NODE_TYPES.Identifier && - node.callee.name === 'require' && parent && - (parent.type === AST_NODE_TYPES.VariableDeclarator || - parent.type === AST_NODE_TYPES.CallExpression || - parent.type === AST_NODE_TYPES.TSAsExpression || - parent.type === AST_NODE_TYPES.TSTypeAssertion || - parent.type === AST_NODE_TYPES.MemberExpression) + [ + AST_NODE_TYPES.CallExpression, + AST_NODE_TYPES.MemberExpression, + AST_NODE_TYPES.NewExpression, + AST_NODE_TYPES.TSAsExpression, + AST_NODE_TYPES.TSTypeAssertion, + AST_NODE_TYPES.VariableDeclarator, + ].includes(parent.type) ) { context.report({ node, diff --git a/packages/eslint-plugin/tests/rules/no-var-requires.test.ts b/packages/eslint-plugin/tests/rules/no-var-requires.test.ts index 688b010e417..8c6ef638a16 100644 --- a/packages/eslint-plugin/tests/rules/no-var-requires.test.ts +++ b/packages/eslint-plugin/tests/rules/no-var-requires.test.ts @@ -132,5 +132,24 @@ ruleTester.run('no-var-requires', rule, { }, ], }, + { + // https://github.com/typescript-eslint/typescript-eslint/issues/3883 + code: ` +const configValidator = new Validator(require('./a.json')); +configValidator.addSchema(require('./a.json')); + `, + errors: [ + { + messageId: 'noVarReqs', + line: 2, + column: 39, + }, + { + messageId: 'noVarReqs', + line: 3, + column: 27, + }, + ], + }, ], });