addImports static method

Future<void> addImports(
  1. String filePath,
  2. List<String> imports
)

  1. Add Imports

Implementation

static Future<void> addImports(String filePath, List<String> imports) async {
  try {
    final file = File(filePath);

    if (!await file.exists()) {
      print('❌ File not found: $filePath');
      return;
    }

    String content = await file.readAsString();

    // Format imports to ensure a semicolon exists at the end
    final normalizedImports = imports.map((imp) {
      final trimmed = imp.trim();
      return trimmed.endsWith(';') ? trimmed : '$trimmed;';
    }).toList();

    // Filter out already existing imports
    final importsToAdd = normalizedImports
        .where((imp) => !content.contains(imp))
        .toList();

    if (importsToAdd.isEmpty) {
      print('⚠️ All imports already exist');
      return;
    }

    final regex = RegExp(r"""import\s+['"](.+?)['"];""");
    final matches = regex.allMatches(content);
    final importsText = importsToAdd.join('\n');

    String newContent;

    if (matches.isNotEmpty) {
      final insertPosition = matches.last.end;
      newContent =
          '${content.substring(0, insertPosition)}\n$importsText\n${content.substring(insertPosition)}';
    } else {
      newContent = '$importsText\n\n$content';
    }

    await file.writeAsString(newContent);

    print('✅ Imports added successfully:');
    for (final imp in importsToAdd) {
      print('   ➕ $imp');
    }
  } catch (e) {
    print('❌ Error adding imports: $e');
  }
}