Analysis Options error notifications.

R=brianwilkerson@google.com, scheglov@google.com

Review URL: https://codereview.chromium.org/1411013003 .
This commit is contained in:
pq 2015-10-21 09:59:19 -07:00
parent b74ce18b0c
commit 6c85fe785a
5 changed files with 32 additions and 9 deletions

View file

@ -36,6 +36,7 @@ import 'package:analyzer/src/generated/utilities_collection.dart';
import 'package:analyzer/src/generated/utilities_general.dart';
import 'package:analyzer/src/task/dart.dart';
import 'package:analyzer/src/task/html.dart';
import 'package:analyzer/src/task/options.dart';
import 'package:analyzer/task/dart.dart';
import 'package:analyzer/task/general.dart';
import 'package:analyzer/task/html.dart';
@ -327,6 +328,8 @@ class GetHandler {
results.add(HTML_DOCUMENT_ERRORS);
results.add(HTML_ERRORS);
results.add(REFERENCED_LIBRARIES);
} else if (AnalysisEngine.isAnalysisOptionsFileName(name)) {
results.add(ANALYSIS_OPTIONS_ERRORS);
}
} else if (target is LibrarySpecificUnit) {
results.add(COMPILATION_UNIT_CONSTANTS);

View file

@ -36,6 +36,8 @@ main() {
List<AnalysisError> get errors => filesErrors[testFile];
List<AnalysisError> get optionsFileErrors => filesErrors[optionsFilePath];
String get optionsFilePath => '$projectPath/.analysis_options';
AnalysisContext get testContext => server.getContainingContext(testFile);
@ -104,6 +106,19 @@ analyzer:
verifyStrongMode(enabled: true);
}
test_options_file_parse_error() async {
addOptionsFile('''
; #bang
''');
setAnalysisRoot();
await waitForTasksFinished();
expect(optionsFileErrors, hasLength(1));
expect(optionsFileErrors.first.severity, AnalysisErrorSeverity.ERROR);
expect(optionsFileErrors.first.type, AnalysisErrorType.COMPILE_TIME_ERROR);
}
test_options_file_removed() async {
setStrongMode(true);

View file

@ -33,12 +33,14 @@ class AnalysisOptionsProvider {
if (optionsSource == null) {
return options;
}
var doc = loadYaml(optionsSource);
YamlNode doc = loadYamlNode(optionsSource);
// Empty options.
if (doc is YamlScalar && doc.value == null) {
return options;
}
if ((doc != null) && (doc is! YamlMap)) {
throw new OptionsFormatException(
'Bad options file format (expected map, got ${doc.runtimeType})\n'
'contents of options file:\n'
'$optionsSource\n',
'Bad options file format (expected map, got ${doc.runtimeType})',
doc.span);
}
if (doc is YamlMap) {

View file

@ -13,6 +13,7 @@ import 'package:analyzer/src/task/dart_work_manager.dart';
import 'package:analyzer/src/task/general.dart';
import 'package:analyzer/src/task/html.dart';
import 'package:analyzer/src/task/html_work_manager.dart';
import 'package:analyzer/src/task/options_work_manager.dart';
import 'package:analyzer/task/model.dart';
import 'package:plugin/plugin.dart';
@ -235,6 +236,8 @@ class EnginePlugin implements Plugin {
(InternalAnalysisContext context) => new DartWorkManager(context));
registerExtension(taskId,
(InternalAnalysisContext context) => new HtmlWorkManager(context));
registerExtension(taskId,
(InternalAnalysisContext context) => new OptionsWorkManager(context));
}
/**

View file

@ -43,7 +43,7 @@ main() {
});
group('AnalysisOptionsProvider', () {
setUp(() {
buildResourceProvider(true);
buildResourceProvider(emptyAnalysisOptions: true);
});
tearDown(() {
clearResourceProvider();
@ -57,7 +57,7 @@ main() {
});
group('AnalysisOptionsProvider', () {
setUp(() {
buildResourceProvider(false, true);
buildResourceProvider(badAnalysisOptions: true);
});
tearDown(() {
clearResourceProvider();
@ -79,15 +79,15 @@ main() {
MemoryResourceProvider resourceProvider;
buildResourceProvider([bool emptyAnalysisOptions = false,
bool badAnalysisOptions = false]) {
buildResourceProvider({bool emptyAnalysisOptions : false,
bool badAnalysisOptions : false}) {
resourceProvider = new MemoryResourceProvider();
resourceProvider.newFolder('/empty');
resourceProvider.newFolder('/tmp');
if (badAnalysisOptions) {
resourceProvider.newFile('/.analysis_options', r''':''');
} else if (emptyAnalysisOptions) {
resourceProvider.newFile('/.analysis_options', r'''''');
resourceProvider.newFile('/.analysis_options', r'''#empty''');
} else {
resourceProvider.newFile(
'/.analysis_options',