@@ -20,13 +20,22 @@ import {
2020 window ,
2121 workspace ,
2222} from 'vscode'
23- import type { ChildToParent , Diff , DisplayResult , SearchQuery , SgSearch } from '../types'
23+ import type {
24+ ChildToParent ,
25+ Diff ,
26+ DisplayResult ,
27+ PatternQuery ,
28+ SearchQuery ,
29+ SgSearch ,
30+ YAMLQuery ,
31+ } from '../types'
2432import { parentPort , streamedPromise } from './common'
2533import { buildCommand , splitByHighLightToken } from './search'
2634
2735const SCHEME = 'sgpreview'
2836let lastPattern = ''
2937let lastRewrite = ''
38+ let lastYAML = ''
3039
3140/**
3241 * NB A file will only have one preview at a time
@@ -169,7 +178,15 @@ function closeAllDiffs() {
169178 }
170179}
171180
172- function refreshDiff ( query : SearchQuery ) {
181+ function refreshYAMLDiff ( query : YAMLQuery ) {
182+ if ( query . yaml === lastYAML ) {
183+ return
184+ }
185+ previewContents . clear ( )
186+ closeAllDiffs ( )
187+ }
188+
189+ function refreshPatternDiff ( query : PatternQuery ) {
173190 try {
174191 // Clear cache if pattern/rewrite changed
175192 if ( query . pattern !== lastPattern || query . rewrite !== lastRewrite ) {
@@ -190,6 +207,15 @@ function refreshDiff(query: SearchQuery) {
190207 lastRewrite = query . rewrite
191208 }
192209}
210+
211+ function refreshDiff ( query : SearchQuery ) {
212+ if ( 'yaml' in query ) {
213+ return refreshYAMLDiff ( query )
214+ } else {
215+ return refreshPatternDiff ( query )
216+ }
217+ }
218+
193219parentPort . onMessage ( 'openFile' , openFile )
194220parentPort . onMessage ( 'previewDiff' , previewDiff )
195221parentPort . onMessage ( 'dismissDiff' , dismissDiff )
@@ -206,34 +232,25 @@ async function onReplaceAll(payload: ChildToParent['replaceAll']) {
206232 if ( confirmed !== 'Replace' ) {
207233 return
208234 }
209- const { id , pattern , rewrite , selector , strictness , lang } = payload
210- for ( const change of payload . changes ) {
235+ const { changes , ... other } = payload
236+ for ( const change of changes ) {
211237 // TODO: chunk change
212238 await onCommitChange ( {
213- id,
214- pattern,
215- rewrite,
216- selector,
217- strictness,
218- lang,
239+ ...other ,
219240 ...change ,
220241 } )
221242 }
222243}
223244
224245async function onCommitChange ( payload : ChildToParent [ 'commitChange' ] ) {
225- const { filePath, pattern , rewrite , strictness , selector , lang } = payload
246+ const { filePath, ... fields } = payload
226247 const fileUri = workspaceUriFromFilePath ( filePath )
227248 if ( ! fileUri ) {
228249 return
229250 }
230251 await doChange ( fileUri , payload )
231252 await refreshSearchResult ( payload . id , fileUri , {
232- pattern,
233- rewrite,
234- strictness,
235- selector,
236- lang,
253+ ...fields ,
237254 includeFile : filePath ,
238255 } )
239256}
0 commit comments