lint: extract visit item method
This commit is contained in:
parent
c053da9051
commit
6c33b81610
|
@ -20,7 +20,7 @@ export class RuleVisitor implements RuleVisitorOptions, Visitor {
|
|||
}
|
||||
|
||||
public async pick(ctx: VisitorContext, root: any): Promise<Array<any>> {
|
||||
return []; // why is this part of visitor rather than rule?
|
||||
return []; // TODO: why is this part of visitor rather than rule?
|
||||
}
|
||||
|
||||
public async visit(ctx: VisitorContext, root: any): Promise<VisitorContext> {
|
||||
|
@ -32,34 +32,38 @@ export class RuleVisitor implements RuleVisitorOptions, Visitor {
|
|||
itemIndex,
|
||||
rule,
|
||||
};
|
||||
const itemResult = cloneDeep(item);
|
||||
const ruleResult = await rule.visit(ctx, itemResult);
|
||||
|
||||
if (hasItems(ruleResult.errors)) {
|
||||
ctx.logger.warn({ count: ruleResult.errors.length, rule }, 'rule failed');
|
||||
ctx.mergeResult(ruleResult, ctx.visitData);
|
||||
continue;
|
||||
}
|
||||
|
||||
const itemDiff = diff(item, itemResult);
|
||||
if (hasItems(itemDiff)) {
|
||||
ctx.logger.info({
|
||||
diff: itemDiff,
|
||||
item,
|
||||
rule: rule.name,
|
||||
}, 'rule passed with modifications');
|
||||
|
||||
if (ctx.schemaOptions.mutate) {
|
||||
applyDiff(item, itemResult);
|
||||
}
|
||||
} else {
|
||||
ctx.logger.info({ rule: rule.name }, 'rule passed');
|
||||
}
|
||||
|
||||
await this.visitItem(ctx, item, itemIndex, rule);
|
||||
itemIndex += 1;
|
||||
}
|
||||
}
|
||||
|
||||
return ctx;
|
||||
}
|
||||
|
||||
public async visitItem(ctx: VisitorContext, item: any, itemIndex: number, rule: Rule): Promise<void> {
|
||||
const itemResult = cloneDeep(item);
|
||||
const ruleResult = await rule.visit(ctx, itemResult);
|
||||
|
||||
if (hasItems(ruleResult.errors)) {
|
||||
ctx.logger.warn({ count: ruleResult.errors.length, rule }, 'rule failed');
|
||||
ctx.mergeResult(ruleResult, ctx.visitData);
|
||||
return;
|
||||
}
|
||||
|
||||
const itemDiff = diff(item, itemResult);
|
||||
if (hasItems(itemDiff)) {
|
||||
ctx.logger.info({
|
||||
diff: itemDiff,
|
||||
item,
|
||||
rule: rule.name,
|
||||
}, 'rule passed with modifications');
|
||||
|
||||
if (ctx.schemaOptions.mutate) {
|
||||
applyDiff(item, itemResult);
|
||||
}
|
||||
} else {
|
||||
ctx.logger.info({ rule: rule.name }, 'rule passed');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -81,4 +81,6 @@ describeLeaks('main app', async () => {
|
|||
|
||||
expect(status).to.equal(STATUS_ERROR);
|
||||
});
|
||||
|
||||
it('should fix up partial documents'); // TODO: test fix mode
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue