Enable the new code completion relevance feature

The new feature will be enabled by default but the option still exists
so that users can disable it if they want/need to.

Change-Id: I9e001b00b5dfe132a6b7bcfdcacd3143fb24f65c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/156121
Reviewed-by: Jaime Wren <jwren@google.com>
Reviewed-by: Devon Carew <devoncarew@google.com>
This commit is contained in:
Brian Wilkerson 2020-07-29 17:14:44 +00:00
parent d5845d255c
commit 15fb170ffb
6 changed files with 290 additions and 14 deletions

View file

@ -655,7 +655,7 @@ class AnalysisServerOptions {
/// Return `true` if the new relevance computations should be used when
/// computing code completion suggestions.
bool useNewRelevance = false;
bool useNewRelevance = true;
/// The set of enabled features.
FeatureSet featureSet = FeatureSet();

View file

@ -827,6 +827,7 @@ class Driver implements ServerStarter {
// Temporary flags.
//
parser.addFlag(USE_NEW_RELEVANCE,
defaultsTo: true,
help: 'Use the new relevance computation for code completion.');
return parser;

View file

@ -587,7 +587,6 @@ void main(List<String> args) {
.relevance));
}
@FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/38796')
Future<void> test_project_suggestionRelevance_constructorsAndTypes() async {
await addProjectFile('lib/a.dart', r'''
class A { }

View file

@ -590,12 +590,15 @@ class B extends A {
}
Future<void> test_invocation_sdk_relevancy_on() {
addTestFile('main() {Map m; m.^}');
return getSuggestions().then((_) {
// Assert that the CommonUsageComputer is working
expect(suggestions.any((s) => s.relevance == DART_RELEVANCE_COMMON_USAGE),
isTrue);
});
if (!server.options.useNewRelevance) {
addTestFile('main() {Map m; m.^}');
return getSuggestions().then((_) {
// Assert that the CommonUsageComputer is working
expect(
suggestions.any((s) => s.relevance == DART_RELEVANCE_COMMON_USAGE),
isTrue);
});
}
}
Future<void> test_invocation_withTrailingStmt() {

View file

@ -70,7 +70,9 @@ class AbstractCompletionDomainTest extends AbstractAnalysisTest {
fail('expected $expectationText, but found\n $completions');
}
expect(cs.kind, equals(kind));
expect(cs.relevance, equals(relevance));
if (!server.options.useNewRelevance) {
expect(cs.relevance, equals(relevance));
}
expect(cs.selectionOffset, selectionOffset ?? completion.length);
expect(cs.selectionLength, equals(0));
expect(cs.isDeprecated, equals(isDeprecated));

View file

@ -253,7 +253,57 @@ void f(MyEnum e) {
testCode.indexOf(' // ref'),
);
assertJsonText(results.includedSuggestionRelevanceTags, r'''
if (server.options.useNewRelevance) {
assertJsonText(results.includedSuggestionRelevanceTags, r'''
[
{
"tag": "ElementKind.PREFIX",
"relevanceBoost": 0
},
{
"tag": "ElementKind.TOP_LEVEL_VARIABLE",
"relevanceBoost": 1
},
{
"tag": "ElementKind.FUNCTION",
"relevanceBoost": 2
},
{
"tag": "ElementKind.METHOD",
"relevanceBoost": 4
},
{
"tag": "ElementKind.ENUM",
"relevanceBoost": 9
},
{
"tag": "ElementKind.CLASS",
"relevanceBoost": 28
},
{
"tag": "ElementKind.LOCAL_VARIABLE",
"relevanceBoost": 40
},
{
"tag": "ElementKind.CONSTRUCTOR",
"relevanceBoost": 53
},
{
"tag": "ElementKind.FIELD",
"relevanceBoost": 68
},
{
"tag": "ElementKind.PARAMETER",
"relevanceBoost": 100
},
{
"tag": "package:test/a.dart::MyEnum",
"relevanceBoost": 250
}
]
''');
} else {
assertJsonText(results.includedSuggestionRelevanceTags, r'''
[
{
"tag": "package:test/a.dart::MyEnum",
@ -261,6 +311,7 @@ void f(MyEnum e) {
}
]
''');
}
}
Future<void> test_relevanceTags_location_argumentList_named() async {
@ -277,7 +328,57 @@ main() {
testCode.indexOf('); // ref'),
);
assertJsonText(results.includedSuggestionRelevanceTags, r'''
if (server.options.useNewRelevance) {
assertJsonText(results.includedSuggestionRelevanceTags, r'''
[
{
"tag": "ElementKind.PREFIX",
"relevanceBoost": 0
},
{
"tag": "ElementKind.FUNCTION",
"relevanceBoost": 1
},
{
"tag": "ElementKind.METHOD",
"relevanceBoost": 1
},
{
"tag": "ElementKind.TOP_LEVEL_VARIABLE",
"relevanceBoost": 3
},
{
"tag": "ElementKind.ENUM",
"relevanceBoost": 5
},
{
"tag": "ElementKind.CLASS",
"relevanceBoost": 20
},
{
"tag": "ElementKind.LOCAL_VARIABLE",
"relevanceBoost": 30
},
{
"tag": "ElementKind.FIELD",
"relevanceBoost": 41
},
{
"tag": "ElementKind.PARAMETER",
"relevanceBoost": 56
},
{
"tag": "ElementKind.CONSTRUCTOR",
"relevanceBoost": 100
},
{
"tag": "dart:core::String",
"relevanceBoost": 10
}
]
''');
} else {
assertJsonText(results.includedSuggestionRelevanceTags, r'''
[
{
"tag": "dart:core::String",
@ -285,6 +386,7 @@ main() {
}
]
''');
}
}
Future<void> test_relevanceTags_location_argumentList_positional() async {
@ -301,7 +403,65 @@ main() {
testCode.indexOf('); // ref'),
);
assertJsonText(results.includedSuggestionRelevanceTags, r'''
if (server.options.useNewRelevance) {
assertJsonText(results.includedSuggestionRelevanceTags, r'''
[
{
"tag": "ElementKind.MIXIN",
"relevanceBoost": 0
},
{
"tag": "ElementKind.TYPE_PARAMETER",
"relevanceBoost": 0
},
{
"tag": "ElementKind.PREFIX",
"relevanceBoost": 0
},
{
"tag": "ElementKind.ENUM",
"relevanceBoost": 3
},
{
"tag": "ElementKind.METHOD",
"relevanceBoost": 4
},
{
"tag": "ElementKind.FUNCTION",
"relevanceBoost": 9
},
{
"tag": "ElementKind.CLASS",
"relevanceBoost": 13
},
{
"tag": "ElementKind.TOP_LEVEL_VARIABLE",
"relevanceBoost": 18
},
{
"tag": "ElementKind.CONSTRUCTOR",
"relevanceBoost": 27
},
{
"tag": "ElementKind.FIELD",
"relevanceBoost": 42
},
{
"tag": "ElementKind.LOCAL_VARIABLE",
"relevanceBoost": 60
},
{
"tag": "ElementKind.PARAMETER",
"relevanceBoost": 100
},
{
"tag": "dart:core::double",
"relevanceBoost": 10
}
]
''');
} else {
assertJsonText(results.includedSuggestionRelevanceTags, r'''
[
{
"tag": "dart:core::double",
@ -309,6 +469,7 @@ main() {
}
]
''');
}
}
Future<void> test_relevanceTags_location_assignment() async {
@ -324,7 +485,57 @@ main() {
testCode.indexOf(' // ref'),
);
assertJsonText(results.includedSuggestionRelevanceTags, r'''
if (server.options.useNewRelevance) {
assertJsonText(results.includedSuggestionRelevanceTags, r'''
[
{
"tag": "ElementKind.PREFIX",
"relevanceBoost": 0
},
{
"tag": "ElementKind.TOP_LEVEL_VARIABLE",
"relevanceBoost": 1
},
{
"tag": "ElementKind.FUNCTION",
"relevanceBoost": 2
},
{
"tag": "ElementKind.METHOD",
"relevanceBoost": 4
},
{
"tag": "ElementKind.ENUM",
"relevanceBoost": 9
},
{
"tag": "ElementKind.CLASS",
"relevanceBoost": 28
},
{
"tag": "ElementKind.LOCAL_VARIABLE",
"relevanceBoost": 40
},
{
"tag": "ElementKind.CONSTRUCTOR",
"relevanceBoost": 53
},
{
"tag": "ElementKind.FIELD",
"relevanceBoost": 68
},
{
"tag": "ElementKind.PARAMETER",
"relevanceBoost": 100
},
{
"tag": "dart:core::int",
"relevanceBoost": 10
}
]
''');
} else {
assertJsonText(results.includedSuggestionRelevanceTags, r'''
[
{
"tag": "dart:core::int",
@ -332,6 +543,7 @@ main() {
}
]
''');
}
}
Future<void> test_relevanceTags_location_initializer() async {
@ -344,7 +556,65 @@ int v = // ref;
testCode.indexOf(' // ref'),
);
assertJsonText(results.includedSuggestionRelevanceTags, r'''
if (server.options.useNewRelevance) {
assertJsonText(results.includedSuggestionRelevanceTags, r'''
[
{
"tag": "ElementKind.MIXIN",
"relevanceBoost": 0
},
{
"tag": "ElementKind.TYPE_PARAMETER",
"relevanceBoost": 0
},
{
"tag": "ElementKind.PREFIX",
"relevanceBoost": 1
},
{
"tag": "ElementKind.ENUM",
"relevanceBoost": 1
},
{
"tag": "ElementKind.METHOD",
"relevanceBoost": 4
},
{
"tag": "ElementKind.TOP_LEVEL_VARIABLE",
"relevanceBoost": 6
},
{
"tag": "ElementKind.FUNCTION",
"relevanceBoost": 16
},
{
"tag": "ElementKind.PARAMETER",
"relevanceBoost": 26
},
{
"tag": "ElementKind.FIELD",
"relevanceBoost": 35
},
{
"tag": "ElementKind.CLASS",
"relevanceBoost": 56
},
{
"tag": "ElementKind.LOCAL_VARIABLE",
"relevanceBoost": 68
},
{
"tag": "ElementKind.CONSTRUCTOR",
"relevanceBoost": 100
},
{
"tag": "dart:core::int",
"relevanceBoost": 10
}
]
''');
} else {
assertJsonText(results.includedSuggestionRelevanceTags, r'''
[
{
"tag": "dart:core::int",
@ -352,6 +622,7 @@ int v = // ref;
}
]
''');
}
}
Future<void> test_relevanceTags_location_listLiteral() async {