Move CompletionTarget and OpType for use by plugins

R=scheglov@google.com

Review-Url: https://codereview.chromium.org/2924703002 .
This commit is contained in:
Brian Wilkerson
2017-06-06 07:07:17 -07:00
parent 09e755196a
commit db0a8a76ae
20 changed files with 76 additions and 59 deletions
@@ -5,13 +5,13 @@
import 'dart:async';
import 'package:analysis_server/src/provisional/completion/completion_core.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart';
import 'package:analysis_server/src/services/completion/dart/optype.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart';
import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
export 'package:analysis_server/src/provisional/completion/completion_core.dart'
show EMPTY_LIST;
@@ -9,12 +9,12 @@ import 'package:analysis_server/src/protocol_server.dart'
show CompletionSuggestion, CompletionSuggestionKind;
import 'package:analysis_server/src/provisional/completion/completion_core.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart';
import 'package:analysis_server/src/services/completion/dart/contribution_sorter.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
part 'common_usage_sorter.g.dart';
@@ -8,12 +8,10 @@ import 'package:analysis_server/src/provisional/completion/completion_core.dart'
show CompletionContributor, CompletionRequest;
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion_plugin.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart';
import 'package:analysis_server/src/services/completion/completion_core.dart';
import 'package:analysis_server/src/services/completion/completion_performance.dart';
import 'package:analysis_server/src/services/completion/dart/common_usage_sorter.dart';
import 'package:analysis_server/src/services/completion/dart/contribution_sorter.dart';
import 'package:analysis_server/src/services/completion/dart/optype.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/standard_ast_factory.dart';
import 'package:analyzer/dart/ast/standard_resolution_map.dart';
@@ -27,6 +25,8 @@ import 'package:analyzer/src/generated/engine.dart' hide AnalysisResult;
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/task/model.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart';
import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
/**
* [DartCompletionManager] determines if a completion request is Dart specific
@@ -7,9 +7,9 @@ import 'dart:async';
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
import 'package:analysis_server/src/services/completion/dart/local_library_contributor.dart';
import 'package:analysis_server/src/services/completion/dart/optype.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/generated/resolver.dart';
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
import '../../../protocol_server.dart' show CompletionSuggestion;
@@ -5,13 +5,13 @@
import 'dart:async';
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart';
import 'package:analysis_server/src/services/completion/dart/optype.dart';
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/standard_resolution_map.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
import '../../../protocol_server.dart'
show CompletionSuggestion, CompletionSuggestionKind;
@@ -6,12 +6,12 @@ import 'dart:async';
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
import 'package:analysis_server/src/services/completion/dart/optype.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/src/dart/ast/token.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart';
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
const ASYNC_STAR = 'async*';
const DEFERRED_AS = 'deferred as';
@@ -9,11 +9,11 @@ import 'package:analysis_server/src/protocol_server.dart'
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart'
show DartCompletionRequestImpl;
import 'package:analysis_server/src/services/completion/dart/optype.dart';
import 'package:analysis_server/src/services/completion/dart/utilities.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol
show ElementKind;
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
import 'package:analyzer_plugin/src/utilities/visitors/local_declaration_visitor.dart'
show LocalDeclarationVisitor;
@@ -9,7 +9,6 @@ import 'package:analysis_server/src/protocol_server.dart'
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart'
show DartCompletionRequestImpl;
import 'package:analysis_server/src/services/completion/dart/optype.dart';
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
import 'package:analysis_server/src/services/completion/dart/utilities.dart';
import 'package:analyzer/dart/ast/ast.dart';
@@ -17,6 +16,7 @@ import 'package:analyzer/dart/ast/standard_resolution_map.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol
show Element, ElementKind;
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
import 'package:analyzer_plugin/src/utilities/visitors/local_declaration_visitor.dart'
show LocalDeclarationVisitor;
@@ -6,12 +6,12 @@ import 'dart:async';
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
import 'package:analysis_server/src/services/completion/dart/optype.dart';
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart'
show createSuggestion, ElementSuggestionBuilder;
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/visitor.dart';
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
import '../../../protocol_server.dart'
show CompletionSuggestion, CompletionSuggestionKind;
@@ -9,7 +9,6 @@ import 'package:analysis_server/src/protocol_server.dart'
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart'
show DartCompletionRequestImpl;
import 'package:analysis_server/src/services/completion/dart/optype.dart';
import 'package:analysis_server/src/services/completion/dart/utilities.dart';
import 'package:analysis_server/src/services/correction/strings.dart';
import 'package:analysis_server/src/utilities/documentation.dart';
@@ -21,6 +20,7 @@ import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/generated/utilities_dart.dart' show ParameterKind;
import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol
show Element, ElementKind;
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
import 'package:analyzer_plugin/src/utilities/visitors/local_declaration_visitor.dart'
show LocalDeclarationVisitor;
@@ -10,11 +10,11 @@ import 'package:analysis_server/src/protocol_server.dart' as protocol
hide CompletionSuggestion, CompletionSuggestionKind;
import 'package:analysis_server/src/provisional/completion/completion_core.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/dart/resolver/inheritance_manager.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
/**
* A completion contributor used to suggest replacing partial identifiers inside
@@ -9,9 +9,9 @@ import 'package:analysis_server/src/protocol_server.dart'
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart'
show DartCompletionRequestImpl;
import 'package:analysis_server/src/services/completion/dart/optype.dart';
import 'package:analysis_server/src/services/correction/name_suggestion.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
CompletionSuggestion _createNameSuggestion(String name) {
if (name == null || name.isEmpty) {
@@ -19,7 +19,6 @@ import 'local_constructor_contributor_test.dart' as local_constructor_test;
import 'local_library_contributor_test.dart' as local_lib_test;
import 'local_reference_contributor_test.dart' as local_ref_test;
import 'named_constructor_contributor_test.dart' as named_contributor_test;
import 'optype_test.dart' as optype_test;
import 'override_contributor_test.dart' as override_contributor_test;
import 'static_member_contributor_test.dart' as static_contributor_test;
import 'type_member_contributor_test.dart' as type_member_contributor_test;
@@ -44,7 +43,6 @@ main() {
local_lib_test.main();
local_ref_test.main();
named_contributor_test.main();
optype_test.main();
override_contributor_test.main();
static_contributor_test.main();
type_member_contributor_test.main();
@@ -4,14 +4,12 @@
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'completion_target_test.dart' as completion_target_test;
import 'dart/test_all.dart' as dart_contributor_tests;
import 'statement/statement_completion_test.dart' as statement_completion_test;
/// Utility for manually running all tests.
main() {
defineReflectiveSuite(() {
completion_target_test.main();
dart_contributor_tests.main();
statement_completion_test.main();
}, name: 'completion');
@@ -1,4 +1,4 @@
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
@@ -8,33 +8,6 @@ import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
int _computeArgIndex(AstNode containingNode, Object entity) {
var argList = containingNode;
if (argList is NamedExpression) {
entity = argList;
argList = argList.parent;
}
if (argList is ArgumentList) {
NodeList<Expression> args = argList.arguments;
for (int index = 0; index < args.length; ++index) {
if (entity == args[index]) {
return index;
}
}
if (args.isEmpty) {
return 0;
}
if (entity == argList.rightParenthesis) {
// Parser ignores trailing commas
if (argList.rightParenthesis.previous?.lexeme == ',') {
return args.length;
}
return args.length - 1;
}
}
return null;
}
/**
* A CompletionTarget represents an edge in the parse tree which connects an
* AST node (the [containingNode] of the completion) to one of its children
@@ -340,6 +313,33 @@ class CompletionTarget {
return false;
}
static int _computeArgIndex(AstNode containingNode, Object entity) {
var argList = containingNode;
if (argList is NamedExpression) {
entity = argList;
argList = argList.parent;
}
if (argList is ArgumentList) {
NodeList<Expression> args = argList.arguments;
for (int index = 0; index < args.length; ++index) {
if (entity == args[index]) {
return index;
}
}
if (args.isEmpty) {
return 0;
}
if (entity == argList.rightParenthesis) {
// Parser ignores trailing commas
if (argList.rightParenthesis.previous?.lexeme == ',') {
return args.length;
}
return args.length - 1;
}
}
return null;
}
/**
* Determine if the offset is contained in a preceding comment token
* and return that token, otherwise return `null`.
@@ -1,10 +1,7 @@
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analysis_server/src/protocol_server.dart' hide Element;
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/standard_resolution_map.dart';
import 'package:analyzer/dart/ast/token.dart';
@@ -14,6 +11,9 @@ import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/ast/token.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
import 'package:analyzer_plugin/utilities/completion/relevance.dart';
typedef int SuggestionsFilter(DartType dartType, int relevance);
@@ -287,6 +287,7 @@ class _OpTypeAstVisitor extends GeneralizingAstVisitor {
}
}
@override
void visitAssignmentExpression(AssignmentExpression node) {
if (identical(entity, node.rightHandSide)) {
optype.includeReturnValueSuggestions = true;
@@ -365,6 +366,7 @@ class _OpTypeAstVisitor extends GeneralizingAstVisitor {
optype.suggestKind = CompletionSuggestionKind.IDENTIFIER;
}
@override
void visitCompilationUnit(CompilationUnit node) {
if (entity is! CommentToken) {
optype.includeTypeNameSuggestions = true;
@@ -669,6 +671,7 @@ class _OpTypeAstVisitor extends GeneralizingAstVisitor {
}
}
@override
void visitLibraryIdentifier(LibraryIdentifier node) {
// No suggestions.
}
@@ -764,6 +767,7 @@ class _OpTypeAstVisitor extends GeneralizingAstVisitor {
}
}
@override
void visitParenthesizedExpression(ParenthesizedExpression node) {
if (identical(entity, node.expression)) {
optype.includeReturnValueSuggestions = true;
@@ -1,17 +1,17 @@
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../abstract_context.dart';
import '../../../support/abstract_context.dart';
main() {
defineReflectiveSuite(() {
@@ -1,17 +1,17 @@
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'package:analysis_server/src/protocol_server.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart';
import 'package:analysis_server/src/services/completion/dart/optype.dart';
import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart';
import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../../abstract_context.dart';
import '../../../support/abstract_context.dart';
main() {
defineReflectiveSuite(() {
@@ -0,0 +1,15 @@
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'completion_target_test.dart' as completion_target_test;
import 'optype_test.dart' as optype_test;
main() {
defineReflectiveSuite(() {
completion_target_test.main();
optype_test.main();
}, name: 'completion');
}
@@ -5,6 +5,7 @@
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'change_builder/test_all.dart' as change_builder;
import 'completion/test_all.dart' as completion;
import 'navigation/test_all.dart' as navigation;
import 'string_utilities_test.dart' as string_utilities;
import 'visitors/test_all.dart' as visitors;
@@ -12,6 +13,7 @@ import 'visitors/test_all.dart' as visitors;
main() {
defineReflectiveSuite(() {
change_builder.main();
completion.main();
navigation.main();
string_utilities.main();
visitors.main();