From d7cd405bb23eacda2833f3e7fe1be6d1b377f882 Mon Sep 17 00:00:00 2001 From: Alex T Date: Sat, 12 Sep 2020 00:48:24 +0300 Subject: [PATCH] feat(14751): show static members at the top of the list for a class like completion (#40428) --- src/services/completions.ts | 29 ++++++++---- src/services/jsDoc.ts | 6 +-- src/services/stringCompletions.ts | 2 +- .../unittests/tsserver/metadataInResponse.ts | 4 +- tests/cases/fourslash/cloduleAsBaseClass.ts | 12 ++++- tests/cases/fourslash/cloduleAsBaseClass2.ts | 11 ++++- tests/cases/fourslash/cloduleTypeOf1.ts | 8 +++- tests/cases/fourslash/commentsClassMembers.ts | 14 +++--- .../cases/fourslash/completionListCladule.ts | 8 +++- .../fourslash/completionListClassMembers.ts | 16 ++++++- .../fourslash/completionListErrorRecovery.ts | 5 ++- .../completionListInExtendsClause.ts | 13 +++--- .../fourslash/completionListOnAliases2.ts | 9 +++- .../fourslash/completionListStaticMembers.ts | 17 +++++++ .../completionListStaticProtectedMembers.ts | 20 ++++++++- .../completionListStaticProtectedMembers2.ts | 44 +++++++++---------- .../completionListStaticProtectedMembers3.ts | 7 ++- .../completionListStaticProtectedMembers4.ts | 22 ++++++---- ...letionListsThroughTransitiveBaseClasses.ts | 8 +++- .../completionsNamespaceMergedWithClass.ts | 9 +++- tests/cases/fourslash/fourslash.ts | 15 ++++--- ...jsdocTypedefTagTypeExpressionCompletion.ts | 4 +- .../fourslash/memberListErrorRecovery.ts | 2 +- tests/cases/fourslash/multiModuleClodule1.ts | 11 ++++- 24 files changed, 214 insertions(+), 82 deletions(-) create mode 100644 tests/cases/fourslash/completionListStaticMembers.ts diff --git a/src/services/completions.ts b/src/services/completions.ts index a60adcbbe9c..1c9b10096a6 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -1,13 +1,14 @@ /* @internal */ namespace ts.Completions { export enum SortText { - LocationPriority = "0", - OptionalMember = "1", - MemberDeclaredBySpreadAssignment = "2", - SuggestedClassMembers = "3", - GlobalsOrKeywords = "4", - AutoImportSuggestions = "5", - JavascriptIdentifiers = "6" + LocalDeclarationPriority = "0", + LocationPriority = "1", + OptionalMember = "2", + MemberDeclaredBySpreadAssignment = "3", + SuggestedClassMembers = "4", + GlobalsOrKeywords = "5", + AutoImportSuggestions = "6", + JavascriptIdentifiers = "7" } export type Log = (message: string) => void; @@ -1270,7 +1271,7 @@ namespace ts.Completions { else { for (const symbol of type.getApparentProperties()) { if (typeChecker.isValidPropertyAccessForCompletions(propertyAccess, type, symbol)) { - addPropertySymbol(symbol, /*insertAwait*/ false, insertQuestionDot); + addPropertySymbol(symbol, /* insertAwait */ false, insertQuestionDot); } } } @@ -1307,14 +1308,22 @@ namespace ts.Completions { } else if (preferences.includeCompletionsWithInsertText) { addSymbolOriginInfo(symbol); + addSymbolSortInfo(symbol); symbols.push(symbol); } } else { addSymbolOriginInfo(symbol); + addSymbolSortInfo(symbol); symbols.push(symbol); } + function addSymbolSortInfo(symbol: Symbol) { + if (isStaticProperty(symbol)) { + symbolToSortTextMap[getSymbolId(symbol)] = SortText.LocalDeclarationPriority; + } + } + function addSymbolOriginInfo(symbol: Symbol) { if (preferences.includeCompletionsWithInsertText) { if (insertAwait && !symbolToOriginInfoMap[getSymbolId(symbol)]) { @@ -2817,4 +2826,8 @@ namespace ts.Completions { } return false; } + + function isStaticProperty(symbol: Symbol) { + return !!(symbol.valueDeclaration && getEffectiveModifierFlags(symbol.valueDeclaration) & ModifierFlags.Static && isClassLike(symbol.valueDeclaration.parent)); + } } diff --git a/src/services/jsDoc.ts b/src/services/jsDoc.ts index f011bac8595..11b876a6841 100644 --- a/src/services/jsDoc.ts +++ b/src/services/jsDoc.ts @@ -164,7 +164,7 @@ namespace ts.JsDoc { name: tagName, kind: ScriptElementKind.keyword, kindModifiers: "", - sortText: "0", + sortText: Completions.SortText.LocationPriority, }; })); } @@ -177,7 +177,7 @@ namespace ts.JsDoc { name: `@${tagName}`, kind: ScriptElementKind.keyword, kindModifiers: "", - sortText: "0" + sortText: Completions.SortText.LocationPriority }; })); } @@ -212,7 +212,7 @@ namespace ts.JsDoc { return undefined; } - return { name, kind: ScriptElementKind.parameterElement, kindModifiers: "", sortText: "0" }; + return { name, kind: ScriptElementKind.parameterElement, kindModifiers: "", sortText: Completions.SortText.LocationPriority }; }); } diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts index 5c51f0c3b38..c9d57642ec1 100644 --- a/src/services/stringCompletions.ts +++ b/src/services/stringCompletions.ts @@ -42,7 +42,7 @@ namespace ts.Completions.StringCompletions { name: type.value, kindModifiers: ScriptElementKindModifier.none, kind: ScriptElementKind.string, - sortText: "0", + sortText: SortText.LocationPriority, replacementSpan: getReplacementSpanForContextToken(contextToken) })); return { isGlobalCompletion: false, isMemberCompletion: false, isNewIdentifierLocation: completion.isNewIdentifier, optionalReplacementSpan, entries }; diff --git a/src/testRunner/unittests/tsserver/metadataInResponse.ts b/src/testRunner/unittests/tsserver/metadataInResponse.ts index 966f2662ee8..2ca20ff4046 100644 --- a/src/testRunner/unittests/tsserver/metadataInResponse.ts +++ b/src/testRunner/unittests/tsserver/metadataInResponse.ts @@ -55,8 +55,8 @@ namespace ts.projectSystem { offset: aTs.content.indexOf("this.") + 1 + "this.".length }; const expectedCompletionEntries: readonly protocol.CompletionEntry[] = [ - { name: "foo", kind: ScriptElementKind.memberFunctionElement, kindModifiers: "", sortText: "0" }, - { name: "prop", kind: ScriptElementKind.memberVariableElement, kindModifiers: "", sortText: "0" } + { name: "foo", kind: ScriptElementKind.memberFunctionElement, kindModifiers: "", sortText: Completions.SortText.LocationPriority }, + { name: "prop", kind: ScriptElementKind.memberVariableElement, kindModifiers: "", sortText: Completions.SortText.LocationPriority } ]; it("can pass through metadata when the command returns array", () => { diff --git a/tests/cases/fourslash/cloduleAsBaseClass.ts b/tests/cases/fourslash/cloduleAsBaseClass.ts index 15b991f8633..09929e84172 100644 --- a/tests/cases/fourslash/cloduleAsBaseClass.ts +++ b/tests/cases/fourslash/cloduleAsBaseClass.ts @@ -25,6 +25,16 @@ verify.completions({ marker: "1", exact: ["foo2", "foo"] }); edit.insert('foo()'); -verify.completions({ marker: "2", exact: ["prototype", "bar2", "bar", "baz", "x", ...completion.functionMembers] }); +verify.completions({ + marker: "2", + exact: [ + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "bar2", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "bar", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "baz", sortText: completion.SortText.LocationPriority }, + { name: "x", sortText: completion.SortText.LocationPriority }, + ...completion.functionMembers + ] +}); edit.insert('bar()'); verify.noErrors(); diff --git a/tests/cases/fourslash/cloduleAsBaseClass2.ts b/tests/cases/fourslash/cloduleAsBaseClass2.ts index 273ac2a0f92..4053bfb2c02 100644 --- a/tests/cases/fourslash/cloduleAsBaseClass2.ts +++ b/tests/cases/fourslash/cloduleAsBaseClass2.ts @@ -31,7 +31,16 @@ verify.completions({ marker: "1", exact: ["foo2", "foo"] }); edit.insert('foo()'); -verify.completions({ marker: "2", includes: ["bar", "bar2", "baz", "x"], excludes: ["foo", "foo2"] }); +verify.completions({ + marker: "2", + includes: [ + { name: "bar", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "bar2", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "baz", sortText: completion.SortText.LocationPriority }, + { name: "x", sortText: completion.SortText.LocationPriority } + ], + excludes: ["foo", "foo2"] +}); edit.insert('bar()'); verify.noErrors(); diff --git a/tests/cases/fourslash/cloduleTypeOf1.ts b/tests/cases/fourslash/cloduleTypeOf1.ts index 4f936f4365e..a17c3fa987c 100644 --- a/tests/cases/fourslash/cloduleTypeOf1.ts +++ b/tests/cases/fourslash/cloduleTypeOf1.ts @@ -14,7 +14,13 @@ //// } ////} -verify.completions({ marker: "1", includes: ["f", "foo"] }); +verify.completions({ + marker: "1", + includes: [ + { name: "f", sortText: completion.SortText.LocationPriority }, + { name: "foo", sortText: completion.SortText.LocalDeclarationPriority } + ] +}); edit.insert('foo(1);'); verify.completions({ marker: "2", includes: "x" }); diff --git a/tests/cases/fourslash/commentsClassMembers.ts b/tests/cases/fourslash/commentsClassMembers.ts index 718b9e7816e..1e17f0327fe 100644 --- a/tests/cases/fourslash/commentsClassMembers.ts +++ b/tests/cases/fourslash/commentsClassMembers.ts @@ -190,13 +190,13 @@ verify.completions( { marker: ["30", "34", "36", "39", "41", "88"], exact: [ - "prototype", - { name: "s1", text: "(property) c1.s1: number", documentation: "s1 is static property of c1" }, - { name: "s2", text: "(method) c1.s2(b: number): number", documentation: "static sum with property" }, - { name: "s3", text: "(property) c1.s3: number", documentation: "static getter property\nsetter property 3" }, - { name: "nc_s1", text: "(property) c1.nc_s1: number" }, - { name: "nc_s2", text: "(method) c1.nc_s2(b: number): number" }, - { name: "nc_s3", text: "(property) c1.nc_s3: number" }, + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "s1", text: "(property) c1.s1: number", documentation: "s1 is static property of c1", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "s2", text: "(method) c1.s2(b: number): number", documentation: "static sum with property", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "s3", text: "(property) c1.s3: number", documentation: "static getter property\nsetter property 3", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "nc_s1", text: "(property) c1.nc_s1: number", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "nc_s2", text: "(method) c1.nc_s2(b: number): number", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "nc_s3", text: "(property) c1.nc_s3: number", sortText: completion.SortText.LocalDeclarationPriority }, ...completion.functionMembers, ], }, diff --git a/tests/cases/fourslash/completionListCladule.ts b/tests/cases/fourslash/completionListCladule.ts index 1040446f4d0..779ac02c9c9 100644 --- a/tests/cases/fourslash/completionListCladule.ts +++ b/tests/cases/fourslash/completionListCladule.ts @@ -14,7 +14,13 @@ goTo.marker("c1"); edit.insert("."); -verify.completions({ includes: ["x", "prototype", "staticMethod"] }); +verify.completions({ + includes: [ + { name: "x", sortText: completion.SortText.LocationPriority }, + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "staticMethod", sortText: completion.SortText.LocalDeclarationPriority } + ] +}); goTo.marker("c2"); edit.insert("."); diff --git a/tests/cases/fourslash/completionListClassMembers.ts b/tests/cases/fourslash/completionListClassMembers.ts index 6a51ce7e71d..f2740963b67 100644 --- a/tests/cases/fourslash/completionListClassMembers.ts +++ b/tests/cases/fourslash/completionListClassMembers.ts @@ -26,7 +26,14 @@ verify.completions( { marker: "staticsInsideClassScope", - exact: ["prototype", "privateStaticProperty", "publicStaticProperty", "privateStaticMethod", "publicStaticMethod", ...completion.functionMembers], + exact: [ + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "privateStaticProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicStaticProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "privateStaticMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicStaticMethod", sortText: completion.SortText.LocalDeclarationPriority }, + ...completion.functionMembers + ], }, { marker: "instanceMembersInsideClassScope", @@ -34,7 +41,12 @@ verify.completions( }, { marker: "staticsOutsideClassScope", - exact: ["prototype", "publicStaticProperty", "publicStaticMethod", ...completion.functionMembers], + exact: [ + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "publicStaticProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicStaticMethod", sortText: completion.SortText.LocalDeclarationPriority }, + ...completion.functionMembers + ], }, { marker: "instanceMembersOutsideClassScope", diff --git a/tests/cases/fourslash/completionListErrorRecovery.ts b/tests/cases/fourslash/completionListErrorRecovery.ts index 69eb8004f47..345c1384668 100644 --- a/tests/cases/fourslash/completionListErrorRecovery.ts +++ b/tests/cases/fourslash/completionListErrorRecovery.ts @@ -5,5 +5,8 @@ ////Foo./**/; /////*1*/var bar; -verify.completions({ marker: "", includes: "fun" }); +verify.completions({ + marker: "", + includes: [{ name: "fun", sortText: completion.SortText.LocalDeclarationPriority }] +}); verify.not.errorExistsAfterMarker("1"); diff --git a/tests/cases/fourslash/completionListInExtendsClause.ts b/tests/cases/fourslash/completionListInExtendsClause.ts index f5b1ce4384e..c9ff3ff4a6f 100644 --- a/tests/cases/fourslash/completionListInExtendsClause.ts +++ b/tests/cases/fourslash/completionListInExtendsClause.ts @@ -9,16 +9,19 @@ //// method() { } //// static staticMethod() { } ////} - ////class test1 extends Foo./*1*/ {} - ////class test2 implements IFoo./*2*/ {} - ////interface test3 extends IFoo./*3*/ {} - ////interface test4 implements Foo./*4*/ {} verify.completions( - { marker: "1", exact: ["prototype", "staticMethod", ...completion.functionMembers] }, + { + marker: "1", + exact: [ + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "staticMethod", sortText: completion.SortText.LocalDeclarationPriority }, + ...completion.functionMembers + ] + }, { marker: ["2", "3", "4"], exact: undefined }, ); diff --git a/tests/cases/fourslash/completionListOnAliases2.ts b/tests/cases/fourslash/completionListOnAliases2.ts index ffa1c212a8d..44694c7bfdd 100644 --- a/tests/cases/fourslash/completionListOnAliases2.ts +++ b/tests/cases/fourslash/completionListOnAliases2.ts @@ -39,7 +39,14 @@ verify.completions( { marker: ["1", "7"], exact: ["F", "C", "E", "N", "V", "A"] }, { marker: ["1Type", "7Type"], exact: ["I", "C", "E", "A"] }, // Class C - { marker: "2", exact: ["prototype", "property", ...completion.functionMembers] }, + { + marker: "2", + exact: [ + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "property", sortText: completion.SortText.LocalDeclarationPriority }, + ...completion.functionMembers + ] + }, // Enum E { marker: "3", exact: "value" }, // Module N diff --git a/tests/cases/fourslash/completionListStaticMembers.ts b/tests/cases/fourslash/completionListStaticMembers.ts new file mode 100644 index 00000000000..a4b5b192fa5 --- /dev/null +++ b/tests/cases/fourslash/completionListStaticMembers.ts @@ -0,0 +1,17 @@ +/// + +////class Foo { +//// static a() {} +//// static b() {} +////} +////Foo./**/ + +verify.completions({ + marker: "", + exact: [ + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "a", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "b", sortText: completion.SortText.LocalDeclarationPriority }, + ...completion.functionMembers + ] +}); diff --git a/tests/cases/fourslash/completionListStaticProtectedMembers.ts b/tests/cases/fourslash/completionListStaticProtectedMembers.ts index 9b93d93a392..504b8beca52 100644 --- a/tests/cases/fourslash/completionListStaticProtectedMembers.ts +++ b/tests/cases/fourslash/completionListStaticProtectedMembers.ts @@ -29,11 +29,27 @@ verify.completions( { marker: ["1", "2"], // Same class, everything is visible - includes: ["privateMethod", "privateProperty", "protectedMethod", "protectedProperty", "publicMethod", "publicProperty", "protectedOverriddenMethod", "protectedOverriddenProperty"], + includes: [ + { name: "privateMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "privateProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedOverriddenMethod", sortText: completion.SortText.LocalDeclarationPriority}, + { name: "protectedOverriddenProperty", sortText: completion.SortText.LocalDeclarationPriority } + ], }, { marker: "3", - includes: ["privateMethod", "privateProperty", "protectedMethod", "protectedProperty", "publicMethod", "publicProperty"], + includes: [ + { name: "privateMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "privateProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicProperty", sortText: completion.SortText.LocalDeclarationPriority } + ], // Can not access protected properties overridden in subclass excludes: ["protectedOverriddenMethod", "protectedOverriddenProperty"], }, diff --git a/tests/cases/fourslash/completionListStaticProtectedMembers2.ts b/tests/cases/fourslash/completionListStaticProtectedMembers2.ts index aff0c075faa..e3ab6a57f43 100644 --- a/tests/cases/fourslash/completionListStaticProtectedMembers2.ts +++ b/tests/cases/fourslash/completionListStaticProtectedMembers2.ts @@ -31,27 +31,27 @@ verify.completions( // Same class, everything is visible marker: ["1"], exact: [ - "prototype", - "protectedMethod", - "protectedProperty", - "publicMethod", - "publicProperty", - "protectedOverriddenMethod", - "protectedOverriddenProperty", + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "protectedMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedOverriddenMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedOverriddenProperty", sortText: completion.SortText.LocalDeclarationPriority}, ...completion.functionMembers, ], }, { marker: ["2", "3"], exact: [ - "prototype", - "protectedOverriddenMethod", - "protectedOverriddenProperty", - "test", - "protectedMethod", - "protectedProperty", - "publicMethod", - "publicProperty", + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "protectedOverriddenMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedOverriddenProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "test", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicProperty", sortText: completion.SortText.LocalDeclarationPriority }, ...completion.functionMembers, ], }, @@ -59,13 +59,13 @@ verify.completions( // only public and protected methods of the base class are accessible through super marker: "4", exact: [ - "protectedMethod", - "publicMethod", - "protectedOverriddenMethod", - "apply", - "call", - "bind", - "toString", + { name: "protectedMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedOverriddenMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "apply", sortText: completion.SortText.LocationPriority }, + { name: "call", sortText: completion.SortText.LocationPriority }, + { name: "bind", sortText: completion.SortText.LocationPriority }, + { name: "toString", sortText: completion.SortText.LocationPriority }, ], }, ); diff --git a/tests/cases/fourslash/completionListStaticProtectedMembers3.ts b/tests/cases/fourslash/completionListStaticProtectedMembers3.ts index 57cf38dcb4f..a98ff4afea5 100644 --- a/tests/cases/fourslash/completionListStaticProtectedMembers3.ts +++ b/tests/cases/fourslash/completionListStaticProtectedMembers3.ts @@ -25,5 +25,10 @@ // Only public properties are visible outside the class verify.completions({ marker: ["1", "2"], - exact: ["prototype", "publicMethod", "publicProperty", ...completion.functionMembers], + exact: [ + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "publicMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicProperty", sortText: completion.SortText.LocalDeclarationPriority }, + ...completion.functionMembers + ], }); diff --git a/tests/cases/fourslash/completionListStaticProtectedMembers4.ts b/tests/cases/fourslash/completionListStaticProtectedMembers4.ts index a34a3cda3ac..91b54f73ce7 100644 --- a/tests/cases/fourslash/completionListStaticProtectedMembers4.ts +++ b/tests/cases/fourslash/completionListStaticProtectedMembers4.ts @@ -26,18 +26,22 @@ ////} //// Derived./*2*/ -const publicCompletions: ReadonlyArray = ["publicMethod", "publicProperty", ...completion.functionMembers]; +const publicCompletions: ReadonlyArray = [ + { name: "publicMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "publicProperty", sortText: completion.SortText.LocalDeclarationPriority }, + ...completion.functionMembers +]; verify.completions( { // Sub class, everything but private is visible marker: "1", exact: [ - "prototype", - "protectedOverriddenMethod", - "protectedOverriddenProperty", - "protectedMethod", - "protectedProperty", + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "protectedOverriddenMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedOverriddenProperty", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedProperty", sortText: completion.SortText.LocalDeclarationPriority }, ...publicCompletions ], }, @@ -45,9 +49,9 @@ verify.completions( // Can see protected methods elevated to public marker: "2", exact: [ - "prototype", - "protectedOverriddenMethod", - "protectedOverriddenProperty", + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "protectedOverriddenMethod", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "protectedOverriddenProperty", sortText: completion.SortText.LocalDeclarationPriority }, ...publicCompletions, ], }, diff --git a/tests/cases/fourslash/completionListsThroughTransitiveBaseClasses.ts b/tests/cases/fourslash/completionListsThroughTransitiveBaseClasses.ts index 9bf2827e392..f4fd2765028 100644 --- a/tests/cases/fourslash/completionListsThroughTransitiveBaseClasses.ts +++ b/tests/cases/fourslash/completionListsThroughTransitiveBaseClasses.ts @@ -15,8 +15,12 @@ ////A./*3*/ goTo.eachMarker((_, i) => { - const all = ["foo", "bar", "baz"]; - verify.completions({ includes: all.slice(0, 3 - i), excludes: all.slice(3 - i) }); + const all = [ + { name: "foo", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "bar", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "baz", sortText: completion.SortText.LocalDeclarationPriority } + ]; + verify.completions({ includes: all.slice(0, 3 - i), excludes: all.slice(3 - i).map(e => e.name) }); edit.insert("foo;"); }); diff --git a/tests/cases/fourslash/completionsNamespaceMergedWithClass.ts b/tests/cases/fourslash/completionsNamespaceMergedWithClass.ts index 109b6f72b1b..ed624ff1042 100644 --- a/tests/cases/fourslash/completionsNamespaceMergedWithClass.ts +++ b/tests/cases/fourslash/completionsNamespaceMergedWithClass.ts @@ -14,5 +14,12 @@ verify.completions( { marker: "type", exact: "T" }, - { marker: "value", exact: ["prototype", "m", ...completion.functionMembers] }, + { + marker: "value", + exact: [ + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "m", sortText: completion.SortText.LocalDeclarationPriority }, + ...completion.functionMembers + ] + }, ); diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index 716589e32af..fc61f9831e3 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -769,13 +769,14 @@ declare function classification(format: "2020"): FourSlashInterface.ModernClassi declare namespace completion { type Entry = FourSlashInterface.ExpectedCompletionEntryObject; export const enum SortText { - LocationPriority = "0", - OptionalMember = "1", - MemberDeclaredBySpreadAssignment = "2", - SuggestedClassMembers = "3", - GlobalsOrKeywords = "4", - AutoImportSuggestions = "5", - JavascriptIdentifiers = "6" + LocalDeclarationPriority = "0", + LocationPriority = "1", + OptionalMember = "2", + MemberDeclaredBySpreadAssignment = "3", + SuggestedClassMembers = "4", + GlobalsOrKeywords = "5", + AutoImportSuggestions = "6", + JavascriptIdentifiers = "7" } export const enum CompletionSource { ThisProperty = "ThisProperty/" diff --git a/tests/cases/fourslash/jsdocTypedefTagTypeExpressionCompletion.ts b/tests/cases/fourslash/jsdocTypedefTagTypeExpressionCompletion.ts index 7beeab84c57..0e59153981d 100644 --- a/tests/cases/fourslash/jsdocTypedefTagTypeExpressionCompletion.ts +++ b/tests/cases/fourslash/jsdocTypedefTagTypeExpressionCompletion.ts @@ -70,8 +70,8 @@ verify.completions( { marker: "valueMemberOfFoo", exact: [ - "prototype", - { name: "method1", kind: "method", kindModifiers: "static" }, + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "method1", kind: "method", kindModifiers: "static", sortText: completion.SortText.LocalDeclarationPriority }, ...completion.functionMembers, ], }, diff --git a/tests/cases/fourslash/memberListErrorRecovery.ts b/tests/cases/fourslash/memberListErrorRecovery.ts index a7414b4769e..27ee634a9f7 100644 --- a/tests/cases/fourslash/memberListErrorRecovery.ts +++ b/tests/cases/fourslash/memberListErrorRecovery.ts @@ -5,4 +5,4 @@ ////Foo./**/; /////*1*/var bar; -verify.completions({ marker: "", includes: "fun" }); +verify.completions({ marker: "", includes: [{ name: "fun", sortText: completion.SortText.LocalDeclarationPriority }] }); diff --git a/tests/cases/fourslash/multiModuleClodule1.ts b/tests/cases/fourslash/multiModuleClodule1.ts index fa52150896f..43cb3875eb2 100644 --- a/tests/cases/fourslash/multiModuleClodule1.ts +++ b/tests/cases/fourslash/multiModuleClodule1.ts @@ -21,7 +21,16 @@ verify.completions( { marker: "1", includes: "C" }, - { marker: ["2", "4"], exact: ["prototype", "boo", "x", "foo", ...completion.functionMembers] }, + { + marker: ["2", "4"], + exact: [ + { name: "prototype", sortText: completion.SortText.LocationPriority }, + { name: "boo", sortText: completion.SortText.LocalDeclarationPriority }, + { name: "x", sortText: completion.SortText.LocationPriority }, + { name: "foo", sortText: completion.SortText.LocationPriority }, + ...completion.functionMembers + ] + }, { marker: "3", exact: ["foo", "bar"] }, ); verify.noErrors();