Skip to content
This repository was archived by the owner on Sep 30, 2024. It is now read-only.

Commit e736604

Browse files
authored
Add safe invoke of extensions providers (#24675)
1 parent bf7289e commit e736604

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

client/shared/src/api/extension/extensionHostApi.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,20 @@ export function callProviders<TRegisteredProvider, TProviderResult, TMergedResul
563563
mergeResult: (providerResults: readonly (TProviderResult | 'loading' | null | undefined)[]) => TMergedResult,
564564
logErrors: boolean = true
565565
): Observable<MaybeLoadingResult<TMergedResult>> {
566+
const logError = (...args: any): void => {
567+
if (logErrors) {
568+
console.error('Provider errored:', ...args)
569+
}
570+
}
571+
const safeInvokeProvider = (provider: TRegisteredProvider): sourcegraph.ProviderResult<TProviderResult> => {
572+
try {
573+
return invokeProvider(provider)
574+
} catch (error) {
575+
logError(error)
576+
return null
577+
}
578+
}
579+
566580
return providersObservable
567581
.pipe(
568582
map(providers => filterProviders(providers)),
@@ -572,12 +586,10 @@ export function callProviders<TRegisteredProvider, TProviderResult, TMergedResul
572586
providers.map(provider =>
573587
concat(
574588
[LOADING],
575-
providerResultToObservable(invokeProvider(provider)).pipe(
589+
providerResultToObservable(safeInvokeProvider(provider)).pipe(
576590
defaultIfEmpty<typeof LOADING | TProviderResult | null | undefined>(null),
577591
catchError(error => {
578-
if (logErrors) {
579-
console.error('Provider errored:', error)
580-
}
592+
logError(error)
581593
return [null]
582594
})
583595
)

0 commit comments

Comments
 (0)