Skip to content

Commit 202510c

Browse files
committed
Pre-process clipboard responses to correctly split concatenated markdown code blocks separated by six backticks
1 parent 1c34c15 commit 202510c

5 files changed

Lines changed: 57 additions & 6 deletions

File tree

‎packages/vscode/src/commands/apply-chat-response-command/utils/clipboard-parser/clipboard-parser.spec.ts‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -705,6 +705,28 @@ describe('clipboard-parser', () => {
705705
)
706706
})
707707

708+
it('parses multiple diffs where code blocks end and start on the same line', () => {
709+
const test_case = 'diff-multiple-files-same-line-backticks'
710+
const text = load_test_case_file(test_case, `${test_case}.txt`)
711+
const result = parse_response({
712+
response: text,
713+
is_single_root_folder_workspace: true
714+
})
715+
716+
expect(result.type).toBe('patches')
717+
expect(result.patches).toHaveLength(2)
718+
719+
expect(result.patches![0].file_path).toBe('src/lorem.ts')
720+
expect(result.patches![1].file_path).toBe('src/ipsum.ts')
721+
722+
expect(result.patches![0].content).toBe(
723+
load_test_case_file(test_case, 'file-1.txt')
724+
)
725+
expect(result.patches![1].content).toBe(
726+
load_test_case_file(test_case, 'file-2.txt')
727+
)
728+
})
729+
708730
it('parses multiple diffs concatenated within a single markdown code block', () => {
709731
const test_case = 'diff-multiple-files-single-markdown-block'
710732
const text = load_test_case_file(test_case, `${test_case}.txt`)

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -637,14 +637,16 @@ export const parse_response = (params: {
637637
return { type: 'code-completion', code_completion }
638638
}
639639

640+
const processed_response = params.response.replace(/``````/g, '```\n```')
641+
640642
if (
641-
params.response.includes('```diff') ||
642-
params.response.includes('```patch') ||
643-
params.response.startsWith('--- ') ||
644-
params.response.startsWith('diff --git')
643+
processed_response.includes('```diff') ||
644+
processed_response.includes('```patch') ||
645+
processed_response.startsWith('--- ') ||
646+
processed_response.startsWith('diff --git')
645647
) {
646648
const patches = extract_diffs({
647-
clipboard_text: params.response,
649+
clipboard_text: processed_response,
648650
is_single_root: is_single_root_folder_workspace
649651
})
650652
if (patches.length) {
@@ -653,7 +655,7 @@ export const parse_response = (params: {
653655
}
654656

655657
const files = parse_multiple_files({
656-
response: params.response,
658+
response: processed_response,
657659
is_single_root_folder_workspace
658660
})
659661

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
```diff
2+
--- a/src/lorem.ts
3+
+++ b/src/lorem.ts
4+
@@ -1,3 +1,3 @@
5+
console.log("hello")
6+
-console.log("old lorem")
7+
+console.log("new lorem")
8+
``````diff
9+
--- a/src/ipsum.ts
10+
+++ b/src/ipsum.ts
11+
@@ -1,3 +1,3 @@
12+
console.log("hello")
13+
-console.log("old ipsum")
14+
+console.log("new ipsum")
15+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
--- a/src/lorem.ts
2+
+++ b/src/lorem.ts
3+
@@ -1,3 +1,3 @@
4+
console.log("hello")
5+
-console.log("old lorem")
6+
+console.log("new lorem")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
--- a/src/ipsum.ts
2+
+++ b/src/ipsum.ts
3+
@@ -1,3 +1,3 @@
4+
console.log("hello")
5+
-console.log("old ipsum")
6+
+console.log("new ipsum")

0 commit comments

Comments
 (0)