blob: ef16571990a3106c1cb181cac3b26d6ffe082bc8 [file] [log] [blame] [edit]
// Copyright (c) 2018, 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/analysis/features.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/source/source.dart';
import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer/src/dart/scanner/reader.dart';
import 'package:analyzer/src/dart/scanner/scanner.dart';
import 'package:analyzer/src/generated/parser.dart';
CompilationUnit parseText(Source source, String text, FeatureSet featureSet) {
CharSequenceReader reader = CharSequenceReader(text);
Scanner scanner = Scanner(source, reader, DiagnosticListener.nullListener)
..configureFeatures(
featureSetForOverriding: featureSet,
featureSet: featureSet,
);
Token token = scanner.tokenize();
LineInfo lineInfo = LineInfo(scanner.lineStarts);
// Pass the feature set from the scanner to the parser
// because the scanner may have detected a language version comment
// and downgraded the feature set it holds.
Parser parser = Parser(
source,
DiagnosticListener.nullListener,
featureSet: scanner.featureSet,
languageVersion: LibraryLanguageVersion(
package: ExperimentStatus.currentVersion,
override: null,
),
lineInfo: lineInfo,
);
var unit = parser.parseCompilationUnit(token);
return unit;
}