Allow empty string for detail/context in onError callback from rules.

This commit is contained in:
David Anson 2018-03-17 22:11:01 -07:00
parent b3f0d76a67
commit f80b61d8b7
3 changed files with 65 additions and 15 deletions

View file

@ -326,16 +326,12 @@ function lintContent(
!shared.isNumber(errorInfo.lineNumber)) {
throwError("lineNumber");
}
if ((errorInfo.detail !== null) &&
(errorInfo.detail !== undefined) &&
(!shared.isString(errorInfo.detail) ||
shared.isEmptyString(errorInfo.detail))) {
if (errorInfo.detail &&
!shared.isString(errorInfo.detail)) {
throwError("detail");
}
if ((errorInfo.context !== null) &&
(errorInfo.context !== undefined) &&
(!shared.isString(errorInfo.context) ||
shared.isEmptyString(errorInfo.context))) {
if (errorInfo.context &&
!shared.isString(errorInfo.context)) {
throwError("context");
}
if (errorInfo.range &&

View file

@ -26,4 +26,11 @@ $ code
text
{MD014:3} {MD014:9} {MD014:15} {MD014:22}
```sh
$ npm install --save multimatch
```
text
{MD014:3} {MD014:9} {MD014:15} {MD014:22} {MD014:29}

View file

@ -1998,7 +1998,9 @@ function customRulesThrowForString(test) {
}
}
],
"strings": [ "String" ]
"strings": {
"string": "String"
}
}, function callback(err, result) {
test.ok(err, "Did not get an error for function thrown.");
test.ok(err instanceof Error, "Error not instance of Error.");
@ -2022,7 +2024,9 @@ module.exports.customRulesOnErrorNull = function customRulesOnErrorNull(test) {
}
}
],
"strings": [ "String" ]
"strings": {
"string": "String"
}
};
test.throws(function badErrorCall() {
markdownlint.sync(options);
@ -2038,11 +2042,11 @@ module.exports.customRulesOnErrorNull = function customRulesOnErrorNull(test) {
};
module.exports.customRulesOnErrorBad = function customRulesOnErrorBad(test) {
test.expect(52);
test.expect(44);
[
[ "lineNumber", [ null, "string" ] ],
[ "detail", [ 10, "", [] ] ],
[ "context", [ 10, "", [] ] ],
[ "detail", [ 10, [] ] ],
[ "context", [ 10, [] ] ],
[ "range", [ 10, [], [ 10 ], [ 10, null ], [ 10, 11, 12 ] ] ]
].forEach(function forProperty(property) {
var propertyName = property[0];
@ -2062,7 +2066,9 @@ module.exports.customRulesOnErrorBad = function customRulesOnErrorBad(test) {
}
}
],
"strings": [ "String" ]
"strings": {
"string": "String"
}
};
test.throws(function badErrorCall() {
markdownlint.sync(options);
@ -2079,6 +2085,47 @@ module.exports.customRulesOnErrorBad = function customRulesOnErrorBad(test) {
test.done();
};
module.exports.customRulesOnErrorLazy = function customRulesOnErrorLazy(test) {
test.expect(2);
var options = {
"customRules": [
{
"names": [ "name" ],
"description": "description",
"tags": [ "tag" ],
"function": function onErrorNull(params, onError) {
onError({
"lineNumber": 1,
"detail": "",
"context": "",
"range": [ 0, 0 ]
});
}
}
],
"strings": {
"string": "# Heading"
}
};
markdownlint(options, function callback(err, actualResult) {
test.ifError(err);
var expectedResult = {
"string": [
{
"lineNumber": 1,
"ruleNames": [ "name" ],
"ruleDescription": "description",
"errorDetail": null,
"errorContext": null,
"errorRange": [ 0, 0 ]
}
]
};
test.deepEqual(actualResult, expectedResult, "Undetected issues.");
test.done();
});
};
module.exports.customRulesDoc = function customRulesDoc(test) {
test.expect(2);
markdownlint({