Skip to content

Commit e7d0380

Browse files
authored
Add logs for completion resolution (microsoft#253974)
1 parent aeabf14 commit e7d0380

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

src/vs/workbench/contrib/terminalContrib/suggest/browser/terminalCompletionService.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import type { IProcessEnvironment } from '../../../../../base/common/platform.js
1919
import { timeout } from '../../../../../base/common/async.js';
2020
import { gitBashToWindowsPath } from './terminalGitBashHelpers.js';
2121
import { isEqual } from '../../../../../base/common/resources.js';
22+
import { ILogService } from '../../../../../platform/log/common/log.js';
2223

2324
export const ITerminalCompletionService = createDecorator<ITerminalCompletionService>('terminalCompletionService');
2425

@@ -98,6 +99,7 @@ export class TerminalCompletionService extends Disposable implements ITerminalCo
9899
constructor(
99100
@IConfigurationService private readonly _configurationService: IConfigurationService,
100101
@IFileService private readonly _fileService: IFileService,
102+
@ILogService private readonly _logService: ILogService
101103
) {
102104
super();
103105
}
@@ -170,10 +172,21 @@ export class TerminalCompletionService extends Disposable implements ITerminalCo
170172
return undefined;
171173
}
172174
const timeoutMs = explicitlyInvoked ? 30000 : 5000;
173-
const completions = await Promise.race([
174-
provider.provideCompletions(promptValue, cursorPosition, allowFallbackCompletions, token),
175-
timeout(timeoutMs)
176-
]);
175+
let timedOut = false;
176+
let completions;
177+
try {
178+
completions = await Promise.race([
179+
provider.provideCompletions(promptValue, cursorPosition, allowFallbackCompletions, token),
180+
(async () => { await timeout(timeoutMs); timedOut = true; return undefined; })()
181+
]);
182+
} catch (e) {
183+
this._logService.trace(`[TerminalCompletionService] Exception from provider '${provider.id}':`, e);
184+
return undefined;
185+
}
186+
if (timedOut) {
187+
this._logService.trace(`[TerminalCompletionService] Provider '${provider.id}' timed out after ${timeoutMs}ms. promptValue='${promptValue}', cursorPosition=${cursorPosition}, explicitlyInvoked=${explicitlyInvoked}`);
188+
return undefined;
189+
}
177190
if (!completions) {
178191
return undefined;
179192
}

src/vs/workbench/contrib/terminalContrib/suggest/test/browser/terminalCompletionService.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { ITerminalCompletion, TerminalCompletionItemKind } from '../../browser/t
2020
import { count } from '../../../../../../base/common/strings.js';
2121
import { WindowsShellType } from '../../../../../../platform/terminal/common/terminal.js';
2222
import { gitBashToWindowsPath, windowsToGitBashPath } from '../../browser/terminalGitBashHelpers.js';
23+
import { ILogService, NullLogService } from '../../../../../../platform/log/common/log.js';
2324

2425
const pathSeparator = isWindows ? '\\' : '/';
2526

@@ -105,6 +106,7 @@ suite('TerminalCompletionService', () => {
105106
setup(() => {
106107
instantiationService = store.add(new TestInstantiationService());
107108
configurationService = new TestConfigurationService();
109+
instantiationService.stub(ILogService, new NullLogService());
108110
instantiationService.stub(IConfigurationService, configurationService);
109111
instantiationService.stub(IFileService, {
110112
async stat(resource) {

0 commit comments

Comments
 (0)