@@ -32,6 +32,7 @@ export interface PlaygroundChangeEvent {
3232 * these results.
3333 */
3434export class PlaygroundProvider implements vscode . Disposable {
35+ private hasFetched : boolean = false ;
3536 private fetchPromise : Promise < Playground [ ] > | undefined ;
3637 private documentPlaygrounds : Map < string , Playground [ ] > = new Map ( ) ;
3738 private didChangePlaygroundsEmitter : vscode . EventEmitter < PlaygroundChangeEvent > =
@@ -40,7 +41,7 @@ export class PlaygroundProvider implements vscode.Disposable {
4041 constructor ( private folderContext : FolderContext ) { }
4142
4243 private get lspPlaygroundDiscovery ( ) : LSPPlaygroundsDiscovery {
43- return new LSPPlaygroundsDiscovery ( this . folderContext . languageClientManager ) ;
44+ return new LSPPlaygroundsDiscovery ( this . folderContext ) ;
4445 }
4546
4647 private get logger ( ) : SwiftLogger {
@@ -79,6 +80,8 @@ export class PlaygroundProvider implements vscode.Disposable {
7980 async getWorkspacePlaygrounds ( ) : Promise < Playground [ ] > {
8081 if ( this . fetchPromise ) {
8182 return await this . fetchPromise ;
83+ } else if ( ! this . hasFetched ) {
84+ await this . fetch ( ) ;
8285 }
8386 return Array . from ( this . documentPlaygrounds . values ( ) ) . flatMap ( v => v ) ;
8487 }
@@ -112,6 +115,11 @@ export class PlaygroundProvider implements vscode.Disposable {
112115 this . didChangePlaygroundsEmitter . event ;
113116
114117 async fetch ( ) {
118+ this . hasFetched = true ;
119+ if ( this . fetchPromise ) {
120+ await this . fetchPromise ;
121+ return ;
122+ }
115123 if ( ! ( await this . lspPlaygroundDiscovery . supportsPlaygrounds ( ) ) ) {
116124 this . logger . debug (
117125 `Fetching playgrounds not supported by the language server` ,
0 commit comments