From 2a889535bdd564d75b6e8498839fdb5b57bf26f1 Mon Sep 17 00:00:00 2001 From: David Majda Date: Mon, 27 Jun 2016 12:27:41 +0200 Subject: [PATCH] Add location to the "Rule ... is already defined" error message See this discussion: https://github.com/pegjs/pegjs/commit/eb5875bc6a8ae7454beb6f7057e9d2794fefabc7#commitcomment-17970220 --- lib/compiler/passes/report-duplicate-rules.js | 6 ++++-- spec/unit/compiler/passes/report-duplicate-rules.spec.js | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/compiler/passes/report-duplicate-rules.js b/lib/compiler/passes/report-duplicate-rules.js index 44cfa27..c621d37 100644 --- a/lib/compiler/passes/report-duplicate-rules.js +++ b/lib/compiler/passes/report-duplicate-rules.js @@ -11,12 +11,14 @@ function reportDuplicateRules(ast) { rule: function(node) { if (rules.hasOwnProperty(node.name)) { throw new GrammarError( - "Rule \"" + node.name + "\" is already defined.", + "Rule \"" + node.name + "\" is already defined " + + "at line " + rules[node.name].start.line + ", " + + "column " + rules[node.name].start.column + ".", node.location ); } - rules[node.name] = true; + rules[node.name] = node.location; } }); diff --git a/spec/unit/compiler/passes/report-duplicate-rules.spec.js b/spec/unit/compiler/passes/report-duplicate-rules.spec.js index a74554e..19641eb 100644 --- a/spec/unit/compiler/passes/report-duplicate-rules.spec.js +++ b/spec/unit/compiler/passes/report-duplicate-rules.spec.js @@ -10,7 +10,7 @@ describe("compiler pass |reportDuplicateRules|", function() { 'start = "a"', 'start = "b"' ].join('\n'), { - message: 'Rule "start" is already defined.', + message: 'Rule "start" is already defined at line 1, column 1.', location: { start: { offset: 12, line: 2, column: 1 }, end: { offset: 23, line: 2, column: 12 }