Skip to content

Commit e5301ee

Browse files
authored
when comparing suggestions then use their textLabel (microsoft#153283)
fixes microsoft#153026
1 parent a60ffd7 commit e5301ee

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

src/vs/editor/contrib/suggest/browser/suggest.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,9 +323,9 @@ function defaultComparator(a: CompletionItem, b: CompletionItem): number {
323323
}
324324
}
325325
// check with 'label'
326-
if (a.completion.label < b.completion.label) {
326+
if (a.textLabel < b.textLabel) {
327327
return -1;
328-
} else if (a.completion.label > b.completion.label) {
328+
} else if (a.textLabel > b.textLabel) {
329329
return 1;
330330
}
331331
// check with 'type'

src/vs/editor/contrib/suggest/test/browser/completionModel.test.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ import { CompletionModel } from 'vs/editor/contrib/suggest/browser/completionMod
1010
import { CompletionItem, getSuggestionComparator, SnippetSortOrder } from 'vs/editor/contrib/suggest/browser/suggest';
1111
import { WordDistance } from 'vs/editor/contrib/suggest/browser/wordDistance';
1212

13-
export function createSuggestItem(label: string, overwriteBefore: number, kind = languages.CompletionItemKind.Property, incomplete: boolean = false, position: IPosition = { lineNumber: 1, column: 1 }, sortText?: string, filterText?: string): CompletionItem {
13+
export function createSuggestItem(label: string | languages.CompletionItemLabel, overwriteBefore: number, kind = languages.CompletionItemKind.Property, incomplete: boolean = false, position: IPosition = { lineNumber: 1, column: 1 }, sortText?: string, filterText?: string): CompletionItem {
1414
const suggestion: languages.CompletionItem = {
1515
label,
1616
sortText,
1717
filterText,
1818
range: { startLineNumber: position.lineNumber, startColumn: position.column - overwriteBefore, endLineNumber: position.lineNumber, endColumn: position.column },
19-
insertText: label,
19+
insertText: typeof label === 'string' ? label : label.label,
2020
kind
2121
};
2222
const container: languages.CompletionList = {
@@ -275,6 +275,17 @@ suite('CompletionModel', function () {
275275
assert.strictEqual(second.completion.label, '<- groups');
276276
});
277277

278+
test('Completion item sorting broken when using label details #153026', function () {
279+
const itemZZZ = createSuggestItem({ label: 'ZZZ' }, 0, languages.CompletionItemKind.Operator, false);
280+
const itemAAA = createSuggestItem({ label: 'AAA' }, 0, languages.CompletionItemKind.Operator, false);
281+
const itemIII = createSuggestItem('III', 0, languages.CompletionItemKind.Operator, false);
282+
283+
const cmp = getSuggestionComparator(SnippetSortOrder.Inline);
284+
const actual = [itemZZZ, itemAAA, itemIII].sort(cmp);
285+
286+
assert.deepStrictEqual(actual, [itemAAA, itemIII, itemZZZ]);
287+
});
288+
278289
test('Score only filtered items when typing more, score all when typing less', function () {
279290
model = new CompletionModel([
280291
createSuggestItem('console', 0),

0 commit comments

Comments
 (0)