Skip to content

Commit 083311e

Browse files
avivkellermarco-ippolito
authored andcommitted
tools: remove redudant code from eslint require rule
PR-URL: #54892 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
1 parent 27ff2da commit 083311e

File tree

1 file changed

+22
-35
lines changed

1 file changed

+22
-35
lines changed
Lines changed: 22 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/**
22
* @fileoverview Ensure modules are not required twice at top level of a module
33
* @author devsnek
4+
* @author RedYetiDev
45
*/
56
'use strict';
67

@@ -10,58 +11,44 @@ const { isRequireCall, isString } = require('./rules-utils.js');
1011
// Rule Definition
1112
//------------------------------------------------------------------------------
1213

13-
const secondLevelTypes = [
14+
const topLevelTypes = new Set([
1415
'FunctionDeclaration', 'FunctionExpression', 'ArrowFunctionExpression',
1516
'ClassBody', 'MethodDefinition',
16-
];
17+
]);
1718

18-
function isTopLevel(node) {
19-
while (!secondLevelTypes.includes(node.type)) {
19+
const isTopLevel = (node) => {
20+
while (node) {
21+
if (topLevelTypes.has(node.type)) return false;
2022
node = node.parent;
21-
if (!node) {
22-
return true;
23-
}
2423
}
25-
return false;
26-
}
24+
return true;
25+
};
2726

2827
module.exports = {
2928
create(context) {
3029
if (context.parserOptions.sourceType === 'module') {
3130
return {};
3231
}
3332

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-
}
33+
const requiredModules = new Set();
4234

43-
const required = new Set();
44-
45-
const rules = {
46-
CallExpression: (node) => {
35+
return {
36+
CallExpression(node) {
4737
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);
38+
const [firstArg] = node.arguments;
39+
if (isString(firstArg)) {
40+
const moduleName = firstArg.value.trim();
41+
if (requiredModules.has(moduleName)) {
42+
context.report({
43+
node,
44+
message: `'${moduleName}' require is duplicated.`,
45+
});
46+
} else {
47+
requiredModules.add(moduleName);
48+
}
6049
}
6150
}
6251
},
6352
};
64-
65-
return rules;
6653
},
6754
};

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy