Skip to content

Commit daa3994

Browse files
committed
Fix following comma detection in code completion (#29503).
BUG= [email protected] Fixes: #29503 Review-Url: https://codereview.chromium.org/2849703002 .
1 parent 9635a84 commit daa3994

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,10 +330,17 @@ class ArgListContributor extends DartCompletionContributor {
330330
}
331331

332332
bool _isFollowedByAComma(DartCompletionRequest request) {
333+
// new A(^); NO
334+
// new A(one: 1, ^); NO
335+
// new A(^ , one: 1); YES
336+
// new A(^), ... NO
337+
338+
var containingNode = request.target.containingNode;
333339
var entity = request.target.entity;
334340
Token token =
335341
entity is AstNode ? entity.endToken : entity is Token ? entity : null;
336-
return token?.next?.type == TokenType.COMMA;
342+
return (token != containingNode?.endToken) &&
343+
token?.next?.type == TokenType.COMMA;
337344
}
338345

339346
bool _isInFlutterCreation(DartCompletionRequest request) {

pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -892,6 +892,31 @@ build() => new Row(
892892
selectionOffset: 10);
893893
}
894894

895+
test_ArgumentList_Flutter_InstanceCreationExpression_01() async {
896+
configureFlutterPkg({
897+
'src/widgets/framework.dart': flutter_framework_code,
898+
});
899+
900+
addTestSource('''
901+
import 'package:flutter/src/widgets/framework.dart';
902+
903+
build() => new Scaffold(
904+
appBar: new AppBar(
905+
^
906+
),
907+
);
908+
''');
909+
910+
// Don't generate children boilerplate.
911+
await computeSuggestions();
912+
913+
assertSuggest('color: ,',
914+
csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
915+
relevance: DART_RELEVANCE_NAMED_PARAMETER,
916+
defaultArgListString: null, // No default values.
917+
selectionOffset: 7);
918+
}
919+
895920
test_ArgumentList_Flutter_InstanceCreationExpression_1() async {
896921
configureFlutterPkg({
897922
'src/widgets/framework.dart': flutter_framework_code,

pkg/analysis_server/test/services/correction/flutter_util.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ String get flutter_framework_code => '''
1010
class Widget {}
1111
class RenderObjectWidget extends Widget {}
1212
class StatelessWidget extends Widget {}
13+
abstract class StatefulWidget extends Widget { }
1314
class SingleChildRenderObjectWidget extends RenderObjectWidget {}
1415
class Transform extends SingleChildRenderObjectWidget {}
1516
class ClipRect extends SingleChildRenderObjectWidget { ClipRect.rect(){} }
@@ -19,5 +20,7 @@ class Center extends StatelessWidget { Center({child: null, key: null}){}}
1920
class DefaultTextStyle extends StatelessWidget { DefaultTextStyle({child: null}){}}
2021
class Row extends Widget { Row({List<Widget> children: null, key: null}){}}
2122
class GestureDetector extends SingleChildRenderObjectWidget { GestureDetector({child: null, onTap: null}){}}
22-
class Scaffold extends Widget { Scaffold({body: null}){}}
23+
class AppBar extends StatefulWidget implements PreferredSizeWidget { AppBar(title: null, color: null, key: null) }
24+
class Scaffold extends Widget { Scaffold({body: null, PreferredSizeWidget appBar: null}){}}
25+
class PreferredSizeWidget implements Widget {}
2326
''';

0 commit comments

Comments
 (0)