Skip to content

Commit 3d971df

Browse files
authored
Mark isComplete based on max completions (#73)
1 parent 29e8e9f commit 3d971df

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

src/autocomplete/CompletionRouter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ export class CompletionRouter implements SettingsConfigurable, Closeable {
9595
return completions.then((result) => {
9696
return this.formatter.format(
9797
{
98-
isIncomplete: false,
98+
isIncomplete: result.length > this.completionSettings.maxCompletions,
9999
items: result.slice(0, this.completionSettings.maxCompletions),
100100
},
101101
context,
@@ -104,7 +104,7 @@ export class CompletionRouter implements SettingsConfigurable, Closeable {
104104
});
105105
} else if (completions) {
106106
const completionList = {
107-
isIncomplete: false,
107+
isIncomplete: completions.length > this.completionSettings.maxCompletions,
108108
items: completions.slice(0, this.completionSettings.maxCompletions),
109109
};
110110

tst/unit/autocomplete/CompletionRouter.test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -794,4 +794,46 @@ describe('CompletionRouter', () => {
794794
});
795795
});
796796
});
797+
798+
describe('isIncomplete handling', () => {
799+
test('should set isIncomplete to true when results exceed maxCompletions', () => {
800+
const mockProvider = {
801+
getCompletions: vi
802+
.fn()
803+
.mockReturnValue(Array.from({ length: 150 }, (_, i) => ({ label: `Item${i}`, kind: 1 }))),
804+
};
805+
806+
completionRouter['completionProviderMap'].set('TopLevelSection', mockProvider);
807+
completionRouter['completionSettings'] = { ...completionRouter['completionSettings'], maxCompletions: 100 };
808+
809+
const mockContext = createTopLevelContext('Unknown', { text: '' });
810+
mockComponents.contextManager.getContext.returns(mockContext);
811+
812+
const result = completionRouter.getCompletions(mockParams) as CompletionList | undefined;
813+
814+
expect(result).toBeDefined();
815+
expect(result!.isIncomplete).toBe(true);
816+
expect(result!.items.length).toBe(100);
817+
});
818+
819+
test('should set isIncomplete to false when results are within maxCompletions', () => {
820+
const mockProvider = {
821+
getCompletions: vi
822+
.fn()
823+
.mockReturnValue(Array.from({ length: 50 }, (_, i) => ({ label: `Item${i}`, kind: 1 }))),
824+
};
825+
826+
completionRouter['completionProviderMap'].set('TopLevelSection', mockProvider);
827+
completionRouter['completionSettings'] = { ...completionRouter['completionSettings'], maxCompletions: 100 };
828+
829+
const mockContext = createTopLevelContext('Unknown', { text: '' });
830+
mockComponents.contextManager.getContext.returns(mockContext);
831+
832+
const result = completionRouter.getCompletions(mockParams) as CompletionList | undefined;
833+
834+
expect(result).toBeDefined();
835+
expect(result!.isIncomplete).toBe(false);
836+
expect(result!.items.length).toBe(50);
837+
});
838+
});
797839
});

0 commit comments

Comments
 (0)