work function

dynamic work(
  1. String input,
  2. String output,
  3. String suffix,
  4. bool isDryRun,
)

Implementation

work(
  final String input,
  final String output,
  final String suffix,
  final bool isDryRun,
) {
  int allFileCount = 0;
  int includeFileCount = 0;
  int includeStatementCount = 0;
  int includeStatementFailedCount = 0;

  final RegExp rex =
      RegExp(r'\<include\s+file="(.*?)"\s*\>[\S\s]*?\<\/include\>');
  String ignoreSelf =
      r'<include file="$includeFilePath">$prefix$includeContent$postfix</include>';

  getFiles(input, suffix).forEach((File fileSource) {
    allFileCount++;
    String fileSourceContent = fileSource.readAsStringSync();

    _log(fileSource.path);

    if (rex.hasMatch(fileSourceContent)) {
      bool isFileChanged = false;
      includeFileCount++;

      rex.allMatches(fileSourceContent).forEach((match) {
        final includeStatement = match[0]!;
        final includeFilePath = match[1]!.trim();

        if (ignoreSelf == includeStatement) {
          _log('  ignoring own basic pattern');
        } else {
          final File? includeFile =
              findFile(includeFilePath, fileSource.parent);

          if (includeFile != null) {
            includeStatementCount++;
            final includeContent = includeFile.readAsStringSync();

            String prefix = '';
            String postfix = '';
            String ext = includeFile.uri.pathSegments.last.split('.').last;

            switch (ext) {
              case 'dart':
                prefix = '\n\n```dart\n';
                postfix = '```\n';
              case 'js':
                prefix = '\n\n```javascript\n';
                postfix = '```\n';
              default:
            }

            fileSourceContent = fileSourceContent.replaceAll(includeStatement,
                '<include file="$includeFilePath">$prefix$includeContent$postfix</include>');

            isFileChanged = true;
            _log('  including $includeFilePath');
          } else {
            includeStatementFailedCount++;
            _log('  included not found: $includeFilePath      FAILED');
          }
        }
      });
      if (isFileChanged) {
        writeProtected(fileSource, fileSourceContent, isDryRun, suffix, output);
      }
    } else {
      _log('  no include found');
    }
  });

  _log('\nStart dir $input');
  _log('Checked $suffix files: $allFileCount');
  _log('Modified $suffix files: $includeFileCount');
  _log('Included files: $includeStatementCount');
  _log('Included files failures: $includeStatementFailedCount\n');

  if (isDryRun) {
    _log('Dry run, merge files with flag --no-dry-run\n');
  }
}