run method

  1. @override
Future<void> run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
Future<void> run() async {
  final targetPath = argResults?['path'] as String;
  final absolutePath = p.absolute(targetPath);
  print('Analyzing project at: $absolutePath\n');

  final libPath = p.join(absolutePath, 'lib');
  if (!Directory(libPath).existsSync()) {
    print('Error: Could not find lib/ directory at $libPath');
    return;
  }

  print('Detecting Architecture...');
  final archPattern = ArchitectureDetector().detect(absolutePath);

  print('Detecting Tech Stack...');
  final techStack = TechStackDetector().detect(absolutePath);

  print('Parsing Files for Statistics...');
  final parser = DartParser(rootPath: absolutePath);
  final nodes = await parser.parseProject();
  final graph = DependencyGraph(nodes: nodes);
  final graphData = graph.toJson();
  final metrics = graphData['metrics'] as Map<String, dynamic>;

  final learningPath = LearningPathDetector().detect(graph);

  final summary = ProjectSummary(
    techStack: techStack,
    architecturePattern: archPattern,
    totalFiles: metrics['total_nodes'] as int? ?? 0,
    screens: metrics['total_screens'] as int? ?? 0,
    models: metrics['total_models'] as int? ?? 0,
    repositories: metrics['total_repositories'] as int? ?? 0,
    services: metrics['total_services'] as int? ?? 0,
    learningPath: learningPath,
  );

  print('\n=============================================');
  print('DevLens AI Project Explorer (Onboarding)');
  print('=============================================\n');
  print(summary.toString());

  print('Recommended Learning Path');
  print('---------------------');
  if (learningPath.isEmpty) {
    print('Could not detect a clear learning path (main.dart not found).');
  } else {
    for (int i = 0; i < learningPath.length; i++) {
      print('  [${i + 1}] ${learningPath[i]}');
      if (i < learningPath.length - 1) {
        print('   ↓');
      }
    }
  }
  print('\n=============================================');
}