瀏覽代碼

fix(tui): avoid blocking reference autocomplete

Turtle 2 月之前
父節點
當前提交
2adb9a5416
共有 1 個文件被更改,包括 9 次插入 和 11 次删除
  1. 9 11
      packages/ui/tui/src/chat/autocomplete.ts

+ 9 - 11
packages/ui/tui/src/chat/autocomplete.ts

@@ -33,25 +33,23 @@ export class ReferenceAutocompleteProvider implements AutocompleteProvider {
     cursorCol: number,
     options: { signal: AbortSignal; force?: boolean },
   ): Promise<AutocompleteSuggestions | null> {
-    const basePromise = this.base.getSuggestions(lines, cursorLine, cursorCol, options)
     const currentLine = lines[cursorLine]
     /* v8 ignore next -- Editor always supplies its current state line. */
-    if (currentLine === undefined) return basePromise
+    if (currentLine === undefined) return this.base.getSuggestions(lines, cursorLine, cursorCol, options)
     const token = activeAtToken(currentLine, cursorCol)
     if (token === undefined) {
       this.files.invalidate()
-      return basePromise
+      return this.base.getSuggestions(lines, cursorLine, cursorCol, options)
     }
     const filePromise = this.files.list(token.query, options.signal).catch(() => [])
     const sessionPromise = this.sessions === undefined || token.quoted
       ? Promise.resolve([])
       : this.sessions.listCandidates(this.agent, token.query, undefined, options.signal).catch(() => [])
-    const [base, fileCandidates, sessionCandidates] = await Promise.all([
-      basePromise,
-      filePromise,
-      sessionPromise,
-    ])
-    if (options.signal.aborted) return base
+    // The command provider has no candidates for an active `@` token. Do not
+    // await it here: upstream may defer its empty result while the editor waits
+    // for this provider, which would suppress otherwise ready references.
+    const [fileCandidates, sessionCandidates] = await Promise.all([filePromise, sessionPromise])
+    if (options.signal.aborted) return null
     const fileItems: AutocompleteItem[] = fileCandidates.flatMap((candidate) => {
       const value = formatFileMention(candidate, token.quoted)
       if (value === undefined) return []
@@ -75,8 +73,8 @@ export class ReferenceAutocompleteProvider implements AutocompleteProvider {
       }
     })
     const items = [...fileItems, ...sessionItems]
-    if (items.length === 0) return base
-    return { items: [...items, ...(base?.items ?? [])], prefix: token.prefix }
+    if (items.length === 0) return null
+    return { items, prefix: token.prefix }
   }
 
   applyCompletion(