mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2026-01-03 06:28:49 +01:00
Update MD031/blanks-around-fences and MD032/blanks-around-lists to ignore comments and blockquotes (fixes #171, fixes #172).
This commit is contained in:
parent
df2507f030
commit
1db87ef0c6
5 changed files with 120 additions and 16 deletions
12
lib/md031.js
12
lib/md031.js
|
|
@ -3,17 +3,19 @@
|
|||
"use strict";
|
||||
|
||||
const shared = require("./shared");
|
||||
const { addErrorContext, forEachLine, isBlankLine } = shared;
|
||||
|
||||
module.exports = {
|
||||
"names": [ "MD031", "blanks-around-fences" ],
|
||||
"description": "Fenced code blocks should be surrounded by blank lines",
|
||||
"tags": [ "code", "blank_lines" ],
|
||||
"function": function MD031(params, onError) {
|
||||
const lines = params.lines;
|
||||
shared.forEachLine(function forLine(line, i, inCode, onFence) {
|
||||
if (((onFence > 0) && (i - 1 >= 0) && lines[i - 1].length) ||
|
||||
((onFence < 0) && (i + 1 < lines.length) && lines[i + 1].length)) {
|
||||
shared.addErrorContext(onError, i + 1, lines[i].trim());
|
||||
const { lines } = params;
|
||||
const { length } = lines;
|
||||
forEachLine(function forLine(line, i, inCode, onFence) {
|
||||
if (((onFence > 0) && (i - 1 >= 0) && !isBlankLine(lines[i - 1])) ||
|
||||
((onFence < 0) && (i + 1 < length) && !isBlankLine(lines[i + 1]))) {
|
||||
addErrorContext(onError, i + 1, lines[i].trim());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
20
lib/md032.js
20
lib/md032.js
|
|
@ -3,24 +3,22 @@
|
|||
"use strict";
|
||||
|
||||
const shared = require("./shared");
|
||||
|
||||
const blankLineRe = /^[\s>]*$/;
|
||||
const { addErrorContext, flattenLists, isBlankLine } = shared;
|
||||
|
||||
module.exports = {
|
||||
"names": [ "MD032", "blanks-around-lists" ],
|
||||
"description": "Lists should be surrounded by blank lines",
|
||||
"tags": [ "bullet", "ul", "ol", "blank_lines" ],
|
||||
"function": function MD032(params, onError) {
|
||||
shared.flattenLists().filter((list) => !list.nesting).forEach((list) => {
|
||||
const firstLineIndex = list.open.map[0];
|
||||
if (!blankLineRe.test(params.lines[firstLineIndex - 1] || "")) {
|
||||
shared.addErrorContext(
|
||||
onError, firstLineIndex + 1, params.lines[firstLineIndex].trim());
|
||||
const { lines } = params;
|
||||
flattenLists().filter((list) => !list.nesting).forEach((list) => {
|
||||
const firstIndex = list.open.map[0];
|
||||
if (!isBlankLine(lines[firstIndex - 1])) {
|
||||
addErrorContext(onError, firstIndex + 1, lines[firstIndex].trim());
|
||||
}
|
||||
const bottomLineIndex = list.lastLineIndex - 1;
|
||||
if (!blankLineRe.test(params.lines[bottomLineIndex + 1] || "")) {
|
||||
shared.addErrorContext(
|
||||
onError, bottomLineIndex + 1, params.lines[bottomLineIndex].trim());
|
||||
const lastIndex = list.lastLineIndex - 1;
|
||||
if (!isBlankLine(lines[lastIndex + 1])) {
|
||||
addErrorContext(onError, lastIndex + 1, lines[lastIndex].trim());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,6 +64,13 @@ module.exports.isEmptyString = function isEmptyString(str) {
|
|||
return str.length === 0;
|
||||
};
|
||||
|
||||
// Returns true iff the input line is blank (no content)
|
||||
// Example: Contains nothing, whitespace, or comments
|
||||
const blankLineRe = />|(?:<!--.*?-->)/g;
|
||||
module.exports.isBlankLine = function isBlankLine(line) {
|
||||
return !line || !line.trim() || !line.replace(blankLineRe, "").trim();
|
||||
};
|
||||
|
||||
// Replaces the text of all properly-formatted HTML comments with whitespace
|
||||
// This preserves the line/column information for the rest of the document
|
||||
// Trailing whitespace is avoided with a '\' character in the last column
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue