Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Unified Diff: pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart

Issue 1509193003: suggest async* and sync* - fixes 24554 (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: merge Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index 57beb276857e1b8aed0591155b32c1f9e90d655e..1a0d1d53655a73da43920527633f41fac0ed4c3b 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -13,7 +13,9 @@ import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/scanner.dart';
const ASYNC = 'async';
+const ASYNC_STAR = 'async*';
const AWAIT = 'await';
+const SYNC_STAR = 'sync*';
/**
* A contributor for calculating `completion.getSuggestions` request results
@@ -47,8 +49,19 @@ class _KeywordVisitor extends GeneralizingAstVisitor {
@override
visitArgumentList(ArgumentList node) {
- if (entity == node.rightParenthesis ||
- (entity is SimpleIdentifier && node.arguments.contains(entity))) {
+ if (entity == node.rightParenthesis) {
+ _addExpressionKeywords(node);
+ Token previous = (entity as Token).previous;
+ if (previous.isSynthetic) {
+ previous = previous.previous;
+ }
+ if (previous.lexeme == ')') {
+ _addSuggestion2(ASYNC);
+ _addSuggestion2(ASYNC_STAR);
+ _addSuggestion2(SYNC_STAR);
+ }
+ }
+ if (entity is SimpleIdentifier && node.arguments.contains(entity)) {
_addExpressionKeywords(node);
}
}
@@ -69,6 +82,8 @@ class _KeywordVisitor extends GeneralizingAstVisitor {
}
if (previous.lexeme == ')' && next.lexeme == '{') {
_addSuggestion2(ASYNC);
+ _addSuggestion2(ASYNC_STAR);
+ _addSuggestion2(SYNC_STAR);
}
}
}
@@ -92,6 +107,8 @@ class _KeywordVisitor extends GeneralizingAstVisitor {
ClassMember previous = index > 0 ? node.members[index - 1] : null;
if (previous is MethodDeclaration && previous.body is EmptyFunctionBody) {
_addSuggestion2(ASYNC);
+ _addSuggestion2(ASYNC_STAR);
+ _addSuggestion2(SYNC_STAR);
}
} else {
_addClassDeclarationKeywords(node);
@@ -138,6 +155,8 @@ class _KeywordVisitor extends GeneralizingAstVisitor {
previousMember.functionExpression is FunctionExpression &&
previousMember.functionExpression.body is EmptyFunctionBody) {
_addSuggestion2(ASYNC, relevance: DART_RELEVANCE_HIGH);
+ _addSuggestion2(ASYNC_STAR, relevance: DART_RELEVANCE_HIGH);
+ _addSuggestion2(SYNC_STAR, relevance: DART_RELEVANCE_HIGH);
}
_addCompilationUnitKeywords();
}
@@ -200,8 +219,13 @@ class _KeywordVisitor extends GeneralizingAstVisitor {
@override
visitFunctionExpression(FunctionExpression node) {
if (entity == node.body) {
- if (!node.body.isAsynchronous) {
+ FunctionBody body = node.body;
+ if (!body.isAsynchronous) {
_addSuggestion2(ASYNC, relevance: DART_RELEVANCE_HIGH);
+ if (body is! ExpressionFunctionBody) {
+ _addSuggestion2(ASYNC_STAR, relevance: DART_RELEVANCE_HIGH);
+ _addSuggestion2(SYNC_STAR, relevance: DART_RELEVANCE_HIGH);
+ }
}
if (node.body is EmptyFunctionBody &&
node.parent is FunctionDeclaration &&
@@ -266,8 +290,14 @@ class _KeywordVisitor extends GeneralizingAstVisitor {
if (node.body is EmptyFunctionBody) {
_addClassBodyKeywords();
_addSuggestion2(ASYNC);
+ _addSuggestion2(ASYNC_STAR);
+ _addSuggestion2(SYNC_STAR);
} else {
_addSuggestion2(ASYNC, relevance: DART_RELEVANCE_HIGH);
+ if (node.body is! ExpressionFunctionBody) {
+ _addSuggestion2(ASYNC_STAR, relevance: DART_RELEVANCE_HIGH);
+ _addSuggestion2(SYNC_STAR, relevance: DART_RELEVANCE_HIGH);
+ }
}
}
}
« no previous file with comments | « no previous file | pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698