Skip to content

Commit 7abe42e

Browse files
nzakasmdjermanovic
andauthored
refactor: SafeEmitter -> SourceCodeVisitor (#19708)
* refactor: NodeEventGenerator -> SourceCodeTraverser refs #18787 * fix tests * Remove EventEmitter reference * Apply feedback * Update lib/linter/linter.js Co-authored-by: Milos Djermanovic <[email protected]> * Remove unnecessary tests --------- Co-authored-by: Milos Djermanovic <[email protected]>
1 parent 342bd29 commit 7abe42e

File tree

11 files changed

+416
-319
lines changed

11 files changed

+416
-319
lines changed

lib/languages/js/source-code/source-code.js

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ const { isCommentToken } = require("@eslint-community/eslint-utils"),
1515
globals = require("../../../../conf/globals"),
1616
{ directivesPattern } = require("../../../shared/directives"),
1717
CodePathAnalyzer = require("../../../linter/code-path-analysis/code-path-analyzer"),
18-
createEmitter = require("../../../linter/safe-emitter"),
1918
{
2019
ConfigCommentParser,
2120
VisitNodeStep,
@@ -40,16 +39,6 @@ const { isCommentToken } = require("@eslint-community/eslint-utils"),
4039

4140
const commentParser = new ConfigCommentParser();
4241

43-
const CODE_PATH_EVENTS = [
44-
"onCodePathStart",
45-
"onCodePathEnd",
46-
"onCodePathSegmentStart",
47-
"onCodePathSegmentEnd",
48-
"onCodePathSegmentLoop",
49-
"onUnreachableCodePathSegmentStart",
50-
"onUnreachableCodePathSegmentEnd",
51-
];
52-
5342
/**
5443
* Validates that the given AST has the required information.
5544
* @param {ASTNode} ast The Program node of the AST to check.
@@ -1302,7 +1291,6 @@ class SourceCode extends TokenStore {
13021291
* custom parsers to return any AST, we need to ensure that the traversal
13031292
* logic works for any AST.
13041293
*/
1305-
const emitter = createEmitter();
13061294
let analyzer = {
13071295
enterNode(node) {
13081296
steps.push(
@@ -1322,7 +1310,14 @@ class SourceCode extends TokenStore {
13221310
}),
13231311
);
13241312
},
1325-
emitter,
1313+
emit(eventName, args) {
1314+
steps.push(
1315+
new CallMethodStep({
1316+
target: eventName,
1317+
args,
1318+
}),
1319+
);
1320+
},
13261321
};
13271322

13281323
/*
@@ -1336,17 +1331,6 @@ class SourceCode extends TokenStore {
13361331
*/
13371332
if (this.isESTree) {
13381333
analyzer = new CodePathAnalyzer(analyzer);
1339-
1340-
CODE_PATH_EVENTS.forEach(eventName => {
1341-
emitter.on(eventName, (...args) => {
1342-
steps.push(
1343-
new CallMethodStep({
1344-
target: eventName,
1345-
args,
1346-
}),
1347-
);
1348-
});
1349-
});
13501334
}
13511335

13521336
/*

lib/linter/code-path-analysis/code-path-analyzer.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ function forwardCurrentToHead(analyzer, node) {
196196

197197
debug.dump(`${eventName} ${currentSegment.id}`);
198198

199-
analyzer.emitter.emit(eventName, currentSegment, node);
199+
analyzer.emit(eventName, [currentSegment, node]);
200200
}
201201
}
202202

@@ -215,7 +215,7 @@ function forwardCurrentToHead(analyzer, node) {
215215

216216
debug.dump(`${eventName} ${headSegment.id}`);
217217
CodePathSegment.markUsed(headSegment);
218-
analyzer.emitter.emit(eventName, headSegment, node);
218+
analyzer.emit(eventName, [headSegment, node]);
219219
}
220220
}
221221
}
@@ -239,7 +239,7 @@ function leaveFromCurrentSegment(analyzer, node) {
239239

240240
debug.dump(`${eventName} ${currentSegment.id}`);
241241

242-
analyzer.emitter.emit(eventName, currentSegment, node);
242+
analyzer.emit(eventName, [currentSegment, node]);
243243
}
244244

245245
state.currentSegments = [];
@@ -416,7 +416,7 @@ function processCodePathToEnter(analyzer, node) {
416416

417417
// Emits onCodePathStart events.
418418
debug.dump(`onCodePathStart ${codePath.id}`);
419-
analyzer.emitter.emit("onCodePathStart", codePath, node);
419+
analyzer.emit("onCodePathStart", [codePath, node]);
420420
}
421421

422422
/*
@@ -681,7 +681,7 @@ function postprocess(analyzer, node) {
681681

682682
// Emits onCodePathEnd event of this code path.
683683
debug.dump(`onCodePathEnd ${codePath.id}`);
684-
analyzer.emitter.emit("onCodePathEnd", codePath, node);
684+
analyzer.emit("onCodePathEnd", [codePath, node]);
685685
debug.dumpDot(codePath);
686686

687687
codePath = analyzer.codePath = analyzer.codePath.upper;
@@ -747,7 +747,7 @@ class CodePathAnalyzer {
747747
*/
748748
constructor(eventGenerator) {
749749
this.original = eventGenerator;
750-
this.emitter = eventGenerator.emitter;
750+
this.emit = eventGenerator.emit;
751751
this.codePath = null;
752752
this.idGenerator = new IdGenerator("s");
753753
this.currentNode = null;
@@ -816,12 +816,11 @@ class CodePathAnalyzer {
816816
debug.dump(
817817
`onCodePathSegmentLoop ${fromSegment.id} -> ${toSegment.id}`,
818818
);
819-
this.emitter.emit(
820-
"onCodePathSegmentLoop",
819+
this.emit("onCodePathSegmentLoop", [
821820
fromSegment,
822821
toSegment,
823822
this.currentNode,
824-
);
823+
]);
825824
}
826825
}
827826
}

lib/linter/linter.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ const path = require("node:path"),
2929
{ ConfigCommentParser } = require("@eslint/plugin-kit"),
3030
createReportTranslator = require("./report-translator"),
3131
Rules = require("./rules"),
32-
createEmitter = require("./safe-emitter"),
3332
SourceCodeFixer = require("./source-code-fixer"),
33+
{ SourceCodeVisitor } = require("./source-code-visitor"),
3434
timing = require("./timing"),
3535
ruleReplacements = require("../../conf/replacements.json");
3636
const { FlatConfigArray } = require("../config/flat-config-array");
@@ -1175,7 +1175,7 @@ function runRules(
11751175
stats,
11761176
slots,
11771177
) {
1178-
const emitter = createEmitter();
1178+
const visitor = new SourceCodeVisitor();
11791179

11801180
/*
11811181
* Create a frozen object with the ruleContext properties and methods that are shared by all rules.
@@ -1339,13 +1339,13 @@ function runRules(
13391339
? timing.time(ruleId, ruleListeners[selector], stats)
13401340
: ruleListeners[selector];
13411341

1342-
emitter.on(selector, addRuleErrorHandler(ruleListener));
1342+
visitor.add(selector, addRuleErrorHandler(ruleListener));
13431343
});
13441344
});
13451345

13461346
const traverser = SourceCodeTraverser.getInstance(language);
13471347

1348-
traverser.traverseSync(sourceCode, emitter, { steps });
1348+
traverser.traverseSync(sourceCode, visitor, { steps });
13491349

13501350
return lintingProblems;
13511351
}

lib/linter/safe-emitter.js

Lines changed: 0 additions & 52 deletions
This file was deleted.

0 commit comments

Comments
 (0)