Skip to content

Commit dff8e9c

Browse files
Paul Murraybtmills
authored andcommitted
Fix: Emit correct endLine numbers (#88)
* Fix: Emit correct endLine numbers * fix: subtract one when calculating endLine * Fix: subtract comment blocks, update tests * Fix: add leadingComment lines to endLine (correctly) * Fix: add processor test for endLines, skip plugin tests * Fix: revert eslint version back to 2.2.0 * Fix: Re-enable endLine tests
1 parent 83f00d0 commit dff8e9c

File tree

3 files changed

+70
-8
lines changed

3 files changed

+70
-8
lines changed

lib/processor.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,21 +119,28 @@ function adjustBlock(block) {
119119
return count + comment.split("\n").length;
120120
}, 0);
121121

122+
var blockStart = block.position.start.line;
123+
122124
/**
123125
* Adjusts ESLint messages to point to the correct location in the Markdown.
124126
* @param {Message} message A message from ESLint.
125127
* @returns {Message} The same message, but adjusted ot the correct location.
126128
*/
127129
return function adjustMessage(message) {
130+
128131
var lineInCode = message.line - leadingCommentLines;
132+
var endLine = message.endLine - leadingCommentLines;
129133
if (lineInCode < 1) {
130134
return null;
131135
}
132136

133-
return assign({}, message, {
134-
line: lineInCode + block.position.start.line,
137+
var out = {
138+
line: lineInCode + blockStart,
139+
endLine: endLine ? endLine + blockStart : endLine,
135140
column: message.column + block.position.indent[lineInCode - 1] - 1
136-
});
141+
};
142+
143+
return assign({}, message, out);
137144
};
138145
}
139146

tests/lib/plugin.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,51 @@ describe("plugin", function() {
4545
assert.equal(report.results[0].messages[0].line, 2);
4646
});
4747

48+
it("should emit correct line numbers", function() {
49+
var code = [
50+
"# Hello, world!",
51+
"",
52+
"",
53+
"```js",
54+
"var bar = baz",
55+
"",
56+
"",
57+
"var foo = blah",
58+
"```"
59+
].join("\n");
60+
var report = cli.executeOnText(code, "test.md");
61+
assert.equal(report.results[0].messages[0].message, "'baz' is not defined.");
62+
assert.equal(report.results[0].messages[0].line, 5);
63+
assert.equal(report.results[0].messages[0].endLine, 5);
64+
assert.equal(report.results[0].messages[1].message, "'blah' is not defined.");
65+
assert.equal(report.results[0].messages[1].line, 8);
66+
assert.equal(report.results[0].messages[1].endLine, 8);
67+
});
68+
69+
it("should emit correct line numbers with leading comments", function() {
70+
var code = [
71+
"# Hello, world!",
72+
"",
73+
"<!-- eslint-disable quotes -->",
74+
"<!-- eslint-disable semi -->",
75+
"",
76+
"```js",
77+
"var bar = baz",
78+
"",
79+
"var str = 'single quotes'",
80+
"",
81+
"var foo = blah",
82+
"```"
83+
].join("\n");
84+
var report = cli.executeOnText(code, "test.md");
85+
assert.equal(report.results[0].messages[0].message, "'baz' is not defined.");
86+
assert.equal(report.results[0].messages[0].line, 7);
87+
assert.equal(report.results[0].messages[0].endLine, 7);
88+
assert.equal(report.results[0].messages[1].message, "'blah' is not defined.");
89+
assert.equal(report.results[0].messages[1].line, 11);
90+
assert.equal(report.results[0].messages[1].endLine, 11);
91+
});
92+
4893
it("should run on .mkdn files", function() {
4994
var report = cli.executeOnText(shortText, "test.mkdn");
5095

tests/lib/processor.js

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -514,13 +514,13 @@ describe("processor", function() {
514514
].join("\n");
515515
var messages = [
516516
[
517-
{ line: 1, column: 1, message: "Use the global form of \"use strict\".", ruleId: "strict" },
518-
{ line: 3, column: 5, message: "Unexpected console statement.", ruleId: "no-console" }
517+
{ line: 1, endLine: 1, column: 1, message: "Use the global form of \"use strict\".", ruleId: "strict" },
518+
{ line: 3, endLine: 3, column: 5, message: "Unexpected console statement.", ruleId: "no-console" }
519519
], [
520-
{ line: 3, column: 6, message: "Missing trailing comma.", ruleId: "comma-dangle" }
520+
{ line: 3, endLine: 3, column: 6, message: "Missing trailing comma.", ruleId: "comma-dangle" }
521521
], [
522-
{ line: 3, column: 2, message: "Unreachable code after return.", ruleId: "no-unreachable" },
523-
{ line: 4, column: 2, message: "Unnecessary semicolon.", ruleId: "no-extra-semi" }
522+
{ line: 3, endLine: 6, column: 2, message: "Unreachable code after return.", ruleId: "no-unreachable" },
523+
{ line: 4, endLine: 4, column: 2, message: "Unnecessary semicolon.", ruleId: "no-extra-semi" }
524524
]
525525
];
526526

@@ -555,6 +555,16 @@ describe("processor", function() {
555555
assert.equal(result[4].line, 27);
556556
});
557557

558+
it("should translate endLine numbers", function() {
559+
var result = processor.postprocess(messages);
560+
561+
assert.equal(result[0].endLine, 4);
562+
assert.equal(result[1].endLine, 6);
563+
assert.equal(result[2].endLine, 17);
564+
assert.equal(result[3].endLine, 29);
565+
assert.equal(result[4].endLine, 27);
566+
});
567+
558568
it("should translate column numbers", function() {
559569
var result = processor.postprocess(messages);
560570

0 commit comments

Comments
 (0)