8000
We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 27ff2da commit 083311eCopy full SHA for 083311e
tools/eslint-rules/no-duplicate-requires.js
@@ -1,6 +1,7 @@
1
/**
2
* @fileoverview Ensure modules are not required twice at top level of a module
3
* @author devsnek
4
+ * @author RedYetiDev
5
*/
6
'use strict';
7
@@ -10,58 +11,44 @@ const { isRequireCall, isString } = require('./rules-utils.js');
10
11
// Rule Definition
12
//------------------------------------------------------------------------------
13
-const secondLevelTypes = [
14
+const topLevelTypes = new Set([
15
'FunctionDeclaration', 'FunctionExpression', 'ArrowFunctionExpression',
16
'ClassBody', 'MethodDefinition',
-];
17
+]);
18
-function isTopLevel(node) {
19
- while (!secondLevelTypes.includes(node.type)) {
+const isTopLevel = (node) => {
20
+ while (node) {
21
+ if (topLevelTypes.has(node.type)) return false;
22
node = node.parent;
- if (!node) {
- return true;
23
- }
24
}
25
- return false;
26
-}
+ return true;
+};
27
28
module.exports = {
29
create(context) {
30
if (context.parserOptions.sourceType === 'module') {
31
return {};
32
33
34
- function getRequiredModuleNameFromCall(node) {
35
- // Node has arguments and first argument is string
36
- if (node.arguments.length && isString(node.arguments[0])) {
37
- return node.arguments[0].value.trim();
38
39
-
40
- return undefined;
41
+ const requiredModules = new Set();
42
43
- const required = new Set();
44
45
- const rules = {
46
- CallExpression: (node) => {
+ return {
+ CallExpression(node) {
47
if (isRequireCall(node) && isTopLevel(node)) {
48
- const moduleName = getRequiredModuleNameFromCall(node);
49
- if (moduleName === undefined) {
50
- return;
51
52
- if (required.has(moduleName)) {
53
- context.report(
54
- node,
55
- '\'{{moduleName}}\' require is duplicated.',
56
- { moduleName },
57
- );
58
- } else {
59
- required.add(moduleName);
+ const [firstArg] = node.arguments;
+ if (isString(firstArg)) {
+ const moduleName = firstArg.value.trim();
+ if (requiredModules.has(moduleName)) {
+ context.report({
+ node,
+ message: `'${moduleName}' require is duplicated.`,
+ });
+ } else {
+ requiredModules.add(moduleName);
+ }
60
61
62
},
63
};
64
65
- return rules;
66
67