Add style one_or_ordered to MD029/ol-prefix (fixes #97).

This commit is contained in:
David Anson 2017-12-12 22:41:11 -08:00
parent 4345423be1
commit 39d39db961
14 changed files with 242 additions and 15 deletions

View file

@ -717,11 +717,11 @@ Tags: ol
Aliases: ol-prefix Aliases: ol-prefix
Parameters: style ("one", "ordered"; default "one") Parameters: style ("one", "ordered", "one_or_ordered"; default "one_or_ordered")
This rule is triggered on ordered lists that do not either start with '1.' or This rule is triggered on ordered lists that do not either start with '1.' or
do not have a prefix that increases in numerical order (depending on the do not have a prefix that increases in numerical order (depending on the
configured style, which defaults to 'one'). configured style).
Example valid list if the style is configured as 'one': Example valid list if the style is configured as 'one':
@ -735,6 +735,13 @@ Example valid list if the style is configured as 'ordered':
2. Do that. 2. Do that.
3. Done. 3. Done.
Both examples are valid when the style is configured as 'one_or_ordered'.
Example invalid list for all styles:
1. Do this.
3. Done.
<a name="md030"></a> <a name="md030"></a>
## MD030 - Spaces after list markers ## MD030 - Spaces after list markers

View file

@ -745,16 +745,23 @@ module.exports = [
"aliases": [ "ol-prefix" ], "aliases": [ "ol-prefix" ],
"regexp": listItemMarkerRe, "regexp": listItemMarkerRe,
"func": function MD029(params, errors) { "func": function MD029(params, errors) {
var style = params.options.style || "one"; var style = params.options.style || "one_or_ordered";
var numberRe = /^[\s>]*([^.)]*)[.)]/;
flattenLists(params).forEach(function forList(list) { flattenLists(params).forEach(function forList(list) {
if (!list.unordered) { if (!list.unordered) {
var listStyle = style;
if (listStyle === "one_or_ordered") {
var second = (list.items.length > 1) &&
numberRe.exec(list.items[1].line);
listStyle = (second && (second[1] !== "1")) ? "ordered" : "one";
}
var number = 1; var number = 1;
list.items.forEach(function forItem(item) { list.items.forEach(function forItem(item) {
var match = /^[\s>]*([^.)]*)[.)]/.exec(item.line); var match = numberRe.exec(item.line);
errors.addDetailIf(item.lineNumber, errors.addDetailIf(item.lineNumber,
String(number), !match || match[1], String(number), !match || match[1],
"Style: " + (style === "one" ? "1/1/1" : "1/2/3")); "Style: " + (listStyle === "one" ? "1/1/1" : "1/2/3"));
if (style === "ordered") { if (listStyle === "ordered") {
number++; number++;
} }
}); });

View file

@ -163,9 +163,10 @@ rules.forEach(function forRule(rule) {
"type": "string", "type": "string",
"enum": [ "enum": [
"one", "one",
"ordered" "ordered",
"one_or_ordered"
], ],
"default": "one" "default": "one_or_ordered"
} }
}; };
break; break;

View file

@ -555,9 +555,10 @@
"type": "string", "type": "string",
"enum": [ "enum": [
"one", "one",
"ordered" "ordered",
"one_or_ordered"
], ],
"default": "one" "default": "one_or_ordered"
} }
}, },
"additionalProperties": false "additionalProperties": false
@ -575,9 +576,10 @@
"type": "string", "type": "string",
"enum": [ "enum": [
"one", "one",
"ordered" "ordered",
"one_or_ordered"
], ],
"default": "one" "default": "one_or_ordered"
} }
}, },
"additionalProperties": false "additionalProperties": false

View file

@ -44,7 +44,7 @@ Note: Can not break MD025 and MD002 in the same file
> {MD028:43} > {MD028:43}
1. list 1. list
2. list {MD029} 3. list {MD029}
```js ```js
``` ```

View file

@ -10,7 +10,7 @@ Text
> Blank line above > Blank line above
1. Alpha 1. Alpha
2. Beta 3. Beta
> > Multiple spaces, multiple blockquotes > > Multiple spaces, multiple blockquotes
> > > >

View file

@ -94,7 +94,7 @@
"ruleName": "MD029", "ruleName": "MD029",
"ruleAlias": "ol-prefix", "ruleAlias": "ol-prefix",
"ruleDescription": "Ordered list item prefix", "ruleDescription": "Ordered list item prefix",
"errorDetail": "Expected: 1; Actual: 2; Style: 1/1/1", "errorDetail": "Expected: 2; Actual: 3; Style: 1/2/3",
"errorContext": null, "errorContext": null,
"errorRange": [1, 4] "errorRange": [1, 4]
}, },

View file

@ -0,0 +1,6 @@
{
"default": true,
"MD029": {
"style": "one"
}
}

View file

@ -0,0 +1,62 @@
# Ordered list examples
text
1. Item
text
2. Item {MD029}
text
1. Item
1. Item
1. Item
text
1. Item
2. Item {MD029}
3. Item {MD029}
text
1. Item
2. Item {MD029}
1. Item
4. Item {MD029}
text
1. Item
1. Item
3. Item {MD029}
1. Item
text
1. Item
2. Item {MD029}
3. Item {MD029}
text
4. Item {MD029}
5. Item {MD029}
text
- Item
1. Item
1. Item
1. Item
- Item
1. Item
2. Item {MD029}
3. Item {MD029}
- Item
1. Item
2. Item {MD029}
4. Item {MD029}
- Item

View file

@ -0,0 +1,62 @@
# Ordered list examples
text
1. Item
text
2. Item {MD029}
text
1. Item
1. Item
1. Item
text
1. Item
2. Item
3. Item
text
1. Item
2. Item
1. Item {MD029}
4. Item
text
1. Item
1. Item
3. Item {MD029}
1. Item
text
1. Item
2. Item
3. Item
text
4. Item {MD029}
5. Item {MD029}
text
- Item
1. Item
1. Item
1. Item
- Item
1. Item
2. Item
3. Item
- Item
1. Item
2. Item
4. Item {MD029}
- Item

View file

@ -0,0 +1,6 @@
{
"default": true,
"MD029": {
"style": "ordered"
}
}

View file

@ -0,0 +1,62 @@
# Ordered list examples
text
1. Item
text
2. Item {MD029}
text
1. Item
1. Item {MD029}
1. Item {MD029}
text
1. Item
2. Item
3. Item
text
1. Item
2. Item
1. Item {MD029}
4. Item
text
1. Item
1. Item {MD029}
3. Item
1. Item {MD029}
text
1. Item
2. Item
3. Item
text
4. Item {MD029}
5. Item {MD029}
text
- Item
1. Item
1. Item {MD029}
1. Item {MD029}
- Item
1. Item
2. Item
3. Item
- Item
1. Item
2. Item
4. Item {MD029}
- Item

View file

@ -0,0 +1,6 @@
{
"default": true,
"MD029": {
"style": "one"
}
}

View file

@ -0,0 +1,6 @@
{
"default": true,
"MD029": {
"style": "one"
}
}