mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-12-16 22:10:13 +01:00
Hook up ESLint, fix warnings (including conversion to async I/O).
This commit is contained in:
parent
d16e1cafc1
commit
160146ac3a
5 changed files with 230 additions and 41 deletions
161
.eslintrc
Normal file
161
.eslintrc
Normal file
|
|
@ -0,0 +1,161 @@
|
||||||
|
{
|
||||||
|
"ecmaFeatures": {},
|
||||||
|
"parser": "espree",
|
||||||
|
"env": {
|
||||||
|
"browser": false,
|
||||||
|
"node": true,
|
||||||
|
"amd": false,
|
||||||
|
"mocha": false,
|
||||||
|
"jasmine": false
|
||||||
|
},
|
||||||
|
|
||||||
|
"rules": {
|
||||||
|
"no-alert": 2,
|
||||||
|
"no-array-constructor": 2,
|
||||||
|
"no-bitwise": 2,
|
||||||
|
"no-caller": 2,
|
||||||
|
"no-catch-shadow": 2,
|
||||||
|
"no-comma-dangle": 2,
|
||||||
|
"no-cond-assign": 2,
|
||||||
|
"no-console": 2,
|
||||||
|
"no-constant-condition": 2,
|
||||||
|
"no-control-regex": 2,
|
||||||
|
"no-debugger": 2,
|
||||||
|
"no-delete-var": 2,
|
||||||
|
"no-div-regex": 2,
|
||||||
|
"no-dupe-keys": 2,
|
||||||
|
"no-else-return": 2,
|
||||||
|
"no-empty": 2,
|
||||||
|
"no-empty-class": 2,
|
||||||
|
"no-empty-label": 2,
|
||||||
|
"no-eq-null": 2,
|
||||||
|
"no-eval": 2,
|
||||||
|
"no-ex-assign": 2,
|
||||||
|
"no-extend-native": 2,
|
||||||
|
"no-extra-bind": 2,
|
||||||
|
"no-extra-boolean-cast": 2,
|
||||||
|
"no-extra-parens": 0,
|
||||||
|
"no-extra-semi": 2,
|
||||||
|
"no-extra-strict": 2,
|
||||||
|
"no-fallthrough": 2,
|
||||||
|
"no-floating-decimal": 2,
|
||||||
|
"no-func-assign": 2,
|
||||||
|
"no-implied-eval": 2,
|
||||||
|
"no-inline-comments": 0,
|
||||||
|
"no-inner-declarations": [2, "functions"],
|
||||||
|
"no-invalid-regexp": 2,
|
||||||
|
"no-irregular-whitespace": 2,
|
||||||
|
"no-iterator": 2,
|
||||||
|
"no-label-var": 2,
|
||||||
|
"no-labels": 2,
|
||||||
|
"no-lone-blocks": 2,
|
||||||
|
"no-lonely-if": 2,
|
||||||
|
"no-loop-func": 2,
|
||||||
|
"no-mixed-requires": [2, true],
|
||||||
|
"no-mixed-spaces-and-tabs": [2, false],
|
||||||
|
"no-multi-spaces": 2,
|
||||||
|
"no-multi-str": 2,
|
||||||
|
"no-multiple-empty-lines": [2, { "max": 2 }],
|
||||||
|
"no-native-reassign": 2,
|
||||||
|
"no-negated-in-lhs": 2,
|
||||||
|
"no-nested-ternary": 2,
|
||||||
|
"no-new": 2,
|
||||||
|
"no-new-func": 2,
|
||||||
|
"no-new-object": 2,
|
||||||
|
"no-new-require": 2,
|
||||||
|
"no-new-wrappers": 2,
|
||||||
|
"no-obj-calls": 2,
|
||||||
|
"no-octal": 2,
|
||||||
|
"no-octal-escape": 2,
|
||||||
|
"no-path-concat": 2,
|
||||||
|
"no-plusplus": 0,
|
||||||
|
"no-process-env": 2,
|
||||||
|
"no-process-exit": 2,
|
||||||
|
"no-proto": 2,
|
||||||
|
"no-redeclare": 2,
|
||||||
|
"no-regex-spaces": 2,
|
||||||
|
"no-reserved-keys": 2,
|
||||||
|
"no-restricted-modules": 0,
|
||||||
|
"no-return-assign": 2,
|
||||||
|
"no-script-url": 2,
|
||||||
|
"no-self-compare": 2,
|
||||||
|
"no-sequences": 2,
|
||||||
|
"no-shadow": 2,
|
||||||
|
"no-shadow-restricted-names": 2,
|
||||||
|
"no-space-before-semi": 2,
|
||||||
|
"no-spaced-func": 2,
|
||||||
|
"no-sparse-arrays": 2,
|
||||||
|
"no-sync": 2,
|
||||||
|
"no-ternary": 0,
|
||||||
|
"no-trailing-spaces": 2,
|
||||||
|
"no-throw-literal": 2,
|
||||||
|
"no-undef": 2,
|
||||||
|
"no-undef-init": 2,
|
||||||
|
"no-undefined": 2,
|
||||||
|
"no-underscore-dangle": 2,
|
||||||
|
"no-unreachable": 2,
|
||||||
|
"no-unused-expressions": 2,
|
||||||
|
"no-unused-vars": [2, { "vars": "all", "args": "after-used" }],
|
||||||
|
"no-use-before-define": 2,
|
||||||
|
"no-void": 2,
|
||||||
|
"no-var": 0,
|
||||||
|
"no-warning-comments": [0, { "terms": ["todo", "fixme", "xxx"], "location": "start" }],
|
||||||
|
"no-with": 2,
|
||||||
|
"no-wrap-func": 2,
|
||||||
|
|
||||||
|
"block-scoped-var": 2,
|
||||||
|
"brace-style": [2, "1tbs"],
|
||||||
|
"camelcase": 2,
|
||||||
|
"comma-spacing": 2,
|
||||||
|
"comma-style": 2,
|
||||||
|
"complexity": [2, 11],
|
||||||
|
"consistent-return": 2,
|
||||||
|
"consistent-this": [2, "self"],
|
||||||
|
"curly": [2, "all"],
|
||||||
|
"default-case": 2,
|
||||||
|
"dot-notation": [2, { "allowKeywords": true }],
|
||||||
|
"eol-last": 2,
|
||||||
|
"eqeqeq": 2,
|
||||||
|
"func-names": 2,
|
||||||
|
"func-style": [2, "declaration"],
|
||||||
|
"generator-star": 2,
|
||||||
|
"global-strict": [2, "always"],
|
||||||
|
"guard-for-in": 2,
|
||||||
|
"handle-callback-err": 2,
|
||||||
|
"indent": [2, 2],
|
||||||
|
"key-spacing": [2, { "beforeColon": false, "afterColon": true }],
|
||||||
|
"max-depth": [2, 4],
|
||||||
|
"max-len": [2, 80, 2],
|
||||||
|
"max-nested-callbacks": [2, 2],
|
||||||
|
"max-params": [2, 3],
|
||||||
|
"max-statements": [0, 10],
|
||||||
|
"new-cap": 2,
|
||||||
|
"new-parens": 2,
|
||||||
|
"one-var": 0,
|
||||||
|
"operator-assignment": [2, "always"],
|
||||||
|
"padded-blocks": [2, "never"],
|
||||||
|
"quote-props": 2,
|
||||||
|
"quotes": [2, "double"],
|
||||||
|
"radix": 2,
|
||||||
|
"semi": 2,
|
||||||
|
"sort-vars": 0,
|
||||||
|
"space-after-function-name": [2, "never"],
|
||||||
|
"space-after-keywords": [2, "always"],
|
||||||
|
"space-before-blocks": [2, "always"],
|
||||||
|
"space-before-function-parentheses": [2, "never"],
|
||||||
|
"space-in-brackets": [2, "always", { "propertyName": false }],
|
||||||
|
"space-in-parens": [2, "never"],
|
||||||
|
"space-infix-ops": 2,
|
||||||
|
"space-return-throw-case": 2,
|
||||||
|
"space-unary-ops": [2, { "words": true, "nonwords": false }],
|
||||||
|
"spaced-line-comment": [2, "always"],
|
||||||
|
"strict": 2,
|
||||||
|
"use-isnan": 2,
|
||||||
|
"valid-jsdoc": 2,
|
||||||
|
"valid-typeof": 2,
|
||||||
|
"vars-on-top": 0,
|
||||||
|
"wrap-iife": 2,
|
||||||
|
"wrap-regex": 0,
|
||||||
|
"yoda": [2, "never"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,25 +3,42 @@
|
||||||
var fs = require("fs");
|
var fs = require("fs");
|
||||||
var rules = require("./rules");
|
var rules = require("./rules");
|
||||||
|
|
||||||
function lintFile(file, options) {
|
function lintFile(file, options, callback) {
|
||||||
var results = {};
|
fs.readFile(file, { "encoding": "utf8" }, function readFile(err, contents) {
|
||||||
var contents = fs.readFileSync(file, { encoding: "utf8" });
|
if (err) {
|
||||||
var lines = contents.split(/\r\n|\n/g);
|
callback(err);
|
||||||
Object.keys(rules).forEach(function(name) {
|
} else {
|
||||||
var rule = rules[name];
|
var lines = contents.split(/\r\n|\n/g);
|
||||||
var errors = rule(lines);
|
var result = {};
|
||||||
if (errors.length) {
|
Object.keys(rules).forEach(function forRule(name) {
|
||||||
results[name] = errors;
|
var rule = rules[name];
|
||||||
|
var errors = rule(lines);
|
||||||
|
if (errors.length) {
|
||||||
|
result[name] = errors;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
callback(null, result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return results;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = function(options) {
|
module.exports = function markdownlint(options, callback) {
|
||||||
var results = {};
|
var results = {};
|
||||||
var files = options.files || [];
|
var files = options.files || [];
|
||||||
files.forEach(function(file) {
|
function lintFiles() {
|
||||||
results[file] = lintFile(file, options);
|
var file = files.shift();
|
||||||
});
|
if (file) {
|
||||||
return results;
|
lintFile(file, options, function lintFileCallback(err, result) {
|
||||||
|
if (err) {
|
||||||
|
callback(err);
|
||||||
|
} else {
|
||||||
|
results[file] = result;
|
||||||
|
lintFiles();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback(null, results);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lintFiles();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -3,20 +3,20 @@
|
||||||
function padAndTrim(lines) {
|
function padAndTrim(lines) {
|
||||||
return [].concat(
|
return [].concat(
|
||||||
"",
|
"",
|
||||||
lines.map(function(line) {
|
lines.map(function mapLine(line) {
|
||||||
return line.trim();
|
return line.trim();
|
||||||
}),
|
}),
|
||||||
"");
|
"");
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
MD031: function(lines) {
|
"MD031": function MD031(lines) {
|
||||||
// Some parsers have trouble detecting fenced code blocks without
|
// Some parsers have trouble detecting fenced code blocks without
|
||||||
// surrounding whitespace, so examine the lines directly.
|
// surrounding whitespace, so examine the lines directly.
|
||||||
lines = padAndTrim(lines);
|
lines = padAndTrim(lines);
|
||||||
var errors = [];
|
var errors = [];
|
||||||
var inCode = false;
|
var inCode = false;
|
||||||
lines.forEach(function(line, lineNum) {
|
lines.forEach(function forLine(line, lineNum) {
|
||||||
if (line.match(/^(```|~~~)/)) {
|
if (line.match(/^(```|~~~)/)) {
|
||||||
inCode = !inCode;
|
inCode = !inCode;
|
||||||
if ((inCode && lines[lineNum - 1].length) ||
|
if ((inCode && lines[lineNum - 1].length) ||
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,11 @@
|
||||||
"url": "https://github.com/DavidAnson/markdownlint/issues"
|
"url": "https://github.com/DavidAnson/markdownlint/issues"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "nodeunit"
|
"test": "nodeunit",
|
||||||
|
"lint": "eslint lib test"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"eslint": "^0.15.0",
|
||||||
"nodeunit": "^0.9.0"
|
"nodeunit": "^0.9.0"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
|
|
||||||
|
|
@ -5,31 +5,40 @@ var path = require("path");
|
||||||
var markdownlint = require("../lib/markdownlint");
|
var markdownlint = require("../lib/markdownlint");
|
||||||
|
|
||||||
function createTestForFile(file) {
|
function createTestForFile(file) {
|
||||||
return function(test) {
|
return function testForFile(test) {
|
||||||
test.expect(1);
|
test.expect(3);
|
||||||
var contents = fs.readFileSync(file, { encoding: "utf8" });
|
fs.readFile(
|
||||||
var lines = contents.split(/\r\n|\n/g);
|
file,
|
||||||
var results = {};
|
{ "encoding": "utf8" },
|
||||||
lines.forEach(function(line, lineNum) {
|
function readFileCallback(err, contents) {
|
||||||
var match = line.match(/\{(MD\d+)(?::(\d+))?\}/);
|
test.ifError(err);
|
||||||
if (match) {
|
var lines = contents.split(/\r\n|\n/g);
|
||||||
var rule = match[1];
|
var results = {};
|
||||||
var lines = results[rule] || [];
|
lines.forEach(function forLine(line, lineNum) {
|
||||||
lines.push(lineNum + 1);
|
var match = line.match(/\{(MD\d+)(?::(\d+))?\}/);
|
||||||
results[rule] = lines;
|
if (match) {
|
||||||
}
|
var rule = match[1];
|
||||||
});
|
var errors = results[rule] || [];
|
||||||
var actual = markdownlint({
|
errors.push(lineNum + 1);
|
||||||
files: [ file ]
|
results[rule] = errors;
|
||||||
});
|
}
|
||||||
var expected = {};
|
});
|
||||||
expected[file] = results;
|
markdownlint({
|
||||||
test.deepEqual(actual, expected, "Line numbers are not correct.");
|
"files": [ file ]
|
||||||
test.done();
|
}, function markdownlintCallback(errr, actual) {
|
||||||
|
test.ifError(errr);
|
||||||
|
var expected = {};
|
||||||
|
expected[file] = results;
|
||||||
|
test.deepEqual(actual, expected, "Line numbers are not correct.");
|
||||||
|
test.done();
|
||||||
|
});
|
||||||
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.readdirSync(__dirname).forEach(function(file) {
|
/* eslint-disable no-sync, for synchronous test method creation */
|
||||||
|
fs.readdirSync(__dirname).forEach(function forFile(file) {
|
||||||
|
/* eslint-enable no-sync */
|
||||||
if (file.match(/\.md$/)) {
|
if (file.match(/\.md$/)) {
|
||||||
module.exports[file] = createTestForFile(path.join(__dirname, file));
|
module.exports[file] = createTestForFile(path.join(__dirname, file));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue