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 }