diff --git a/src/services/completions.ts b/src/services/completions.ts index 188f45f29ac45..dc01ea8ede4b9 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -3851,6 +3851,10 @@ function getCompletionData( if (firstAccessibleSymbolId && addToSeen(seenPropertySymbols, firstAccessibleSymbolId)) { const index = symbols.length; symbols.push(firstAccessibleSymbol); + + // Symbol completions should have lower priority since they represent computed property access + symbolToSortTextMap[getSymbolId(firstAccessibleSymbol)] = SortText.GlobalsOrKeywords; + const moduleSymbol = firstAccessibleSymbol.parent; if ( !moduleSymbol || diff --git a/tests/baselines/reference/completionsUniqueSymbol2.baseline b/tests/baselines/reference/completionsUniqueSymbol2.baseline index fc4ae791cdbda..2f8276a6b7efb 100644 --- a/tests/baselines/reference/completionsUniqueSymbol2.baseline +++ b/tests/baselines/reference/completionsUniqueSymbol2.baseline @@ -56,7 +56,7 @@ "name": "a", "kind": "const", "kindModifiers": "", - "sortText": "11", + "sortText": "15", "insertText": "[a]", "replacementSpan": { "start": 344, @@ -210,7 +210,7 @@ "name": "b", "kind": "const", "kindModifiers": "", - "sortText": "11", + "sortText": "15", "insertText": "[b]", "replacementSpan": { "start": 344, diff --git a/tests/cases/fourslash/completionForComputedStringProperties.ts b/tests/cases/fourslash/completionForComputedStringProperties.ts index e03ceb4abd0ee..d9ccf16f6aabb 100644 --- a/tests/cases/fourslash/completionForComputedStringProperties.ts +++ b/tests/cases/fourslash/completionForComputedStringProperties.ts @@ -8,11 +8,11 @@ //// declare const a: A; //// a[|./**/|] -verify.completions({ - marker: "", - exact: [ - { name: "p1" }, - { name: "p2", insertText: '[p2]', replacementSpan: test.ranges()[0] }, - ], - preferences: { includeInsertTextCompletions: true }, +verify.completions({ + marker: "", + exact: [ + { name: "p1" }, + { name: "p2", insertText: '[p2]', sortText: completion.SortText.GlobalsOrKeywords, replacementSpan: test.ranges()[0] }, + ], + preferences: { includeInsertTextCompletions: true }, }); \ No newline at end of file diff --git a/tests/cases/fourslash/completionsSymbolMembers.ts b/tests/cases/fourslash/completionsSymbolMembers.ts index 39b8c5c499ac9..e64f42d61819b 100644 --- a/tests/cases/fourslash/completionsSymbolMembers.ts +++ b/tests/cases/fourslash/completionsSymbolMembers.ts @@ -14,12 +14,12 @@ verify.completions( { marker: "i", - exact: { name: "s", insertText: "[s]", replacementSpan: test.ranges()[0] }, + exact: { name: "s", insertText: "[s]", sortText: completion.SortText.GlobalsOrKeywords, replacementSpan: test.ranges()[0] }, preferences: { includeInsertTextCompletions: true }, }, { marker: "j", - exact: { name: "N", insertText: "[N]", replacementSpan: test.ranges()[1] }, + exact: { name: "N", insertText: "[N]", sortText: completion.SortText.GlobalsOrKeywords, replacementSpan: test.ranges()[1] }, preferences: { includeInsertTextCompletions: true }, } ); diff --git a/tests/cases/fourslash/completionsUniqueSymbol1.ts b/tests/cases/fourslash/completionsUniqueSymbol1.ts index a00fe0d716751..3aef47d9f9b27 100644 --- a/tests/cases/fourslash/completionsUniqueSymbol1.ts +++ b/tests/cases/fourslash/completionsUniqueSymbol1.ts @@ -17,6 +17,6 @@ verify.completions({ marker: "", - exact: { name: "M", insertText: "[M]", replacementSpan: test.ranges()[0] }, + exact: { name: "M", insertText: "[M]", sortText: completion.SortText.GlobalsOrKeywords, replacementSpan: test.ranges()[0] }, preferences: { includeInsertTextCompletions: true }, }); diff --git a/tests/cases/fourslash/completionsUniqueSymbol_import.ts b/tests/cases/fourslash/completionsUniqueSymbol_import.ts index a12e4cae271f5..dbdaec369ac4e 100644 --- a/tests/cases/fourslash/completionsUniqueSymbol_import.ts +++ b/tests/cases/fourslash/completionsUniqueSymbol_import.ts @@ -24,7 +24,7 @@ verify.completions({ marker: "", exact: [ "n", - { name: "publicSym", source: "/a", insertText: "[publicSym]", replacementSpan: test.ranges()[0], hasAction: true }, + { name: "publicSym", source: "/a", insertText: "[publicSym]", sortText: completion.SortText.GlobalsOrKeywords, replacementSpan: test.ranges()[0], hasAction: true }, ], preferences: { includeInsertTextCompletions: true, diff --git a/tests/cases/fourslash/symbolCompletionLowerPriority.ts b/tests/cases/fourslash/symbolCompletionLowerPriority.ts new file mode 100644 index 0000000000000..cb29c4e309215 --- /dev/null +++ b/tests/cases/fourslash/symbolCompletionLowerPriority.ts @@ -0,0 +1,20 @@ +/// + +////declare const Symbol: (s: string) => symbol; +////const mySymbol = Symbol("test"); +////interface TestInterface { +//// [mySymbol]: string; +//// normalProperty: number; +////} +////const obj: TestInterface = {} as any; +////obj./*completions*/ + +// Test new behavior: Symbol completions should have lower priority +verify.completions({ + marker: "completions", + includes: [ + { name: "normalProperty", sortText: completion.SortText.LocationPriority }, + { name: "mySymbol", sortText: completion.SortText.GlobalsOrKeywords, insertText: "[mySymbol]" } + ], + preferences: { includeInsertTextCompletions: true } +}); \ No newline at end of file