Skip to content

Commit 3595a52

Browse files
committed
Refactor preview logic to prioritize files mentioned in the chat response for display order
1 parent f57e69f commit 3595a52

2 files changed

Lines changed: 56 additions & 2 deletions

File tree

‎packages/vscode/src/commands/apply-chat-response-command/utils/preview-handler.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ export const preview_handler = async (params: {
2828
const review_result = await preview({
2929
original_states: params.original_states,
3030
panel_provider: params.panel_provider,
31-
raw_instructions: params.raw_instructions
31+
raw_instructions: params.raw_instructions,
32+
chat_response: params.chat_response
3233
})
3334

3435
if (review_result === null || review_result.accepted_files.length == 0) {

‎packages/vscode/src/commands/apply-chat-response-command/utils/preview/preview.ts‎

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ import { PanelProvider } from '@/views/panel/backend/panel-provider'
44
import { OriginalFileState } from '@/commands/apply-chat-response-command/types/original-file-state'
55
import { setup_workspace_listeners } from './workspace-listener'
66
import { prepare_files_from_original_states } from './file-preparer'
7+
import { parse_response } from '../clipboard-parser/clipboard-parser'
78
import {
89
create_temp_files_with_original_content,
910
cleanup_temp_files
1011
} from './temp-file-manager'
1112
import { close_review_diff_editors, show_diff_with_actions } from './vscode-ui'
1213
import { PreparedFile, ReviewableFile } from './types'
14+
import { ItemInPreview } from '@shared/types/file-in-preview'
1315

1416
export { code_review_promise_resolve } from './vscode-ui'
1517
export { toggle_file_review_state } from './workspace-listener'
@@ -18,6 +20,7 @@ export const preview = async (params: {
1820
original_states: OriginalFileState[]
1921
panel_provider: PanelProvider
2022
raw_instructions?: string
23+
chat_response: string
2124
}): Promise<{
2225
accepted_files: ReviewableFile[]
2326
rejected_states: OriginalFileState[]
@@ -49,10 +52,60 @@ export const preview = async (params: {
4952
workspace_map
5053
})
5154

55+
const is_single_root_folder_workspace =
56+
(vscode.workspace.workspaceFolders?.length ?? 0) <= 1
57+
58+
const clipboard_items = parse_response({
59+
response: params.chat_response,
60+
is_single_root_folder_workspace
61+
})
62+
63+
const items_for_preview: ItemInPreview[] = []
64+
65+
if (clipboard_items.length > 0) {
66+
const prepared_files_map = new Map<string, PreparedFile>()
67+
for (const pf of prepared_files) {
68+
const key = `${pf.reviewable_file.workspace_name || ''}:${
69+
pf.reviewable_file.file_path
70+
}`
71+
prepared_files_map.set(key, pf)
72+
}
73+
74+
for (const item of clipboard_items) {
75+
if (item.type == 'text') {
76+
items_for_preview.push({ type: 'text', content: item.content })
77+
} else if (
78+
item.type == 'file' ||
79+
item.type == 'diff' ||
80+
item.type == 'completion'
81+
) {
82+
const key = `${item.workspace_name || ''}:${item.file_path}`
83+
const prepared_file = prepared_files_map.get(key)
84+
if (prepared_file) {
85+
items_for_preview.push(prepared_file.reviewable_file)
86+
prepared_files_map.delete(key)
87+
}
88+
if (item.type == 'diff' && item.new_file_path) {
89+
const new_key = `${item.workspace_name || ''}:${item.new_file_path}`
90+
const new_prepared_file = prepared_files_map.get(new_key)
91+
if (new_prepared_file) {
92+
items_for_preview.push(new_prepared_file.reviewable_file)
93+
prepared_files_map.delete(new_key)
94+
}
95+
}
96+
}
97+
}
98+
items_for_preview.push(
99+
...[...prepared_files_map.values()].map((pf) => pf.reviewable_file)
100+
)
101+
} else {
102+
items_for_preview.push(...prepared_files.map((p) => p.reviewable_file))
103+
}
104+
52105
if (params.panel_provider) {
53106
params.panel_provider.send_message({
54107
command: 'RESPONSE_PREVIEW_STARTED',
55-
items: [...prepared_files.map((p) => p.reviewable_file)],
108+
items: items_for_preview,
56109
raw_instructions: params.raw_instructions
57110
})
58111
}

0 commit comments

Comments
 (0)