mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-09-22 05:40:48 +02:00
Merge rule name/alias in rule definitions and results (for resultVersion 2).
This commit is contained in:
parent
b565c1ff32
commit
54c28f47c3
13 changed files with 322 additions and 291 deletions
18
README.md
18
README.md
|
@ -351,7 +351,11 @@ each error is identified by rule name and line number. This is deprecated.
|
||||||
|
|
||||||
Passing a `resultVersion` of `1` corresponds to a detailed format where each error
|
Passing a `resultVersion` of `1` corresponds to a detailed format where each error
|
||||||
includes information about the line number, rule name, alias, description, as well
|
includes information about the line number, rule name, alias, description, as well
|
||||||
as any additional detail or context that is available. This is the default.
|
as any additional detail or context that is available. This is deprecated.
|
||||||
|
|
||||||
|
Passing a `resultVersion` of `2` corresponds to a detailed format where each error
|
||||||
|
includes information about the line number, rule names, description, as well as any
|
||||||
|
additional detail or context that is available. This is the default.
|
||||||
|
|
||||||
#### callback
|
#### callback
|
||||||
|
|
||||||
|
@ -481,29 +485,25 @@ Output:
|
||||||
"good.md": [],
|
"good.md": [],
|
||||||
"bad.md": [
|
"bad.md": [
|
||||||
{ "lineNumber": 3,
|
{ "lineNumber": 3,
|
||||||
"ruleName": "MD010",
|
"ruleNames": [ "MD010", "no-hard-tabs" ],
|
||||||
"ruleAlias": "no-hard-tabs",
|
|
||||||
"ruleDescription": "Hard tabs",
|
"ruleDescription": "Hard tabs",
|
||||||
"errorDetail": "Column: 17",
|
"errorDetail": "Column: 17",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
"errorRange": [ 17, 1 ] },
|
"errorRange": [ 17, 1 ] },
|
||||||
{ "lineNumber": 1,
|
{ "lineNumber": 1,
|
||||||
"ruleName": "MD018",
|
"ruleNames": [ "MD018", "no-missing-space-atx" ],
|
||||||
"ruleAlias": "no-missing-space-atx",
|
|
||||||
"ruleDescription": "No space after hash on atx style header",
|
"ruleDescription": "No space after hash on atx style header",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "#bad.md",
|
"errorContext": "#bad.md",
|
||||||
"errorRange": [ 1, 2 ] },
|
"errorRange": [ 1, 2 ] },
|
||||||
{ "lineNumber": 3,
|
{ "lineNumber": 3,
|
||||||
"ruleName": "MD018",
|
"ruleNames": [ "MD018", "no-missing-space-atx" ],
|
||||||
"ruleAlias": "no-missing-space-atx",
|
|
||||||
"ruleDescription": "No space after hash on atx style header",
|
"ruleDescription": "No space after hash on atx style header",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "#This file fails\tsome rules.",
|
"errorContext": "#This file fails\tsome rules.",
|
||||||
"errorRange": [ 1, 2 ] },
|
"errorRange": [ 1, 2 ] },
|
||||||
{ "lineNumber": 1,
|
{ "lineNumber": 1,
|
||||||
"ruleName": "MD041",
|
"ruleNames": [ "MD041", "first-line-h1" ],
|
||||||
"ruleAlias": "first-line-h1",
|
|
||||||
"ruleDescription": "First line in file should be a top level header",
|
"ruleDescription": "First line in file should be a top level header",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "#bad.md",
|
"errorContext": "#bad.md",
|
||||||
|
|
|
@ -51,10 +51,11 @@
|
||||||
};
|
};
|
||||||
var results = window.markdownlint.sync(options);
|
var results = window.markdownlint.sync(options);
|
||||||
violations.innerHTML = results.content.map(function mapResult(result) {
|
violations.innerHTML = results.content.map(function mapResult(result) {
|
||||||
var ruleRef = rulesMd + "#" + result.ruleName.toLowerCase() + "---" +
|
var ruleName = result.ruleNames[0];
|
||||||
|
var ruleRef = rulesMd + "#" + ruleName.toLowerCase() + "---" +
|
||||||
result.ruleDescription.toLowerCase().replace(/ /g, "-");
|
result.ruleDescription.toLowerCase().replace(/ /g, "-");
|
||||||
return "<a href='#" + result.lineNumber + "'><em>" + result.lineNumber +
|
return "<a href='#" + result.lineNumber + "'><em>" + result.lineNumber +
|
||||||
"</em></a> - <a href='" + ruleRef + "'>" + result.ruleName + "</a> " +
|
"</em></a> - <a href='" + ruleRef + "'>" + ruleName + "</a> " +
|
||||||
result.ruleDescription +
|
result.ruleDescription +
|
||||||
(result.errorDetail ?
|
(result.errorDetail ?
|
||||||
" [<span class='detail'>" +
|
" [<span class='detail'>" +
|
||||||
|
|
|
@ -8,31 +8,36 @@ var md = require("markdown-it")({ "html": true });
|
||||||
var rules = require("./rules");
|
var rules = require("./rules");
|
||||||
var shared = require("./shared");
|
var shared = require("./shared");
|
||||||
|
|
||||||
// Mappings from rule to description and tag to rules
|
// Mappings from rule to description and name/tag to rules
|
||||||
var allRuleNames = [];
|
var allRuleNames = [];
|
||||||
var ruleNameToRule = {};
|
var ruleNameToRule = {};
|
||||||
var idUpperToRuleNames = {};
|
var idUpperToRuleNames = {};
|
||||||
|
// var tagToRuleNames = {};
|
||||||
rules.forEach(function forRule(rule) {
|
rules.forEach(function forRule(rule) {
|
||||||
allRuleNames.push(rule.name);
|
var ruleName = rule.names[0];
|
||||||
ruleNameToRule[rule.name] = rule;
|
var ruleAliases = rule.names.slice(1);
|
||||||
|
allRuleNames.push(ruleName);
|
||||||
|
ruleNameToRule[ruleName] = rule;
|
||||||
// The following is useful for updating README.md
|
// The following is useful for updating README.md
|
||||||
// console.log(
|
// console.log(
|
||||||
// "* **[" + rule.name + "](doc/Rules.md#" + rule.name.toLowerCase() +
|
// "* **[" + ruleName + "](doc/Rules.md#" + ruleName.toLowerCase() +
|
||||||
// ")** *" + rule.aliases.join(", ") + "* - " + rule.desc);
|
// ")** *" + ruleAliases.join(", ") + "* - " + rule.desc);
|
||||||
rule.tags.forEach(function forTag(tag) {
|
rule.tags.forEach(function forTag(tag) {
|
||||||
var tagUpper = tag.toUpperCase();
|
var tagUpper = tag.toUpperCase();
|
||||||
var ruleNames = idUpperToRuleNames[tagUpper] || [];
|
var ruleNames = idUpperToRuleNames[tagUpper] || [];
|
||||||
ruleNames.push(rule.name);
|
ruleNames.push(ruleName);
|
||||||
idUpperToRuleNames[tagUpper] = ruleNames;
|
idUpperToRuleNames[tagUpper] = ruleNames;
|
||||||
|
// tagToRuleNames[tag] = ruleName;
|
||||||
});
|
});
|
||||||
rule.aliases.forEach(function forAlias(alias) {
|
ruleAliases.forEach(function forAlias(alias) {
|
||||||
var aliasUpper = alias.toUpperCase();
|
var aliasUpper = alias.toUpperCase();
|
||||||
idUpperToRuleNames[aliasUpper] = [ rule.name ];
|
idUpperToRuleNames[aliasUpper] = [ ruleName ];
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
// The following is useful for updating README.md
|
// The following is useful for updating README.md
|
||||||
// Object.keys(idUpperToRuleNames).sort().forEach(function forTag(tag) {
|
// Object.keys(tagToRuleNames).sort().forEach(function forTag(tag) {
|
||||||
// console.log("* **" + tag + "** - " + idUpperToRuleNames[tag].join(", "));
|
// console.log("* **" + tag + "** - " +
|
||||||
|
// idUpperToRuleNames[tag.toUpperCase()].join(", "));
|
||||||
// });
|
// });
|
||||||
|
|
||||||
// Class for results with toString for pretty display
|
// Class for results with toString for pretty display
|
||||||
|
@ -44,11 +49,13 @@ Results.prototype.toString = function resultsToString(useAlias) {
|
||||||
var fileResults = that[file];
|
var fileResults = that[file];
|
||||||
if (Array.isArray(fileResults)) {
|
if (Array.isArray(fileResults)) {
|
||||||
fileResults.forEach(function forResult(result) {
|
fileResults.forEach(function forResult(result) {
|
||||||
|
var ruleMoniker = result.ruleNames ?
|
||||||
|
result.ruleNames.join("/") :
|
||||||
|
(result.ruleName + "/" + result.ruleAlias);
|
||||||
results.push(
|
results.push(
|
||||||
file + ": " +
|
file + ": " +
|
||||||
result.lineNumber + ": " +
|
result.lineNumber + ": " +
|
||||||
result.ruleName + "/" +
|
ruleMoniker + " " +
|
||||||
result.ruleAlias + " " +
|
|
||||||
result.ruleDescription +
|
result.ruleDescription +
|
||||||
(result.errorDetail ?
|
(result.errorDetail ?
|
||||||
" [" + result.errorDetail + "]" :
|
" [" + result.errorDetail + "]" :
|
||||||
|
@ -65,7 +72,7 @@ Results.prototype.toString = function resultsToString(useAlias) {
|
||||||
var result =
|
var result =
|
||||||
file + ": " +
|
file + ": " +
|
||||||
lineNumber + ": " +
|
lineNumber + ": " +
|
||||||
(useAlias ? rule.aliases[0] : rule.name) + " " +
|
rule.names[useAlias ? 1 : 0] + " " +
|
||||||
rule.desc;
|
rule.desc;
|
||||||
results.push(result);
|
results.push(result);
|
||||||
});
|
});
|
||||||
|
@ -155,7 +162,8 @@ function lintContent(
|
||||||
var ruleDefault = (defaultKey.length === 0) || !!config[defaultKey[0]];
|
var ruleDefault = (defaultKey.length === 0) || !!config[defaultKey[0]];
|
||||||
var mergedRules = {};
|
var mergedRules = {};
|
||||||
rules.forEach(function forRule(rule) {
|
rules.forEach(function forRule(rule) {
|
||||||
mergedRules[rule.name] = ruleDefault;
|
var ruleName = rule.names[0];
|
||||||
|
mergedRules[ruleName] = ruleDefault;
|
||||||
});
|
});
|
||||||
Object.keys(config).forEach(function forKey(key) {
|
Object.keys(config).forEach(function forKey(key) {
|
||||||
var value = config[key];
|
var value = config[key];
|
||||||
|
@ -178,7 +186,8 @@ function lintContent(
|
||||||
// Create mapping of enabled rules per line
|
// Create mapping of enabled rules per line
|
||||||
var enabledRules = {};
|
var enabledRules = {};
|
||||||
rules.forEach(function forRule(rule) {
|
rules.forEach(function forRule(rule) {
|
||||||
enabledRules[rule.name] = !!mergedRules[rule.name];
|
var ruleName = rule.names[0];
|
||||||
|
enabledRules[ruleName] = !!mergedRules[ruleName];
|
||||||
});
|
});
|
||||||
function forMatch(match) {
|
function forMatch(match) {
|
||||||
var enabled = match[1].toUpperCase() === "EN";
|
var enabled = match[1].toUpperCase() === "EN";
|
||||||
|
@ -220,7 +229,8 @@ function lintContent(
|
||||||
var result = (resultVersion === 0) ? {} : [];
|
var result = (resultVersion === 0) ? {} : [];
|
||||||
rules.forEach(function forRule(rule) {
|
rules.forEach(function forRule(rule) {
|
||||||
// Configure rule
|
// Configure rule
|
||||||
params.options = mergedRules[rule.name];
|
var ruleName = rule.names[0];
|
||||||
|
params.options = mergedRules[ruleName];
|
||||||
var errors = [];
|
var errors = [];
|
||||||
function addError(lineNumber, detail, context, range) {
|
function addError(lineNumber, detail, context, range) {
|
||||||
errors.push({
|
errors.push({
|
||||||
|
@ -272,7 +282,7 @@ function lintContent(
|
||||||
var filteredErrors = errors
|
var filteredErrors = errors
|
||||||
.filter(uniqueFilterForSortedErrors)
|
.filter(uniqueFilterForSortedErrors)
|
||||||
.filter(function removeDisabledRules(error) {
|
.filter(function removeDisabledRules(error) {
|
||||||
return enabledRulesPerLineNumber[error.lineNumber][rule.name];
|
return enabledRulesPerLineNumber[error.lineNumber][ruleName];
|
||||||
})
|
})
|
||||||
.map(function formatResults(error) {
|
.map(function formatResults(error) {
|
||||||
if (resultVersion === 0) {
|
if (resultVersion === 0) {
|
||||||
|
@ -296,19 +306,23 @@ function lintContent(
|
||||||
range = [ column, length ];
|
range = [ column, length ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {
|
var errorObject = {};
|
||||||
"lineNumber": error.lineNumber,
|
errorObject.lineNumber = error.lineNumber;
|
||||||
"ruleName": rule.name,
|
if (resultVersion === 1) {
|
||||||
"ruleAlias": rule.aliases[0],
|
errorObject.ruleName = rule.names[0];
|
||||||
"ruleDescription": rule.desc,
|
errorObject.ruleAlias = rule.names[1];
|
||||||
"errorDetail": error.detail,
|
} else {
|
||||||
"errorContext": error.context,
|
errorObject.ruleNames = rule.names;
|
||||||
"errorRange": range
|
}
|
||||||
};
|
errorObject.ruleDescription = rule.desc;
|
||||||
|
errorObject.errorDetail = error.detail;
|
||||||
|
errorObject.errorContext = error.context;
|
||||||
|
errorObject.errorRange = range;
|
||||||
|
return errorObject;
|
||||||
});
|
});
|
||||||
if (filteredErrors.length) {
|
if (filteredErrors.length) {
|
||||||
if (resultVersion === 0) {
|
if (resultVersion === 0) {
|
||||||
result[rule.name] = filteredErrors;
|
result[ruleName] = filteredErrors;
|
||||||
} else {
|
} else {
|
||||||
result.push.apply(result, filteredErrors);
|
result.push.apply(result, filteredErrors);
|
||||||
}
|
}
|
||||||
|
@ -359,7 +373,7 @@ function lintInput(options, synchronous, callback) {
|
||||||
shared.frontMatterRe : options.frontMatter;
|
shared.frontMatterRe : options.frontMatter;
|
||||||
var noInlineConfig = !!options.noInlineConfig;
|
var noInlineConfig = !!options.noInlineConfig;
|
||||||
var resultVersion = (options.resultVersion === undefined) ?
|
var resultVersion = (options.resultVersion === undefined) ?
|
||||||
1 : options.resultVersion;
|
2 : options.resultVersion;
|
||||||
var results = new Results();
|
var results = new Results();
|
||||||
// Helper to lint the next file in the array
|
// Helper to lint the next file in the array
|
||||||
function lintFilesArray() {
|
function lintFilesArray() {
|
||||||
|
|
123
lib/rules.js
123
lib/rules.js
|
@ -183,10 +183,9 @@ function flattenLists(params) {
|
||||||
|
|
||||||
module.exports = [
|
module.exports = [
|
||||||
{
|
{
|
||||||
"name": "MD001",
|
"names": [ "MD001", "header-increment" ],
|
||||||
"desc": "Header levels should only increment by one level at a time",
|
"desc": "Header levels should only increment by one level at a time",
|
||||||
"tags": [ "headers" ],
|
"tags": [ "headers" ],
|
||||||
"aliases": [ "header-increment" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD001(params, errors) {
|
"func": function MD001(params, errors) {
|
||||||
var prevLevel = 0;
|
var prevLevel = 0;
|
||||||
|
@ -202,10 +201,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD002",
|
"names": [ "MD002", "first-header-h1" ],
|
||||||
"desc": "First header should be a top level header",
|
"desc": "First header should be a top level header",
|
||||||
"tags": [ "headers" ],
|
"tags": [ "headers" ],
|
||||||
"aliases": [ "first-header-h1" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD002(params, errors) {
|
"func": function MD002(params, errors) {
|
||||||
var level = params.options.level || 1;
|
var level = params.options.level || 1;
|
||||||
|
@ -221,10 +219,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD003",
|
"names": [ "MD003", "header-style" ],
|
||||||
"desc": "Header style",
|
"desc": "Header style",
|
||||||
"tags": [ "headers" ],
|
"tags": [ "headers" ],
|
||||||
"aliases": [ "header-style" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD003(params, errors) {
|
"func": function MD003(params, errors) {
|
||||||
var style = params.options.style || "consistent";
|
var style = params.options.style || "consistent";
|
||||||
|
@ -258,10 +255,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD004",
|
"names": [ "MD004", "ul-style" ],
|
||||||
"desc": "Unordered list style",
|
"desc": "Unordered list style",
|
||||||
"tags": [ "bullet", "ul" ],
|
"tags": [ "bullet", "ul" ],
|
||||||
"aliases": [ "ul-style" ],
|
|
||||||
"regexp": listItemMarkerRe,
|
"regexp": listItemMarkerRe,
|
||||||
"func": function MD004(params, errors) {
|
"func": function MD004(params, errors) {
|
||||||
var style = params.options.style || "consistent";
|
var style = params.options.style || "consistent";
|
||||||
|
@ -293,10 +289,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD005",
|
"names": [ "MD005", "list-indent" ],
|
||||||
"desc": "Inconsistent indentation for list items at the same level",
|
"desc": "Inconsistent indentation for list items at the same level",
|
||||||
"tags": [ "bullet", "ul", "indentation" ],
|
"tags": [ "bullet", "ul", "indentation" ],
|
||||||
"aliases": [ "list-indent" ],
|
|
||||||
"regexp": listItemMarkerRe,
|
"regexp": listItemMarkerRe,
|
||||||
"func": function MD005(params, errors) {
|
"func": function MD005(params, errors) {
|
||||||
flattenLists(params).forEach(function forList(list) {
|
flattenLists(params).forEach(function forList(list) {
|
||||||
|
@ -309,10 +304,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD006",
|
"names": [ "MD006", "ul-start-left" ],
|
||||||
"desc": "Consider starting bulleted lists at the beginning of the line",
|
"desc": "Consider starting bulleted lists at the beginning of the line",
|
||||||
"tags": [ "bullet", "ul", "indentation" ],
|
"tags": [ "bullet", "ul", "indentation" ],
|
||||||
"aliases": [ "ul-start-left" ],
|
|
||||||
"regexp": listItemMarkerRe,
|
"regexp": listItemMarkerRe,
|
||||||
"func": function MD006(params, errors) {
|
"func": function MD006(params, errors) {
|
||||||
flattenLists(params).forEach(function forList(list) {
|
flattenLists(params).forEach(function forList(list) {
|
||||||
|
@ -324,10 +318,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD007",
|
"names": [ "MD007", "ul-indent" ],
|
||||||
"desc": "Unordered list indentation",
|
"desc": "Unordered list indentation",
|
||||||
"tags": [ "bullet", "ul", "indentation" ],
|
"tags": [ "bullet", "ul", "indentation" ],
|
||||||
"aliases": [ "ul-indent" ],
|
|
||||||
"regexp": listItemMarkerRe,
|
"regexp": listItemMarkerRe,
|
||||||
"func": function MD007(params, errors) {
|
"func": function MD007(params, errors) {
|
||||||
var optionsIndent = params.options.indent || 2;
|
var optionsIndent = params.options.indent || 2;
|
||||||
|
@ -346,10 +339,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD009",
|
"names": [ "MD009", "no-trailing-spaces" ],
|
||||||
"desc": "Trailing spaces",
|
"desc": "Trailing spaces",
|
||||||
"tags": [ "whitespace" ],
|
"tags": [ "whitespace" ],
|
||||||
"aliases": [ "no-trailing-spaces" ],
|
|
||||||
"regexp": trailingSpaceRe,
|
"regexp": trailingSpaceRe,
|
||||||
"func": function MD009(params, errors) {
|
"func": function MD009(params, errors) {
|
||||||
var brSpaces = params.options.br_spaces || 0;
|
var brSpaces = params.options.br_spaces || 0;
|
||||||
|
@ -377,10 +369,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD010",
|
"names": [ "MD010", "no-hard-tabs" ],
|
||||||
"desc": "Hard tabs",
|
"desc": "Hard tabs",
|
||||||
"tags": [ "whitespace", "hard_tab" ],
|
"tags": [ "whitespace", "hard_tab" ],
|
||||||
"aliases": [ "no-hard-tabs" ],
|
|
||||||
"regexp": tabRe,
|
"regexp": tabRe,
|
||||||
"func": function MD010(params, errors) {
|
"func": function MD010(params, errors) {
|
||||||
var codeBlocks = params.options.code_blocks;
|
var codeBlocks = params.options.code_blocks;
|
||||||
|
@ -395,10 +386,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD011",
|
"names": [ "MD011", "no-reversed-links" ],
|
||||||
"desc": "Reversed link syntax",
|
"desc": "Reversed link syntax",
|
||||||
"tags": [ "links" ],
|
"tags": [ "links" ],
|
||||||
"aliases": [ "no-reversed-links" ],
|
|
||||||
"regexp": reversedLinkRe,
|
"regexp": reversedLinkRe,
|
||||||
"func": function MD011(params, errors) {
|
"func": function MD011(params, errors) {
|
||||||
forEachInlineChild(params, "text", function forToken(token) {
|
forEachInlineChild(params, "text", function forToken(token) {
|
||||||
|
@ -411,10 +401,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD012",
|
"names": [ "MD012", "no-multiple-blanks" ],
|
||||||
"desc": "Multiple consecutive blank lines",
|
"desc": "Multiple consecutive blank lines",
|
||||||
"tags": [ "whitespace", "blank_lines" ],
|
"tags": [ "whitespace", "blank_lines" ],
|
||||||
"aliases": [ "no-multiple-blanks" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD012(params, errors) {
|
"func": function MD012(params, errors) {
|
||||||
var maximum = params.options.maximum || 1;
|
var maximum = params.options.maximum || 1;
|
||||||
|
@ -429,10 +418,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD013",
|
"names": [ "MD013", "line-length" ],
|
||||||
"desc": "Line length",
|
"desc": "Line length",
|
||||||
"tags": [ "line_length" ],
|
"tags": [ "line_length" ],
|
||||||
"aliases": [ "line-length" ],
|
|
||||||
"regexp": longLineReFunc,
|
"regexp": longLineReFunc,
|
||||||
"func": function MD013(params, errors) {
|
"func": function MD013(params, errors) {
|
||||||
var lineLength = params.options.line_length || defaultLineLength;
|
var lineLength = params.options.line_length || defaultLineLength;
|
||||||
|
@ -487,10 +475,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD014",
|
"names": [ "MD014", "commands-show-output" ],
|
||||||
"desc": "Dollar signs used before commands without showing output",
|
"desc": "Dollar signs used before commands without showing output",
|
||||||
"tags": [ "code" ],
|
"tags": [ "code" ],
|
||||||
"aliases": [ "commands-show-output" ],
|
|
||||||
"regexp": dollarCommandRe,
|
"regexp": dollarCommandRe,
|
||||||
"func": function MD014(params, errors) {
|
"func": function MD014(params, errors) {
|
||||||
[ "code_block", "fence" ].forEach(function forType(type) {
|
[ "code_block", "fence" ].forEach(function forType(type) {
|
||||||
|
@ -509,10 +496,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD018",
|
"names": [ "MD018", "no-missing-space-atx" ],
|
||||||
"desc": "No space after hash on atx style header",
|
"desc": "No space after hash on atx style header",
|
||||||
"tags": [ "headers", "atx", "spaces" ],
|
"tags": [ "headers", "atx", "spaces" ],
|
||||||
"aliases": [ "no-missing-space-atx" ],
|
|
||||||
"regexp": atxHeaderSpaceRe,
|
"regexp": atxHeaderSpaceRe,
|
||||||
"func": function MD018(params, errors) {
|
"func": function MD018(params, errors) {
|
||||||
forEachLine(params, function forLine(line, lineIndex, inCode) {
|
forEachLine(params, function forLine(line, lineIndex, inCode) {
|
||||||
|
@ -524,10 +510,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD019",
|
"names": [ "MD019", "no-multiple-space-atx" ],
|
||||||
"desc": "Multiple spaces after hash on atx style header",
|
"desc": "Multiple spaces after hash on atx style header",
|
||||||
"tags": [ "headers", "atx", "spaces" ],
|
"tags": [ "headers", "atx", "spaces" ],
|
||||||
"aliases": [ "no-multiple-space-atx" ],
|
|
||||||
"regexp": atxHeaderSpaceRe,
|
"regexp": atxHeaderSpaceRe,
|
||||||
"func": function MD019(params, errors) {
|
"func": function MD019(params, errors) {
|
||||||
filterTokens(params, "heading_open", function forToken(token) {
|
filterTokens(params, "heading_open", function forToken(token) {
|
||||||
|
@ -540,10 +525,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD020",
|
"names": [ "MD020", "no-missing-space-closed-atx" ],
|
||||||
"desc": "No space inside hashes on closed atx style header",
|
"desc": "No space inside hashes on closed atx style header",
|
||||||
"tags": [ "headers", "atx_closed", "spaces" ],
|
"tags": [ "headers", "atx_closed", "spaces" ],
|
||||||
"aliases": [ "no-missing-space-closed-atx" ],
|
|
||||||
"regexp": atxClosedHeaderNoSpaceRe,
|
"regexp": atxClosedHeaderNoSpaceRe,
|
||||||
"func": function MD020(params, errors) {
|
"func": function MD020(params, errors) {
|
||||||
forEachLine(params, function forLine(line, lineIndex, inCode) {
|
forEachLine(params, function forLine(line, lineIndex, inCode) {
|
||||||
|
@ -559,10 +543,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD021",
|
"names": [ "MD021", "no-multiple-space-closed-atx" ],
|
||||||
"desc": "Multiple spaces inside hashes on closed atx style header",
|
"desc": "Multiple spaces inside hashes on closed atx style header",
|
||||||
"tags": [ "headers", "atx_closed", "spaces" ],
|
"tags": [ "headers", "atx_closed", "spaces" ],
|
||||||
"aliases": [ "no-multiple-space-closed-atx" ],
|
|
||||||
"regexp": atxClosedHeaderSpaceRe,
|
"regexp": atxClosedHeaderSpaceRe,
|
||||||
"func": function MD021(params, errors) {
|
"func": function MD021(params, errors) {
|
||||||
filterTokens(params, "heading_open", function forToken(token) {
|
filterTokens(params, "heading_open", function forToken(token) {
|
||||||
|
@ -578,10 +561,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD022",
|
"names": [ "MD022", "blanks-around-headers" ],
|
||||||
"desc": "Headers should be surrounded by blank lines",
|
"desc": "Headers should be surrounded by blank lines",
|
||||||
"tags": [ "headers", "blank_lines" ],
|
"tags": [ "headers", "blank_lines" ],
|
||||||
"aliases": [ "blanks-around-headers" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD022(params, errors) {
|
"func": function MD022(params, errors) {
|
||||||
var prevHeadingLineNumber = 0;
|
var prevHeadingLineNumber = 0;
|
||||||
|
@ -613,10 +595,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD023",
|
"names": [ "MD023", "header-start-left" ],
|
||||||
"desc": "Headers must start at the beginning of the line",
|
"desc": "Headers must start at the beginning of the line",
|
||||||
"tags": [ "headers", "spaces" ],
|
"tags": [ "headers", "spaces" ],
|
||||||
"aliases": [ "header-start-left" ],
|
|
||||||
"regexp": spaceBeforeHeaderRe,
|
"regexp": spaceBeforeHeaderRe,
|
||||||
"func": function MD023(params, errors) {
|
"func": function MD023(params, errors) {
|
||||||
filterTokens(params, "heading_open", function forToken(token) {
|
filterTokens(params, "heading_open", function forToken(token) {
|
||||||
|
@ -628,10 +609,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD024",
|
"names": [ "MD024", "no-duplicate-header" ],
|
||||||
"desc": "Multiple headers with the same content",
|
"desc": "Multiple headers with the same content",
|
||||||
"tags": [ "headers" ],
|
"tags": [ "headers" ],
|
||||||
"aliases": [ "no-duplicate-header" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD024(params, errors) {
|
"func": function MD024(params, errors) {
|
||||||
var knownContent = [];
|
var knownContent = [];
|
||||||
|
@ -646,10 +626,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD025",
|
"names": [ "MD025", "single-h1" ],
|
||||||
"desc": "Multiple top level headers in the same document",
|
"desc": "Multiple top level headers in the same document",
|
||||||
"tags": [ "headers" ],
|
"tags": [ "headers" ],
|
||||||
"aliases": [ "single-h1" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD025(params, errors) {
|
"func": function MD025(params, errors) {
|
||||||
var level = params.options.level || 1;
|
var level = params.options.level || 1;
|
||||||
|
@ -668,10 +647,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD026",
|
"names": [ "MD026", "no-trailing-punctuation" ],
|
||||||
"desc": "Trailing punctuation in header",
|
"desc": "Trailing punctuation in header",
|
||||||
"tags": [ "headers" ],
|
"tags": [ "headers" ],
|
||||||
"aliases": [ "no-trailing-punctuation" ],
|
|
||||||
"regexp": trailingPunctuationRe,
|
"regexp": trailingPunctuationRe,
|
||||||
"func": function MD026(params, errors) {
|
"func": function MD026(params, errors) {
|
||||||
var punctuation = params.options.punctuation || ".,;:!?";
|
var punctuation = params.options.punctuation || ".,;:!?";
|
||||||
|
@ -687,10 +665,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD027",
|
"names": [ "MD027", "no-multiple-space-blockquote" ],
|
||||||
"desc": "Multiple spaces after blockquote symbol",
|
"desc": "Multiple spaces after blockquote symbol",
|
||||||
"tags": [ "blockquote", "whitespace", "indentation" ],
|
"tags": [ "blockquote", "whitespace", "indentation" ],
|
||||||
"aliases": [ "no-multiple-space-blockquote" ],
|
|
||||||
"regexp": spaceAfterBlockQuote,
|
"regexp": spaceAfterBlockQuote,
|
||||||
"func": function MD027(params, errors) {
|
"func": function MD027(params, errors) {
|
||||||
var blockquoteNesting = 0;
|
var blockquoteNesting = 0;
|
||||||
|
@ -723,10 +700,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD028",
|
"names": [ "MD028", "no-blanks-blockquote" ],
|
||||||
"desc": "Blank line inside blockquote",
|
"desc": "Blank line inside blockquote",
|
||||||
"tags": [ "blockquote", "whitespace" ],
|
"tags": [ "blockquote", "whitespace" ],
|
||||||
"aliases": [ "no-blanks-blockquote" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD028(params, errors) {
|
"func": function MD028(params, errors) {
|
||||||
var prevToken = {};
|
var prevToken = {};
|
||||||
|
@ -741,10 +717,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD029",
|
"names": [ "MD029", "ol-prefix" ],
|
||||||
"desc": "Ordered list item prefix",
|
"desc": "Ordered list item prefix",
|
||||||
"tags": [ "ol" ],
|
"tags": [ "ol" ],
|
||||||
"aliases": [ "ol-prefix" ],
|
|
||||||
"regexp": listItemMarkerRe,
|
"regexp": listItemMarkerRe,
|
||||||
"func": function MD029(params, errors) {
|
"func": function MD029(params, errors) {
|
||||||
var style = params.options.style || "one_or_ordered";
|
var style = params.options.style || "one_or_ordered";
|
||||||
|
@ -773,10 +748,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD030",
|
"names": [ "MD030", "list-marker-space" ],
|
||||||
"desc": "Spaces after list markers",
|
"desc": "Spaces after list markers",
|
||||||
"tags": [ "ol", "ul", "whitespace" ],
|
"tags": [ "ol", "ul", "whitespace" ],
|
||||||
"aliases": [ "list-marker-space" ],
|
|
||||||
"regexp": listItemMarkerRe,
|
"regexp": listItemMarkerRe,
|
||||||
"func": function MD030(params, errors) {
|
"func": function MD030(params, errors) {
|
||||||
var ulSingle = params.options.ul_single || 1;
|
var ulSingle = params.options.ul_single || 1;
|
||||||
|
@ -799,10 +773,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD031",
|
"names": [ "MD031", "blanks-around-fences" ],
|
||||||
"desc": "Fenced code blocks should be surrounded by blank lines",
|
"desc": "Fenced code blocks should be surrounded by blank lines",
|
||||||
"tags": [ "code", "blank_lines" ],
|
"tags": [ "code", "blank_lines" ],
|
||||||
"aliases": [ "blanks-around-fences" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD031(params, errors) {
|
"func": function MD031(params, errors) {
|
||||||
var lines = params.lines;
|
var lines = params.lines;
|
||||||
|
@ -816,10 +789,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD032",
|
"names": [ "MD032", "blanks-around-lists" ],
|
||||||
"desc": "Lists should be surrounded by blank lines",
|
"desc": "Lists should be surrounded by blank lines",
|
||||||
"tags": [ "bullet", "ul", "ol", "blank_lines" ],
|
"tags": [ "bullet", "ul", "ol", "blank_lines" ],
|
||||||
"aliases": [ "blanks-around-lists" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD032(params, errors) {
|
"func": function MD032(params, errors) {
|
||||||
var blankOrListRe = /^[\s>]*($|\s)/;
|
var blankOrListRe = /^[\s>]*($|\s)/;
|
||||||
|
@ -847,10 +819,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD033",
|
"names": [ "MD033", "no-inline-html" ],
|
||||||
"desc": "Inline HTML",
|
"desc": "Inline HTML",
|
||||||
"tags": [ "html" ],
|
"tags": [ "html" ],
|
||||||
"aliases": [ "no-inline-html" ],
|
|
||||||
"regexp": htmlRe,
|
"regexp": htmlRe,
|
||||||
"func": function MD033(params, errors) {
|
"func": function MD033(params, errors) {
|
||||||
var allowedElements = (params.options.allowed_elements || [])
|
var allowedElements = (params.options.allowed_elements || [])
|
||||||
|
@ -882,10 +853,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD034",
|
"names": [ "MD034", "no-bare-urls" ],
|
||||||
"desc": "Bare URL used",
|
"desc": "Bare URL used",
|
||||||
"tags": [ "links", "url" ],
|
"tags": [ "links", "url" ],
|
||||||
"aliases": [ "no-bare-urls" ],
|
|
||||||
"regexp": bareUrlRe,
|
"regexp": bareUrlRe,
|
||||||
"func": function MD034(params, errors) {
|
"func": function MD034(params, errors) {
|
||||||
filterTokens(params, "inline", function forToken(token) {
|
filterTokens(params, "inline", function forToken(token) {
|
||||||
|
@ -907,10 +877,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD035",
|
"names": [ "MD035", "hr-style" ],
|
||||||
"desc": "Horizontal rule style",
|
"desc": "Horizontal rule style",
|
||||||
"tags": [ "hr" ],
|
"tags": [ "hr" ],
|
||||||
"aliases": [ "hr-style" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD035(params, errors) {
|
"func": function MD035(params, errors) {
|
||||||
var style = params.options.style || "consistent";
|
var style = params.options.style || "consistent";
|
||||||
|
@ -925,10 +894,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD036",
|
"names": [ "MD036", "no-emphasis-as-header" ],
|
||||||
"desc": "Emphasis used instead of a header",
|
"desc": "Emphasis used instead of a header",
|
||||||
"tags": [ "headers", "emphasis" ],
|
"tags": [ "headers", "emphasis" ],
|
||||||
"aliases": [ "no-emphasis-as-header" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD036(params, errors) {
|
"func": function MD036(params, errors) {
|
||||||
var punctuation = params.options.punctuation || ".,;:!?";
|
var punctuation = params.options.punctuation || ".,;:!?";
|
||||||
|
@ -975,10 +943,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD037",
|
"names": [ "MD037", "no-space-in-emphasis" ],
|
||||||
"desc": "Spaces inside emphasis markers",
|
"desc": "Spaces inside emphasis markers",
|
||||||
"tags": [ "whitespace", "emphasis" ],
|
"tags": [ "whitespace", "emphasis" ],
|
||||||
"aliases": [ "no-space-in-emphasis" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD037(params, errors) {
|
"func": function MD037(params, errors) {
|
||||||
forEachInlineChild(params, "text", function forToken(token) {
|
forEachInlineChild(params, "text", function forToken(token) {
|
||||||
|
@ -1001,10 +968,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD038",
|
"names": [ "MD038", "no-space-in-code" ],
|
||||||
"desc": "Spaces inside code span elements",
|
"desc": "Spaces inside code span elements",
|
||||||
"tags": [ "whitespace", "code" ],
|
"tags": [ "whitespace", "code" ],
|
||||||
"aliases": [ "no-space-in-code" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD038(params, errors) {
|
"func": function MD038(params, errors) {
|
||||||
var inlineCodeSpansRe = /(?:^|[^\\])((`+)((?:.*?[^`])|)\2(?!`))/g;
|
var inlineCodeSpansRe = /(?:^|[^\\])((`+)((?:.*?[^`])|)\2(?!`))/g;
|
||||||
|
@ -1031,10 +997,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD039",
|
"names": [ "MD039", "no-space-in-links" ],
|
||||||
"desc": "Spaces inside link text",
|
"desc": "Spaces inside link text",
|
||||||
"tags": [ "whitespace", "links" ],
|
"tags": [ "whitespace", "links" ],
|
||||||
"aliases": [ "no-space-in-links" ],
|
|
||||||
"regexp": spaceInsideLinkRe,
|
"regexp": spaceInsideLinkRe,
|
||||||
"func": function MD039(params, errors) {
|
"func": function MD039(params, errors) {
|
||||||
filterTokens(params, "inline", function forToken(token) {
|
filterTokens(params, "inline", function forToken(token) {
|
||||||
|
@ -1061,10 +1026,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD040",
|
"names": [ "MD040", "fenced-code-language" ],
|
||||||
"desc": "Fenced code blocks should have a language specified",
|
"desc": "Fenced code blocks should have a language specified",
|
||||||
"tags": [ "code", "language" ],
|
"tags": [ "code", "language" ],
|
||||||
"aliases": [ "fenced-code-language" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD040(params, errors) {
|
"func": function MD040(params, errors) {
|
||||||
filterTokens(params, "fence", function forToken(token) {
|
filterTokens(params, "fence", function forToken(token) {
|
||||||
|
@ -1076,10 +1040,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD041",
|
"names": [ "MD041", "first-line-h1" ],
|
||||||
"desc": "First line in file should be a top level header",
|
"desc": "First line in file should be a top level header",
|
||||||
"tags": [ "headers" ],
|
"tags": [ "headers" ],
|
||||||
"aliases": [ "first-line-h1" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD041(params, errors) {
|
"func": function MD041(params, errors) {
|
||||||
var level = params.options.level || 1;
|
var level = params.options.level || 1;
|
||||||
|
@ -1109,10 +1072,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD042",
|
"names": [ "MD042", "no-empty-links" ],
|
||||||
"desc": "No empty links",
|
"desc": "No empty links",
|
||||||
"tags": [ "links" ],
|
"tags": [ "links" ],
|
||||||
"aliases": [ "no-empty-links" ],
|
|
||||||
"regexp": emptyLinkRe,
|
"regexp": emptyLinkRe,
|
||||||
"func": function MD042(params, errors) {
|
"func": function MD042(params, errors) {
|
||||||
filterTokens(params, "inline", function forToken(token) {
|
filterTokens(params, "inline", function forToken(token) {
|
||||||
|
@ -1142,10 +1104,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD043",
|
"names": [ "MD043", "required-headers" ],
|
||||||
"desc": "Required header structure",
|
"desc": "Required header structure",
|
||||||
"tags": [ "headers" ],
|
"tags": [ "headers" ],
|
||||||
"aliases": [ "required-headers" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD043(params, errors) {
|
"func": function MD043(params, errors) {
|
||||||
var requiredHeaders = params.options.headers;
|
var requiredHeaders = params.options.headers;
|
||||||
|
@ -1179,10 +1140,9 @@ module.exports = [
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "MD044",
|
"names": [ "MD044", "proper-names" ],
|
||||||
"desc": "Proper names should have the correct capitalization",
|
"desc": "Proper names should have the correct capitalization",
|
||||||
"tags": [ "spelling" ],
|
"tags": [ "spelling" ],
|
||||||
"aliases": [ "proper-names" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD044(params, errors) {
|
"func": function MD044(params, errors) {
|
||||||
var names = params.options.names || [];
|
var names = params.options.names || [];
|
||||||
|
@ -1221,10 +1181,9 @@ module.exports = [
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "MD045",
|
"names": [ "MD045", "no-alt-text" ],
|
||||||
"desc": "Images should have alternate text (alt text)",
|
"desc": "Images should have alternate text (alt text)",
|
||||||
"tags": [ "accessibility", "images" ],
|
"tags": [ "accessibility", "images" ],
|
||||||
"aliases": [ "no-alt-text" ],
|
|
||||||
"regexp": null,
|
"regexp": null,
|
||||||
"func": function MD045(params, errors) {
|
"func": function MD045(params, errors) {
|
||||||
forEachInlineChild(params, "image", function forToken(token) {
|
forEachInlineChild(params, "image", function forToken(token) {
|
||||||
|
|
|
@ -28,16 +28,16 @@ var tags = {};
|
||||||
rules.forEach(function forRule(rule) {
|
rules.forEach(function forRule(rule) {
|
||||||
rule.tags.forEach(function forTag(tag) {
|
rule.tags.forEach(function forTag(tag) {
|
||||||
var tagRules = tags[tag] || [];
|
var tagRules = tags[tag] || [];
|
||||||
tagRules.push(rule.name);
|
tagRules.push(rule.names[0]);
|
||||||
tags[tag] = tagRules;
|
tags[tag] = tagRules;
|
||||||
});
|
});
|
||||||
var scheme = {
|
var scheme = {
|
||||||
"description": rule.name + "/" + rule.aliases.join("/") + " - " + rule.desc,
|
"description": rule.names.join("/") + " - " + rule.desc,
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": true
|
"default": true
|
||||||
};
|
};
|
||||||
var custom = true;
|
var custom = true;
|
||||||
switch (rule.name) {
|
switch (rule.names[0]) {
|
||||||
case "MD002":
|
case "MD002":
|
||||||
case "MD025":
|
case "MD025":
|
||||||
scheme.properties = {
|
scheme.properties = {
|
||||||
|
@ -266,9 +266,8 @@ rules.forEach(function forRule(rule) {
|
||||||
scheme.type = [ "boolean", "object" ];
|
scheme.type = [ "boolean", "object" ];
|
||||||
scheme.additionalProperties = false;
|
scheme.additionalProperties = false;
|
||||||
}
|
}
|
||||||
schema.properties[rule.name] = scheme;
|
rule.names.forEach(function forName(name) {
|
||||||
rule.aliases.forEach(function forAlias(alias) {
|
schema.properties[name] = scheme;
|
||||||
schema.properties[alias] = scheme;
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"lineNumber": 3,
|
"lineNumber": 3,
|
||||||
"ruleName": "MD001",
|
"ruleNames": [ "MD001", "header-increment" ],
|
||||||
"ruleAlias": "header-increment",
|
|
||||||
"ruleDescription": "Header levels should only increment by one level at a time",
|
"ruleDescription": "Header levels should only increment by one level at a time",
|
||||||
"errorDetail": "Expected: h3; Actual: h4",
|
"errorDetail": "Expected: h3; Actual: h4",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -10,8 +9,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 1,
|
"lineNumber": 1,
|
||||||
"ruleName": "MD002",
|
"ruleNames": [ "MD002", "first-header-h1" ],
|
||||||
"ruleAlias": "first-header-h1",
|
|
||||||
"ruleDescription": "First header should be a top level header",
|
"ruleDescription": "First header should be a top level header",
|
||||||
"errorDetail": "Expected: h1; Actual: h2",
|
"errorDetail": "Expected: h1; Actual: h2",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -19,8 +17,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 5,
|
"lineNumber": 5,
|
||||||
"ruleName": "MD003",
|
"ruleNames": [ "MD003", "header-style" ],
|
||||||
"ruleAlias": "header-style",
|
|
||||||
"ruleDescription": "Header style",
|
"ruleDescription": "Header style",
|
||||||
"errorDetail": "Expected: atx; Actual: atx_closed",
|
"errorDetail": "Expected: atx; Actual: atx_closed",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -28,8 +25,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 10,
|
"lineNumber": 10,
|
||||||
"ruleName": "MD004",
|
"ruleNames": [ "MD004", "ul-style" ],
|
||||||
"ruleAlias": "ul-style",
|
|
||||||
"ruleDescription": "Unordered list style",
|
"ruleDescription": "Unordered list style",
|
||||||
"errorDetail": "Expected: asterisk; Actual: dash",
|
"errorDetail": "Expected: asterisk; Actual: dash",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -37,8 +33,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 8,
|
"lineNumber": 8,
|
||||||
"ruleName": "MD005",
|
"ruleNames": [ "MD005", "list-indent" ],
|
||||||
"ruleAlias": "list-indent",
|
|
||||||
"ruleDescription": "Inconsistent indentation for list items at the same level",
|
"ruleDescription": "Inconsistent indentation for list items at the same level",
|
||||||
"errorDetail": "Expected: 0; Actual: 1",
|
"errorDetail": "Expected: 0; Actual: 1",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -46,8 +41,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 12,
|
"lineNumber": 12,
|
||||||
"ruleName": "MD006",
|
"ruleNames": [ "MD006", "ul-start-left" ],
|
||||||
"ruleAlias": "ul-start-left",
|
|
||||||
"ruleDescription": "Consider starting bulleted lists at the beginning of the line",
|
"ruleDescription": "Consider starting bulleted lists at the beginning of the line",
|
||||||
"errorDetail": "Expected: 0; Actual: 1",
|
"errorDetail": "Expected: 0; Actual: 1",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -55,8 +49,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 12,
|
"lineNumber": 12,
|
||||||
"ruleName": "MD007",
|
"ruleNames": [ "MD007", "ul-indent" ],
|
||||||
"ruleAlias": "ul-indent",
|
|
||||||
"ruleDescription": "Unordered list indentation",
|
"ruleDescription": "Unordered list indentation",
|
||||||
"errorDetail": "Expected: 2; Actual: 1",
|
"errorDetail": "Expected: 2; Actual: 1",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -64,8 +57,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 15,
|
"lineNumber": 15,
|
||||||
"ruleName": "MD009",
|
"ruleNames": [ "MD009", "no-trailing-spaces" ],
|
||||||
"ruleAlias": "no-trailing-spaces",
|
|
||||||
"ruleDescription": "Trailing spaces",
|
"ruleDescription": "Trailing spaces",
|
||||||
"errorDetail": "Expected: 0; Actual: 1",
|
"errorDetail": "Expected: 0; Actual: 1",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -73,8 +65,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 17,
|
"lineNumber": 17,
|
||||||
"ruleName": "MD010",
|
"ruleNames": [ "MD010", "no-hard-tabs" ],
|
||||||
"ruleAlias": "no-hard-tabs",
|
|
||||||
"ruleDescription": "Hard tabs",
|
"ruleDescription": "Hard tabs",
|
||||||
"errorDetail": "Column: 5",
|
"errorDetail": "Column: 5",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"lineNumber": 5,
|
"lineNumber": 5,
|
||||||
"ruleName": "MD011",
|
"ruleNames": [ "MD011", "no-reversed-links" ],
|
||||||
"ruleAlias": "no-reversed-links",
|
|
||||||
"ruleDescription": "Reversed link syntax",
|
"ruleDescription": "Reversed link syntax",
|
||||||
"errorDetail": "(reversed)[link]",
|
"errorDetail": "(reversed)[link]",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -10,8 +9,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 7,
|
"lineNumber": 7,
|
||||||
"ruleName": "MD012",
|
"ruleNames": [ "MD012", "no-multiple-blanks" ],
|
||||||
"ruleAlias": "no-multiple-blanks",
|
|
||||||
"ruleDescription": "Multiple consecutive blank lines",
|
"ruleDescription": "Multiple consecutive blank lines",
|
||||||
"errorDetail": "Expected: 1; Actual: 2",
|
"errorDetail": "Expected: 1; Actual: 2",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -19,8 +17,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 8,
|
"lineNumber": 8,
|
||||||
"ruleName": "MD013",
|
"ruleNames": [ "MD013", "line-length" ],
|
||||||
"ruleAlias": "line-length",
|
|
||||||
"ruleDescription": "Line length",
|
"ruleDescription": "Line length",
|
||||||
"errorDetail": "Expected: 80; Actual: 99",
|
"errorDetail": "Expected: 80; Actual: 99",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -28,8 +25,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 10,
|
"lineNumber": 10,
|
||||||
"ruleName": "MD014",
|
"ruleNames": [ "MD014", "commands-show-output" ],
|
||||||
"ruleAlias": "commands-show-output",
|
|
||||||
"ruleDescription": "Dollar signs used before commands without showing output",
|
"ruleDescription": "Dollar signs used before commands without showing output",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "$ command with no output",
|
"errorContext": "$ command with no output",
|
||||||
|
@ -37,8 +33,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 12,
|
"lineNumber": 12,
|
||||||
"ruleName": "MD018",
|
"ruleNames": [ "MD018", "no-missing-space-atx" ],
|
||||||
"ruleAlias": "no-missing-space-atx",
|
|
||||||
"ruleDescription": "No space after hash on atx style header",
|
"ruleDescription": "No space after hash on atx style header",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "##No space A",
|
"errorContext": "##No space A",
|
||||||
|
@ -46,8 +41,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 14,
|
"lineNumber": 14,
|
||||||
"ruleName": "MD019",
|
"ruleNames": [ "MD019", "no-multiple-space-atx" ],
|
||||||
"ruleAlias": "no-multiple-space-atx",
|
|
||||||
"ruleDescription": "Multiple spaces after hash on atx style header",
|
"ruleDescription": "Multiple spaces after hash on atx style header",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "## Multiple spaces B",
|
"errorContext": "## Multiple spaces B",
|
||||||
|
@ -55,8 +49,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 16,
|
"lineNumber": 16,
|
||||||
"ruleName": "MD020",
|
"ruleNames": [ "MD020", "no-missing-space-closed-atx" ],
|
||||||
"ruleAlias": "no-missing-space-closed-atx",
|
|
||||||
"ruleDescription": "No space inside hashes on closed atx style header",
|
"ruleDescription": "No space inside hashes on closed atx style header",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "##No space C ##",
|
"errorContext": "##No space C ##",
|
||||||
|
@ -64,8 +57,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 18,
|
"lineNumber": 18,
|
||||||
"ruleName": "MD020",
|
"ruleNames": [ "MD020", "no-missing-space-closed-atx" ],
|
||||||
"ruleAlias": "no-missing-space-closed-atx",
|
|
||||||
"ruleDescription": "No space inside hashes on closed atx style header",
|
"ruleDescription": "No space inside hashes on closed atx style header",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "## No space D##",
|
"errorContext": "## No space D##",
|
||||||
|
@ -73,8 +65,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 20,
|
"lineNumber": 20,
|
||||||
"ruleName": "MD021",
|
"ruleNames": [ "MD021", "no-multiple-space-closed-atx" ],
|
||||||
"ruleAlias": "no-multiple-space-closed-atx",
|
|
||||||
"ruleDescription": "Multiple spaces inside hashes on closed atx style header",
|
"ruleDescription": "Multiple spaces inside hashes on closed atx style header",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "## Multiple spaces E ##",
|
"errorContext": "## Multiple spaces E ##",
|
||||||
|
@ -82,8 +73,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 22,
|
"lineNumber": 22,
|
||||||
"ruleName": "MD021",
|
"ruleNames": [ "MD021", "no-multiple-space-closed-atx" ],
|
||||||
"ruleAlias": "no-multiple-space-closed-atx",
|
|
||||||
"ruleDescription": "Multiple spaces inside hashes on closed atx style header",
|
"ruleDescription": "Multiple spaces inside hashes on closed atx style header",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "## Multiple spaces F ##",
|
"errorContext": "## Multiple spaces F ##",
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"lineNumber": 1,
|
"lineNumber": 1,
|
||||||
"ruleName": "MD022",
|
"ruleNames": [ "MD022", "blanks-around-headers" ],
|
||||||
"ruleAlias": "blanks-around-headers",
|
|
||||||
"ruleDescription": "Headers should be surrounded by blank lines",
|
"ruleDescription": "Headers should be surrounded by blank lines",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "# Heading",
|
"errorContext": "# Heading",
|
||||||
|
@ -10,8 +9,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 1,
|
"lineNumber": 1,
|
||||||
"ruleName": "MD023",
|
"ruleNames": [ "MD023", "header-start-left" ],
|
||||||
"ruleAlias": "header-start-left",
|
|
||||||
"ruleDescription": "Headers must start at the beginning of the line",
|
"ruleDescription": "Headers must start at the beginning of the line",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": " # Heading",
|
"errorContext": " # Heading",
|
||||||
|
@ -19,8 +17,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 4,
|
"lineNumber": 4,
|
||||||
"ruleName": "MD024",
|
"ruleNames": [ "MD024", "no-duplicate-header" ],
|
||||||
"ruleAlias": "no-duplicate-header",
|
|
||||||
"ruleDescription": "Multiple headers with the same content",
|
"ruleDescription": "Multiple headers with the same content",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "# Heading",
|
"errorContext": "# Heading",
|
||||||
|
@ -28,8 +25,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 4,
|
"lineNumber": 4,
|
||||||
"ruleName": "MD025",
|
"ruleNames": [ "MD025", "single-h1" ],
|
||||||
"ruleAlias": "single-h1",
|
|
||||||
"ruleDescription": "Multiple top level headers in the same document",
|
"ruleDescription": "Multiple top level headers in the same document",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "# Heading",
|
"errorContext": "# Heading",
|
||||||
|
@ -37,8 +33,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 6,
|
"lineNumber": 6,
|
||||||
"ruleName": "MD026",
|
"ruleNames": [ "MD026", "no-trailing-punctuation" ],
|
||||||
"ruleAlias": "no-trailing-punctuation",
|
|
||||||
"ruleDescription": "Trailing punctuation in header",
|
"ruleDescription": "Trailing punctuation in header",
|
||||||
"errorDetail": "Punctuation: '.'",
|
"errorDetail": "Punctuation: '.'",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -46,8 +41,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 8,
|
"lineNumber": 8,
|
||||||
"ruleName": "MD027",
|
"ruleNames": [ "MD027", "no-multiple-space-blockquote" ],
|
||||||
"ruleAlias": "no-multiple-space-blockquote",
|
|
||||||
"ruleDescription": "Multiple spaces after blockquote symbol",
|
"ruleDescription": "Multiple spaces after blockquote symbol",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "> Multiple spaces",
|
"errorContext": "> Multiple spaces",
|
||||||
|
@ -55,8 +49,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 15,
|
"lineNumber": 15,
|
||||||
"ruleName": "MD027",
|
"ruleNames": [ "MD027", "no-multiple-space-blockquote" ],
|
||||||
"ruleAlias": "no-multiple-space-blockquote",
|
|
||||||
"ruleDescription": "Multiple spaces after blockquote symbol",
|
"ruleDescription": "Multiple spaces after blockquote symbol",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "> > Multiple spaces, multiple...",
|
"errorContext": "> > Multiple spaces, multiple...",
|
||||||
|
@ -64,8 +57,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 17,
|
"lineNumber": 17,
|
||||||
"ruleName": "MD027",
|
"ruleNames": [ "MD027", "no-multiple-space-blockquote" ],
|
||||||
"ruleAlias": "no-multiple-space-blockquote",
|
|
||||||
"ruleDescription": "Multiple spaces after blockquote symbol",
|
"ruleDescription": "Multiple spaces after blockquote symbol",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "> > > Multiple spaces, multip...",
|
"errorContext": "> > > Multiple spaces, multip...",
|
||||||
|
@ -73,8 +65,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 19,
|
"lineNumber": 19,
|
||||||
"ruleName": "MD027",
|
"ruleNames": [ "MD027", "no-multiple-space-blockquote" ],
|
||||||
"ruleAlias": "no-multiple-space-blockquote",
|
|
||||||
"ruleDescription": "Multiple spaces after blockquote symbol",
|
"ruleDescription": "Multiple spaces after blockquote symbol",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "> > > Multiple spaces, multip...",
|
"errorContext": "> > > Multiple spaces, multip...",
|
||||||
|
@ -82,8 +73,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 9,
|
"lineNumber": 9,
|
||||||
"ruleName": "MD028",
|
"ruleNames": [ "MD028", "no-blanks-blockquote" ],
|
||||||
"ruleAlias": "no-blanks-blockquote",
|
|
||||||
"ruleDescription": "Blank line inside blockquote",
|
"ruleDescription": "Blank line inside blockquote",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -91,8 +81,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 13,
|
"lineNumber": 13,
|
||||||
"ruleName": "MD029",
|
"ruleNames": [ "MD029", "ol-prefix" ],
|
||||||
"ruleAlias": "ol-prefix",
|
|
||||||
"ruleDescription": "Ordered list item prefix",
|
"ruleDescription": "Ordered list item prefix",
|
||||||
"errorDetail": "Expected: 2; Actual: 3; Style: 1/2/3",
|
"errorDetail": "Expected: 2; Actual: 3; Style: 1/2/3",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -100,8 +89,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 13,
|
"lineNumber": 13,
|
||||||
"ruleName": "MD030",
|
"ruleNames": [ "MD030", "list-marker-space" ],
|
||||||
"ruleAlias": "list-marker-space",
|
|
||||||
"ruleDescription": "Spaces after list markers",
|
"ruleDescription": "Spaces after list markers",
|
||||||
"errorDetail": "Expected: 1; Actual: 2",
|
"errorDetail": "Expected: 1; Actual: 2",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"lineNumber": 3,
|
"lineNumber": 3,
|
||||||
"ruleName": "MD030",
|
"ruleNames": [ "MD030", "list-marker-space" ],
|
||||||
"ruleAlias": "list-marker-space",
|
|
||||||
"ruleDescription": "Spaces after list markers",
|
"ruleDescription": "Spaces after list markers",
|
||||||
"errorDetail": "Expected: 1; Actual: 0",
|
"errorDetail": "Expected: 1; Actual: 0",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -10,8 +9,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 5,
|
"lineNumber": 5,
|
||||||
"ruleName": "MD030",
|
"ruleNames": [ "MD030", "list-marker-space" ],
|
||||||
"ruleAlias": "list-marker-space",
|
|
||||||
"ruleDescription": "Spaces after list markers",
|
"ruleDescription": "Spaces after list markers",
|
||||||
"errorDetail": "Expected: 1; Actual: 0",
|
"errorDetail": "Expected: 1; Actual: 0",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -19,8 +17,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 11,
|
"lineNumber": 11,
|
||||||
"ruleName": "MD030",
|
"ruleNames": [ "MD030", "list-marker-space" ],
|
||||||
"ruleAlias": "list-marker-space",
|
|
||||||
"ruleDescription": "Spaces after list markers",
|
"ruleDescription": "Spaces after list markers",
|
||||||
"errorDetail": "Expected: 1; Actual: 2",
|
"errorDetail": "Expected: 1; Actual: 2",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -28,8 +25,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 13,
|
"lineNumber": 13,
|
||||||
"ruleName": "MD030",
|
"ruleNames": [ "MD030", "list-marker-space" ],
|
||||||
"ruleAlias": "list-marker-space",
|
|
||||||
"ruleDescription": "Spaces after list markers",
|
"ruleDescription": "Spaces after list markers",
|
||||||
"errorDetail": "Expected: 1; Actual: 2",
|
"errorDetail": "Expected: 1; Actual: 2",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"lineNumber": 3,
|
"lineNumber": 3,
|
||||||
"ruleName": "MD031",
|
"ruleNames": [ "MD031", "blanks-around-fences" ],
|
||||||
"ruleAlias": "blanks-around-fences",
|
|
||||||
"ruleDescription": "Fenced code blocks should be surrounded by blank lines",
|
"ruleDescription": "Fenced code blocks should be surrounded by blank lines",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "```",
|
"errorContext": "```",
|
||||||
|
@ -10,8 +9,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 4,
|
"lineNumber": 4,
|
||||||
"ruleName": "MD032",
|
"ruleNames": [ "MD032", "blanks-around-lists" ],
|
||||||
"ruleAlias": "blanks-around-lists",
|
|
||||||
"ruleDescription": "Lists should be surrounded by blank lines",
|
"ruleDescription": "Lists should be surrounded by blank lines",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "* List",
|
"errorContext": "* List",
|
||||||
|
@ -19,8 +17,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 6,
|
"lineNumber": 6,
|
||||||
"ruleName": "MD033",
|
"ruleNames": [ "MD033", "no-inline-html" ],
|
||||||
"ruleAlias": "no-inline-html",
|
|
||||||
"ruleDescription": "Inline HTML",
|
"ruleDescription": "Inline HTML",
|
||||||
"errorDetail": "Element: hr",
|
"errorDetail": "Element: hr",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -28,8 +25,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 8,
|
"lineNumber": 8,
|
||||||
"ruleName": "MD034",
|
"ruleNames": [ "MD034", "no-bare-urls" ],
|
||||||
"ruleAlias": "no-bare-urls",
|
|
||||||
"ruleDescription": "Bare URL used",
|
"ruleDescription": "Bare URL used",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "http://example.com",
|
"errorContext": "http://example.com",
|
||||||
|
@ -37,8 +33,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 11,
|
"lineNumber": 11,
|
||||||
"ruleName": "MD035",
|
"ruleNames": [ "MD035", "hr-style" ],
|
||||||
"ruleAlias": "hr-style",
|
|
||||||
"ruleDescription": "Horizontal rule style",
|
"ruleDescription": "Horizontal rule style",
|
||||||
"errorDetail": "Expected: ---; Actual: ***",
|
"errorDetail": "Expected: ---; Actual: ***",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -46,8 +41,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 13,
|
"lineNumber": 13,
|
||||||
"ruleName": "MD036",
|
"ruleNames": [ "MD036", "no-emphasis-as-header" ],
|
||||||
"ruleAlias": "no-emphasis-as-header",
|
|
||||||
"ruleDescription": "Emphasis used instead of a header",
|
"ruleDescription": "Emphasis used instead of a header",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "Emphasis",
|
"errorContext": "Emphasis",
|
||||||
|
@ -55,8 +49,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 15,
|
"lineNumber": 15,
|
||||||
"ruleName": "MD037",
|
"ruleNames": [ "MD037", "no-space-in-emphasis" ],
|
||||||
"ruleAlias": "no-space-in-emphasis",
|
|
||||||
"ruleDescription": "Spaces inside emphasis markers",
|
"ruleDescription": "Spaces inside emphasis markers",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "* inside *",
|
"errorContext": "* inside *",
|
||||||
|
@ -64,8 +57,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 31,
|
"lineNumber": 31,
|
||||||
"ruleName": "MD037",
|
"ruleNames": [ "MD037", "no-space-in-emphasis" ],
|
||||||
"ruleAlias": "no-space-in-emphasis",
|
|
||||||
"ruleDescription": "Spaces inside emphasis markers",
|
"ruleDescription": "Spaces inside emphasis markers",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "* some*",
|
"errorContext": "* some*",
|
||||||
|
@ -73,8 +65,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 32,
|
"lineNumber": 32,
|
||||||
"ruleName": "MD037",
|
"ruleNames": [ "MD037", "no-space-in-emphasis" ],
|
||||||
"ruleAlias": "no-space-in-emphasis",
|
|
||||||
"ruleDescription": "Spaces inside emphasis markers",
|
"ruleDescription": "Spaces inside emphasis markers",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "*some *",
|
"errorContext": "*some *",
|
||||||
|
@ -82,8 +73,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 33,
|
"lineNumber": 33,
|
||||||
"ruleName": "MD037",
|
"ruleNames": [ "MD037", "no-space-in-emphasis" ],
|
||||||
"ruleAlias": "no-space-in-emphasis",
|
|
||||||
"ruleDescription": "Spaces inside emphasis markers",
|
"ruleDescription": "Spaces inside emphasis markers",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "**some **",
|
"errorContext": "**some **",
|
||||||
|
@ -91,8 +81,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 34,
|
"lineNumber": 34,
|
||||||
"ruleName": "MD037",
|
"ruleNames": [ "MD037", "no-space-in-emphasis" ],
|
||||||
"ruleAlias": "no-space-in-emphasis",
|
|
||||||
"ruleDescription": "Spaces inside emphasis markers",
|
"ruleDescription": "Spaces inside emphasis markers",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "_ some_",
|
"errorContext": "_ some_",
|
||||||
|
@ -100,8 +89,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 35,
|
"lineNumber": 35,
|
||||||
"ruleName": "MD037",
|
"ruleNames": [ "MD037", "no-space-in-emphasis" ],
|
||||||
"ruleAlias": "no-space-in-emphasis",
|
|
||||||
"ruleDescription": "Spaces inside emphasis markers",
|
"ruleDescription": "Spaces inside emphasis markers",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "__ some __",
|
"errorContext": "__ some __",
|
||||||
|
@ -109,8 +97,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 17,
|
"lineNumber": 17,
|
||||||
"ruleName": "MD038",
|
"ruleNames": [ "MD038", "no-space-in-code" ],
|
||||||
"ruleAlias": "no-space-in-code",
|
|
||||||
"ruleDescription": "Spaces inside code span elements",
|
"ruleDescription": "Spaces inside code span elements",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "` inside `",
|
"errorContext": "` inside `",
|
||||||
|
@ -118,8 +105,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 24,
|
"lineNumber": 24,
|
||||||
"ruleName": "MD038",
|
"ruleNames": [ "MD038", "no-space-in-code" ],
|
||||||
"ruleAlias": "no-space-in-code",
|
|
||||||
"ruleDescription": "Spaces inside code span elements",
|
"ruleDescription": "Spaces inside code span elements",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "`` inside ``",
|
"errorContext": "`` inside ``",
|
||||||
|
@ -127,8 +113,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 25,
|
"lineNumber": 25,
|
||||||
"ruleName": "MD038",
|
"ruleNames": [ "MD038", "no-space-in-code" ],
|
||||||
"ruleAlias": "no-space-in-code",
|
|
||||||
"ruleDescription": "Spaces inside code span elements",
|
"ruleDescription": "Spaces inside code span elements",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "` code`",
|
"errorContext": "` code`",
|
||||||
|
@ -136,8 +121,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 26,
|
"lineNumber": 26,
|
||||||
"ruleName": "MD038",
|
"ruleNames": [ "MD038", "no-space-in-code" ],
|
||||||
"ruleAlias": "no-space-in-code",
|
|
||||||
"ruleDescription": "Spaces inside code span elements",
|
"ruleDescription": "Spaces inside code span elements",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "` elements`",
|
"errorContext": "` elements`",
|
||||||
|
@ -145,8 +129,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 27,
|
"lineNumber": 27,
|
||||||
"ruleName": "MD038",
|
"ruleNames": [ "MD038", "no-space-in-code" ],
|
||||||
"ruleAlias": "no-space-in-code",
|
|
||||||
"ruleDescription": "Spaces inside code span elements",
|
"ruleDescription": "Spaces inside code span elements",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "`` code``",
|
"errorContext": "`` code``",
|
||||||
|
@ -154,8 +137,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 28,
|
"lineNumber": 28,
|
||||||
"ruleName": "MD038",
|
"ruleNames": [ "MD038", "no-space-in-code" ],
|
||||||
"ruleAlias": "no-space-in-code",
|
|
||||||
"ruleDescription": "Spaces inside code span elements",
|
"ruleDescription": "Spaces inside code span elements",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "`` ` embedded backtick``",
|
"errorContext": "`` ` embedded backtick``",
|
||||||
|
@ -163,8 +145,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 29,
|
"lineNumber": 29,
|
||||||
"ruleName": "MD038",
|
"ruleNames": [ "MD038", "no-space-in-code" ],
|
||||||
"ruleAlias": "no-space-in-code",
|
|
||||||
"ruleDescription": "Spaces inside code span elements",
|
"ruleDescription": "Spaces inside code span elements",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "``embedded backtick` ``",
|
"errorContext": "``embedded backtick` ``",
|
||||||
|
@ -172,8 +153,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 19,
|
"lineNumber": 19,
|
||||||
"ruleName": "MD039",
|
"ruleNames": [ "MD039", "no-space-in-links" ],
|
||||||
"ruleAlias": "no-space-in-links",
|
|
||||||
"ruleDescription": "Spaces inside link text",
|
"ruleDescription": "Spaces inside link text",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "[ inside ]",
|
"errorContext": "[ inside ]",
|
||||||
|
@ -181,8 +161,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 21,
|
"lineNumber": 21,
|
||||||
"ruleName": "MD040",
|
"ruleNames": [ "MD040", "fenced-code-language" ],
|
||||||
"ruleAlias": "fenced-code-language",
|
|
||||||
"ruleDescription": "Fenced code blocks should have a language specified",
|
"ruleDescription": "Fenced code blocks should have a language specified",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "```",
|
"errorContext": "```",
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"lineNumber": 1,
|
"lineNumber": 1,
|
||||||
"ruleName": "MD041",
|
"ruleNames": [ "MD041", "first-line-h1" ],
|
||||||
"ruleAlias": "first-line-h1",
|
|
||||||
"ruleDescription": "First line in file should be a top level header",
|
"ruleDescription": "First line in file should be a top level header",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "Not a header",
|
"errorContext": "Not a header",
|
||||||
|
@ -10,8 +9,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 3,
|
"lineNumber": 3,
|
||||||
"ruleName": "MD042",
|
"ruleNames": [ "MD042", "no-empty-links" ],
|
||||||
"ruleAlias": "no-empty-links",
|
|
||||||
"ruleDescription": "No empty links",
|
"ruleDescription": "No empty links",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "[empty]()",
|
"errorContext": "[empty]()",
|
||||||
|
@ -19,8 +17,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 5,
|
"lineNumber": 5,
|
||||||
"ruleName": "MD042",
|
"ruleNames": [ "MD042", "no-empty-links" ],
|
||||||
"ruleAlias": "no-empty-links",
|
|
||||||
"ruleDescription": "No empty links",
|
"ruleDescription": "No empty links",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "[empty]()",
|
"errorContext": "[empty]()",
|
||||||
|
@ -28,8 +25,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 7,
|
"lineNumber": 7,
|
||||||
"ruleName": "MD042",
|
"ruleNames": [ "MD042", "no-empty-links" ],
|
||||||
"ruleAlias": "no-empty-links",
|
|
||||||
"ruleDescription": "No empty links",
|
"ruleDescription": "No empty links",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "[empty]()",
|
"errorContext": "[empty]()",
|
||||||
|
@ -37,8 +33,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 17,
|
"lineNumber": 17,
|
||||||
"ruleName": "MD042",
|
"ruleNames": [ "MD042", "no-empty-links" ],
|
||||||
"ruleAlias": "no-empty-links",
|
|
||||||
"ruleDescription": "No empty links",
|
"ruleDescription": "No empty links",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "[empty one]()",
|
"errorContext": "[empty one]()",
|
||||||
|
@ -46,8 +41,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 20,
|
"lineNumber": 20,
|
||||||
"ruleName": "MD043",
|
"ruleNames": [ "MD043", "required-headers" ],
|
||||||
"ruleAlias": "required-headers",
|
|
||||||
"ruleDescription": "Required header structure",
|
"ruleDescription": "Required header structure",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "# Header",
|
"errorContext": "# Header",
|
||||||
|
@ -55,8 +49,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 9,
|
"lineNumber": 9,
|
||||||
"ruleName": "MD044",
|
"ruleNames": [ "MD044", "proper-names" ],
|
||||||
"ruleAlias": "proper-names",
|
|
||||||
"ruleDescription": "Proper names should have the correct capitalization",
|
"ruleDescription": "Proper names should have the correct capitalization",
|
||||||
"errorDetail": "Expected: markdownlint; Actual: MARKDOWNLINT",
|
"errorDetail": "Expected: markdownlint; Actual: MARKDOWNLINT",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -64,8 +57,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 12,
|
"lineNumber": 12,
|
||||||
"ruleName": "MD044",
|
"ruleNames": [ "MD044", "proper-names" ],
|
||||||
"ruleAlias": "proper-names",
|
|
||||||
"ruleDescription": "Proper names should have the correct capitalization",
|
"ruleDescription": "Proper names should have the correct capitalization",
|
||||||
"errorDetail": "Expected: markdownlint; Actual: Markdownlint",
|
"errorDetail": "Expected: markdownlint; Actual: Markdownlint",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -73,8 +65,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 15,
|
"lineNumber": 15,
|
||||||
"ruleName": "MD044",
|
"ruleNames": [ "MD044", "proper-names" ],
|
||||||
"ruleAlias": "proper-names",
|
|
||||||
"ruleDescription": "Proper names should have the correct capitalization",
|
"ruleDescription": "Proper names should have the correct capitalization",
|
||||||
"errorDetail": "Expected: markdownlint; Actual: MarkDownLint",
|
"errorDetail": "Expected: markdownlint; Actual: MarkDownLint",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -82,8 +73,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 19,
|
"lineNumber": 19,
|
||||||
"ruleName": "MD045",
|
"ruleNames": [ "MD045", "no-alt-text" ],
|
||||||
"ruleAlias": "no-alt-text",
|
|
||||||
"ruleDescription": "Images should have alternate text (alt text)",
|
"ruleDescription": "Images should have alternate text (alt text)",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"lineNumber": 6,
|
"lineNumber": 6,
|
||||||
"ruleName": "MD009",
|
"ruleNames": [ "MD009", "no-trailing-spaces" ],
|
||||||
"ruleAlias": "no-trailing-spaces",
|
|
||||||
"ruleDescription": "Trailing spaces",
|
"ruleDescription": "Trailing spaces",
|
||||||
"errorDetail": "Expected: 0; Actual: 1",
|
"errorDetail": "Expected: 0; Actual: 1",
|
||||||
"errorContext": null,
|
"errorContext": null,
|
||||||
|
@ -10,8 +9,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lineNumber": 4,
|
"lineNumber": 4,
|
||||||
"ruleName": "MD041",
|
"ruleNames": [ "MD041", "first-line-h1" ],
|
||||||
"ruleAlias": "first-line-h1",
|
|
||||||
"ruleDescription": "First line in file should be a top level header",
|
"ruleDescription": "First line in file should be a top level header",
|
||||||
"errorDetail": null,
|
"errorDetail": null,
|
||||||
"errorContext": "Text",
|
"errorContext": "Text",
|
||||||
|
|
|
@ -32,7 +32,7 @@ function createTestForFile(file) {
|
||||||
return Q.nfcall(markdownlint, {
|
return Q.nfcall(markdownlint, {
|
||||||
"files": [ file ],
|
"files": [ file ],
|
||||||
"config": mergedConfig,
|
"config": mergedConfig,
|
||||||
"resultVersion": detailedResults ? 1 : 0
|
"resultVersion": detailedResults ? 2 : 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
var expectedPromise = detailedResults ?
|
var expectedPromise = detailedResults ?
|
||||||
|
@ -211,7 +211,8 @@ module.exports.resultFormattingV1 = function resultFormattingV1(test) {
|
||||||
"./test/atx_header_spacing.md",
|
"./test/atx_header_spacing.md",
|
||||||
"./test/first_header_bad_atx.md"
|
"./test/first_header_bad_atx.md"
|
||||||
],
|
],
|
||||||
"config": defaultConfig
|
"config": defaultConfig,
|
||||||
|
"resultVersion": 1
|
||||||
};
|
};
|
||||||
markdownlint(options, function callback(err, actualResult) {
|
markdownlint(options, function callback(err, actualResult) {
|
||||||
test.ifError(err);
|
test.ifError(err);
|
||||||
|
@ -292,10 +293,11 @@ module.exports.resultFormattingV1 = function resultFormattingV1(test) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.resultFormattingV1BadRegExp = function resultFormattingV1(test) {
|
module.exports.resultFormattingV1BadRegExp =
|
||||||
|
function resultFormattingV1BadRegExp(test) {
|
||||||
test.expect(3);
|
test.expect(3);
|
||||||
var md010 = rules[8];
|
var md010 = rules[8];
|
||||||
test.equal(md010.name, "MD010", "Wrong rule.");
|
test.equal(md010.names[0], "MD010", "Wrong rule.");
|
||||||
var md010RegExp = md010.regexp;
|
var md010RegExp = md010.regexp;
|
||||||
md010.regexp = /X/;
|
md010.regexp = /X/;
|
||||||
var options = {
|
var options = {
|
||||||
|
@ -324,6 +326,123 @@ module.exports.resultFormattingV1BadRegExp = function resultFormattingV1(test) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module.exports.resultFormattingV2 = function resultFormattingV2(test) {
|
||||||
|
test.expect(3);
|
||||||
|
var options = {
|
||||||
|
"strings": {
|
||||||
|
"truncate":
|
||||||
|
"# Multiple spaces inside hashes on closed atx style header #"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"./test/atx_header_spacing.md",
|
||||||
|
"./test/first_header_bad_atx.md"
|
||||||
|
],
|
||||||
|
"config": defaultConfig
|
||||||
|
};
|
||||||
|
markdownlint(options, function callback(err, actualResult) {
|
||||||
|
test.ifError(err);
|
||||||
|
var expectedResult = {
|
||||||
|
"truncate": [
|
||||||
|
{ "lineNumber": 1,
|
||||||
|
"ruleNames": [ "MD021", "no-multiple-space-closed-atx" ],
|
||||||
|
"ruleDescription":
|
||||||
|
"Multiple spaces inside hashes on closed atx style header",
|
||||||
|
"errorDetail": null,
|
||||||
|
"errorContext": "# Multiple spa...style header #",
|
||||||
|
"errorRange": [ 1, 4 ] }
|
||||||
|
],
|
||||||
|
"./test/atx_header_spacing.md": [
|
||||||
|
{ "lineNumber": 3,
|
||||||
|
"ruleNames": [ "MD002", "first-header-h1" ],
|
||||||
|
"ruleDescription": "First header should be a top level header",
|
||||||
|
"errorDetail": "Expected: h1; Actual: h2",
|
||||||
|
"errorContext": null,
|
||||||
|
"errorRange": null },
|
||||||
|
{ "lineNumber": 1,
|
||||||
|
"ruleNames": [ "MD018", "no-missing-space-atx" ],
|
||||||
|
"ruleDescription": "No space after hash on atx style header",
|
||||||
|
"errorDetail": null,
|
||||||
|
"errorContext": "#Header 1 {MD018}",
|
||||||
|
"errorRange": [ 1, 2 ] },
|
||||||
|
{ "lineNumber": 3,
|
||||||
|
"ruleNames": [ "MD019", "no-multiple-space-atx" ],
|
||||||
|
"ruleDescription": "Multiple spaces after hash on atx style header",
|
||||||
|
"errorDetail": null,
|
||||||
|
"errorContext": "## Header 2 {MD019}",
|
||||||
|
"errorRange": [ 1, 5 ] },
|
||||||
|
{ "lineNumber": 5,
|
||||||
|
"ruleNames": [ "MD019", "no-multiple-space-atx" ],
|
||||||
|
"ruleDescription": "Multiple spaces after hash on atx style header",
|
||||||
|
"errorDetail": null,
|
||||||
|
"errorContext": "## Header 3 {MD019}",
|
||||||
|
"errorRange": [ 1, 6 ] }
|
||||||
|
],
|
||||||
|
"./test/first_header_bad_atx.md": [
|
||||||
|
{ "lineNumber": 1,
|
||||||
|
"ruleNames": [ "MD002", "first-header-h1" ],
|
||||||
|
"ruleDescription": "First header should be a top level header",
|
||||||
|
"errorDetail": "Expected: h1; Actual: h2",
|
||||||
|
"errorContext": null,
|
||||||
|
"errorRange": null }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
test.deepEqual(actualResult, expectedResult, "Undetected issues.");
|
||||||
|
var actualMessage = actualResult.toString();
|
||||||
|
var expectedMessage =
|
||||||
|
"truncate: 1: MD021/no-multiple-space-closed-atx" +
|
||||||
|
" Multiple spaces inside hashes on closed atx style header" +
|
||||||
|
" [Context: \"# Multiple spa...style header #\"]\n" +
|
||||||
|
"./test/atx_header_spacing.md: 3: MD002/first-header-h1" +
|
||||||
|
" First header should be a top level header" +
|
||||||
|
" [Expected: h1; Actual: h2]\n" +
|
||||||
|
"./test/atx_header_spacing.md: 1: MD018/no-missing-space-atx" +
|
||||||
|
" No space after hash on atx style header" +
|
||||||
|
" [Context: \"#Header 1 {MD018}\"]\n" +
|
||||||
|
"./test/atx_header_spacing.md: 3: MD019/no-multiple-space-atx" +
|
||||||
|
" Multiple spaces after hash on atx style header" +
|
||||||
|
" [Context: \"## Header 2 {MD019}\"]\n" +
|
||||||
|
"./test/atx_header_spacing.md: 5: MD019/no-multiple-space-atx" +
|
||||||
|
" Multiple spaces after hash on atx style header" +
|
||||||
|
" [Context: \"## Header 3 {MD019}\"]\n" +
|
||||||
|
"./test/first_header_bad_atx.md: 1: MD002/first-header-h1" +
|
||||||
|
" First header should be a top level header" +
|
||||||
|
" [Expected: h1; Actual: h2]";
|
||||||
|
test.equal(actualMessage, expectedMessage, "Incorrect message.");
|
||||||
|
test.done();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports.resultFormattingV2BadRegExp =
|
||||||
|
function resultFormattingV2BadRegExp(test) {
|
||||||
|
test.expect(3);
|
||||||
|
var md010 = rules[8];
|
||||||
|
test.equal(md010.names[0], "MD010", "Wrong rule.");
|
||||||
|
var md010RegExp = md010.regexp;
|
||||||
|
md010.regexp = /X/;
|
||||||
|
var options = {
|
||||||
|
"strings": {
|
||||||
|
"tab": "\t."
|
||||||
|
},
|
||||||
|
"config": defaultConfig
|
||||||
|
};
|
||||||
|
markdownlint(options, function callback(err, actualResult) {
|
||||||
|
test.ifError(err);
|
||||||
|
var expectedResult = {
|
||||||
|
"tab": [
|
||||||
|
{ "lineNumber": 1,
|
||||||
|
"ruleNames": [ "MD010", "no-hard-tabs" ],
|
||||||
|
"ruleDescription": "Hard tabs",
|
||||||
|
"errorDetail": "Column: 1",
|
||||||
|
"errorContext": null,
|
||||||
|
"errorRange": null }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
test.deepEqual(actualResult, expectedResult, "Undetected issues.");
|
||||||
|
md010.regexp = md010RegExp;
|
||||||
|
test.done();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
module.exports.stringInputLineEndings = function stringInputLineEndings(test) {
|
module.exports.stringInputLineEndings = function stringInputLineEndings(test) {
|
||||||
test.expect(2);
|
test.expect(2);
|
||||||
var options = {
|
var options = {
|
||||||
|
@ -969,23 +1088,24 @@ module.exports.missingStringValue = function missingStringValue(test) {
|
||||||
module.exports.ruleNamesUpperCase = function ruleNamesUpperCase(test) {
|
module.exports.ruleNamesUpperCase = function ruleNamesUpperCase(test) {
|
||||||
test.expect(41);
|
test.expect(41);
|
||||||
rules.forEach(function forRule(rule) {
|
rules.forEach(function forRule(rule) {
|
||||||
test.equal(rule.name, rule.name.toUpperCase(), "Rule name not upper-case.");
|
var ruleName = rule.names[0];
|
||||||
|
test.equal(ruleName, ruleName.toUpperCase(), "Rule name not upper-case.");
|
||||||
});
|
});
|
||||||
test.done();
|
test.done();
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.uniqueAliases = function uniqueAliases(test) {
|
module.exports.uniqueNames = function uniqueNames(test) {
|
||||||
test.expect(82);
|
test.expect(164);
|
||||||
var tags = [];
|
var tags = [];
|
||||||
rules.forEach(function forRule(rule) {
|
rules.forEach(function forRule(rule) {
|
||||||
Array.prototype.push.apply(tags, rule.tags);
|
Array.prototype.push.apply(tags, rule.tags);
|
||||||
});
|
});
|
||||||
var aliases = [];
|
var names = [];
|
||||||
rules.forEach(function forRule(rule) {
|
rules.forEach(function forRule(rule) {
|
||||||
rule.aliases.forEach(function forAlias(alias) {
|
rule.names.forEach(function forAlias(name) {
|
||||||
test.ok(tags.indexOf(alias) === -1, "Alias not unique in tags.");
|
test.ok(tags.indexOf(name) === -1, "Name not unique in tags.");
|
||||||
test.ok(aliases.indexOf(alias) === -1, "Alias not unique in aliases.");
|
test.ok(names.indexOf(name) === -1, "Name not unique in names.");
|
||||||
aliases.push(alias);
|
names.push(name);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
test.done();
|
test.done();
|
||||||
|
@ -997,7 +1117,7 @@ module.exports.readme = function readme(test) {
|
||||||
rules.forEach(function forRule(rule) {
|
rules.forEach(function forRule(rule) {
|
||||||
rule.tags.forEach(function forTag(tag) {
|
rule.tags.forEach(function forTag(tag) {
|
||||||
var tagRules = tagToRules[tag] || [];
|
var tagRules = tagToRules[tag] || [];
|
||||||
tagRules.push(rule.name);
|
tagRules.push(rule.names[0]);
|
||||||
tagToRules[tag] = tagRules;
|
tagToRules[tag] = tagRules;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1030,9 +1150,11 @@ module.exports.readme = function readme(test) {
|
||||||
test.ok(rule,
|
test.ok(rule,
|
||||||
"Missing rule implementation for " + token.content + ".");
|
"Missing rule implementation for " + token.content + ".");
|
||||||
if (rule) {
|
if (rule) {
|
||||||
var expected = "**[" + rule.name + "](doc/Rules.md#" +
|
var ruleName = rule.names[0];
|
||||||
rule.name.toLowerCase() + ")** *" +
|
var ruleAliases = rule.names.slice(1);
|
||||||
rule.aliases.join(", ") + "* - " + rule.desc;
|
var expected = "**[" + ruleName + "](doc/Rules.md#" +
|
||||||
|
ruleName.toLowerCase() + ")** *" +
|
||||||
|
ruleAliases.join(", ") + "* - " + rule.desc;
|
||||||
test.equal(token.content, expected, "Rule mismatch.");
|
test.equal(token.content, expected, "Rule mismatch.");
|
||||||
}
|
}
|
||||||
} else if (inTags) {
|
} else if (inTags) {
|
||||||
|
@ -1046,7 +1168,8 @@ module.exports.readme = function readme(test) {
|
||||||
});
|
});
|
||||||
var ruleLeft = rulesLeft.shift();
|
var ruleLeft = rulesLeft.shift();
|
||||||
test.ok(!ruleLeft,
|
test.ok(!ruleLeft,
|
||||||
"Missing rule documentation for " + (ruleLeft || {}).name + ".");
|
"Missing rule documentation for " +
|
||||||
|
(ruleLeft || "[NO RULE]").toString() + ".");
|
||||||
var tagLeft = Object.keys(tagToRules).shift();
|
var tagLeft = Object.keys(tagToRules).shift();
|
||||||
test.ok(!tagLeft, "Undocumented tag " + tagLeft + ".");
|
test.ok(!tagLeft, "Undocumented tag " + tagLeft + ".");
|
||||||
test.done();
|
test.done();
|
||||||
|
@ -1065,13 +1188,14 @@ module.exports.doc = function doc(test) {
|
||||||
var ruleHasAliases = true;
|
var ruleHasAliases = true;
|
||||||
var ruleUsesParams = null;
|
var ruleUsesParams = null;
|
||||||
var tagAliasParameterRe = /, |: | /;
|
var tagAliasParameterRe = /, |: | /;
|
||||||
function testTagsAliasesParams() {
|
function testTagsAliasesParams(r) {
|
||||||
|
r = r || "[NO RULE]";
|
||||||
test.ok(ruleHasTags,
|
test.ok(ruleHasTags,
|
||||||
"Missing tags for rule " + (rule || {}).name + ".");
|
"Missing tags for rule " + r.toString() + ".");
|
||||||
test.ok(ruleHasAliases,
|
test.ok(ruleHasAliases,
|
||||||
"Missing aliases for rule " + (rule || {}).name + ".");
|
"Missing aliases for rule " + r.toString() + ".");
|
||||||
test.ok(!ruleUsesParams,
|
test.ok(!ruleUsesParams,
|
||||||
"Missing parameters for rule " + (rule || {}).name + ".");
|
"Missing parameters for rule " + r.toString() + ".");
|
||||||
}
|
}
|
||||||
md.parse(contents, {}).forEach(function forToken(token) {
|
md.parse(contents, {}).forEach(function forToken(token) {
|
||||||
if ((token.type === "heading_open") && (token.tag === "h2")) {
|
if ((token.type === "heading_open") && (token.tag === "h2")) {
|
||||||
|
@ -1080,13 +1204,13 @@ module.exports.doc = function doc(test) {
|
||||||
inHeading = false;
|
inHeading = false;
|
||||||
} else if (token.type === "inline") {
|
} else if (token.type === "inline") {
|
||||||
if (inHeading) {
|
if (inHeading) {
|
||||||
testTagsAliasesParams();
|
testTagsAliasesParams(rule);
|
||||||
rule = rulesLeft.shift();
|
rule = rulesLeft.shift();
|
||||||
ruleHasTags = ruleHasAliases = false;
|
ruleHasTags = ruleHasAliases = false;
|
||||||
test.ok(rule,
|
test.ok(rule,
|
||||||
"Missing rule implementation for " + token.content + ".");
|
"Missing rule implementation for " + token.content + ".");
|
||||||
if (rule) {
|
if (rule) {
|
||||||
test.equal(token.content, rule.name + " - " + rule.desc,
|
test.equal(token.content, rule.names[0] + " - " + rule.desc,
|
||||||
"Rule mismatch.");
|
"Rule mismatch.");
|
||||||
ruleUsesParams = rule.func.toString()
|
ruleUsesParams = rule.func.toString()
|
||||||
.match(/params\.options\.[_a-z]*/gi);
|
.match(/params\.options\.[_a-z]*/gi);
|
||||||
|
@ -1098,11 +1222,12 @@ module.exports.doc = function doc(test) {
|
||||||
}
|
}
|
||||||
} else if (/^Tags: /.test(token.content) && rule) {
|
} else if (/^Tags: /.test(token.content) && rule) {
|
||||||
test.deepEqual(token.content.split(tagAliasParameterRe).slice(1),
|
test.deepEqual(token.content.split(tagAliasParameterRe).slice(1),
|
||||||
rule.tags, "Tag mismatch for rule " + rule.name + ".");
|
rule.tags, "Tag mismatch for rule " + rule.toString() + ".");
|
||||||
ruleHasTags = true;
|
ruleHasTags = true;
|
||||||
} else if (/^Aliases: /.test(token.content) && rule) {
|
} else if (/^Aliases: /.test(token.content) && rule) {
|
||||||
test.deepEqual(token.content.split(tagAliasParameterRe).slice(1),
|
test.deepEqual(token.content.split(tagAliasParameterRe).slice(1),
|
||||||
rule.aliases, "Alias mismatch for rule " + rule.name + ".");
|
rule.names.slice(1),
|
||||||
|
"Alias mismatch for rule " + rule.toString() + ".");
|
||||||
ruleHasAliases = true;
|
ruleHasAliases = true;
|
||||||
} else if (/^Parameters: /.test(token.content) && rule) {
|
} else if (/^Parameters: /.test(token.content) && rule) {
|
||||||
var inDetails = false;
|
var inDetails = false;
|
||||||
|
@ -1113,16 +1238,17 @@ module.exports.doc = function doc(test) {
|
||||||
return !inDetails;
|
return !inDetails;
|
||||||
});
|
});
|
||||||
test.deepEqual(parameters, ruleUsesParams,
|
test.deepEqual(parameters, ruleUsesParams,
|
||||||
"Missing parameter for rule " + rule.name);
|
"Missing parameter for rule " + rule.toString());
|
||||||
ruleUsesParams = null;
|
ruleUsesParams = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
var ruleLeft = rulesLeft.shift();
|
var ruleLeft = rulesLeft.shift();
|
||||||
test.ok(!ruleLeft,
|
test.ok(!ruleLeft,
|
||||||
"Missing rule documentation for " + (ruleLeft || {}).name + ".");
|
"Missing rule documentation for " +
|
||||||
|
(ruleLeft || "[NO RULE]").toString() + ".");
|
||||||
if (rule) {
|
if (rule) {
|
||||||
testTagsAliasesParams();
|
testTagsAliasesParams(rule);
|
||||||
}
|
}
|
||||||
test.done();
|
test.done();
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue