Make item loop iterative (vs. recursive) to handle synchronous processing of thousands of items.

This commit is contained in:
David Anson 2018-03-19 21:21:22 -07:00
parent f80b61d8b7
commit ff73e822cf

View file

@ -445,14 +445,21 @@ function lintInput(options, synchronous, callback) {
var resultVersion = (options.resultVersion === undefined) ?
2 : options.resultVersion;
var results = newResults(ruleList);
// Helper to lint the next string or file item
// Helper to lint the next string or file
function lintNextItem() {
var iterating = true;
var item = null;
function lintNextItem(err, result) {
function lintNextItemCallback(err, result) {
if (err) {
iterating = false;
return callback(err);
} else if (result) {
results[item] = result;
}
results[item] = result;
if (!iterating) {
lintNextItem();
}
}
while (iterating) {
if ((item = stringsKeys.shift())) {
lintContent(
ruleList,
@ -461,8 +468,9 @@ function lintInput(options, synchronous, callback) {
frontMatter,
noInlineConfig,
resultVersion,
lintNextItem);
lintNextItemCallback);
} else if ((item = files.shift())) {
iterating = synchronous;
lintFile(
ruleList,
item,
@ -471,9 +479,10 @@ function lintInput(options, synchronous, callback) {
noInlineConfig,
resultVersion,
synchronous,
lintNextItem);
lintNextItemCallback);
} else {
callback(null, results);
return callback(null, results);
}
}
}
lintNextItem();