runCliAnalysis method
      
Future<Iterable<UnusedCodeFileReport> > 
runCliAnalysis(
    
- Iterable<String> folders,
- String rootFolder,
- UnusedCodeConfig config, {
- String? sdkPath,
Returns a list of unused code reports
for analyzing all files in the given folders.
The analysis is configured with the config.
Implementation
Future<Iterable<UnusedCodeFileReport>> runCliAnalysis(
  Iterable<String> folders,
  String rootFolder,
  UnusedCodeConfig config, {
  String? sdkPath,
}) async {
  final collection =
      createAnalysisContextCollection(folders, rootFolder, sdkPath);
  final codeUsages = FileElementsUsage();
  final publicCode = <String, Set<Element>>{};
  for (final context in collection.contexts) {
    final unusedCodeAnalysisConfig =
        _getAnalysisConfig(context, rootFolder, config);
    if (config.shouldPrintConfig) {
      _logger?.printConfig(unusedCodeAnalysisConfig.toJson());
    }
    final filePaths = getFilePaths(
      folders,
      context,
      rootFolder,
      unusedCodeAnalysisConfig.globalExcludes,
    );
    final analyzedFiles =
        filePaths.intersection(context.contextRoot.analyzedFiles().toSet());
    final contextsLength = collection.contexts.length;
    final filesLength = analyzedFiles.length;
    final updateMessage = contextsLength == 1
        ? 'Checking unused code for $filesLength file(s)'
        : 'Checking unused code for ${collection.contexts.indexOf(context) + 1}/$contextsLength contexts with $filesLength file(s)';
    _logger?.progress.update(updateMessage);
    for (final filePath in analyzedFiles) {
      _logger?.infoVerbose('Analyzing $filePath');
      final unit = await context.currentSession.getResolvedUnit(filePath);
      final codeUsage = _analyzeFileCodeUsages(unit);
      if (codeUsage != null) {
        codeUsages.merge(codeUsage);
      }
      if (!unusedCodeAnalysisConfig.analyzerExcludedPatterns
          .any((pattern) => pattern.matches(filePath))) {
        publicCode[filePath] = _analyzeFilePublicCode(unit);
      }
    }
  }
  if (!config.isMonorepo) {
    _logger?.infoVerbose(
      'Removing globally exported files with code usages from the analysis: ${codeUsages.exports.length}',
    );
    codeUsages.exports.forEach(publicCode.remove);
  }
  return _getReports(codeUsages, publicCode, rootFolder);
}