writeHypenState function

dynamic writeHypenState(
  1. String path,
  2. ResolvedLibraryResult libResolved
)

Implementation

writeHypenState(String path, final ResolvedLibraryResult libResolved) async {
  try {
    final libname = p.basename(path);
    final libElement = libResolved.element;
    final classes = libElement.topLevelElements
        .whereType<ClassElement>()
        .where((e) => hypenData.isAssignableFrom(e))
        .where((e) => !hypenIgnoreGeneration.hasAnnotationOf(e))
        .toList();

    final enums = libElement.topLevelElements
        .whereType<EnumElement>()
        .where((e) => enumAnnotated.hasAnnotationOf(e))
        .where((e) => !hypenIgnoreGeneration.hasAnnotationOf(e))
        .toList();

    if (classes.isNotEmpty || enums.isNotEmpty) {
      final partname = '${p.withoutExtension(libname)}.hypen.dart';
      final part = libElement.parts.where((part) {
        final uri = part.uri;
        return (uri as dynamic).relativeUriString.contains(partname);
      }).firstOrNull;
      if (part == null) {
        print('[${p.relative(path)}] You must include `part \'$partname\';`');
        return;
      }
    }

    final reactiveData = classes.map(generateHypenStateCode).join('\n');

    final reactiveEnum = enums.map(generateEnumInfo).join('\n');

    final generatedFileName = '${p.withoutExtension(path)}.hypen.dart';
    final file = File(generatedFileName);

    if (reactiveData.isEmpty && reactiveEnum.isEmpty) {
      if (await file.exists()) {
        await file.delete();
      }
      return;
    }

    final formatter = DartFormatter();
    file.writeAsString(
      formatter.format('''
// ignore_for_file: type=lint, unused_element, unnecessary_import, unused_import
// AUTO GENERATED BY hypen
// Do not modify this file.

part of '$libname';

$reactiveData
$reactiveEnum
'''),
    );
  } catch (e) {
    print(e);
  }
}