analyze method

String analyze()

Analyze the _data so you can know which ones are missing what text. The results will be print in the console log with the below format:

Result: LanguageCodes.en: some thing 1 some thing 2 LanguageCodes.vi: some thing 3 some thing 4

Implementation

///
/// Result:
///   LanguageCodes.en:
///     some thing 1
///     some thing 2
///   LanguageCodes.vi:
///     some thing 3
///     some thing 4
String analyze() {
  final List<String> keys = [];
  StringBuffer buffer = StringBuffer('');

  buffer.write('\n\n');
  buffer.write('==================================================');
  buffer.write('\n');
  buffer.write('Analyze all languages...');
  buffer.write('\n');

  // Add all keys to [keys]
  for (final code in codes) {
    if (!_data.containsKey(code)) {
      return 'Can analyze the data from `LanguageDataProvider.data` only';
    }
    for (final key in _data[code]!.keys) {
      if (!keys.contains(key)) keys.add(key);
    }
  }

  final List<String> missedKeys = [];
  final List<String> removedKeys = [];
  if (_analysisKeys.isNotEmpty) {
    // Analyze which keys are in [analysisKeys] but not in [data].
    for (final key in _analysisKeys) {
      if (!keys.contains(key)) {
        missedKeys.add(key);
      }
    }

    // Analyze which keys are in [data] but not in [analysisKeys]
    for (final key in keys) {
      if (!_analysisKeys.contains(key)) {
        removedKeys.add(key);
      }
    }
  }

  if (missedKeys.isNotEmpty) {
    buffer.write(
        'The below keys were missing ([analysisKeys]: yes, [data]: no):\n');
    for (final key in missedKeys) {
      buffer.write('  >> ${_removeNewline(key)}\n');
    }
    buffer.write('\n');
  }

  if (removedKeys.isNotEmpty) {
    buffer.write(
        'The below keys were deprecated ([analysisKeys]: no, [data]: yes):\n');
    for (final key in removedKeys) {
      buffer.write('  >> ${_removeNewline(key)}\n');
    }
    buffer.write('\n');
  }

  buffer.write('Specific text missing results:\n');

  // Analyze the results
  for (final code in codes) {
    buffer.write('  >> $code:\n');
    for (final key in keys) {
      if (!_data[code]!.keys.contains(key)) {
        buffer.write('      >> ${_removeNewline(key)}\n');
      }
    }

    // Don't need to add \n for the last element
    if (code != codes.last) buffer.write('\n');
  }

  buffer.write('==================================================');
  buffer.write('\n');

  printDebug(buffer.toString());

  return buffer.toString();
}