Fixing deinflection

This commit is contained in:
Alex Yatskov 2016-12-19 20:03:06 -08:00
parent 238c9e340e
commit 0aa603694c

View File

@ -25,27 +25,27 @@ class Deinflection {
this.reason = reason; this.reason = reason;
} }
validate(validator) { deinflect(validator, reasons, entry=false) {
return validator(this.term).then(sets => { const validate = () => {
for (const rules of sets) { if (entry) {
if (this.rules.length === 0) { return Promise.resolve(true);
return true;
}
for (const rule of this.rules) {
if (rules.includes(rule)) {
return true;
}
}
} }
return false; return validator(this.term).then(sets => {
}); for (const rules of sets) {
} for (const rule of this.rules) {
if (rules.includes(rule)) {
return true;
}
}
}
return false;
});
};
deinflect(validator, reasons) {
const promises = [ const promises = [
this.validate(validator).then(valid => { validate().then(valid => {
const child = new Deinflection(this.term, this.rules); const child = new Deinflection(this.term, this.rules);
this.children.push(child); this.children.push(child);
}) })
@ -53,11 +53,13 @@ class Deinflection {
for (const reason in reasons) { for (const reason in reasons) {
for (const variant of reasons[reason]) { for (const variant of reasons[reason]) {
let allowed = this.rules.length === 0; let allowed = entry;
for (const rule of this.rules) { if (!allowed) {
if (variant.rulesIn.includes(rule)) { for (const rule of this.rules) {
allowed = true; if (variant.rulesIn.includes(rule)) {
break; allowed = true;
break;
}
} }
} }
@ -119,6 +121,6 @@ class Deinflector {
deinflect(term, validator) { deinflect(term, validator) {
const node = new Deinflection(term); const node = new Deinflection(term);
return node.deinflect(validator, this.reasons).then(success => success ? node.gather() : []); return node.deinflect(validator, this.reasons, true).then(success => success ? node.gather() : []);
} }
} }