Update MD026/MD030 to report fixInfo for violations.

This commit is contained in:
David Anson 2019-09-11 22:59:42 -07:00
parent 00a7e765ec
commit 0502e370de
5 changed files with 53 additions and 17 deletions

View file

@ -2,8 +2,8 @@
"use strict";
const { addError, allPunctuation, escapeForRegExp, forEachHeading,
rangeFromRegExp } = require("../helpers");
const { addError, allPunctuation, escapeForRegExp, forEachHeading } =
require("../helpers");
module.exports = {
"names": [ "MD026", "no-trailing-punctuation" ],
@ -15,13 +15,26 @@ module.exports = {
punctuation = allPunctuation;
}
const trailingPunctuationRe =
new RegExp("[" + escapeForRegExp(punctuation) + "]$");
forEachHeading(params, (heading, content) => {
const match = trailingPunctuationRe.exec(content);
new RegExp("\\s*[" + escapeForRegExp(punctuation) + "]+$");
forEachHeading(params, (heading) => {
const { line, lineNumber } = heading;
const trimmedLine = line.replace(/[\s#]*$/, "");
const match = trailingPunctuationRe.exec(trimmedLine);
if (match) {
addError(onError, heading.lineNumber,
"Punctuation: '" + match[0] + "'", null,
rangeFromRegExp(heading.line, trailingPunctuationRe));
const fullMatch = match[0];
const column = match.index + 1;
const length = fullMatch.length;
addError(
onError,
lineNumber,
`Punctuation: '${fullMatch}'`,
null,
[ column, length ],
{
"editColumn": column,
"deleteCount": length
}
);
}
});
}

View file

@ -2,8 +2,7 @@
"use strict";
const { addErrorDetailIf, listItemMarkerRe, rangeFromRegExp } =
require("../helpers");
const { addErrorDetailIf } = require("../helpers");
const { flattenedLists } = require("./cache");
module.exports = {
@ -22,10 +21,27 @@ module.exports = {
(allSingle ? ulSingle : ulMulti) :
(allSingle ? olSingle : olMulti);
list.items.forEach((item) => {
const match = /^[\s>]*\S+(\s+)/.exec(item.line);
addErrorDetailIf(onError, item.lineNumber,
expectedSpaces, (match ? match[1].length : 0), null, null,
rangeFromRegExp(item.line, listItemMarkerRe));
const { line, lineNumber } = item;
const match = /^[\s>]*\S+(\s*)/.exec(line);
const [ { "length": matchLength }, { "length": actualSpaces } ] = match;
let fixInfo = null;
if ((expectedSpaces !== actualSpaces) && (line.length > matchLength)) {
fixInfo = {
"editColumn": matchLength - actualSpaces + 1,
"deleteCount": actualSpaces,
"insertText": "".padEnd(expectedSpaces)
};
}
addErrorDetailIf(
onError,
lineNumber,
expectedSpaces,
actualSpaces,
null,
null,
[ 1, matchLength ],
fixInfo
);
});
});
}

View file

@ -6,7 +6,7 @@
"ruleInformation": "https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md030",
"errorDetail": "Expected: 1; Actual: 0",
"errorContext": null,
"errorRange": null
"errorRange": [1, 1]
},
{
"lineNumber": 5,
@ -15,7 +15,7 @@
"ruleInformation": "https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md030",
"errorDetail": "Expected: 1; Actual: 0",
"errorContext": null,
"errorRange": null
"errorRange": [1, 2]
},
{
"lineNumber": 11,

View file

@ -23,3 +23,10 @@
## Heading/Full-Width {MD026}
## Heading/Full-Width {MD026}
<!-- markdownlint-disable heading-style -->
## Heading {MD026} alternate ? ##
Heading {MD026} alternate too ?
-------------------------------

View file

@ -34,7 +34,7 @@ List with multiple paragraphs and incorrect spacing
* Foo {MD030}
Here is the second paragraph
Here is the second paragraph
* Bar {MD030}