Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(528)

Side by Side Diff: lib/src/analysis.dart

Issue 1415723007: SDK mocking for improved test throughput. (Closed) Base URL: https://github.com/dart-lang/linter.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | lib/src/linter.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library linter.src.analysis; 5 library linter.src.analysis;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'package:analyzer/file_system/file_system.dart' show Folder; 10 import 'package:analyzer/file_system/file_system.dart' show Folder;
11 import 'package:analyzer/file_system/physical_file_system.dart'; 11 import 'package:analyzer/file_system/physical_file_system.dart';
12 import 'package:analyzer/source/package_map_provider.dart'; 12 import 'package:analyzer/source/package_map_provider.dart';
13 import 'package:analyzer/source/package_map_resolver.dart'; 13 import 'package:analyzer/source/package_map_resolver.dart';
14 import 'package:analyzer/source/pub_package_map_provider.dart'; 14 import 'package:analyzer/source/pub_package_map_provider.dart';
15 import 'package:analyzer/src/generated/element.dart'; 15 import 'package:analyzer/src/generated/element.dart';
16 import 'package:analyzer/src/generated/engine.dart'; 16 import 'package:analyzer/src/generated/engine.dart';
17 import 'package:analyzer/src/generated/java_io.dart'; 17 import 'package:analyzer/src/generated/java_io.dart';
18 import 'package:analyzer/src/generated/sdk.dart'; 18 import 'package:analyzer/src/generated/sdk.dart';
19 import 'package:analyzer/src/generated/sdk_io.dart'; 19 import 'package:analyzer/src/generated/sdk_io.dart';
20 import 'package:analyzer/src/generated/source.dart'; 20 import 'package:analyzer/src/generated/source.dart';
21 import 'package:analyzer/src/generated/source_io.dart'; 21 import 'package:analyzer/src/generated/source_io.dart';
22 import 'package:analyzer/src/services/lint.dart'; 22 import 'package:analyzer/src/services/lint.dart';
23 import 'package:cli_util/cli_util.dart' as cli_util; 23 import 'package:cli_util/cli_util.dart' as cli_util;
24 import 'package:linter/src/io.dart'; 24 import 'package:linter/src/io.dart';
25 import 'package:linter/src/linter.dart'; 25 import 'package:linter/src/linter.dart';
26 import 'package:linter/src/project.dart'; 26 import 'package:linter/src/project.dart';
27 import 'package:linter/src/rules.dart'; 27 import 'package:linter/src/rules.dart';
28 import 'package:linter/src/sdk.dart';
28 import 'package:package_config/packages.dart' show Packages; 29 import 'package:package_config/packages.dart' show Packages;
29 import 'package:package_config/packages_file.dart' as pkgfile show parse; 30 import 'package:package_config/packages_file.dart' as pkgfile show parse;
30 import 'package:package_config/src/packages_impl.dart' show MapPackages; 31 import 'package:package_config/src/packages_impl.dart' show MapPackages;
31 import 'package:path/path.dart' as p; 32 import 'package:path/path.dart' as p;
32 33
33 Source createSource(Uri sourceUri) => 34 Source createSource(Uri sourceUri) =>
34 new FileBasedSource(new JavaFile(sourceUri.toFilePath())); 35 new FileBasedSource(new JavaFile(sourceUri.toFilePath()));
35 36
36 /// Print the given message and exit with the given [exitCode] 37 /// Print the given message and exit with the given [exitCode]
37 void printAndFail(String message, {int exitCode: 15}) { 38 void printAndFail(String message, {int exitCode: 15}) {
(...skipping 17 matching lines...) Expand all
55 Set<Source> _sourcesAnalyzed = new HashSet<Source>(); 56 Set<Source> _sourcesAnalyzed = new HashSet<Source>();
56 57
57 final LinterOptions options; 58 final LinterOptions options;
58 59
59 AnalysisDriver(this.options); 60 AnalysisDriver(this.options);
60 61
61 /// Return the number of sources that have been analyzed so far. 62 /// Return the number of sources that have been analyzed so far.
62 int get numSourcesAnalyzed => _sourcesAnalyzed.length; 63 int get numSourcesAnalyzed => _sourcesAnalyzed.length;
63 64
64 List<UriResolver> get resolvers { 65 List<UriResolver> get resolvers {
65 DartSdk sdk = new DirectoryBasedDartSdk(new JavaFile(sdkDir)); 66 DartSdk sdk = options.useMockSdk
67 ? new MockSdk()
68 : new DirectoryBasedDartSdk(new JavaFile(sdkDir));
69
66 List<UriResolver> resolvers = [new DartUriResolver(sdk)]; 70 List<UriResolver> resolvers = [new DartUriResolver(sdk)];
71
67 if (options.packageRootPath != null) { 72 if (options.packageRootPath != null) {
68 JavaFile packageDirectory = new JavaFile(options.packageRootPath); 73 JavaFile packageDirectory = new JavaFile(options.packageRootPath);
69 resolvers.add(new PackageUriResolver([packageDirectory])); 74 resolvers.add(new PackageUriResolver([packageDirectory]));
70 } else { 75 } else {
71 PubPackageMapProvider pubPackageMapProvider = new PubPackageMapProvider( 76 PubPackageMapProvider pubPackageMapProvider = new PubPackageMapProvider(
72 PhysicalResourceProvider.INSTANCE, sdk, options.runPubList); 77 PhysicalResourceProvider.INSTANCE, sdk, options.runPubList);
73 PackageMapInfo packageMapInfo = pubPackageMapProvider.computePackageMap( 78 PackageMapInfo packageMapInfo = pubPackageMapProvider.computePackageMap(
74 PhysicalResourceProvider.INSTANCE.getResource('.')); 79 PhysicalResourceProvider.INSTANCE.getResource('.'));
75 Map<String, List<Folder>> packageMap = packageMapInfo.packageMap; 80 Map<String, List<Folder>> packageMap = packageMapInfo.packageMap;
76 if (packageMap != null) { 81 if (packageMap != null) {
77 resolvers.add(new PackageMapUriResolver( 82 resolvers.add(new PackageMapUriResolver(
78 PhysicalResourceProvider.INSTANCE, packageMap)); 83 PhysicalResourceProvider.INSTANCE, packageMap));
79 } 84 }
80 } 85 }
86
81 // File URI resolver must come last so that files inside "/lib" are 87 // File URI resolver must come last so that files inside "/lib" are
82 // are analyzed via "package:" URI's. 88 // are analyzed via "package:" URI's.
83 resolvers.add(new FileUriResolver()); 89 resolvers.add(new FileUriResolver());
84 return resolvers; 90 return resolvers;
85 } 91 }
86 92
87 String get sdkDir { 93 String get sdkDir {
88 if (options.dartSdkPath != null) { 94 if (options.dartSdkPath != null) {
89 return options.dartSdkPath; 95 return options.dartSdkPath;
90 } 96 }
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 210
205 /// Whether to show lint warnings. 211 /// Whether to show lint warnings.
206 bool enableLints = true; 212 bool enableLints = true;
207 213
208 /// The path to a `.packages` configuration file 214 /// The path to a `.packages` configuration file
209 String packageConfigPath; 215 String packageConfigPath;
210 216
211 /// The path to the package root. 217 /// The path to the package root.
212 String packageRootPath; 218 String packageRootPath;
213 219
220 /// If non-null, the function to use to run pub list. This is used to mock
221 /// out executions of pub list when testing the linter.
222 RunPubList runPubList = null;
223
214 /// Whether to show SDK warnings. 224 /// Whether to show SDK warnings.
215 bool showSdkWarnings = false; 225 bool showSdkWarnings = false;
216 226
227 /// Whether to use a mock SDK (to speed up testing).
228 bool useMockSdk = false;
229
217 /// Whether to show lints for the transitive closure of imported and exported 230 /// Whether to show lints for the transitive closure of imported and exported
218 /// libraries. 231 /// libraries.
219 bool visitTransitiveClosure = false; 232 bool visitTransitiveClosure = false;
220
221 /// If non-null, the function to use to run pub list. This is used to mock
222 /// out executions of pub list when testing the linter.
223 RunPubList runPubList = null;
224 } 233 }
225 234
226 /// Prints logging information comments to the [outSink] and error messages to 235 /// Prints logging information comments to the [outSink] and error messages to
227 /// [errorSink]. 236 /// [errorSink].
228 class StdLogger extends Logger { 237 class StdLogger extends Logger {
229 @override 238 @override
230 void logError(String message, [exception]) => errorSink.writeln(message); 239 void logError(String message, [exception]) => errorSink.writeln(message);
231 @override 240 @override
232 void logError2(String message, dynamic exception) => 241 void logError2(String message, dynamic exception) =>
233 errorSink.writeln(message); 242 errorSink.writeln(message);
234 @override 243 @override
235 void logInformation(String message, [exception]) => outSink.writeln(message); 244 void logInformation(String message, [exception]) => outSink.writeln(message);
236 @override 245 @override
237 void logInformation2(String message, dynamic exception) => 246 void logInformation2(String message, dynamic exception) =>
238 outSink.writeln(message); 247 outSink.writeln(message);
239 } 248 }
OLDNEW
« no previous file with comments | « no previous file | lib/src/linter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698