mirror of
https://github.com/dart-lang/sdk
synced 2024-10-03 23:16:55 +00:00
Add support for analyzing analysis options and pubspec files
Change-Id: I2aa05e5822b2993d0f1e903396c816b52e2292b4 Reviewed-on: https://dart-review.googlesource.com/41566 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
b019045393
commit
f5942a5ce0
|
@ -27,10 +27,12 @@ import 'package:analyzer/src/generated/source.dart';
|
|||
import 'package:analyzer/src/generated/source_io.dart';
|
||||
import 'package:analyzer/src/generated/utilities_general.dart'
|
||||
show PerformanceTag;
|
||||
import 'package:analyzer/src/pubspec/pubspec_validator.dart';
|
||||
import 'package:analyzer/src/source/source_resource.dart';
|
||||
import 'package:analyzer/src/summary/idl.dart';
|
||||
import 'package:analyzer/src/summary/package_bundle_reader.dart';
|
||||
import 'package:analyzer/src/summary/summary_sdk.dart' show SummaryBasedDartSdk;
|
||||
import 'package:analyzer/src/task/options.dart';
|
||||
import 'package:analyzer_cli/src/analyzer_impl.dart';
|
||||
import 'package:analyzer_cli/src/batch_mode.dart';
|
||||
import 'package:analyzer_cli/src/build_mode.dart';
|
||||
|
@ -318,16 +320,52 @@ class Driver implements CommandLineStarter {
|
|||
}
|
||||
|
||||
for (Source source in sourcesToAnalyze) {
|
||||
SourceKind sourceKind = analysisDriver != null
|
||||
? await analysisDriver.getSourceKind(source.fullName)
|
||||
: context.computeKindOf(source);
|
||||
if (sourceKind == SourceKind.PART) {
|
||||
partSources.add(source);
|
||||
continue;
|
||||
if (analysisDriver != null &&
|
||||
(source.shortName == AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE ||
|
||||
source.shortName == AnalysisEngine.ANALYSIS_OPTIONS_FILE)) {
|
||||
file_system.File file = resourceProvider.getFile(source.fullName);
|
||||
String content = file.readAsStringSync();
|
||||
LineInfo lineInfo = new LineInfo.fromContent(content);
|
||||
List<AnalysisError> errors =
|
||||
GenerateOptionsErrorsTask.analyzeAnalysisOptions(
|
||||
file.createSource(), content, analysisDriver.sourceFactory);
|
||||
formatter.formatErrors([new AnalysisErrorInfoImpl(errors, lineInfo)]);
|
||||
for (AnalysisError error in errors) {
|
||||
allResult = allResult.max(determineProcessedSeverity(
|
||||
error, options, _context.analysisOptions));
|
||||
}
|
||||
} else if (source.shortName == AnalysisEngine.PUBSPEC_YAML_FILE) {
|
||||
try {
|
||||
file_system.File file = resourceProvider.getFile(source.fullName);
|
||||
String content = file.readAsStringSync();
|
||||
YamlNode node = loadYamlNode(content);
|
||||
if (node is YamlMap) {
|
||||
PubspecValidator validator =
|
||||
new PubspecValidator(resourceProvider, file.createSource());
|
||||
LineInfo lineInfo = new LineInfo.fromContent(content);
|
||||
List<AnalysisError> errors = validator.validate(node.nodes);
|
||||
formatter
|
||||
.formatErrors([new AnalysisErrorInfoImpl(errors, lineInfo)]);
|
||||
for (AnalysisError error in errors) {
|
||||
allResult = allResult.max(determineProcessedSeverity(
|
||||
error, options, _context.analysisOptions));
|
||||
}
|
||||
}
|
||||
} catch (exception) {
|
||||
// If the file cannot be analyzed, ignore it.
|
||||
}
|
||||
} else {
|
||||
SourceKind sourceKind = analysisDriver != null
|
||||
? await analysisDriver.getSourceKind(source.fullName)
|
||||
: context.computeKindOf(source);
|
||||
if (sourceKind == SourceKind.PART) {
|
||||
partSources.add(source);
|
||||
continue;
|
||||
}
|
||||
ErrorSeverity status = await _runAnalyzer(source, options, formatter);
|
||||
allResult = allResult.max(status);
|
||||
libUris.add(source.uri);
|
||||
}
|
||||
ErrorSeverity status = await _runAnalyzer(source, options, formatter);
|
||||
allResult = allResult.max(status);
|
||||
libUris.add(source.uri);
|
||||
}
|
||||
|
||||
formatter.flush();
|
||||
|
|
|
@ -35,6 +35,7 @@ main() {
|
|||
defineReflectiveTests(LinterTest);
|
||||
defineReflectiveTests(LinterTest_PreviewDart2);
|
||||
defineReflectiveTests(LinterTest_UseCFE);
|
||||
defineReflectiveTests(NonDartFilesTest);
|
||||
defineReflectiveTests(OptionsTest);
|
||||
defineReflectiveTests(OptionsTest_PreviewDart2);
|
||||
defineReflectiveTests(OptionsTest_UseCFE);
|
||||
|
@ -778,6 +779,44 @@ class LinterTest_UseCFE extends LinterTest {
|
|||
bool get useCFE => true;
|
||||
}
|
||||
|
||||
@reflectiveTest
|
||||
class NonDartFilesTest extends BaseTest {
|
||||
test_analysisOptionsYaml() async {
|
||||
await withTempDirAsync((tempDir) async {
|
||||
String filePath =
|
||||
path.join(tempDir, AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE);
|
||||
new File(filePath).writeAsStringSync('''
|
||||
analyzer:
|
||||
string-mode: true
|
||||
''');
|
||||
await drive(filePath);
|
||||
expect(
|
||||
bulletToDash(outSink),
|
||||
contains(
|
||||
"warning - The option 'string-mode' isn't supported by 'analyzer'"));
|
||||
expect(exitCode, 0);
|
||||
});
|
||||
}
|
||||
|
||||
test_pubspecYaml() async {
|
||||
await withTempDirAsync((tempDir) async {
|
||||
String filePath = path.join(tempDir, AnalysisEngine.PUBSPEC_YAML_FILE);
|
||||
new File(filePath).writeAsStringSync('''
|
||||
name: foo
|
||||
flutter:
|
||||
assets:
|
||||
doesNotExist.gif
|
||||
''');
|
||||
await drive(filePath);
|
||||
expect(
|
||||
bulletToDash(outSink),
|
||||
contains(
|
||||
"warning - The value of the 'asset' field is expected to be a list of relative file paths"));
|
||||
expect(exitCode, 0);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@reflectiveTest
|
||||
class OptionsTest extends BaseTest {
|
||||
String get optionsFileName => AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE;
|
||||
|
|
Loading…
Reference in a new issue