Skip to content

Commit 7ce97b3

Browse files
authored
Limit tree-sitter project indexing memory (#644)
1 parent fddcc03 commit 7ce97b3

4 files changed

Lines changed: 496 additions & 171 deletions

File tree

packages/code-map/__tests__/parse.test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,31 @@ describe('parse module', () => {
5151
expect(mockQuery.captures).toHaveBeenCalledWith(mockTree.rootNode)
5252
})
5353

54+
it('should skip parsing source larger than the byte limit', () => {
55+
const mockParser = createMockTreeSitterParser()
56+
const mockLanguageConfig: LanguageConfig = {
57+
extensions: ['.ts'],
58+
wasmFile: 'tree-sitter-typescript.wasm',
59+
queryText: 'mock query',
60+
parser: mockParser,
61+
query: createMockTreeSitterQuery(),
62+
}
63+
64+
const result = parseTokens(
65+
'test.ts',
66+
mockLanguageConfig,
67+
() => 'x'.repeat(20),
68+
{ maxBytes: 10 },
69+
)
70+
71+
expect(result).toEqual({
72+
numLines: 0,
73+
identifiers: [],
74+
calls: [],
75+
})
76+
expect(mockParser.parse).not.toHaveBeenCalled()
77+
})
78+
5479
it('should handle null file content gracefully', () => {
5580
const mockLanguageConfig: LanguageConfig = {
5681
extensions: ['.ts'],
@@ -594,5 +619,22 @@ console.log('Total:', formatCurrency(total));
594619
expect(typeof result.tokenScores).toBe('object')
595620
expect(typeof result.tokenCallers).toBe('object')
596621
})
622+
623+
it('should continue scoring when a provided reader rejects for one file', async () => {
624+
const result = await getFileTokenScores(
625+
'/tmp/test-project',
626+
['src/unreadable.ts', 'src/readable.ts'],
627+
async (filePath: string) => {
628+
if (filePath === 'src/unreadable.ts') {
629+
throw new Error('permission denied')
630+
}
631+
632+
return 'export function readable() { return helper() }\nfunction helper() { return 1 }\n'
633+
},
634+
)
635+
636+
expect(result.tokenScores).toBeDefined()
637+
expect(result.tokenCallers).toBeDefined()
638+
})
597639
})
598640
})

0 commit comments

Comments
 (0)