analyzeCode function

Future<void> analyzeCode()

/////////////////////////////////////////////////////////// ENTRY FUNCTION ///////////////////////////////////////////////////////////

Implementation

Future<void> analyzeCode() async {
  final lib = Directory('lib');

  if (!lib.existsSync()) {
    print("❌ lib directory doesn't exist");
    return;
  }

  final dartFiles = lib
      .listSync(recursive: true)
      .where((e) => e is File && e.path.endsWith('.dart'))
      .cast<File>();

  final Map<String, ConstInfo> constants = {};
  final List<UiStringInfo> uiStrings = [];

  print("🔍 Scanning project...\n");

  ////////////////////////////////////////////////////////////
  /// STEP 1: Collect static const
  ////////////////////////////////////////////////////////////
  for (final file in dartFiles) {
    final result = parseFile(
      path: file.path,
      featureSet: FeatureSet.latestLanguageVersion(),
    );

    result.unit.visitChildren(
      StaticConstCollector(file.path, constants),
    );
  }

  ////////////////////////////////////////////////////////////
  /// STEP 2: Extract UI strings
  ////////////////////////////////////////////////////////////
  for (final file in dartFiles) {
    final result = parseFile(
      path: file.path,
      featureSet: FeatureSet.latestLanguageVersion(),
    );

    result.unit.visitChildren(
      UiStringVisitor(
        file.path,
        constants,
        uiStrings,
        result.lineInfo,
      ),
    );
  }

  ////////////////////////////////////////////////////////////
  /// OUTPUT
  ////////////////////////////////////////////////////////////
  printVisualOutput(constants, uiStrings);
  exportToJson(constants, uiStrings);
}