Add support and tests for tags, migrate style files.

This commit is contained in:
David Anson 2015-03-16 23:25:06 -07:00
parent 0bd6dea637
commit 139e474a12
5 changed files with 215 additions and 7 deletions

View file

@ -78,14 +78,35 @@ function lintFile(file, config, callback) {
"tokens": tokens, "tokens": tokens,
"lines": lines "lines": lines
}; };
var result = {}; // Merge rules/tags and sanitize config
var defaultRule = (config.default !== undefined) && !!config.default; var mergedRules = {};
// Run each rule var ruleDefault = (config.default !== undefined) && !!config.default;
rules.forEach(function forRule(rule) { rules.forEach(function forRule(rule) {
var ruleConfig = config[rule.name]; mergedRules[rule.name] = ruleDefault;
if (ruleConfig || (defaultRule && (ruleConfig === undefined))) { });
// Pass rule-specific options Object.keys(config).forEach(function forKey(key) {
params.options = (ruleConfig instanceof Object) ? ruleConfig : {}; var value = config[key];
if (value) {
if (!(value instanceof Object)) {
value = {};
}
} else {
value = false;
}
if (ruleToDescription[key]) {
mergedRules[key] = value;
} else if (tagToRules[key]) {
tagToRules[key].forEach(function forRule(rule) {
mergedRules[rule] = value;
});
}
});
// Run each enabled rule
var result = {};
rules.forEach(function forRule(rule) {
if (mergedRules[rule.name]) {
// Configure rule
params.options = mergedRules[rule.name];
var errors = []; var errors = [];
rule.func(params, errors); rule.func(params, errors);
// Record any errors // Record any errors

View file

@ -1,3 +1,5 @@
{ {
"comment": "All rules",
"default": true "default": true
} }

18
style/cirosantilli.json Normal file
View file

@ -0,0 +1,18 @@
{
"comment": "Rules for the style guide at http://www.cirosantilli.com/markdown-style-guide/",
"default": true,
"MD003": {
"style": "atx"
},
"MD004": {
"style": "dash"
},
"MD007": {
"indent": 4
},
"MD030": {
"ul_multi": 3,
"ol_multi": 2
}
}

9
style/relaxed.json Normal file
View file

@ -0,0 +1,9 @@
{
"comment": "Relaxed rules",
"default": true,
"whitespace": false,
"line_length": false,
"MD006": false,
"MD007": false
}

View file

@ -118,6 +118,164 @@ module.exports.resultFormatting = function resultFormatting(test) {
}); });
}; };
module.exports.defaultTrue = function defaultTrue(test) {
test.expect(2);
var options = {
"files": [
"./test/atx_header_spacing.md",
"./test/first_header_bad_atx.md"
],
"config": {
"default": true
}
};
markdownlint(options, function callback(err, actualResult) {
test.ifError(err);
var expectedResult = {
"./test/atx_header_spacing.md": {
"MD002": [ 3 ],
"MD018": [ 1 ],
"MD019": [ 3, 5 ]
},
"./test/first_header_bad_atx.md": {
"MD002": [ 1 ]
}
};
test.deepEqual(actualResult, expectedResult, "Undetected issues.");
test.done();
});
};
module.exports.defaultFalse = function defaultFalse(test) {
test.expect(2);
var options = {
"files": [
"./test/atx_header_spacing.md",
"./test/first_header_bad_atx.md"
],
"config": {
"default": false
}
};
markdownlint(options, function callback(err, actualResult) {
test.ifError(err);
var expectedResult = {
"./test/atx_header_spacing.md": {},
"./test/first_header_bad_atx.md": {}
};
test.deepEqual(actualResult, expectedResult, "Undetected issues.");
test.done();
});
};
module.exports.disableRules = function disableRules(test) {
test.expect(2);
var options = {
"files": [
"./test/atx_header_spacing.md",
"./test/first_header_bad_atx.md"
],
"config": {
"MD002": false,
"default": true,
"MD019": false
}
};
markdownlint(options, function callback(err, actualResult) {
test.ifError(err);
var expectedResult = {
"./test/atx_header_spacing.md": {
"MD018": [ 1 ]
},
"./test/first_header_bad_atx.md": {}
};
test.deepEqual(actualResult, expectedResult, "Undetected issues.");
test.done();
});
};
module.exports.enableRules = function enableRules(test) {
test.expect(2);
var options = {
"files": [
"./test/atx_header_spacing.md",
"./test/first_header_bad_atx.md"
],
"config": {
"MD002": true,
"default": false,
"MD019": true
}
};
markdownlint(options, function callback(err, actualResult) {
test.ifError(err);
var expectedResult = {
"./test/atx_header_spacing.md": {
"MD002": [ 3 ],
"MD019": [ 3, 5 ]
},
"./test/first_header_bad_atx.md": {
"MD002": [ 1 ]
}
};
test.deepEqual(actualResult, expectedResult, "Undetected issues.");
test.done();
});
};
module.exports.disableTag = function disableTag(test) {
test.expect(2);
var options = {
"files": [
"./test/atx_header_spacing.md",
"./test/first_header_bad_atx.md"
],
"config": {
"default": true,
"spaces": false
}
};
markdownlint(options, function callback(err, actualResult) {
test.ifError(err);
var expectedResult = {
"./test/atx_header_spacing.md": {
"MD002": [ 3 ]
},
"./test/first_header_bad_atx.md": {
"MD002": [ 1 ]
}
};
test.deepEqual(actualResult, expectedResult, "Undetected issues.");
test.done();
});
};
module.exports.enableTag = function enableTag(test) {
test.expect(2);
var options = {
"files": [
"./test/atx_header_spacing.md",
"./test/first_header_bad_atx.md"
],
"config": {
"default": false,
"spaces": true
}
};
markdownlint(options, function callback(err, actualResult) {
test.ifError(err);
var expectedResult = {
"./test/atx_header_spacing.md": {
"MD018": [ 1 ],
"MD019": [ 3, 5 ]
},
"./test/first_header_bad_atx.md": {}
};
test.deepEqual(actualResult, expectedResult, "Undetected issues.");
test.done();
});
};
module.exports.filesNotModified = function filesNotModified(test) { module.exports.filesNotModified = function filesNotModified(test) {
test.expect(2); test.expect(2);
var files = [ var files = [