diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-03-07 14:07:26 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-07 14:07:26 -0500 | 
| commit | 7793e14e57639426cb9ca64c82004151f9eaba05 (patch) | |
| tree | 14aa497ee70bd18890e6e0af400b58cbe68add91 /ext/js | |
| parent | 92fe1571aeee0717b85c6b47ed203852faf42d80 (diff) | |
Deinflector refactor (#1501)
* Make Deinflector._ruleTypes private
* Add createDeinflection helper
* Remove unnecessary field assignments from Deinflector
Move them to Translator instead
Diffstat (limited to 'ext/js')
| -rw-r--r-- | ext/js/language/deinflector.js | 37 | ||||
| -rw-r--r-- | ext/js/language/translator.js | 27 | 
2 files changed, 26 insertions, 38 deletions
| diff --git a/ext/js/language/deinflector.js b/ext/js/language/deinflector.js index b6759215..4b2c1bc7 100644 --- a/ext/js/language/deinflector.js +++ b/ext/js/language/deinflector.js @@ -20,15 +20,8 @@ class Deinflector {          this.reasons = Deinflector.normalizeReasons(reasons);      } -    deinflect(source, rawSource) { -        const results = [{ -            source, -            rawSource, -            term: source, -            rules: 0, -            reasons: [], -            databaseDefinitions: [] -        }]; +    deinflect(source) { +        const results = [this._createDeinflection(source, 0, [])];          for (let i = 0; i < results.length; ++i) {              const {rules, term, reasons} = results[i];              for (const [reason, variants] of this.reasons) { @@ -41,20 +34,21 @@ class Deinflector {                          continue;                      } -                    results.push({ -                        source, -                        rawSource, -                        term: term.substring(0, term.length - kanaIn.length) + kanaOut, -                        rules: rulesOut, -                        reasons: [reason, ...reasons], -                        databaseDefinitions: [] -                    }); +                    results.push(this._createDeinflection( +                        term.substring(0, term.length - kanaIn.length) + kanaOut, +                        rulesOut, +                        [reason, ...reasons] +                    ));                  }              }          }          return results;      } +    _createDeinflection(term, rules, reasons) { +        return {term, rules, reasons}; +    } +      static normalizeReasons(reasons) {          const normalizedReasons = [];          for (const [reason, reasonInfo] of Object.entries(reasons)) { @@ -63,8 +57,8 @@ class Deinflector {                  variants.push([                      kanaIn,                      kanaOut, -                    Deinflector.rulesToRuleFlags(rulesIn), -                    Deinflector.rulesToRuleFlags(rulesOut) +                    this.rulesToRuleFlags(rulesIn), +                    this.rulesToRuleFlags(rulesOut)                  ]);              }              normalizedReasons.push([reason, variants]); @@ -73,7 +67,7 @@ class Deinflector {      }      static rulesToRuleFlags(rules) { -        const ruleTypes = Deinflector.ruleTypes; +        const ruleTypes = this._ruleTypes;          let value = 0;          for (const rule of rules) {              const ruleBits = ruleTypes.get(rule); @@ -84,7 +78,8 @@ class Deinflector {      }  } -Deinflector.ruleTypes = new Map([ +// eslint-disable-next-line no-underscore-dangle +Deinflector._ruleTypes = new Map([      ['v1',    0b00000001], // Verb ichidan      ['v5',    0b00000010], // Verb godan      ['vs',    0b00000100], // Verb suru diff --git a/ext/js/language/translator.js b/ext/js/language/translator.js index e20cc50f..18668306 100644 --- a/ext/js/language/translator.js +++ b/ext/js/language/translator.js @@ -250,18 +250,7 @@ class Translator {      async _findTermWildcard(text, enabledDictionaryMap, wildcard) {          const databaseDefinitions = await this._database.findTermsBulk([text], enabledDictionaryMap, wildcard); -        if (databaseDefinitions.length === 0) { -            return []; -        } - -        return [{ -            source: text, -            rawSource: text, -            term: text, -            rules: 0, -            reasons: [], -            databaseDefinitions -        }]; +        return databaseDefinitions.length > 0 ? [this._createDeinflection(text, text, text, 0, [], databaseDefinitions)] : [];      }      async _findTermDeinflections(text, enabledDictionaryMap, options) { @@ -341,18 +330,22 @@ class Translator {              }              for (let i = text2.length; i > 0; --i) { -                const text2Substring = text2.substring(0, i); -                if (used.has(text2Substring)) { break; } -                used.add(text2Substring); +                const source = text2.substring(0, i); +                if (used.has(source)) { break; } +                used.add(source);                  const rawSource = sourceMap.source.substring(0, sourceMap.getSourceLength(i)); -                for (const deinflection of this._deinflector.deinflect(text2Substring, rawSource)) { -                    deinflections.push(deinflection); +                for (const {term, rules, reasons} of this._deinflector.deinflect(source)) { +                    deinflections.push(this._createDeinflection(source, rawSource, term, rules, reasons, []));                  }              }          }          return deinflections;      } +    _createDeinflection(source, rawSource, term, rules, reasons, databaseDefinitions) { +        return {source, rawSource, term, rules, reasons, databaseDefinitions}; +    } +      /**       * @param definitions An array of 'term' definitions.       * @param mainDictionary The name of the main dictionary. |