Add basic infrastructure, MD031, and test.

This commit is contained in:
David Anson 2015-02-23 23:39:20 -08:00
parent cdec362dc0
commit d16e1cafc1
5 changed files with 136 additions and 1 deletions

27
lib/markdownlint.js Normal file
View file

@ -0,0 +1,27 @@
"use strict";
var fs = require("fs");
var rules = require("./rules");
function lintFile(file, options) {
var results = {};
var contents = fs.readFileSync(file, { encoding: "utf8" });
var lines = contents.split(/\r\n|\n/g);
Object.keys(rules).forEach(function(name) {
var rule = rules[name];
var errors = rule(lines);
if (errors.length) {
results[name] = errors;
}
});
return results;
}
module.exports = function(options) {
var results = {};
var files = options.files || [];
files.forEach(function(file) {
results[file] = lintFile(file, options);
});
return results;
};

30
lib/rules.js Normal file
View file

@ -0,0 +1,30 @@
"use strict";
function padAndTrim(lines) {
return [].concat(
"",
lines.map(function(line) {
return line.trim();
}),
"");
}
module.exports = {
MD031: function(lines) {
// Some parsers have trouble detecting fenced code blocks without
// surrounding whitespace, so examine the lines directly.
lines = padAndTrim(lines);
var errors = [];
var inCode = false;
lines.forEach(function(line, lineNum) {
if (line.match(/^(```|~~~)/)) {
inCode = !inCode;
if ((inCode && lines[lineNum - 1].length) ||
(!inCode && lines[lineNum + 1].length)) {
errors.push(lineNum);
}
}
});
return errors;
}
};