mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-12-16 22:10:13 +01:00
Add MD004 with tests, support disabling rules.
This commit is contained in:
parent
d2e38c1646
commit
2da9462e45
13 changed files with 201 additions and 7 deletions
|
|
@ -91,7 +91,7 @@
|
||||||
"no-throw-literal": 2,
|
"no-throw-literal": 2,
|
||||||
"no-undef": 2,
|
"no-undef": 2,
|
||||||
"no-undef-init": 2,
|
"no-undef-init": 2,
|
||||||
"no-undefined": 2,
|
"no-undefined": 0,
|
||||||
"no-underscore-dangle": 2,
|
"no-underscore-dangle": 2,
|
||||||
"no-unreachable": 2,
|
"no-unreachable": 2,
|
||||||
"no-unused-expressions": 2,
|
"no-unused-expressions": 2,
|
||||||
|
|
|
||||||
|
|
@ -24,12 +24,14 @@ function lintFile(file, config, callback) {
|
||||||
var result = {};
|
var result = {};
|
||||||
rules.forEach(function forRule(rule) {
|
rules.forEach(function forRule(rule) {
|
||||||
var ruleConfig = config[rule.name];
|
var ruleConfig = config[rule.name];
|
||||||
params.options = (ruleConfig instanceof Object) ? ruleConfig : {};
|
if ((ruleConfig === undefined) || ruleConfig) {
|
||||||
var errors = [];
|
params.options = (ruleConfig instanceof Object) ? ruleConfig : {};
|
||||||
rule.func(params, errors);
|
var errors = [];
|
||||||
if (errors.length) {
|
rule.func(params, errors);
|
||||||
errors.sort(numberComparison);
|
if (errors.length) {
|
||||||
result[rule.name] = errors.filter(uniqueFilterForSorted);
|
errors.sort(numberComparison);
|
||||||
|
result[rule.name] = errors.filter(uniqueFilterForSorted);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
callback(null, result);
|
callback(null, result);
|
||||||
|
|
|
||||||
32
lib/rules.js
32
lib/rules.js
|
|
@ -14,6 +14,19 @@ function headingStyleFrom(token, lines) {
|
||||||
return "setext";
|
return "setext";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function unorderedListStyleFrom(token, lines) {
|
||||||
|
switch (lines[token.lines[0]].trim().substr(0, 1)) {
|
||||||
|
case "*":
|
||||||
|
return "asterisk";
|
||||||
|
case "-":
|
||||||
|
return "dash";
|
||||||
|
case "+":
|
||||||
|
return "plus";
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function padAndTrim(lines) {
|
function padAndTrim(lines) {
|
||||||
return [].concat(
|
return [].concat(
|
||||||
"",
|
"",
|
||||||
|
|
@ -75,6 +88,25 @@ module.exports = [
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "MD004",
|
||||||
|
"desc": "Unordered list style",
|
||||||
|
"func": function MD004(params, errors) {
|
||||||
|
var style = params.options.style || "consistent";
|
||||||
|
var listItems = params.tokens.filter(function filterToken(token) {
|
||||||
|
return (token.type === "list_item_open");
|
||||||
|
});
|
||||||
|
if ((style === "consistent") && listItems.length) {
|
||||||
|
style = unorderedListStyleFrom(listItems[0], params.lines);
|
||||||
|
}
|
||||||
|
listItems.forEach(function forToken(token) {
|
||||||
|
if (unorderedListStyleFrom(token, params.lines) !== style) {
|
||||||
|
errors.push(lineNumberFrom(token));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD031",
|
"name": "MD031",
|
||||||
"desc": "Fenced code blocks should be surrounded by blank lines",
|
"desc": "Fenced code blocks should be surrounded by blank lines",
|
||||||
|
|
|
||||||
3
test/inconsistent_bullet_styles_asterisk.md
Normal file
3
test/inconsistent_bullet_styles_asterisk.md
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
* Item
|
||||||
|
+ Item {MD004}
|
||||||
|
- Item {MD004}
|
||||||
3
test/inconsistent_bullet_styles_dash.md
Normal file
3
test/inconsistent_bullet_styles_dash.md
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
- Item
|
||||||
|
* Item {MD004}
|
||||||
|
+ Item {MD004}
|
||||||
3
test/inconsistent_bullet_styles_plus.md
Normal file
3
test/inconsistent_bullet_styles_plus.md
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
+ Item
|
||||||
|
* Item {MD004}
|
||||||
|
- Item {MD004}
|
||||||
36
test/incorrect_bullet_style_asterisk.json
Normal file
36
test/incorrect_bullet_style_asterisk.json
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
{
|
||||||
|
"MD001": true,
|
||||||
|
"MD002": true,
|
||||||
|
"MD003": true,
|
||||||
|
"MD004": {
|
||||||
|
"style": "asterisk"
|
||||||
|
},
|
||||||
|
"MD005": true,
|
||||||
|
"MD006": true,
|
||||||
|
"MD007": true,
|
||||||
|
"MD008": true,
|
||||||
|
"MD009": true,
|
||||||
|
"MD010": true,
|
||||||
|
"MD011": true,
|
||||||
|
"MD012": true,
|
||||||
|
"MD013": true,
|
||||||
|
"MD014": true,
|
||||||
|
"MD015": true,
|
||||||
|
"MD016": true,
|
||||||
|
"MD017": true,
|
||||||
|
"MD018": true,
|
||||||
|
"MD019": true,
|
||||||
|
"MD020": true,
|
||||||
|
"MD021": true,
|
||||||
|
"MD022": true,
|
||||||
|
"MD023": true,
|
||||||
|
"MD024": true,
|
||||||
|
"MD025": true,
|
||||||
|
"MD026": true,
|
||||||
|
"MD027": true,
|
||||||
|
"MD028": true,
|
||||||
|
"MD029": true,
|
||||||
|
"MD030": true,
|
||||||
|
"MD031": true,
|
||||||
|
"MD032": true
|
||||||
|
}
|
||||||
3
test/incorrect_bullet_style_asterisk.md
Normal file
3
test/incorrect_bullet_style_asterisk.md
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
* Item
|
||||||
|
- Item {MD004}
|
||||||
|
+ Item {MD004}
|
||||||
36
test/incorrect_bullet_style_dash.json
Normal file
36
test/incorrect_bullet_style_dash.json
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
{
|
||||||
|
"MD001": true,
|
||||||
|
"MD002": true,
|
||||||
|
"MD003": true,
|
||||||
|
"MD004": {
|
||||||
|
"style": "dash"
|
||||||
|
},
|
||||||
|
"MD005": true,
|
||||||
|
"MD006": true,
|
||||||
|
"MD007": true,
|
||||||
|
"MD008": true,
|
||||||
|
"MD009": true,
|
||||||
|
"MD010": true,
|
||||||
|
"MD011": true,
|
||||||
|
"MD012": true,
|
||||||
|
"MD013": true,
|
||||||
|
"MD014": true,
|
||||||
|
"MD015": true,
|
||||||
|
"MD016": true,
|
||||||
|
"MD017": true,
|
||||||
|
"MD018": true,
|
||||||
|
"MD019": true,
|
||||||
|
"MD020": true,
|
||||||
|
"MD021": true,
|
||||||
|
"MD022": true,
|
||||||
|
"MD023": true,
|
||||||
|
"MD024": true,
|
||||||
|
"MD025": true,
|
||||||
|
"MD026": true,
|
||||||
|
"MD027": true,
|
||||||
|
"MD028": true,
|
||||||
|
"MD029": true,
|
||||||
|
"MD030": true,
|
||||||
|
"MD031": true,
|
||||||
|
"MD032": true
|
||||||
|
}
|
||||||
3
test/incorrect_bullet_style_dash.md
Normal file
3
test/incorrect_bullet_style_dash.md
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
* Item {MD004}
|
||||||
|
- Item
|
||||||
|
+ Item {MD004}
|
||||||
36
test/incorrect_bullet_style_plus.json
Normal file
36
test/incorrect_bullet_style_plus.json
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
{
|
||||||
|
"MD001": true,
|
||||||
|
"MD002": true,
|
||||||
|
"MD003": true,
|
||||||
|
"MD004": {
|
||||||
|
"style": "plus"
|
||||||
|
},
|
||||||
|
"MD005": true,
|
||||||
|
"MD006": true,
|
||||||
|
"MD007": true,
|
||||||
|
"MD008": true,
|
||||||
|
"MD009": true,
|
||||||
|
"MD010": true,
|
||||||
|
"MD011": true,
|
||||||
|
"MD012": true,
|
||||||
|
"MD013": true,
|
||||||
|
"MD014": true,
|
||||||
|
"MD015": true,
|
||||||
|
"MD016": true,
|
||||||
|
"MD017": true,
|
||||||
|
"MD018": true,
|
||||||
|
"MD019": true,
|
||||||
|
"MD020": true,
|
||||||
|
"MD021": true,
|
||||||
|
"MD022": true,
|
||||||
|
"MD023": true,
|
||||||
|
"MD024": true,
|
||||||
|
"MD025": true,
|
||||||
|
"MD026": true,
|
||||||
|
"MD027": true,
|
||||||
|
"MD028": true,
|
||||||
|
"MD029": true,
|
||||||
|
"MD030": true,
|
||||||
|
"MD031": true,
|
||||||
|
"MD032": true
|
||||||
|
}
|
||||||
3
test/incorrect_bullet_style_plus.md
Normal file
3
test/incorrect_bullet_style_plus.md
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
* Item {MD004}
|
||||||
|
- Item {MD004}
|
||||||
|
+ Item
|
||||||
34
test/lists_without_blank_lines.json
Normal file
34
test/lists_without_blank_lines.json
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
"MD001": true,
|
||||||
|
"MD002": true,
|
||||||
|
"MD003": true,
|
||||||
|
"MD004": false,
|
||||||
|
"MD005": true,
|
||||||
|
"MD006": true,
|
||||||
|
"MD007": true,
|
||||||
|
"MD008": true,
|
||||||
|
"MD009": true,
|
||||||
|
"MD010": true,
|
||||||
|
"MD011": true,
|
||||||
|
"MD012": true,
|
||||||
|
"MD013": true,
|
||||||
|
"MD014": true,
|
||||||
|
"MD015": true,
|
||||||
|
"MD016": true,
|
||||||
|
"MD017": true,
|
||||||
|
"MD018": true,
|
||||||
|
"MD019": true,
|
||||||
|
"MD020": true,
|
||||||
|
"MD021": true,
|
||||||
|
"MD022": true,
|
||||||
|
"MD023": true,
|
||||||
|
"MD024": true,
|
||||||
|
"MD025": true,
|
||||||
|
"MD026": true,
|
||||||
|
"MD027": true,
|
||||||
|
"MD028": true,
|
||||||
|
"MD029": true,
|
||||||
|
"MD030": true,
|
||||||
|
"MD031": true,
|
||||||
|
"MD032": true
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue