Skip to content

Commit 56c52e3

Browse files
committed
Refactor edit format utilities into a new changes integration directory
- to make the logic more readable, extract utils to `apps/editor/src/utils/changes-integration/diff-processor/utils/...` - move types to `apps/editor/src/utils/changes-integration/diff-processor/types.ts` - make sure functions with more than 2 parameters accept params variable. don't destructure in bodies - `apps/editor/src/utils/changes-integration/truncations-processor` should utilize 'utils' folder as well - `apps/editor/src/utils/changes-integration/truncations-processor/utils/find-line-sequence.ts` should accept params variable, don't destructure in body
1 parent 6c7ab81 commit 56c52e3

109 files changed

Lines changed: 832 additions & 742 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎apps/editor/src/commands/apply-response-command/handlers/diff-handler.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { exec } from 'child_process'
55
import { Logger } from '@shared/utils/logger'
66
import { OriginalFileState } from '../types/original-file-state'
77
import { create_safe_path } from '@/utils/path-sanitizer'
8-
import { apply_diff } from '../../../utils/edit-formats/diffs'
8+
import { apply_diff } from '../../../utils/changes-integration/diff-processor'
99
import { remove_directory_if_empty } from '../utils/file-operations'
1010
import { DiffItem } from '../utils/response-parser'
1111

‎apps/editor/src/commands/apply-response-command/handlers/search-replace-handler.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {
1111
handle_deleted_file_item,
1212
get_rename_source_info
1313
} from '../utils/file-operations'
14-
import { apply_search_replace_to_content } from '../../../utils/edit-formats/search-replace/apply-search-replace-to-content'
15-
import { parse_search_replace_segments } from '../../../utils/edit-formats/search-replace/parse-search-replace-segments'
14+
import { apply_search_replace_to_content } from '../../../utils/changes-integration/search-replace-processor/apply-search-replace-to-content'
15+
import { parse_search_replace_segments } from '../../../utils/changes-integration/search-replace-processor/parse-search-replace-segments'
1616

1717
export const handle_search_replace = async (params: {
1818
files: FileItem[]

‎apps/editor/src/commands/apply-response-command/handlers/truncated-handler.ts‎

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { dictionary } from '@shared/constants/dictionary'
66
import { create_safe_path, sanitize_file_name } from '@/utils/path-sanitizer'
77
import { FileItem } from '../utils/response-parser'
88
import { OriginalFileState } from '../types/original-file-state'
9-
import { process_truncated_content } from '../../../utils/edit-formats/truncations'
9+
import { process_truncations } from '../../../utils/changes-integration/truncations-processor'
1010
import {
1111
cleanup_rename_source,
1212
handle_deleted_file_item,
@@ -100,7 +100,7 @@ export const handle_truncated_edit = async (params: {
100100
rename_source_workspace_root
101101
) {
102102
try {
103-
const new_content = process_truncated_content(
103+
const new_content = process_truncations(
104104
file.content,
105105
rename_source_content
106106
)
@@ -153,7 +153,7 @@ export const handle_truncated_edit = async (params: {
153153
await fs.promises.mkdir(directory, { recursive: true })
154154
}
155155

156-
const new_content = process_truncated_content(file.content, '')
156+
const new_content = process_truncations(file.content, '')
157157

158158
await fs.promises.writeFile(safe_path, new_content, 'utf8')
159159

@@ -179,10 +179,7 @@ export const handle_truncated_edit = async (params: {
179179
try {
180180
const document = await vscode.workspace.openTextDocument(safe_path)
181181
const original_content = document.getText()
182-
const new_content = process_truncated_content(
183-
file.content,
184-
original_content
185-
)
182+
const new_content = process_truncations(file.content, original_content)
186183

187184
const directory = path.dirname(safe_path)
188185
if (!fs.existsSync(directory)) {

‎apps/editor/src/commands/apply-response-command/response-processor.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ import { handle_truncated_edit } from './handlers/truncated-handler'
2828
import { WorkspaceProvider } from '@/context/providers/workspace/workspace-provider'
2929
import { natural_sort } from '@/utils/natural-sort'
3030
import { t } from '@/i18n'
31-
import { is_truncation_line } from '../../utils/edit-formats/truncations'
3231
import {
3332
RelevantFileInPreview,
3433
ItemInPreview
3534
} from '@shared/types/file-in-preview'
3635
import { PreviewDecision } from './utils/preview/types'
3736
import { set_response_preview_promise_resolve } from './utils/preview/preview'
37+
import { is_truncation_line } from '@/utils/changes-integration/truncations-processor/utils/is-truncation-line'
3838

3939
export type PreviewData = {
4040
original_states: OriginalFileState[]

apps/editor/src/utils/edit-formats/diffs/diff-processor.spec.ts renamed to apps/editor/src/utils/changes-integration/diff-processor/diff-processor.spec.ts

File renamed without changes.
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { handle_empty_file } from './utils/empty-file-handler'
2+
import {
3+
normalize_original_code,
4+
normalize_patch_lines
5+
} from './utils/normalize'
6+
import { parse_patch_blocks } from './utils/parse-blocks'
7+
import { match_blocks } from './utils/match-blocks'
8+
import { apply_blocks } from './utils/apply-blocks'
9+
10+
export const apply_diff = (params: {
11+
original_code: string
12+
diff_patch: string
13+
use_strict_whitespace?: boolean
14+
}): string => {
15+
const original_code_normalized = params.original_code.replace(/\r\n/g, '\n')
16+
17+
if (original_code_normalized.trim() == '') {
18+
const empty_file_result = handle_empty_file(params.diff_patch)
19+
if (empty_file_result !== null) {
20+
return empty_file_result
21+
}
22+
}
23+
24+
const original_code_lines = original_code_normalized.split(/^/m)
25+
const original_code_lines_normalized = normalize_original_code({
26+
original_code_lines,
27+
use_strict_whitespace: params.use_strict_whitespace
28+
})
29+
30+
const patch_normalized = params.diff_patch.replace(/\r\n/g, '\n')
31+
const patch_lines = patch_normalized.split('\n')
32+
const { patch_lines_original, patch_lines_normalized } =
33+
normalize_patch_lines({
34+
patch_lines,
35+
use_strict_whitespace: params.use_strict_whitespace
36+
})
37+
38+
const search_replace_blocks = parse_patch_blocks({
39+
patch_lines_normalized,
40+
patch_lines_original
41+
})
42+
43+
match_blocks({
44+
search_replace_blocks,
45+
original_code_lines_normalized
46+
})
47+
48+
const invalid_blocks = search_replace_blocks.filter(
49+
(block) => block.search_block_start_index == -2
50+
)
51+
52+
if (invalid_blocks.length > 0) {
53+
throw new Error(
54+
`Failed to apply ${invalid_blocks.length} hunk(s). Aborting diff application for this file.`
55+
)
56+
}
57+
58+
const valid_blocks = search_replace_blocks
59+
valid_blocks.sort(
60+
(a, b) => b.search_block_start_index - a.search_block_start_index
61+
)
62+
63+
return apply_blocks({
64+
valid_blocks,
65+
original_code_lines
66+
})
67+
}

apps/editor/src/utils/edit-formats/diffs/index.ts renamed to apps/editor/src/utils/changes-integration/diff-processor/index.ts

File renamed without changes.

apps/editor/src/utils/edit-formats/diffs/test-cases/deletion-only/diff.txt renamed to apps/editor/src/utils/changes-integration/diff-processor/test-cases/deletion-only/diff.txt

File renamed without changes.

apps/editor/src/utils/edit-formats/diffs/test-cases/deletion-only/expected.txt renamed to apps/editor/src/utils/changes-integration/diff-processor/test-cases/deletion-only/expected.txt

File renamed without changes.

apps/editor/src/utils/edit-formats/diffs/test-cases/deletion-only/original.txt renamed to apps/editor/src/utils/changes-integration/diff-processor/test-cases/deletion-only/original.txt

File renamed without changes.

0 commit comments

Comments
 (0)