evaluateTargetFiles function

(Set<String>, Set<String>) evaluateTargetFiles(
  1. String? root
)

Implementation

(Set<String> files, Set<String> exclusions) evaluateTargetFiles(String? root) {
  late Directory rootDir;

  // Find the root directory to base the analysis on
  if (root == null) {
    rootDir = findProjectRoot(Directory.current.path);

    if (rootDir.path != Directory.current.path) {
      logger.info("Changing root directory to $rootDir");
    }
  } else {
    rootDir = Directory(root);

    if (!rootDir.existsSync()) {
      logger.err('Root directory does not exist: $root');
      exit(1);
    }
  }

  // Detect the files to analyze

  final analysisOptionsFile = File('$rootDir.path/analysis_options.yaml');

  ApiGuardConfig config;

  if (analysisOptionsFile.existsSync()) {
    config = ApiGuardConfig.fromYaml(
      analysisOptionsFile,
    );
  } else {
    config = ApiGuardConfig.defaultConfig();
  }

  final targetFiles = <String>{};

  for (final include in config.include) {
    targetFiles.addAll(
      Glob(include).listSync(root: rootDir.path).map((e) => normalize(absolute(e.path))),
    );
  }

  final exclusions = <String>{};
  for (final exclude in config.exclude) {
    exclusions.addAll(
      Glob(exclude).listSync(root: rootDir.path).map((e) => normalize(absolute(e.path))),
    );
  }

  return (targetFiles.difference(exclusions), exclusions);
}