From 4560ab6b0c5b7c673f204a2fb41ae66d76c3f300 Mon Sep 17 00:00:00 2001 From: bodapatisaikrishna Date: Thu, 17 Sep 2026 14:23:26 +0530 Subject: [PATCH] fix: add error handling in whitespace.js and whitespace-async.js Fixes #3237. Fixes #3238. - In whitespace-async.js: Add .catch() handler to onlyErrorOnRules to prevent unhandled promise rejections and ensure the process exits with a non-zero exit code on failure. - In whitespace.js: Wrap execSync and JSON.parse in try/catch to provide a descriptive error message with underlying cause when child process execution or JSON parsing fails. --- .../whitespace-async.js | 7 ++++++- .../eslint-config-airbnb-base/whitespace.js | 18 ++++++++++++------ .../eslint-config-airbnb/whitespace-async.js | 7 ++++++- packages/eslint-config-airbnb/whitespace.js | 18 ++++++++++++------ 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/packages/eslint-config-airbnb-base/whitespace-async.js b/packages/eslint-config-airbnb-base/whitespace-async.js index 06f4f89075..7d05d727fb 100755 --- a/packages/eslint-config-airbnb-base/whitespace-async.js +++ b/packages/eslint-config-airbnb-base/whitespace-async.js @@ -46,4 +46,9 @@ async function onlyErrorOnRules(rulesToError, config) { return errorsOnly; } -onlyErrorOnRules(whitespaceRules, baseConfig).then((config) => console.log(JSON.stringify(config))); +onlyErrorOnRules(whitespaceRules, baseConfig) + .then((config) => console.log(JSON.stringify(config))) + .catch((err) => { + console.error(err); + process.exitCode = 1; + }); diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js index 01e5198671..d140453d46 100644 --- a/packages/eslint-config-airbnb-base/whitespace.js +++ b/packages/eslint-config-airbnb-base/whitespace.js @@ -52,10 +52,16 @@ if (CLIEngine) { const { execSync } = require('child_process'); // NOTE: ESLint adds runtime statistics to the output (so it's no longer JSON) if TIMING is set - module.exports = JSON.parse(String(execSync(path.join(__dirname, 'whitespace-async.js'), { - env: { - ...process.env, - TIMING: undefined, - } - }))); + try { + const stdout = execSync(path.join(__dirname, 'whitespace-async.js'), { + env: { + ...process.env, + TIMING: undefined, + }, + encoding: 'utf8', + }); + module.exports = JSON.parse(stdout); + } catch (err) { + throw new Error(`Failed to load whitespace rules from whitespace-async.js: ${err.message}`, { cause: err }); + } } diff --git a/packages/eslint-config-airbnb/whitespace-async.js b/packages/eslint-config-airbnb/whitespace-async.js index 06f4f89075..7d05d727fb 100755 --- a/packages/eslint-config-airbnb/whitespace-async.js +++ b/packages/eslint-config-airbnb/whitespace-async.js @@ -46,4 +46,9 @@ async function onlyErrorOnRules(rulesToError, config) { return errorsOnly; } -onlyErrorOnRules(whitespaceRules, baseConfig).then((config) => console.log(JSON.stringify(config))); +onlyErrorOnRules(whitespaceRules, baseConfig) + .then((config) => console.log(JSON.stringify(config))) + .catch((err) => { + console.error(err); + process.exitCode = 1; + }); diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js index 01e5198671..d140453d46 100644 --- a/packages/eslint-config-airbnb/whitespace.js +++ b/packages/eslint-config-airbnb/whitespace.js @@ -52,10 +52,16 @@ if (CLIEngine) { const { execSync } = require('child_process'); // NOTE: ESLint adds runtime statistics to the output (so it's no longer JSON) if TIMING is set - module.exports = JSON.parse(String(execSync(path.join(__dirname, 'whitespace-async.js'), { - env: { - ...process.env, - TIMING: undefined, - } - }))); + try { + const stdout = execSync(path.join(__dirname, 'whitespace-async.js'), { + env: { + ...process.env, + TIMING: undefined, + }, + encoding: 'utf8', + }); + module.exports = JSON.parse(stdout); + } catch (err) { + throw new Error(`Failed to load whitespace rules from whitespace-async.js: ${err.message}`, { cause: err }); + } }