diff --git a/apps/client/src/widgets/find_in_code.ts b/apps/client/src/widgets/find_in_code.ts index 99d6a335f..343ce0737 100644 --- a/apps/client/src/widgets/find_in_code.ts +++ b/apps/client/src/widgets/find_in_code.ts @@ -31,7 +31,7 @@ export default class FindInCode { } async performFind(searchTerm: string, matchCase: boolean, wholeWord: boolean) { - const totalFound = 0; + let totalFound = 0; const currentFound = 0; const codeEditor = await this.getCodeEditor(); @@ -39,7 +39,8 @@ export default class FindInCode { return { totalFound, currentFound }; } - await codeEditor.performFind(searchTerm, matchCase, wholeWord); + const result = await codeEditor.performFind(searchTerm, matchCase, wholeWord); + totalFound = result.totalFound; return { totalFound, currentFound }; } diff --git a/packages/codemirror/src/find_replace.ts b/packages/codemirror/src/find_replace.ts index 5b1ead702..c0687493f 100644 --- a/packages/codemirror/src/find_replace.ts +++ b/packages/codemirror/src/find_replace.ts @@ -17,6 +17,7 @@ export function createSearchHighlighter(view: EditorView, searchTerm: string, ma return ViewPlugin.fromClass(class SearchHighlighter { matches = matcher.createDeco(view); + totalFound = this.matches.size; constructor(public view: EditorView) { } @@ -32,7 +33,8 @@ export function createSearchHighlighter(view: EditorView, searchTerm: string, ma static deco = (v: SearchHighlighter) => v.matches; }, { - decorations: v => v.matches + decorations: v => v.matches, + provide: (plugin) => plugin }); } diff --git a/packages/codemirror/src/index.ts b/packages/codemirror/src/index.ts index 86f5e3e35..b22d4ecc1 100644 --- a/packages/codemirror/src/index.ts +++ b/packages/codemirror/src/index.ts @@ -176,6 +176,13 @@ export default class CodeMirror extends EditorView { this.dispatch({ effects: this.searchHighlightCompartment.reconfigure(plugin) }); + // Wait for the plugin to activate in the next render cycle + await new Promise(requestAnimationFrame); + const instance = this.plugin(plugin); // TS workaround + + return { + totalFound: instance?.totalFound ?? 0 + } } async setMimeType(mime: string) {