Skip to content

Commit

Permalink
Fix: Exclude eol-last from output (fixes #48)
Browse files Browse the repository at this point in the history
  • Loading branch information
btmills committed Apr 18, 2016
1 parent 48f311d commit abab043
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 6 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,12 @@ Blocks that don't specify either `js`, `javascript`, `jsx`, or `node` syntax are
print("This doesn't get linted either.")
```

## Unsatisfiable Rules

Since code blocks are not files themselves but embedded inside a Markdown document, some rules do not apply to Markdown code blocks, and messages from these rules are automatically suppressed:

- `eol-last`

## Contributing

```sh
Expand Down
14 changes: 13 additions & 1 deletion lib/processor.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ var assign = require("object-assign");
var remark = require("remark");

var SUPPORTED_SYNTAXES = ["js", "javascript", "node", "jsx"];
var UNSATISFIABLE_RULES = [
"eol-last" // The Markdown parser strips trailing newlines in code fences
];

var blocks = [];

Expand Down Expand Up @@ -57,6 +60,15 @@ function preprocess(text) {
});
}

/**
* Excludes unsatisfiable rules from the list of messages.
* @param {Message} message A message from the linter.
* @returns {boolean} True if the message should be included in output.
*/
function excludeUnsatisfiableRules(message) {
return UNSATISFIABLE_RULES.indexOf(message.ruleId) < 0;
}

/**
* Transforms generated messages for output.
* @param {Array<Message[]>} messages An array containing one array of messages
Expand All @@ -65,7 +77,7 @@ function preprocess(text) {
*/
function postprocess(messages) {
return [].concat.apply([], messages.map(function(group, i) {
return group.map(function(message) {
return group.filter(excludeUnsatisfiableRules).map(function(message) {
return assign({}, message, {
line: message.line + blocks[i].position.start.line,
column: message.column + blocks[i].position.indent[message.line - 1] - 1
Expand Down
1 change: 1 addition & 0 deletions tests/plugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ describe("plugin", function() {
extensions: ["md", "mkdn", "mdown", "markdown"],
ignore: false,
rules: {
"eol-last": 2,
"no-console": 2
},
useEslintrc: false
Expand Down
20 changes: 15 additions & 5 deletions tests/processor.js
Original file line number Diff line number Diff line change
Expand Up @@ -363,13 +363,13 @@ describe("processor", function() {
].join("\n");
var messages = [
[
{ line: 1, column: 1, message: "Use the global form of \"use strict\"." },
{ line: 3, column: 5, message: "Unexpected console statement." }
{ line: 1, column: 1, message: "Use the global form of \"use strict\".", ruleId: "strict" },
{ line: 3, column: 5, message: "Unexpected console statement.", ruleId: "no-console" }
], [
{ line: 3, column: 6, message: "Missing trailing comma." }
{ line: 3, column: 6, message: "Missing trailing comma.", ruleId: "comma-dangle" }
], [
{ line: 3, column: 2, message: "Unreachable code after return." },
{ line: 4, column: 2, message: "Unnecessary semicolon." }
{ line: 3, column: 2, message: "Unreachable code after return.", ruleId: "no-unreachable" },
{ line: 4, column: 2, message: "Unnecessary semicolon.", ruleId: "no-extra-semi" }
]
];

Expand Down Expand Up @@ -418,6 +418,16 @@ describe("processor", function() {
assert.equal(result[3].column, 2);
assert.equal(result[4].column, 2);
});

it("should exclude eol-last messages", function() {
var result = processor.postprocess([
[
{ line: 4, column: 3, message: "Newline required at end of file but not found.", ruleId: "eol-last" }
]
]);

assert.equal(result.length, 0);
});
});

});

0 comments on commit abab043

Please sign in to comment.