blob: 9ff1b29d35ce6b17fa1babc2e2c867683b9d9067 [file] [log] [blame]
// 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/file_system/file_system.dart';
import 'package:pub_semver/pub_semver.dart';
import 'package:yaml/yaml.dart';
/// A utility class used to extract the SDK version constraint from a
/// `pubspec.yaml` file.
class SdkConstraintExtractor {
/// The file from which the constraint is to be extracted.
final File pubspecFile;
/// The version range that was
VersionConstraint _constraint;
/// Initialize a newly created extractor to extract the SDK version constraint
/// from the given `pubspec.yaml` file.
SdkConstraintExtractor(this.pubspecFile);
/// Return the range of supported versions.
VersionConstraint constraint() {
if (_constraint == null) {
try {
String constraintText = _getConstraintText();
if (constraintText != null) {
_constraint = new VersionConstraint.parse(constraintText);
}
} catch (e) {
// Return `null` by falling through without setting `_versionRange`.
}
}
return _constraint;
}
/// Return the constraint text following "sdk:".
String _getConstraintText() {
String fileContent = pubspecFile.readAsStringSync();
YamlDocument document = loadYamlDocument(fileContent);
YamlNode contents = document.contents;
if (contents is YamlMap) {
var environment = contents['environment'];
if (environment is YamlMap) {
var sdk = environment['sdk'];
if (sdk is String) {
return sdk;
} else if (sdk is YamlScalar) {
return sdk.toString();
}
}
}
return null;
}
}