writeHypenState function

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

Implementation

writeHypenState(String path, final ResolvedLibraryResult libResolved) async {
  try {
    final libElement = libResolved.element;
    final observables = libElement.topLevelElements
        .whereType<ClassElement>()
        .where((e) => observableAnnotation.hasAnnotationOf(e))
        .toList();

    final enumObservables = libElement.topLevelElements
        .whereType<EnumElement>()
        .where((e) => observableAnnotation.hasAnnotationOf(e))
        .toList();

    final generatedFileName = toGeneratedFileName(path);
    final file = File(generatedFileName);
    if (observables.isEmpty && enumObservables.isEmpty) {
      if (await file.exists()) {
        await file.delete();
      }
      return;
    } else {
      final partname = p.basename(toGeneratedFileName(path));

      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 observableCode = observables.map(generateObservableClass).join('\n');

    final enumObservableCode =
        enumObservables.map(generateObservableEnum).join('\n');

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

part of '$libname';

$observableCode
$enumObservableCode
'''),
    );
  } catch (e) {
    alert(
      'Failed to generate a observable code for $path.'
      ' Please contact the maintainers.',
    );
    alert('Attaching the code and the error message helps resolve the issue.');
    alert('$e');
  }
}