diff --git a/packages/eslint-plugin/src/rules/no-require-imports.ts b/packages/eslint-plugin/src/rules/no-require-imports.ts index 91d81e0d8c5..9aa4b685dd2 100644 --- a/packages/eslint-plugin/src/rules/no-require-imports.ts +++ b/packages/eslint-plugin/src/rules/no-require-imports.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { ASTUtils, TSESTree } from '@typescript-eslint/experimental-utils'; import * as util from '../util'; export default util.createRule({ @@ -18,13 +18,19 @@ export default util.createRule({ defaultOptions: [], create(context) { return { - 'CallExpression > Identifier[name="require"]'( - node: TSESTree.Identifier, + 'CallExpression[callee.name="require"]'( + node: TSESTree.CallExpression, ): void { - context.report({ - node: node.parent!, - messageId: 'noRequireImports', - }); + const variable = ASTUtils.findVariable(context.getScope(), 'require'); + + // ignore non-global require usage as it's something user-land custom instead + // of the commonjs standard + if (!variable?.identifiers.length) { + context.report({ + node, + messageId: 'noRequireImports', + }); + } }, TSExternalModuleReference(node): void { context.report({ diff --git a/packages/eslint-plugin/tests/rules/no-require-imports.test.ts b/packages/eslint-plugin/tests/rules/no-require-imports.test.ts index 606e4c47ce2..d884c77a6d6 100644 --- a/packages/eslint-plugin/tests/rules/no-require-imports.test.ts +++ b/packages/eslint-plugin/tests/rules/no-require-imports.test.ts @@ -17,6 +17,11 @@ ruleTester.run('no-require-imports', rule, { 'import lib9 = lib2.anotherSubImport;', "import lib10 from 'lib10';", "var lib3 = load?.('not_an_import');", + ` +import { createRequire } from 'module'; +const require = createRequire(); +require('remark-preset-prettier'); + `, ], invalid: [ {