From 448e8da94d09b397e98ffcb6f22b55a578ef79c1 Mon Sep 17 00:00:00 2001 From: Alex Zherdev Date: Fri, 15 Mar 2019 10:16:42 -0700 Subject: [PATCH] Chore: improve crash reporting (fixes #11304) (#11463) Add line number to the output in the event of a rule crash --- lib/linter.js | 20 ++++++++++++++++---- tests/lib/linter.js | 4 ++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/linter.js b/lib/linter.js index 88448d90f8a..be38b99087d 100644 --- a/lib/linter.js +++ b/lib/linter.js @@ -747,10 +747,15 @@ function runRules(sourceCode, configuredRules, ruleMapper, parserOptions, parser nodeQueue.forEach(traversalInfo => { currentNode = traversalInfo.node; - if (traversalInfo.isEntering) { - eventGenerator.enterNode(currentNode); - } else { - eventGenerator.leaveNode(currentNode); + try { + if (traversalInfo.isEntering) { + eventGenerator.enterNode(currentNode); + } else { + eventGenerator.leaveNode(currentNode); + } + } catch (err) { + err.currentNode = currentNode; + throw err; } }); @@ -901,8 +906,15 @@ module.exports = class Linter { options.filename ); } catch (err) { + err.message += `\nOccurred while linting ${options.filename}`; debug("An error occurred while traversing"); debug("Filename:", options.filename); + if (err.currentNode) { + const { line } = err.currentNode.loc.start; + + debug("Line:", line); + err.message += `:${line}`; + } debug("Parser Options:", parserOptions); debug("Parser Path:", parserName); debug("Settings:", settings); diff --git a/tests/lib/linter.js b/tests/lib/linter.js index 3771ceb261c..e31b61d9514 100644 --- a/tests/lib/linter.js +++ b/tests/lib/linter.js @@ -99,7 +99,7 @@ describe("Linter", () => { assert.throws(() => { linter.verify(code, config, filename); - }, "Intentional error."); + }, `Intentional error.\nOccurred while linting ${filename}:1`); }); it("does not call rule listeners with a `this` value", () => { @@ -4381,7 +4381,7 @@ describe("Linter", () => { assert.throws(() => { linter.verify("0", { rules: { "test-rule": "error" } }); - }, /Fixable rules should export a `meta\.fixable` property.$/u); + }, /Fixable rules should export a `meta\.fixable` property.\nOccurred while linting :1$/u); }); it("should not throw an error if fix is passed and there is no metadata", () => {