Skip to content

Commit b270214

Browse files
feat: update preview when delete match
part of #166
1 parent 8f78284 commit b270214

File tree

3 files changed

+29
-4
lines changed

3 files changed

+29
-4
lines changed

src/extension/preview.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
workspace,
1818
TextEditorRevealType,
1919
TabInputTextDiff,
20+
EventEmitter,
2021
} from 'vscode'
2122
import type {
2223
ChildToParent,
@@ -41,10 +42,17 @@ let lastRewrite = ''
4142
const previewContents: Map<string, string> = new Map()
4243

4344
class AstGrepPreviewProvider implements TextDocumentContentProvider {
45+
private emitter = new EventEmitter<Uri>()
46+
onDidChange = this.emitter.event
47+
4448
// TODO: add cancellation
4549
provideTextDocumentContent(uri: Uri, _token: CancellationToken): string {
4650
return previewContents.get(uri.path) || ''
4751
}
52+
53+
notifyDiffChange(uri: Uri) {
54+
this.emitter.fire(uri)
55+
}
4856
}
4957
const previewProvider = new AstGrepPreviewProvider()
5058

@@ -95,12 +103,13 @@ async function previewDiff({
95103
filePath,
96104
locationsToSelect,
97105
diffs,
106+
forceReload = false,
98107
}: ChildToParent['previewDiff']) {
99108
const fileUri = workspaceUriFromFilePath(filePath)
100109
if (!fileUri) {
101110
return
102111
}
103-
await generatePreview(fileUri, diffs)
112+
await generatePreview(fileUri, diffs, forceReload)
104113
const previewUri = fileUri.with({ scheme: SCHEME })
105114
const filename = path.basename(filePath)
106115
// https://github.com/microsoft/vscode/blob/d63202a5382aa104f5515ea09053a2a21a2587c6/src/vs/workbench/api/common/extHostApiCommands.ts#L422
@@ -156,7 +165,6 @@ async function onCommitChange(payload: ChildToParent['commitChange']) {
156165
return
157166
}
158167
await doChange(fileUri, payload)
159-
// TODO: we can use Promise.all after preview has onChange event
160168
await refreshSearchResult(payload.id, fileUri, {
161169
inputValue,
162170
rewrite,
@@ -199,6 +207,8 @@ async function refreshSearchResult(
199207
const final = conclude()
200208
const replaced = new TextDecoder('utf-8').decode(final)
201209
previewContents.set(fileUri.path, replaced)
210+
// refresh diff
211+
previewProvider.notifyDiffChange(fileUri)
202212
parentPort.postMessage('refreshSearchResult', {
203213
id,
204214
updatedResults,
@@ -261,8 +271,8 @@ function bufferMaker(bytes: Uint8Array) {
261271
}
262272
}
263273

264-
async function generatePreview(uri: Uri, diffs: Diff[]) {
265-
if (previewContents.has(uri.path)) {
274+
async function generatePreview(uri: Uri, diffs: Diff[], forceReload: boolean) {
275+
if (previewContents.has(uri.path) && !forceReload) {
266276
return
267277
}
268278
// TODO, maybe we also need a rewrite change event?
@@ -274,4 +284,8 @@ async function generatePreview(uri: Uri, diffs: Diff[]) {
274284
const final = conclude()
275285
const replaced = new TextDecoder('utf-8').decode(final)
276286
previewContents.set(uri.path, replaced)
287+
if (forceReload) {
288+
const previewUri = uri.with({ scheme: SCHEME })
289+
previewProvider.notifyDiffChange(previewUri)
290+
}
277291
}

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ export interface ChildToParent {
8383
end: Position
8484
}
8585
diffs: Diff[]
86+
forceReload?: boolean
8687
}
8788
commitChange: WithId<{
8889
filePath: string

src/webview/hooks/useSearch.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,16 @@ export function dismissOneMatch(match: DisplayResult) {
196196
continue
197197
}
198198
group[1] = group[1].filter(m => m !== match)
199+
previewDiff({
200+
filePath: match.file,
201+
diffs: group[1].map(d => ({
202+
replacement: d.replacement!,
203+
range: d.range,
204+
})),
205+
forceReload: true,
206+
locationsToSelect: match.range,
207+
})
208+
break
199209
}
200210
grouped = [...grouped]
201211
notify()

0 commit comments

Comments
 (0)