Skip to content

Commit 5052c2b

Browse files
committed
feat: add support for reading unsaved content
1 parent 605fc87 commit 5052c2b

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

packages/core/src/shared/utilities/workspaceUtils.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { ChildProcess } from './processUtils'
2121
import { isWin } from '../vscode/env'
2222
import { maxRepoSizeBytes } from '../../amazonqFeatureDev/constants'
2323
import { ZipConstants } from '../../codewhisperer/util/zipUtil'
24+
import { isFileOpenAndDirty } from '../../amazonq/util/zipProjectUtil'
2425

2526
type GitIgnoreRelativeAcceptor = {
2627
folderPath: string
@@ -391,7 +392,7 @@ export async function collectFiles(
391392
}
392393

393394
let totalSizeBytes = 0
394-
const storage = []
395+
const storage: (Omit<CollectFilesResultItem, 'fileContent'> | CollectFilesResultItem)[] = []
395396
const excludePatternFilter = excludePatternsAsString(excludePatterns)
396397
for (const rootPath of sourcePaths) {
397398
const allFiles = await vscode.workspace.findFiles(
@@ -432,19 +433,21 @@ export async function collectFiles(
432433
isText: !ZipConstants.knownBinaryFileExts.includes(path.extname(file.fsPath)),
433434
}
434435
if (includeContent) {
435-
const content = await readFile(file)
436+
const hasUnsavedChanges = isFileOpenAndDirty(file)
437+
const content =
438+
result.isText && hasUnsavedChanges ? await getCurrentTextContent(file) : await readFile(file)
436439
if (content === undefined) {
437440
continue
438441
}
439-
totalSizeBytes += fileStat.size
442+
440443
storage.push({
441444
...result,
442445
fileContent: content,
443446
})
444447
} else {
445-
totalSizeBytes += fileStat.size
446448
storage.push(result)
447449
}
450+
totalSizeBytes += fileStat.size
448451
}
449452
}
450453
return storage
@@ -463,6 +466,12 @@ export async function collectFiles(
463466
}
464467
return prefix === '' ? path : `${prefix}/${path}`
465468
}
469+
470+
async function getCurrentTextContent(uri: vscode.Uri) {
471+
const document = await vscode.workspace.openTextDocument(uri)
472+
const content = document.getText()
473+
return content
474+
}
466475
}
467476

468477
const readFile = async (file: vscode.Uri) => {

packages/core/src/testInteg/shared/utilities/workspaceUtils.test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,22 @@ describe('workspaceUtils', () => {
363363
(e) => e instanceof ToolkitError && e.code === 'ContentLengthError'
364364
)
365365
})
366+
367+
it('pulls updated content from unsaved open files', async function () {
368+
const workspace = await createTestWorkspaceFolder()
369+
const filepath = path.join(workspace.uri.fsPath, 'file1')
370+
await toFile('this is some text', filepath)
371+
372+
const document = await vscode.workspace.openTextDocument(filepath)
373+
await vscode.window.showTextDocument(document)
374+
void vscode.window.activeTextEditor?.edit((editBuilder) => {
375+
editBuilder.insert(new vscode.Position(0, 0), '// a comment\n')
376+
})
377+
378+
const result = await collectFiles([workspace.uri.fsPath], [workspace])
379+
assert.strictEqual(result.length, 1)
380+
assert.strictEqual(result[0].fileContent, '// a comment\nthis is some text')
381+
})
366382
})
367383

368384
describe('getWorkspaceFoldersByPrefixes', function () {

0 commit comments

Comments
 (0)