Skip to content

Commit 31493a6

Browse files
authored
config(amazonq): crossfile config, increase lines per chunk aws#5739
number of lines per chunk: 10 -> 50
1 parent 9846790 commit 31493a6

File tree

4 files changed

+67
-72
lines changed

4 files changed

+67
-72
lines changed

packages/amazonq/test/unit/codewhisperer/util/crossFileContextUtil.test.ts

Lines changed: 56 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import assert from 'assert'
77
import * as vscode from 'vscode'
88
import * as sinon from 'sinon'
99
import * as crossFile from 'aws-core-vscode/codewhisperer'
10-
import { createMockTextEditor } from 'aws-core-vscode/test'
10+
import { aStringWithLineCount, createMockTextEditor } from 'aws-core-vscode/test'
1111
import { crossFileContextConfig } from 'aws-core-vscode/codewhisperer'
1212
import {
1313
assertTabCount,
@@ -35,18 +35,18 @@ describe('crossFileContextUtil', function () {
3535
tempFolder = (await createTestWorkspaceFolder()).uri.fsPath
3636
})
3737

38-
it('should fetch 3 chunks and each chunk should contains 10 lines', async function () {
39-
await toTextEditor(sampleFileOf60Lines, 'CrossFile.java', tempFolder, { preview: false })
38+
it('should fetch 3 chunks and each chunk should contains 50 lines', async function () {
39+
await toTextEditor(aStringWithLineCount(200), 'CrossFile.java', tempFolder, { preview: false })
4040
const myCurrentEditor = await toTextEditor('', 'TargetFile.java', tempFolder, {
4141
preview: false,
4242
})
4343
const actual = await crossFile.fetchSupplementalContextForSrc(myCurrentEditor, fakeCancellationToken)
4444
assert.ok(actual)
4545
assert.ok(actual.supplementalContextItems.length === 3)
4646

47-
assert.strictEqual(actual.supplementalContextItems[0].content.split('\n').length, 10)
48-
assert.strictEqual(actual.supplementalContextItems[1].content.split('\n').length, 10)
49-
assert.strictEqual(actual.supplementalContextItems[2].content.split('\n').length, 10)
47+
assert.strictEqual(actual.supplementalContextItems[0].content.split('\n').length, 50)
48+
assert.strictEqual(actual.supplementalContextItems[1].content.split('\n').length, 50)
49+
assert.strictEqual(actual.supplementalContextItems[2].content.split('\n').length, 50)
5050
})
5151
})
5252

@@ -250,73 +250,59 @@ describe('crossFileContextUtil', function () {
250250
assert.strictEqual(chunks[1].content, 'line_6\nline_7')
251251
})
252252

253-
it('codewhisperer crossfile config should use 10 lines', async function () {
253+
it('codewhisperer crossfile config should use 50 lines', async function () {
254254
const filePath = path.join(tempFolder, 'file.txt')
255-
await toFile(sampleFileOf60Lines, filePath)
255+
await toFile(aStringWithLineCount(210), filePath)
256256

257257
const chunks = await crossFile.splitFileToChunks(filePath, crossFileContextConfig.numberOfLinesEachChunk)
258-
assert.strictEqual(chunks.length, 6)
258+
259+
// (210 / 50) + 1
260+
assert.strictEqual(chunks.length, 5)
261+
// line0 -> line49
262+
assert.strictEqual(chunks[0].content, aStringWithLineCount(50, 0))
263+
// line50 -> line99
264+
assert.strictEqual(chunks[1].content, aStringWithLineCount(50, 50))
265+
// line100 -> line149
266+
assert.strictEqual(chunks[2].content, aStringWithLineCount(50, 100))
267+
// line150 -> line199
268+
assert.strictEqual(chunks[3].content, aStringWithLineCount(50, 150))
269+
// line 200 -> line209
270+
assert.strictEqual(chunks[4].content, aStringWithLineCount(10, 200))
271+
})
272+
273+
it('linkChunks should add another chunk which will link to the first chunk and chunk.nextContent should reflect correct value', async function () {
274+
const filePath = path.join(tempFolder, 'file.txt')
275+
await toFile(aStringWithLineCount(210), filePath)
276+
277+
const chunks = await crossFile.splitFileToChunks(filePath, crossFileContextConfig.numberOfLinesEachChunk)
278+
const linkedChunks = crossFile.linkChunks(chunks)
279+
280+
// 210 / 50 + 2
281+
assert.strictEqual(linkedChunks.length, 6)
282+
283+
// 0th
284+
assert.strictEqual(linkedChunks[0].content, aStringWithLineCount(3, 0))
285+
assert.strictEqual(linkedChunks[0].nextContent, aStringWithLineCount(50, 0))
286+
287+
// 1st
288+
assert.strictEqual(linkedChunks[1].content, aStringWithLineCount(50, 0))
289+
assert.strictEqual(linkedChunks[1].nextContent, aStringWithLineCount(50, 50))
290+
291+
// 2nd
292+
assert.strictEqual(linkedChunks[2].content, aStringWithLineCount(50, 50))
293+
assert.strictEqual(linkedChunks[2].nextContent, aStringWithLineCount(50, 100))
294+
295+
// 3rd
296+
assert.strictEqual(linkedChunks[3].content, aStringWithLineCount(50, 100))
297+
assert.strictEqual(linkedChunks[3].nextContent, aStringWithLineCount(50, 150))
298+
299+
// 4th
300+
assert.strictEqual(linkedChunks[4].content, aStringWithLineCount(50, 150))
301+
assert.strictEqual(linkedChunks[4].nextContent, aStringWithLineCount(10, 200))
302+
303+
// 5th
304+
assert.strictEqual(linkedChunks[5].content, aStringWithLineCount(10, 200))
305+
assert.strictEqual(linkedChunks[5].nextContent, aStringWithLineCount(10, 200))
259306
})
260307
})
261308
})
262-
263-
const sampleFileOf60Lines = `import java.util.List;
264-
// we need this comment on purpose because chunk will be trimed right, adding this to avoid trimRight and make assertion easier
265-
/**
266-
*
267-
*
268-
*
269-
*
270-
*
271-
**/
272-
class Main {
273-
public static void main(String[] args) {
274-
Calculator calculator = new Calculator();
275-
calculator.add(1, 2);
276-
calculator.subtract(1, 2);
277-
calculator.multiply(1, 2);
278-
calculator.divide(1, 2);
279-
calculator.remainder(1, 2);
280-
}
281-
}
282-
//
283-
class Calculator {
284-
public Calculator() {
285-
System.out.println("constructor");
286-
}
287-
//
288-
public add(int num1, int num2) {
289-
System.out.println("add");
290-
return num1 + num2;
291-
}
292-
//
293-
public subtract(int num1, int num2) {
294-
System.out.println("subtract");
295-
return num1 - num2;
296-
}
297-
//
298-
public multiply(int num1, int num2) {
299-
System.out.println("multiply");
300-
return num1 * num2;
301-
}
302-
//
303-
public divide(int num1, int num2) {
304-
System.out.println("divide");
305-
return num1 / num2;
306-
}
307-
//
308-
public remainder(int num1, int num2) {
309-
System.out.println("remainder");
310-
return num1 % num2;
311-
}
312-
//
313-
public power(int num1, int num2) {
314-
System.out.println("power");
315-
return (int) Math.pow(num1, num2);
316-
}
317-
//
318-
public squareRoot(int num1) {
319-
System.out.println("squareRoot");
320-
return (int) Math.sqrt(num1);
321-
}
322-
}`

packages/core/src/codewhisperer/models/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -711,7 +711,7 @@ export const runSecurityScanButtonTitle = 'Run security scan'
711711
export const crossFileContextConfig = {
712712
numberOfChunkToFetch: 60,
713713
topK: 3,
714-
numberOfLinesEachChunk: 10,
714+
numberOfLinesEachChunk: 50,
715715
}
716716

717717
export const utgConfig = {

packages/core/src/codewhisperer/util/supplementalContext/crossFileContextUtil.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ function shouldFetchCrossFileContext(languageId: vscode.TextDocument['languageId
164164
* when a given chunk context passes the match in BM25.
165165
* Special handling is needed for last(its next points to its own) and first chunk
166166
*/
167-
function linkChunks(chunks: Chunk[]) {
167+
export function linkChunks(chunks: Chunk[]) {
168168
const updatedChunks: Chunk[] = []
169169

170170
// This additional chunk is needed to create a next pointer to chunk 0.

packages/core/src/test/codewhisperer/testUtil.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,3 +207,12 @@ export function createMockDirentFile(fileName: string): Dirent {
207207
dirent.name = fileName
208208
return dirent
209209
}
210+
211+
export function aStringWithLineCount(lineCount: number, start: number = 0): string {
212+
let s = ''
213+
for (let i = start; i < start + lineCount; i++) {
214+
s += `line${i}\n`
215+
}
216+
217+
return s.trimEnd()
218+
}

0 commit comments

Comments
 (0)