runCommand method

  1. @override
Future<void> runCommand(
  1. _CommandRequest request
)
override

Implementation

@override
Future<void> runCommand(_CommandRequest request) async {
  final foldersToAnalyze = request.rest;
  final rootFolder = request.rootFolder;
  final rules = request.rules;
  final excludes = request.excludes;
  final reporter = request.reporters.first;

  final resultList = <AnalyzedResult>[];

  final contextCollection = AnalysisContextCollection(
    includedPaths: foldersToAnalyze
        .map((path) => normalize(join(rootFolder, path)))
        .toList(),
  );

  for (final context in contextCollection.contexts) {
    // TODO: load analysis options from context
    // TODO: skip exludes files
    final analyzedFiles = context.contextRoot.analyzedFiles().toSet();
    for (final filePath in analyzedFiles) {
      if (!filePath.endsWith('.dart')) {
        continue;
      }
      final unit = await context.currentSession.getResolvedUnit(filePath);
      if (unit is ResolvedUnitResult) {
        final result = await analyzer.analyze(
          AnalyzerConfig(
            rules: rules,
            excludes: excludes,
            rootFolder: rootFolder,
          ),
          unit,
          filePath: filePath,
        );
        resultList.add(result);
      }
    }
  }

  reporter.report(resultList);

  if (resultList.any((element) => element.issues.isNotEmpty)) {
    throw ExitCommandException(1);
  }
}