Suggest named arguments anywhere when named_arguments_anywhere.
Change-Id: I1aefd0c7f4c4e140e5505a2b91a65a8c3b1e449a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/222080
Reviewed-by: Phil Quitslund <pquitslund@google.com>
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
index a6ff620..21f5f37 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
@@ -7,6 +7,7 @@
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
import 'package:analysis_server/src/utilities/flutter.dart';
+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';
@@ -100,7 +101,9 @@
if (_isEditingNamedArgLabel() ||
_isAppendingToArgList() ||
_isAddingLabelToPositional()) {
- if (requiredCount == 0 || requiredCount < _argCount()) {
+ if (request.featureSet.isEnabled(Feature.named_arguments_anywhere) ||
+ requiredCount == 0 ||
+ requiredCount < _argCount()) {
// If there's a replacement range that starts at the caret, it will be
// for an identifier that is not the named label and therefore it should
// not be replaced.
diff --git a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
index 4c2e182..c2d8833 100644
--- a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
@@ -172,6 +172,15 @@
assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
}
+ Future<void> test_Annotation_local_constructor_named_param_12() async {
+ addTestSource('''
+class A { const A(int one, int two, int three, {int four, String five:
+ 'defaultValue'}); }
+@A(1, ^, 3) main() { }''');
+ await computeSuggestions();
+ assertSuggestions(['four: ', 'five: ']);
+ }
+
Future<void> test_Annotation_local_constructor_named_param_2() async {
addTestSource('''
class A { const A({int one, String two: 'defaultValue'}); }
@@ -239,6 +248,7 @@
Future<void> test_Annotation_local_constructor_named_param_negative() async {
addTestSource('''
+// @dart = 2.15
class A { const A(int one, int two, int three, {int four, String five:
'defaultValue'}); }
@A(1, ^, 3) main() { }''');
@@ -660,6 +670,7 @@
expect(String arg1, int arg2, {bool arg3}) { }
void baz() { }''');
addTestSource('''
+ // @dart = 2.15
import 'a.dart'
class B { }
String bar() => true;
@@ -676,6 +687,7 @@
expect(String arg1, int arg2, {bool arg3}) { }
void baz() { }''');
addTestSource('''
+ // @dart = 2.15
import 'a.dart'
class B { }
String bar() => true;
@@ -692,6 +704,7 @@
expect(String arg1, int arg2, {bool arg3}) { }
void baz() { }''');
addTestSource('''
+ // @dart = 2.15
import 'a.dart'
class B { }
String bar() => true;
@@ -708,6 +721,7 @@
expect(String arg1, int arg2, {bool arg3}) { }
void baz() { }''');
addTestSource('''
+ // @dart = 2.15
import 'a.dart'
class B { }
String bar() => true;
@@ -987,6 +1001,7 @@
Future<void> test_ArgumentList_local_function_3a() async {
// ArgumentList MethodInvocation ExpressionStatement Block
addTestSource('''
+ // @dart = 2.15
expect(arg1, int arg2, {bool arg3}) { }
class B { }
String bar() => true;
@@ -998,6 +1013,7 @@
Future<void> test_ArgumentList_local_function_3b() async {
// ArgumentList MethodInvocation ExpressionStatement Block
addTestSource('''
+ // @dart = 2.15
expect(arg1, int arg2, {bool arg3}) { }
class B { }
String bar() => true;
@@ -1009,6 +1025,7 @@
Future<void> test_ArgumentList_local_function_3c() async {
// ArgumentList MethodInvocation ExpressionStatement Block
addTestSource('''
+ // @dart = 2.15
expect(arg1, int arg2, {bool arg3}) { }
class B { }
String bar() => true;
@@ -1020,6 +1037,7 @@
Future<void> test_ArgumentList_local_function_3d() async {
// ArgumentList MethodInvocation ExpressionStatement Block
addTestSource('''
+ // @dart = 2.15
expect(arg1, int arg2, {bool arg3}) { }
class B { }
String bar() => true;