Skip to content

Commit 2907805

Browse files
authored
no-process-exit: Ignore when using node:worker_threads module (#2136)
1 parent cb6782a commit 2907805

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

rules/no-process-exit.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
'use strict';
2-
const {isStaticRequire, isMethodCall} = require('./ast/index.js');
2+
const {isStaticRequire, isMethodCall, isLiteral} = require('./ast/index.js');
33

44
const MESSAGE_ID = 'no-process-exit';
55
const messages = {
66
[MESSAGE_ID]: 'Only use `process.exit()` in CLI apps. Throw an error instead.',
77
};
88

9+
const isWorkerThreads = node =>
10+
isLiteral(node, 'node:worker_threads')
11+
|| isLiteral(node, 'worker_threads');
12+
913
/** @param {import('eslint').Rule.RuleContext} context */
1014
const create = context => {
1115
const startsWithHashBang = context.sourceCode.lines[0].indexOf('#!') === 0;
@@ -24,8 +28,7 @@ const create = context => {
2428
context.on('CallExpression', callExpression => {
2529
if (
2630
isStaticRequire(callExpression)
27-
// TODO: Support `node:worker_threads`
28-
&& callExpression.arguments[0].value === 'worker_threads'
31+
&& isWorkerThreads(callExpression.arguments[0])
2932
) {
3033
requiredWorkerThreadsModule = true;
3134
}
@@ -35,8 +38,7 @@ const create = context => {
3538
context.on('ImportDeclaration', importDeclaration => {
3639
if (
3740
importDeclaration.source.type === 'Literal'
38-
// TODO: Support `node:worker_threads`
39-
&& importDeclaration.source.value === 'worker_threads'
41+
&& isWorkerThreads(importDeclaration.source)
4042
) {
4143
requiredWorkerThreadsModule = true;
4244
}
@@ -54,6 +56,11 @@ const create = context => {
5456
processEventHandler = node;
5557
}
5658
});
59+
context.onExit('CallExpression', node => {
60+
if (node === processEventHandler) {
61+
processEventHandler = undefined;
62+
}
63+
});
5764

5865
// Check `process.exit` call
5966
context.on('CallExpression', node => {
@@ -70,12 +77,6 @@ const create = context => {
7077
}
7178
});
7279

73-
context.onExit('CallExpression', node => {
74-
if (node === processEventHandler) {
75-
processEventHandler = undefined;
76-
}
77-
});
78-
7980
context.onExit('Program', function * () {
8081
if (requiredWorkerThreadsModule) {
8182
return;

test/no-process-exit.mjs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ test({
2929
const {workerData, parentPort} = require('worker_threads');
3030
process.exit(1);
3131
`,
32+
outdent`
33+
const {workerData, parentPort} = require('node:worker_threads');
34+
process.exit(1);
35+
`,
3236
outdent`
3337
import {workerData, parentPort} from 'worker_threads';
3438
process.exit(1);
@@ -37,6 +41,10 @@ test({
3741
import foo from 'worker_threads';
3842
process.exit(1);
3943
`,
44+
outdent`
45+
import foo from 'node:worker_threads';
46+
process.exit(1);
47+
`,
4048
// Not `CallExpression`
4149
'new process.exit(1);',
4250
// Not `MemberExpression`

0 commit comments

Comments
 (0)