mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 00:58:29 +00:00
Use Feature to specify experiments.
Change-Id: Ide1a58c93cfc4920dff3ab2f52113434de93fff0 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/288162 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
parent
c58d445fa8
commit
fce81082c0
|
@ -3,6 +3,7 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
import 'package:analyzer/dart/analysis/analysis_context.dart';
|
import 'package:analyzer/dart/analysis/analysis_context.dart';
|
||||||
|
import 'package:analyzer/dart/analysis/features.dart';
|
||||||
import 'package:analyzer/dart/analysis/results.dart';
|
import 'package:analyzer/dart/analysis/results.dart';
|
||||||
import 'package:analyzer/dart/analysis/session.dart';
|
import 'package:analyzer/dart/analysis/session.dart';
|
||||||
import 'package:analyzer/file_system/file_system.dart';
|
import 'package:analyzer/file_system/file_system.dart';
|
||||||
|
@ -44,12 +45,12 @@ class AbstractContextTest with ResourceProviderMixin {
|
||||||
|
|
||||||
/// Return a list of the experiments that are to be enabled for tests in this
|
/// Return a list of the experiments that are to be enabled for tests in this
|
||||||
/// class, an empty list if there are no experiments that should be enabled.
|
/// class, an empty list if there are no experiments that should be enabled.
|
||||||
List<String> get experiments => [
|
List<Feature> get experiments => [
|
||||||
EnableString.class_modifiers,
|
Feature.class_modifiers,
|
||||||
EnableString.macros,
|
Feature.macros,
|
||||||
EnableString.patterns,
|
Feature.patterns,
|
||||||
EnableString.records,
|
Feature.records,
|
||||||
EnableString.sealed_class,
|
Feature.sealed_class,
|
||||||
];
|
];
|
||||||
|
|
||||||
String get latestLanguageVersion =>
|
String get latestLanguageVersion =>
|
||||||
|
@ -105,7 +106,7 @@ class AbstractContextTest with ResourceProviderMixin {
|
||||||
|
|
||||||
/// Create an analysis options file based on the given arguments.
|
/// Create an analysis options file based on the given arguments.
|
||||||
void createAnalysisOptionsFile({
|
void createAnalysisOptionsFile({
|
||||||
List<String>? experiments,
|
List<Feature>? experiments,
|
||||||
List<String>? cannotIgnore,
|
List<String>? cannotIgnore,
|
||||||
bool? implicitCasts,
|
bool? implicitCasts,
|
||||||
List<String>? lints,
|
List<String>? lints,
|
||||||
|
@ -119,7 +120,12 @@ class AbstractContextTest with ResourceProviderMixin {
|
||||||
if (experiments != null) {
|
if (experiments != null) {
|
||||||
buffer.writeln(' enable-experiment:');
|
buffer.writeln(' enable-experiment:');
|
||||||
for (var experiment in experiments) {
|
for (var experiment in experiments) {
|
||||||
buffer.writeln(' - $experiment');
|
final experimentalFlag = experiment.experimentalFlag;
|
||||||
|
if (experimentalFlag != null) {
|
||||||
|
buffer.writeln(' - ${experiment.experimentalFlag}');
|
||||||
|
} else {
|
||||||
|
throw ArgumentError('Not experimental: $experiment');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ import 'dart:async';
|
||||||
import 'package:analysis_server/protocol/protocol.dart';
|
import 'package:analysis_server/protocol/protocol.dart';
|
||||||
import 'package:analysis_server/protocol/protocol_constants.dart';
|
import 'package:analysis_server/protocol/protocol_constants.dart';
|
||||||
import 'package:analysis_server/protocol/protocol_generated.dart';
|
import 'package:analysis_server/protocol/protocol_generated.dart';
|
||||||
import 'package:analyzer/dart/analysis/features.dart';
|
|
||||||
import 'package:analyzer/source/source_range.dart';
|
import 'package:analyzer/source/source_range.dart';
|
||||||
import 'package:analyzer/src/test_utilities/test_code_format.dart';
|
import 'package:analyzer/src/test_utilities/test_code_format.dart';
|
||||||
import 'package:analyzer_plugin/protocol/protocol_common.dart';
|
import 'package:analyzer_plugin/protocol/protocol_common.dart';
|
||||||
|
@ -26,12 +25,6 @@ void main() {
|
||||||
|
|
||||||
@reflectiveTest
|
@reflectiveTest
|
||||||
class AnalysisNotificationHighlightsTest extends HighlightsTestSupport {
|
class AnalysisNotificationHighlightsTest extends HighlightsTestSupport {
|
||||||
@override
|
|
||||||
List<String> get experiments => [
|
|
||||||
Feature.inline_class.enableString,
|
|
||||||
...super.experiments,
|
|
||||||
];
|
|
||||||
|
|
||||||
void assertHighlightText(TestCode testCode, int index, String expected) {
|
void assertHighlightText(TestCode testCode, int index, String expected) {
|
||||||
var actual = _getHighlightText(testCode, index);
|
var actual = _getHighlightText(testCode, index);
|
||||||
if (actual != expected) {
|
if (actual != expected) {
|
||||||
|
|
|
@ -27,7 +27,7 @@ import 'src/utilities/mock_packages.dart';
|
||||||
|
|
||||||
/// TODO(scheglov) this is duplicate
|
/// TODO(scheglov) this is duplicate
|
||||||
class AnalysisOptionsFileConfig {
|
class AnalysisOptionsFileConfig {
|
||||||
final List<String> experiments;
|
final List<Feature> experiments;
|
||||||
final bool implicitCasts;
|
final bool implicitCasts;
|
||||||
final bool implicitDynamic;
|
final bool implicitDynamic;
|
||||||
final List<String> lints;
|
final List<String> lints;
|
||||||
|
@ -52,7 +52,12 @@ class AnalysisOptionsFileConfig {
|
||||||
if (experiments.isNotEmpty) {
|
if (experiments.isNotEmpty) {
|
||||||
buffer.writeln(' enable-experiment:');
|
buffer.writeln(' enable-experiment:');
|
||||||
for (var experiment in experiments) {
|
for (var experiment in experiments) {
|
||||||
buffer.writeln(' - $experiment');
|
final experimentalFlag = experiment.experimentalFlag;
|
||||||
|
if (experimentalFlag != null) {
|
||||||
|
buffer.writeln(' - ${experiment.experimentalFlag}');
|
||||||
|
} else {
|
||||||
|
throw ArgumentError('Not experimental: $experiment');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buffer.writeln(' language:');
|
buffer.writeln(' language:');
|
||||||
|
@ -214,15 +219,13 @@ class ContextResolutionTest with ResourceProviderMixin {
|
||||||
}
|
}
|
||||||
|
|
||||||
class PubPackageAnalysisServerTest extends ContextResolutionTest {
|
class PubPackageAnalysisServerTest extends ContextResolutionTest {
|
||||||
// If experiments are needed,
|
List<Feature> get experiments => [
|
||||||
// add `import 'package:analyzer/dart/analysis/features.dart';`
|
Feature.class_modifiers,
|
||||||
// and list the necessary experiments here.
|
Feature.inline_class,
|
||||||
List<String> get experiments => [
|
Feature.macros,
|
||||||
Feature.class_modifiers.enableString,
|
Feature.patterns,
|
||||||
Feature.macros.enableString,
|
Feature.records,
|
||||||
Feature.patterns.enableString,
|
Feature.sealed_class,
|
||||||
Feature.records.enableString,
|
|
||||||
Feature.sealed_class.enableString,
|
|
||||||
];
|
];
|
||||||
|
|
||||||
/// The path that is not in [workspaceRootPath], contains external packages.
|
/// The path that is not in [workspaceRootPath], contains external packages.
|
||||||
|
|
|
@ -11,7 +11,6 @@ import 'package:analysis_server/src/provisional/completion/dart/completion_dart.
|
||||||
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
|
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
|
||||||
import 'package:analysis_server/src/services/completion/dart/imported_reference_contributor.dart';
|
import 'package:analysis_server/src/services/completion/dart/imported_reference_contributor.dart';
|
||||||
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
|
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
|
||||||
import 'package:analyzer/src/dart/analysis/experiments.dart';
|
|
||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||||
|
|
||||||
|
@ -2394,7 +2393,6 @@ class B extends A {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> test_function_parameters_nnbd_required() async {
|
Future<void> test_function_parameters_nnbd_required() async {
|
||||||
createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
|
|
||||||
resolveSource('$testPackageLibPath/a.dart', '''
|
resolveSource('$testPackageLibPath/a.dart', '''
|
||||||
void m(int? nullable, int nonNullable) {}
|
void m(int? nullable, int nonNullable) {}
|
||||||
''');
|
''');
|
||||||
|
@ -2417,7 +2415,6 @@ void f() {^}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> test_function_parameters_nnbd_required_into_legacy() async {
|
Future<void> test_function_parameters_nnbd_required_into_legacy() async {
|
||||||
createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
|
|
||||||
resolveSource('$testPackageLibPath/a.dart', '''
|
resolveSource('$testPackageLibPath/a.dart', '''
|
||||||
void m(int? nullable, int nonNullable) {}
|
void m(int? nullable, int nonNullable) {}
|
||||||
''');
|
''');
|
||||||
|
@ -2441,7 +2438,6 @@ void f() {^}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> test_function_parameters_nnbd_required_legacy() async {
|
Future<void> test_function_parameters_nnbd_required_legacy() async {
|
||||||
createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
|
|
||||||
resolveSource('$testPackageLibPath/a.dart', '''
|
resolveSource('$testPackageLibPath/a.dart', '''
|
||||||
// @dart = 2.8
|
// @dart = 2.8
|
||||||
void m(int param) {}
|
void m(int param) {}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import 'package:analysis_server/src/services/correction/bulk_fix_processor.dart'
|
||||||
import 'package:analysis_server/src/services/correction/change_workspace.dart';
|
import 'package:analysis_server/src/services/correction/change_workspace.dart';
|
||||||
import 'package:analysis_server/src/services/correction/fix.dart';
|
import 'package:analysis_server/src/services/correction/fix.dart';
|
||||||
import 'package:analysis_server/src/services/correction/fix_internal.dart';
|
import 'package:analysis_server/src/services/correction/fix_internal.dart';
|
||||||
|
import 'package:analyzer/dart/analysis/features.dart';
|
||||||
import 'package:analyzer/error/error.dart';
|
import 'package:analyzer/error/error.dart';
|
||||||
import 'package:analyzer/src/dart/analysis/byte_store.dart';
|
import 'package:analyzer/src/dart/analysis/byte_store.dart';
|
||||||
import 'package:analyzer/src/dart/error/lint_codes.dart';
|
import 'package:analyzer/src/dart/error/lint_codes.dart';
|
||||||
|
@ -87,7 +88,7 @@ abstract class BulkFixProcessorTest extends AbstractSingleUnitTest {
|
||||||
late BulkFixProcessor processor;
|
late BulkFixProcessor processor;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<String> get experiments => const [];
|
List<Feature> get experiments => const [];
|
||||||
|
|
||||||
/// Return the lint code being tested.
|
/// Return the lint code being tested.
|
||||||
String? get lintCode => null;
|
String? get lintCode => null;
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
import 'package:analysis_server/src/services/correction/fix.dart';
|
import 'package:analysis_server/src/services/correction/fix.dart';
|
||||||
import 'package:analysis_server/src/services/linter/lint_names.dart';
|
import 'package:analysis_server/src/services/linter/lint_names.dart';
|
||||||
|
import 'package:analyzer/dart/analysis/features.dart';
|
||||||
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
|
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
|
||||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||||
|
|
||||||
|
@ -19,7 +20,7 @@ void main() {
|
||||||
@reflectiveTest
|
@reflectiveTest
|
||||||
class RemoveBreakBulkTest extends BulkFixProcessorTest {
|
class RemoveBreakBulkTest extends BulkFixProcessorTest {
|
||||||
@override
|
@override
|
||||||
List<String> get experiments => ['patterns', 'records'];
|
List<Feature> get experiments => [Feature.patterns, Feature.records];
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get lintCode => LintNames.unnecessary_breaks;
|
String get lintCode => LintNames.unnecessary_breaks;
|
||||||
|
@ -53,7 +54,7 @@ f() {
|
||||||
@reflectiveTest
|
@reflectiveTest
|
||||||
class RemoveBreakTest extends FixProcessorLintTest {
|
class RemoveBreakTest extends FixProcessorLintTest {
|
||||||
@override
|
@override
|
||||||
List<String> get experiments => ['patterns', 'records'];
|
List<Feature> get experiments => [Feature.patterns, Feature.records];
|
||||||
|
|
||||||
@override
|
@override
|
||||||
FixKind get kind => DartFixKind.REMOVE_BREAK;
|
FixKind get kind => DartFixKind.REMOVE_BREAK;
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
import 'package:analysis_server/src/services/correction/fix.dart';
|
import 'package:analysis_server/src/services/correction/fix.dart';
|
||||||
import 'package:analyzer/src/dart/analysis/experiments.dart';
|
|
||||||
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
|
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
|
||||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||||
|
|
||||||
|
@ -64,8 +63,6 @@ const c = a == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> test_gtGtGtOperator() async {
|
Future<void> test_gtGtGtOperator() async {
|
||||||
writeTestPackageConfig(languageVersion: latestLanguageVersion);
|
|
||||||
createAnalysisOptionsFile(experiments: [EnableString.triple_shift]);
|
|
||||||
await testUpdate(content: '''
|
await testUpdate(content: '''
|
||||||
class C {
|
class C {
|
||||||
C operator >>>(C other) => this;
|
C operator >>>(C other) => this;
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
import 'package:analysis_server/src/utilities/selection.dart';
|
import 'package:analysis_server/src/utilities/selection.dart';
|
||||||
import 'package:analyzer/dart/ast/ast.dart';
|
import 'package:analyzer/dart/ast/ast.dart';
|
||||||
import 'package:analyzer/source/source_range.dart';
|
import 'package:analyzer/source/source_range.dart';
|
||||||
import 'package:analyzer/src/dart/analysis/experiments.dart';
|
|
||||||
import 'package:analyzer/src/test_utilities/test_code_format.dart';
|
import 'package:analyzer/src/test_utilities/test_code_format.dart';
|
||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||||
|
@ -21,12 +20,6 @@ void main() {
|
||||||
|
|
||||||
@reflectiveTest
|
@reflectiveTest
|
||||||
class SelectionTest extends AbstractSingleUnitTest {
|
class SelectionTest extends AbstractSingleUnitTest {
|
||||||
@override
|
|
||||||
List<String> get experiments => [
|
|
||||||
...super.experiments,
|
|
||||||
EnableString.patterns,
|
|
||||||
];
|
|
||||||
|
|
||||||
Future<void> assertMembers(
|
Future<void> assertMembers(
|
||||||
{String prefix = '', required String postfix}) async {
|
{String prefix = '', required String postfix}) async {
|
||||||
var nodes = await nodesInRange('''
|
var nodes = await nodesInRange('''
|
||||||
|
|
Loading…
Reference in a new issue