Skip to content

Commit cc1470e

Browse files
refactor: unify rewriting
1 parent 7fd7c9d commit cc1470e

File tree

1 file changed

+13
-17
lines changed

1 file changed

+13
-17
lines changed

src/extension/preview.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -164,16 +164,9 @@ async function doChange(
164164
{ range, replacement }: ChildToParent['commitChange'],
165165
) {
166166
const bytes = await workspace.fs.readFile(fileUri)
167-
const replaceBytes = new TextEncoder().encode(replacement)
168-
const newBytes = new Uint8Array(bytes.byteLength + replaceBytes.byteLength)
169-
newBytes.set(bytes.slice(0, range.byteOffset.start), 0)
170-
newBytes.set(replaceBytes, range.byteOffset.start)
171-
const slice = bytes.slice(range.byteOffset.end)
172-
newBytes.set(slice, range.byteOffset.start + replaceBytes.byteLength)
173-
const final = newBytes.slice(
174-
0,
175-
range.byteOffset.start + replaceBytes.byteLength + slice.byteLength,
176-
)
167+
const { receiveResult, conclude } = bufferMaker(bytes)
168+
receiveResult(replacement, range.byteOffset)
169+
const final = conclude()
177170
await workspace.fs.writeFile(fileUri, final)
178171
}
179172

@@ -197,7 +190,7 @@ async function refreshSearchResult(
197190
searchResult: results.map(splitByHighLightToken),
198191
})
199192
for (const r of results) {
200-
receiveResult(r)
193+
receiveResult(r.replacement!, r.range.byteOffset)
201194
}
202195
})
203196
const final = conclude()
@@ -232,13 +225,16 @@ function bufferMaker(bytes: Uint8Array) {
232225
temp.set(newBuffer)
233226
newBuffer = temp
234227
}
235-
function receiveResult(r: SgSearch) {
228+
function receiveResult(
229+
replace: string,
230+
byteOffset: { start: number; end: number },
231+
) {
236232
// skip overlapping replacement
237-
if (r.range.byteOffset.start < srcOffset) {
233+
if (byteOffset.start < srcOffset) {
238234
return
239235
}
240-
const slice = bytes.slice(srcOffset, r.range.byteOffset.start)
241-
const replacement = encoder.encode(r.replacement!)
236+
const slice = bytes.slice(srcOffset, byteOffset.start)
237+
const replacement = encoder.encode(replace)
242238
const expectedLength =
243239
destOffset + slice.byteLength + replacement.byteLength
244240
while (expectedLength > newBuffer.byteLength) {
@@ -248,7 +244,7 @@ function bufferMaker(bytes: Uint8Array) {
248244
destOffset += slice.byteLength
249245
newBuffer.set(replacement, destOffset)
250246
destOffset += replacement.byteLength
251-
srcOffset = r.range.byteOffset.end
247+
srcOffset = byteOffset.end
252248
}
253249
function conclude() {
254250
const slice = bytes.slice(srcOffset, bytes.byteLength)
@@ -273,7 +269,7 @@ async function haveReplace({ bytes, uri, inputValue, rewrite }: ReplaceArg) {
273269
const { receiveResult, conclude } = bufferMaker(bytes)
274270
await streamedPromise(command!, (results: SgSearch[]) => {
275271
for (const r of results) {
276-
receiveResult(r)
272+
receiveResult(r.replacement!, r.range.byteOffset)
277273
}
278274
})
279275
const final = conclude()

0 commit comments

Comments
 (0)