11import 'dart:io' ;
22
3+ import 'package:analyzer/dart/analysis/analysis_context.dart' ;
34import 'package:analyzer/dart/analysis/results.dart' ;
45import 'package:analyzer/dart/analysis/utilities.dart' ;
56import 'package:path/path.dart' ;
@@ -8,10 +9,10 @@ import '../../config_builder/config_builder.dart';
89import '../../config_builder/models/analysis_options.dart' ;
910import '../../reporters/models/reporter.dart' ;
1011import '../../utils/analyzer_utils.dart' ;
11- import '../../utils/file_utils.dart' ;
1212import 'models/unused_files_file_report.dart' ;
1313import 'reporters/reporter_factory.dart' ;
1414import 'reporters/unused_files_report_params.dart' ;
15+ import 'unused_files_analysis_config.dart' ;
1516import 'unused_files_config.dart' ;
1617import 'unused_files_visitor.dart' ;
1718
@@ -45,22 +46,12 @@ class UnusedFilesAnalyzer {
4546 final unusedFiles = < String > {};
4647
4748 for (final context in collection.contexts) {
48- final analysisOptions = await analysisOptionsFromContext (context) ??
49- await analysisOptionsFromFilePath (rootFolder);
50-
51- final contextConfig =
52- ConfigBuilder .getUnusedFilesConfigFromOption (analysisOptions)
53- .merge (config);
5449 final unusedFilesAnalysisConfig =
55- ConfigBuilder .getUnusedFilesConfig (contextConfig, rootFolder);
56-
57- final contextFolders = folders
58- .where ((path) => normalize (join (rootFolder, path))
59- .startsWith (context.contextRoot.root.path))
60- .toList ();
50+ await _getAnalysisConfig (context, rootFolder, config);
6151
62- final filePaths = extractDartFilesFromFolders (
63- contextFolders,
52+ final filePaths = getFilePaths (
53+ folders,
54+ context,
6455 rootFolder,
6556 unusedFilesAnalysisConfig.globalExcludes,
6657 );
@@ -69,19 +60,18 @@ class UnusedFilesAnalyzer {
6960
7061 final analyzedFiles =
7162 filePaths.intersection (context.contextRoot.analyzedFiles ().toSet ());
72-
7363 for (final filePath in analyzedFiles) {
7464 final unit = await context.currentSession.getResolvedUnit (filePath);
75- unusedFiles.removeAll (_analyzeFile (filePath, unit));
65+ unusedFiles.removeAll (_analyzeFile (filePath, unit, config.isMonorepo ));
7666 }
7767
7868 final notAnalyzedFiles = filePaths.difference (analyzedFiles);
79-
8069 for (final filePath in notAnalyzedFiles) {
8170 if (unusedFilesAnalysisConfig.analyzerExcludedPatterns
8271 .any ((pattern) => pattern.matches (filePath))) {
8372 final unit = await resolveFile2 (path: filePath);
84- unusedFiles.removeAll (_analyzeFile (filePath, unit));
73+ unusedFiles
74+ .removeAll (_analyzeFile (filePath, unit, config.isMonorepo));
8575 }
8676 }
8777 }
@@ -102,9 +92,29 @@ class UnusedFilesAnalyzer {
10292 }
10393 }
10494
105- Iterable <String > _analyzeFile (String filePath, SomeResolvedUnitResult unit) {
95+ Future <UnusedFilesAnalysisConfig > _getAnalysisConfig (
96+ AnalysisContext context,
97+ String rootFolder,
98+ UnusedFilesConfig config,
99+ ) async {
100+ final analysisOptions = await analysisOptionsFromContext (context) ??
101+ await analysisOptionsFromFilePath (rootFolder);
102+
103+ final contextConfig =
104+ ConfigBuilder .getUnusedFilesConfigFromOption (analysisOptions)
105+ .merge (config);
106+
107+ return ConfigBuilder .getUnusedFilesConfig (contextConfig, rootFolder);
108+ }
109+
110+ Iterable <String > _analyzeFile (
111+ String filePath,
112+ SomeResolvedUnitResult unit,
113+ bool ignoreExports,
114+ ) {
106115 if (unit is ResolvedUnitResult ) {
107- final visitor = UnusedFilesVisitor (filePath);
116+ final visitor =
117+ UnusedFilesVisitor (filePath, ignoreExports: ignoreExports);
108118 unit.unit.visitChildren (visitor);
109119
110120 return visitor.paths;
0 commit comments