Skip to content

Commit e7d55be

Browse files
committed
fix(43796): sort deprecated completions lower than others
1 parent 5e4fcfb commit e7d55be

15 files changed

+289
-48
lines changed

src/services/completions.ts

Lines changed: 86 additions & 27 deletions
Large diffs are not rendered by default.

src/services/symbolDisplay.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,6 @@ namespace ts.SymbolDisplay {
100100
return ScriptElementKind.unknown;
101101
}
102102

103-
function isDeprecatedDeclaration(decl: Declaration) {
104-
return !!(getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & ModifierFlags.Deprecated);
105-
}
106-
107103
function getNormalizedSymbolModifiers(symbol: Symbol) {
108104
if (symbol.declarations && symbol.declarations.length) {
109105
const [declaration, ...declarations] = symbol.declarations;

src/services/utilities.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3352,5 +3352,9 @@ namespace ts {
33523352
|| (!!globalCachePath && startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent));
33533353
}
33543354

3355+
export function isDeprecatedDeclaration(decl: Declaration) {
3356+
return !!(getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & ModifierFlags.Deprecated);
3357+
}
3358+
33553359
// #endregion
33563360
}

tests/baselines/reference/completionsSalsaMethodsOnAssignedFunctionExpressions.baseline

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -302,21 +302,21 @@
302302
"name": "a",
303303
"kind": "warning",
304304
"kindModifiers": "",
305-
"sortText": "7",
305+
"sortText": "14",
306306
"isFromUncheckedFile": true
307307
},
308308
{
309309
"name": "prototype",
310310
"kind": "warning",
311311
"kindModifiers": "",
312-
"sortText": "7",
312+
"sortText": "14",
313313
"isFromUncheckedFile": true
314314
},
315315
{
316316
"name": "m",
317317
"kind": "property",
318318
"kindModifiers": "",
319-
"sortText": "7",
319+
"sortText": "14",
320320
"isFromUncheckedFile": true,
321321
"displayParts": [
322322
{

tests/cases/fourslash/completionsWithDeprecatedTag1.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,26 @@
2525
verify.completions({
2626
marker: "1",
2727
includes: [
28-
{ name: "Foo", kind: "interface", kindModifiers: "deprecated" }
28+
{ name: "Foo", kind: "interface", kindModifiers: "deprecated", sortText: completion.SortText.DeprecatedLocationPriority }
2929
]
3030
}, {
3131
marker: "2",
3232
includes: [
33-
{ name: "bar", kind: "method", kindModifiers: "deprecated" }
33+
{ name: "bar", kind: "method", kindModifiers: "deprecated", sortText: completion.SortText.DeprecatedLocationPriority }
3434
]
3535
}, {
3636
marker: "3",
3737
includes: [
38-
{ name: "prop", kind: "property", kindModifiers: "deprecated" }
38+
{ name: "prop", kind: "property", kindModifiers: "deprecated", sortText: completion.SortText.DeprecatedLocationPriority }
3939
]
4040
}, {
4141
marker: "4",
4242
includes: [
43-
{ name: "foobar", kind: "function", kindModifiers: "export,deprecated" }
43+
{ name: "foobar", kind: "function", kindModifiers: "export,deprecated", sortText: completion.SortText.DeprecatedLocationPriority }
4444
]
4545
}, {
4646
marker: "5",
4747
includes: [
48-
{ name: "foobar", kind: "alias", kindModifiers: "export,deprecated" }
48+
{ name: "foobar", kind: "alias", kindModifiers: "export,deprecated", sortText: completion.SortText.DeprecatedLocationPriority }
4949
]
50-
}
51-
);
50+
});
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @Filename: /foo.ts
4+
/////** @deprecated foo */
5+
////export const foo = 0;
6+
7+
// @Filename: /index.ts
8+
/////**/
9+
10+
verify.completions({
11+
marker: "",
12+
includes: [{
13+
name: "foo",
14+
source: "/foo",
15+
sourceDisplay: "./foo",
16+
hasAction: true,
17+
kind: "const",
18+
kindModifiers: "export,deprecated",
19+
sortText: completion.SortText.DeprecatedAutoImportSuggestions
20+
}],
21+
preferences: {
22+
includeCompletionsForModuleExports: true,
23+
},
24+
});

tests/cases/fourslash/completionsWithDeprecatedTag2.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99

1010
verify.completions({
1111
marker: "",
12-
includes: [
13-
{ name: "foo", kind: "function", kindModifiers: "deprecated,declare" }
14-
]
12+
includes: [{
13+
name: "foo",
14+
kind: "function",
15+
kindModifiers: "deprecated,declare",
16+
sortText: completion.SortText.DeprecatedLocationPriority
17+
}]
1518
});

tests/cases/fourslash/completionsWithDeprecatedTag3.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99

1010
verify.completions({
1111
marker: "",
12-
includes: [
13-
{ name: "foo", kind: "function", kindModifiers: "declare" }
14-
]
12+
includes: [{
13+
name: "foo",
14+
kind: "function",
15+
kindModifiers: "declare",
16+
sortText: completion.SortText.LocationPriority
17+
}]
1518
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @noLib: true
4+
5+
////f({
6+
//// a/**/
7+
//// xyz: ``,
8+
////});
9+
////declare function f(options: {
10+
//// /** @deprecated abc */
11+
//// abc?: number,
12+
//// xyz?: string
13+
////}): void;
14+
15+
verify.completions({
16+
marker: "",
17+
exact: [{
18+
name: "abc",
19+
kind: "property",
20+
kindModifiers: "deprecated,declare,optional",
21+
sortText: completion.SortText.DeprecatedOptionalMember
22+
}],
23+
});
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/// <reference path="fourslash.ts"/>
2+
3+
////class Foo {
4+
//// /** @deprecated m */
5+
//// static m() {}
6+
////}
7+
////Foo./**/
8+
9+
verify.completions({
10+
marker: "",
11+
exact: [
12+
{
13+
name: "prototype",
14+
sortText: completion.SortText.LocationPriority
15+
},
16+
{
17+
name: "m",
18+
kind: "method",
19+
kindModifiers: "static,deprecated",
20+
sortText: completion.SortText.DeprecatedLocalDeclarationPriority
21+
},
22+
...completion.functionMembers
23+
]
24+
});
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/// <reference path="fourslash.ts"/>
2+
3+
////module Foo {
4+
//// /** @deprecated foo */
5+
//// export var foo: number;
6+
////}
7+
////Foo./**/
8+
9+
verify.completions({
10+
marker: "",
11+
exact: [{
12+
name: "foo",
13+
kind: "var",
14+
kindModifiers: "export,deprecated",
15+
sortText: completion.SortText.DeprecatedLocationPriority
16+
}]
17+
});
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @strict: true
4+
5+
////interface I {
6+
//// /** @deprecated a */
7+
//// a: number;
8+
////}
9+
10+
////const foo = {
11+
//// a: 1
12+
////}
13+
14+
////const i: I = {
15+
//// ...foo,
16+
//// /**/
17+
////}
18+
19+
verify.completions({
20+
marker: "",
21+
exact: [{
22+
name: "a",
23+
sortText: completion.SortText.DeprecatedMemberDeclaredBySpreadAssignment,
24+
kind: 'property',
25+
kindModifiers: "deprecated"
26+
}]
27+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
////class C {
4+
//// /** @deprecated */
5+
//// p: number;
6+
//// m() {
7+
//// return (/**/)
8+
//// }
9+
////}
10+
11+
verify.completions({
12+
marker: "",
13+
includes: [{
14+
name: "p",
15+
kind: "property",
16+
kindModifiers: "deprecated",
17+
insertText: "this.p",
18+
sortText: completion.SortText.DeprecatedSuggestedClassMembers,
19+
source: completion.CompletionSource.ThisProperty
20+
}],
21+
preferences: {
22+
includeInsertTextCompletions: true
23+
},
24+
isNewIdentifierLocation: true
25+
});
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @lib: dom
4+
// @allowJs: true
5+
6+
// @Filename: globals.d.ts
7+
/////** @deprecated foo */
8+
////declare var foo: string;
9+
10+
// @Filename: index.ts
11+
////class Foo {
12+
//// foo: number;
13+
//// m() {
14+
//// foo/**/
15+
//// }
16+
////}
17+
18+
verify.completions({
19+
marker: "",
20+
includes: [{
21+
name: "foo",
22+
kind: "var",
23+
kindModifiers: "deprecated,declare",
24+
sortText: completion.SortText.DeprecatedGlobalsOrKeywords
25+
}]
26+
}, {
27+
preferences: {
28+
includeInsertTextCompletions: true
29+
}
30+
});

tests/cases/fourslash/fourslash.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -796,7 +796,14 @@ declare namespace completion {
796796
SuggestedClassMembers = "4",
797797
GlobalsOrKeywords = "5",
798798
AutoImportSuggestions = "6",
799-
JavascriptIdentifiers = "7"
799+
DeprecatedLocalDeclarationPriority = "7",
800+
DeprecatedLocationPriority = "8",
801+
DeprecatedOptionalMember = "9",
802+
DeprecatedMemberDeclaredBySpreadAssignment = "10",
803+
DeprecatedSuggestedClassMembers = "11",
804+
DeprecatedGlobalsOrKeywords = "12",
805+
DeprecatedAutoImportSuggestions = "13",
806+
JavascriptIdentifiers = "14"
800807
}
801808
export const enum CompletionSource {
802809
ThisProperty = "ThisProperty/"

0 commit comments

Comments
 (0)