@@ -20,6 +20,8 @@ export class TerminalQuickFixService implements ITerminalQuickFixService {
20
20
private _providers : Map < string , ITerminalQuickFixProvider > = new Map ( ) ;
21
21
get providers ( ) : Map < string , ITerminalQuickFixProvider > { return this . _providers ; }
22
22
23
+ private _pendingProviders : Map < string , ITerminalQuickFixProvider > = new Map ( ) ;
24
+
23
25
private readonly _onDidRegisterProvider = new Emitter < ITerminalQuickFixProviderSelector > ( ) ;
24
26
readonly onDidRegisterProvider = this . _onDidRegisterProvider . event ;
25
27
private readonly _onDidRegisterCommandSelector = new Emitter < ITerminalCommandSelector > ( ) ;
@@ -50,6 +52,14 @@ export class TerminalQuickFixService implements ITerminalQuickFixService {
50
52
registerCommandSelector ( selector : ITerminalCommandSelector ) : void {
51
53
this . _selectors . set ( selector . id , selector ) ;
52
54
this . _onDidRegisterCommandSelector . fire ( selector ) ;
55
+
56
+ // Check if there's a pending provider for this selector
57
+ const pendingProvider = this . _pendingProviders . get ( selector . id ) ;
58
+ if ( pendingProvider ) {
59
+ this . _pendingProviders . delete ( selector . id ) ;
60
+ this . _providers . set ( selector . id , pendingProvider ) ;
61
+ this . _onDidRegisterProvider . fire ( { selector, provider : pendingProvider } ) ;
62
+ }
53
63
}
54
64
55
65
registerQuickFixProvider ( id : string , provider : ITerminalQuickFixProvider ) : IDisposable {
@@ -61,17 +71,20 @@ export class TerminalQuickFixService implements ITerminalQuickFixService {
61
71
if ( disposed ) {
62
72
return ;
63
73
}
64
- this . _providers . set ( id , provider ) ;
65
74
const selector = this . _selectors . get ( id ) ;
66
- if ( ! selector ) {
67
- this . _logService . error ( `No registered selector for ID: ${ id } ` ) ;
68
- return ;
75
+ if ( selector ) {
76
+ // Selector is already available, register immediately
77
+ this . _providers . set ( id , provider ) ;
78
+ this . _onDidRegisterProvider . fire ( { selector, provider } ) ;
79
+ } else {
80
+ // Selector not yet available, store provider as pending
81
+ this . _pendingProviders . set ( id , provider ) ;
69
82
}
70
- this . _onDidRegisterProvider . fire ( { selector, provider } ) ;
71
83
} ) ;
72
84
return toDisposable ( ( ) => {
73
85
disposed = true ;
74
86
this . _providers . delete ( id ) ;
87
+ this . _pendingProviders . delete ( id ) ;
75
88
const selector = this . _selectors . get ( id ) ;
76
89
if ( selector ) {
77
90
this . _selectors . delete ( id ) ;
0 commit comments