blob: 11d36cd584277419ef0f3d6fe2254af445dab305 [file] [log] [blame]
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/diagnostic/diagnostic.dart';
import 'package:analyzer/source/file_source.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/clients/build_resolvers/build_resolvers.dart';
import 'package:analyzer/src/dart/scanner/reader.dart';
import 'package:analyzer/src/dart/scanner/scanner.dart';
import 'package:analyzer/src/generated/engine.dart' show RecordingErrorListener;
import 'package:analyzer/src/generated/parser.dart';
import 'package:analyzer_testing/resource_provider_mixin.dart';
class ParseBase with ResourceProviderMixin {
/// Override this to change the analysis options for a given set of tests.
AnalysisOptions get analysisOptions => AnalysisOptionsImpl();
ParseResult parseUnit(String path) {
var file = getFile(path);
var source = FileSource(file);
var content = file.readAsStringSync();
var featureSet = analysisOptions.contextFeatures;
var errorListener = RecordingErrorListener();
var reader = CharSequenceReader(content);
var scanner = Scanner(source, reader, errorListener)..configureFeatures(
featureSetForOverriding: featureSet,
featureSet: featureSet,
);
var token = scanner.tokenize();
var lineInfo = LineInfo(scanner.lineStarts);
var languageVersion = LibraryLanguageVersion(
package: ExperimentStatus.currentVersion,
override: scanner.overrideVersion,
);
featureSet = scanner.featureSet;
var parser = Parser(
source,
errorListener,
featureSet: featureSet,
languageVersion: languageVersion,
lineInfo: lineInfo,
);
var unit = parser.parseCompilationUnit(token);
return ParseResult(
path,
content,
unit.lineInfo,
unit,
errorListener.errors,
);
}
}
class ParseResult {
final String path;
final String content;
final LineInfo lineInfo;
final CompilationUnit unit;
final List<Diagnostic> diagnostics;
ParseResult(
this.path,
this.content,
this.lineInfo,
this.unit,
this.diagnostics,
);
}