removeUnused function

void removeUnused(
  1. File arbFile,
  2. List<String> excludes
)

Implementation

void removeUnused(File arbFile, List<String> excludes) {
  final Map<String, dynamic> data = json.decode(arbFile.readAsStringSync());

  final lib = Directory('lib');

  final fileContents = lib
      .listSync(recursive: true)
      .whereType<File>()
      .where((element) {
        final path = element.path;
        return !excludes.any((element) => path.startsWith(element));
      })
      .where((element) => element.path.endsWith('.dart'))
      .map((e) => e.readAsStringSync())
      .toList();

  var remove = <String>[];
  for (final key in data.keys) {
    final value = data[key];
    if (value is String) {
      if (fileContents.any((content) => content.contains(key))) {
        continue;
      }

      remove.add(key);
    }
  }

  data.removeWhere((key, value) => remove.contains(key));
  final sorted = SplayTreeMap.from(data);
  final encoder = JsonEncoder.withIndent('    ');
  arbFile.writeAsStringSync(encoder.convert(sorted), flush: true);
}