From 4d2edc079916372138212f204aa4f4b994d6cf13 Mon Sep 17 00:00:00 2001 From: Adam Fowler Date: Fri, 29 Jul 2022 10:13:11 +0100 Subject: [PATCH 1/2] Use workspace-state.json for local dependencies --- src/ui/PackageDependencyProvider.ts | 41 ++++++++++++++++------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src/ui/PackageDependencyProvider.ts b/src/ui/PackageDependencyProvider.ts index 707c43335..403e7f96f 100644 --- a/src/ui/PackageDependencyProvider.ts +++ b/src/ui/PackageDependencyProvider.ts @@ -151,7 +151,7 @@ export class PackageDependenciesProvider implements vscode.TreeDataProvider !dependency.requirement && dependency.url) - .map( - dependency => - new PackageNode(dependency.identity, dependency.url!, "local", "local") - ); - } else { - // since Swift 5.6 local dependencies have `type` `fileSystem` - return folderContext.swiftPackage.dependencies - .filter(dependency => dependency.type === "fileSystem" && dependency.path) + private async getLocalDependencies(folderContext: FolderContext): Promise { + const workspaceState = await folderContext.swiftPackage.loadWorkspaceState(); + + return ( + workspaceState?.object.dependencies + .filter(item => { + // need to check for both "local" and "fileSystem" as swift 5.5 and earlier + // use "local" while 5.6 and later use "fileSystem" + return ( + (item.packageRef.kind === "local" || + item.packageRef.kind === "fileSystem") && + item.packageRef.location + ); + }) .map( dependency => - new PackageNode(dependency.identity, dependency.path!, "local", "local") - ); - } + new PackageNode( + dependency.packageRef.identity, + dependency.packageRef.location, + "local", + "local" + ) + ) ?? [] + ); } /** From 5a700e7d958bed9c2312ac5ae115ca7d99d061d1 Mon Sep 17 00:00:00 2001 From: Adam Fowler Date: Fri, 29 Jul 2022 10:38:33 +0100 Subject: [PATCH 2/2] Only load workspaceState once --- src/FolderContext.ts | 14 -------------- src/ui/PackageDependencyProvider.ts | 29 ++++++++++++++++++++--------- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/FolderContext.ts b/src/FolderContext.ts index f1caa430a..5c8af888a 100644 --- a/src/FolderContext.ts +++ b/src/FolderContext.ts @@ -141,20 +141,6 @@ export class FolderContext implements vscode.Disposable { this.testExplorer = new TestExplorer(this); } - /** Get list of edited packages */ - async getEditedPackages(): Promise { - const workspaceState = await this.swiftPackage.loadWorkspaceState(); - return ( - workspaceState?.object.dependencies - .filter(item => { - return item.state.name === "edited" && item.state.path; - }) - .map(item => { - return { name: item.packageRef.identity, folder: item.state.path! }; - }) ?? [] - ); - } - static uriName(uri: vscode.Uri): string { return path.basename(uri.fsPath); } diff --git a/src/ui/PackageDependencyProvider.ts b/src/ui/PackageDependencyProvider.ts index 403e7f96f..ca6ad80ba 100644 --- a/src/ui/PackageDependencyProvider.ts +++ b/src/ui/PackageDependencyProvider.ts @@ -21,7 +21,7 @@ import { WorkspaceContext } from "../WorkspaceContext"; import { FolderEvent } from "../WorkspaceContext"; import { FolderContext } from "../FolderContext"; import contextKeys from "../contextKeys"; -import { Version } from "../utilities/version"; +import { WorkspaceState } from "../SwiftPackage"; /** * References: @@ -147,14 +147,15 @@ export class PackageDependenciesProvider implements vscode.TreeDataProvider item.name === child.name); @@ -186,9 +187,7 @@ export class PackageDependenciesProvider implements vscode.TreeDataProvider { - const workspaceState = await folderContext.swiftPackage.loadWorkspaceState(); - + private getLocalDependencies(workspaceState: WorkspaceState | undefined): PackageNode[] { return ( workspaceState?.object.dependencies .filter(item => { @@ -234,9 +233,21 @@ export class PackageDependenciesProvider implements vscode.TreeDataProvider { - return (await folderContext.getEditedPackages()).map( - item => new PackageNode(item.name, item.folder, "local", "editing") + private getEditedDependencies(workspaceState: WorkspaceState | undefined): PackageNode[] { + return ( + workspaceState?.object.dependencies + .filter(item => { + return item.state.name === "edited" && item.state.path; + }) + .map( + item => + new PackageNode( + item.packageRef.identity, + item.state.path!, + "local", + "editing" + ) + ) ?? [] ); }