@@ -18,7 +18,7 @@ import { FolderContext } from "./FolderContext";
18
18
import { StatusItem } from "./ui/StatusItem" ;
19
19
import { SwiftOutputChannel } from "./ui/SwiftOutputChannel" ;
20
20
import { swiftLibraryPathKey } from "./utilities/utilities" ;
21
- import { pathExists , isPathInsidePath } from "./utilities/filesystem" ;
21
+ import { isPathInsidePath } from "./utilities/filesystem" ;
22
22
import { LanguageClientManager } from "./sourcekit-lsp/LanguageClientManager" ;
23
23
import { TemporaryFolder } from "./utilities/tempFolder" ;
24
24
import { TaskManager } from "./tasks/TaskManager" ;
@@ -34,6 +34,7 @@ import { DiagnosticsManager } from "./DiagnosticsManager";
34
34
import { DocumentationManager } from "./documentation/DocumentationManager" ;
35
35
import { DocCDocumentationRequest , ReIndexProjectRequest } from "./sourcekit-lsp/extensions" ;
36
36
import { TestKind } from "./TestExplorer/TestKind" ;
37
+ import { isValidWorkspaceFolder , searchForPackages } from "./utilities/workspace" ;
37
38
38
39
/**
39
40
* Context for whole workspace. Holds array of contexts for each workspace folder
@@ -391,38 +392,19 @@ export class WorkspaceContext implements vscode.Disposable {
391
392
* @param folder folder being added
392
393
*/
393
394
async addWorkspaceFolder ( workspaceFolder : vscode . WorkspaceFolder ) {
394
- await this . searchForPackages ( workspaceFolder . uri , workspaceFolder ) ;
395
-
396
- if ( this . getActiveWorkspaceFolder ( vscode . window . activeTextEditor ) === workspaceFolder ) {
397
- await this . focusTextEditor ( vscode . window . activeTextEditor ) ;
398
- }
399
- }
395
+ const folders = await searchForPackages (
396
+ workspaceFolder . uri ,
397
+ configuration . disableSwiftPMIntegration ,
398
+ configuration . folder ( workspaceFolder ) . searchSubfoldersForPackages
399
+ ) ;
400
400
401
- async searchForPackages ( folder : vscode . Uri , workspaceFolder : vscode . WorkspaceFolder ) {
402
- // add folder if Package.swift/compile_commands.json/compile_flags.txt/buildServer.json exists
403
- if ( await this . isValidWorkspaceFolder ( folder . fsPath ) ) {
401
+ for ( const folder of folders ) {
404
402
await this . addPackageFolder ( folder , workspaceFolder ) ;
405
- return ;
406
- }
407
- // should I search sub-folders for more Swift Packages
408
- if ( ! configuration . folder ( workspaceFolder ) . searchSubfoldersForPackages ) {
409
- return ;
410
403
}
411
404
412
- await vscode . workspace . fs . readDirectory ( folder ) . then ( async entries => {
413
- for ( const entry of entries ) {
414
- if (
415
- entry [ 1 ] === vscode . FileType . Directory &&
416
- entry [ 0 ] [ 0 ] !== "." &&
417
- entry [ 0 ] !== "Packages"
418
- ) {
419
- await this . searchForPackages (
420
- vscode . Uri . joinPath ( folder , entry [ 0 ] ) ,
421
- workspaceFolder
422
- ) ;
423
- }
424
- }
425
- } ) ;
405
+ if ( this . getActiveWorkspaceFolder ( vscode . window . activeTextEditor ) === workspaceFolder ) {
406
+ await this . focusTextEditor ( vscode . window . activeTextEditor ) ;
407
+ }
426
408
}
427
409
428
410
public async addPackageFolder (
@@ -597,13 +579,7 @@ export class WorkspaceContext implements vscode.Disposable {
597
579
* Package.swift or a CMake compile_commands.json, compile_flags.txt, or a BSP buildServer.json.
598
580
*/
599
581
async isValidWorkspaceFolder ( folder : string ) : Promise < boolean > {
600
- return (
601
- ( ( await pathExists ( folder , "Package.swift" ) ) &&
602
- ! configuration . disableSwiftPMIntegration ) ||
603
- ( await pathExists ( folder , "compile_commands.json" ) ) ||
604
- ( await pathExists ( folder , "compile_flags.txt" ) ) ||
605
- ( await pathExists ( folder , "buildServer.json" ) )
606
- ) ;
582
+ return await isValidWorkspaceFolder ( folder , configuration . disableSwiftPMIntegration ) ;
607
583
}
608
584
609
585
/** send unfocus event to current focussed folder and clear current folder */
0 commit comments