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

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

Issue 1118113002: suggest keywords for switch statement and expressions (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merge Created 5 years, 8 months 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/completion_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/keyword_contributor.dart
diff --git a/pkg/analysis_server/lib/src/services/completion/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/keyword_contributor.dart
index ec230071b8b7cfe092a6fca0799fdfc9a3c60db5..48d74bb830da8411b9be7a1ea7ec022ad4fba136 100644
--- a/pkg/analysis_server/lib/src/services/completion/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/keyword_contributor.dart
@@ -43,6 +43,14 @@ class _KeywordVisitor extends GeneralizingAstVisitor {
this.entity = request.target.entity;
@override
+ visitArgumentList(ArgumentList node) {
+ if (entity == node.rightParenthesis ||
+ (entity is SimpleIdentifier && node.arguments.contains(entity))) {
+ _addExpressionKeywords(node);
+ }
+ }
+
+ @override
visitBlock(Block node) {
_addStatementKeywords(node);
}
@@ -115,7 +123,7 @@ class _KeywordVisitor extends GeneralizingAstVisitor {
@override
visitExpressionFunctionBody(ExpressionFunctionBody node) {
if (entity == node.expression) {
- _addStatementKeywords(node);
+ _addExpressionKeywords(node);
}
}
@@ -171,6 +179,47 @@ class _KeywordVisitor extends GeneralizingAstVisitor {
}
}
+ @override
+ visitNamedExpression(NamedExpression node) {
+ if (entity is SimpleIdentifier && entity == node.expression) {
+ _addExpressionKeywords(node);
+ }
+ }
+
+ @override
+ visitNode(AstNode node) {
+ // ignored
+ }
+
+ @override
+ visitSwitchStatement(SwitchStatement node) {
+ if (entity == node.expression) {
+ _addExpressionKeywords(node);
+ } else if (entity == node.rightBracket) {
+ if (node.members.isEmpty) {
+ _addSuggestions([Keyword.CASE, Keyword.DEFAULT], DART_RELEVANCE_HIGH);
+ } else {
+ _addSuggestions([Keyword.CASE, Keyword.DEFAULT]);
+ _addStatementKeywords(node);
+ }
+ }
+ if (node.members.contains(entity)) {
+ if (entity == node.members.first) {
+ _addSuggestions([Keyword.CASE, Keyword.DEFAULT], DART_RELEVANCE_HIGH);
+ } else {
+ _addSuggestions([Keyword.CASE, Keyword.DEFAULT]);
+ _addStatementKeywords(node);
+ }
+ }
+ }
+
+ @override
+ visitVariableDeclaration(VariableDeclaration node) {
+ if (entity == node.initializer) {
+ _addExpressionKeywords(node);
+ }
+ }
+
void _addClassBodyKeywords() {
_addSuggestions([
Keyword.CONST,
@@ -212,6 +261,16 @@ class _KeywordVisitor extends GeneralizingAstVisitor {
], DART_RELEVANCE_HIGH);
}
+ void _addExpressionKeywords(AstNode node) {
+ _addSuggestions([Keyword.FALSE, Keyword.NEW, Keyword.NULL, Keyword.TRUE,]);
+ if (_inClassMemberBody(node)) {
+ _addSuggestions([Keyword.SUPER, Keyword.THIS,]);
+ }
+ if (_inAsyncMethodOrFunction(node)) {
+ _addSuggestion2(AWAIT);
+ }
+ }
+
void _addImportDirectiveKeywords(ImportDirective node) {
if (node.asKeyword == null) {
_addSuggestion(Keyword.AS, DART_RELEVANCE_HIGH);
@@ -230,7 +289,6 @@ class _KeywordVisitor extends GeneralizingAstVisitor {
}
_addSuggestions([
Keyword.ASSERT,
- Keyword.CASE,
Keyword.CONTINUE,
Keyword.DO,
Keyword.FINAL,
« no previous file with comments | « no previous file | pkg/analysis_server/test/completion_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698