analyze method

Implementation

Future<DependencyAnalysisResult> analyze() async {
  // -----------------------------------------------
  // Parse pubspec.yaml
  // -----------------------------------------------

  final pubspecParser = PubspecParser(projectPath: projectPath);

  final directDependencies = pubspecParser.parse();

  // -----------------------------------------------
  // Parse resolved dependencies
  // -----------------------------------------------

  final depsParser = PubDepsParser(projectPath: projectPath);

  final lockedDependencies = depsParser.parse();

  // -----------------------------------------------
  // Build dependency graph
  // -----------------------------------------------

  final graph = DependencyGraph(dependencies: lockedDependencies);

  // -----------------------------------------------
  // Fetch Pub.dev information
  // -----------------------------------------------

  final packageInfo = <String, PubPackageInfo>{};

  final service = PubDevService();

  final packagesToCheck = lockedDependencies.where(
    (package) => package.isDirect || package.isDev,
  );

  try {
    for (final package in packagesToCheck) {
      final info = await service.getPackageInfo(package.name);

      if (info != null) {
        packageInfo[package.name] = info;
      }
    }
  } finally {
    service.dispose();
  }

  // -----------------------------------------------
  // Analyze health
  // -----------------------------------------------

  final healthAnalyzer = HealthAnalyzer();

  final health = healthAnalyzer.analyze(
    packagesToCheck.toList(),
    packageInfo,
  );

  // -----------------------------------------------
  // Return result
  // -----------------------------------------------

  return DependencyAnalysisResult(
    directDependencies: directDependencies,
    lockedDependencies: lockedDependencies,
    graph: graph,
    health: health,
  );
}