content property

  1. @override
String get content
override

Implementation

@override
String get content {
  final content = super.content;

  final partDirectives = parts.map((part) {
    final pathParts = p.split(part.fileName)..remove('lib');

    return "part '${p.joinAll(pathParts)}';";
  }).toList()..sort();

  final partString = partDirectives.join('\n');

  // inject part directives after all import statements
  final directiveIndex = switch (content.contains('export')) {
    true => content.lastIndexOf('export'),
    false => content.lastIndexOf('import'),
  };
  var directiveStatements = '';
  var contentWithoutDirectives = content;

  if (directiveIndex != -1) {
    final directiveEndIndex = content.indexOf(';', directiveIndex);
    directiveStatements = content.substring(0, directiveEndIndex + 1);

    contentWithoutDirectives = content.substring(directiveEndIndex + 1);
  }

  final trimmed =
      '''
$directiveStatements

$partString
$contentWithoutDirectives'''
          .trim();

  return '$trimmed\n';
}