1
1
import 'dart:io' ;
2
2
3
+ import 'package:analyzer/dart/analysis/analysis_context.dart' ;
3
4
import 'package:analyzer/dart/analysis/results.dart' ;
4
5
import 'package:analyzer/dart/analysis/utilities.dart' ;
5
6
import 'package:path/path.dart' ;
@@ -8,10 +9,10 @@ import '../../config_builder/config_builder.dart';
8
9
import '../../config_builder/models/analysis_options.dart' ;
9
10
import '../../reporters/models/reporter.dart' ;
10
11
import '../../utils/analyzer_utils.dart' ;
11
- import '../../utils/file_utils.dart' ;
12
12
import 'models/unused_files_file_report.dart' ;
13
13
import 'reporters/reporter_factory.dart' ;
14
14
import 'reporters/unused_files_report_params.dart' ;
15
+ import 'unused_files_analysis_config.dart' ;
15
16
import 'unused_files_config.dart' ;
16
17
import 'unused_files_visitor.dart' ;
17
18
@@ -45,22 +46,12 @@ class UnusedFilesAnalyzer {
45
46
final unusedFiles = < String > {};
46
47
47
48
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);
54
49
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);
61
51
62
- final filePaths = extractDartFilesFromFolders (
63
- contextFolders,
52
+ final filePaths = getFilePaths (
53
+ folders,
54
+ context,
64
55
rootFolder,
65
56
unusedFilesAnalysisConfig.globalExcludes,
66
57
);
@@ -69,19 +60,18 @@ class UnusedFilesAnalyzer {
69
60
70
61
final analyzedFiles =
71
62
filePaths.intersection (context.contextRoot.analyzedFiles ().toSet ());
72
-
73
63
for (final filePath in analyzedFiles) {
74
64
final unit = await context.currentSession.getResolvedUnit (filePath);
75
- unusedFiles.removeAll (_analyzeFile (filePath, unit));
65
+ unusedFiles.removeAll (_analyzeFile (filePath, unit, config.isMonorepo ));
76
66
}
77
67
78
68
final notAnalyzedFiles = filePaths.difference (analyzedFiles);
79
-
80
69
for (final filePath in notAnalyzedFiles) {
81
70
if (unusedFilesAnalysisConfig.analyzerExcludedPatterns
82
71
.any ((pattern) => pattern.matches (filePath))) {
83
72
final unit = await resolveFile2 (path: filePath);
84
- unusedFiles.removeAll (_analyzeFile (filePath, unit));
73
+ unusedFiles
74
+ .removeAll (_analyzeFile (filePath, unit, config.isMonorepo));
85
75
}
86
76
}
87
77
}
@@ -102,9 +92,29 @@ class UnusedFilesAnalyzer {
102
92
}
103
93
}
104
94
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
+ ) {
106
115
if (unit is ResolvedUnitResult ) {
107
- final visitor = UnusedFilesVisitor (filePath);
116
+ final visitor =
117
+ UnusedFilesVisitor (filePath, ignoreExports: ignoreExports);
108
118
unit.unit.visitChildren (visitor);
109
119
110
120
return visitor.paths;
0 commit comments