From f48ad817b62224b1e218acda154ad644235f3109 Mon Sep 17 00:00:00 2001 From: Wang Lun Date: Sat, 30 Jul 2022 13:54:51 +0900 Subject: [PATCH 1/4] fixed read dependencies from workspace-state.json --- src/SwiftPackage.ts | 12 ++- src/ui/PackageDependencyProvider.ts | 115 ++++++++++++++++++++-------- 2 files changed, 95 insertions(+), 32 deletions(-) diff --git a/src/SwiftPackage.ts b/src/SwiftPackage.ts index 8ad820312..4c9c1c900 100644 --- a/src/SwiftPackage.ts +++ b/src/SwiftPackage.ts @@ -117,9 +117,19 @@ export interface WorkspaceState { version: number; } +/** revision + (branch || version) + * ref: https://github.com/apple/swift-package-manager/blob/e25a590dc455baa430f2ec97eacc30257c172be2/Sources/Workspace/CheckoutState.swift#L19:L23 + */ +export interface CheckoutState { + revision: string; + branch: string | null; + version: string | null; +} + export interface WorkspaceStateDependency { packageRef: { identity: string; kind: string; location: string; name: string }; - state: { name: string; path?: string }; + state: { name: string; path?: string; checkoutState?: CheckoutState }; + subpath: string; } export interface PackagePlugin { diff --git a/src/ui/PackageDependencyProvider.ts b/src/ui/PackageDependencyProvider.ts index ab7877197..3bd497de7 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 { WorkspaceState } from "../SwiftPackage"; +import { WorkspaceState, WorkspaceStateDependency } from "../SwiftPackage"; /** * References: @@ -148,39 +148,24 @@ export class PackageDependenciesProvider implements vscode.TreeDataProvider item.name === child.name); - if (!editedVersion) { - uneditedChildren.push(child); - } - } - return [...uneditedChildren, ...editedChildren].sort((first, second) => - first.name.localeCompare(second.name) - ); + return this.getDependencyGraph(workspaceState, folderContext.folder.fsPath); } - const buildDirectory = buildDirectoryFromWorkspacePath(folderContext.folder.fsPath, true); + return this.getNodesInDirectory(element.path); + } - if (element instanceof PackageNode) { - // Read the contents of a package. - const packagePath = - element.type === "remote" - ? path.join(buildDirectory, "checkouts", getRepositoryName(element.path)) - : element.path; - return this.getNodesInDirectory(packagePath); - } else { - // Read the contents of a directory within a package. - return this.getNodesInDirectory(element.path); - } + private getDependencyGraph( + workspaceState: WorkspaceState | undefined, + folderContext: string + ): PackageNode[] { + return ( + workspaceState?.object.dependencies.map(dependency => { + const type = this.dependencyType(dependency); + const version = this.dependencyDisplayVersion(dependency); + const packagePath = this.dependencyPackagePath(dependency, folderContext); + return new PackageNode(dependency.packageRef.identity, packagePath, version, type); + }) ?? [] + ); } /** @@ -277,4 +262,72 @@ export class PackageDependenciesProvider implements vscode.TreeDataProvider Date: Sat, 30 Jul 2022 14:15:17 +0900 Subject: [PATCH 2/4] clean unused import --- src/ui/PackageDependencyProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/PackageDependencyProvider.ts b/src/ui/PackageDependencyProvider.ts index 3bd497de7..78d20574f 100644 --- a/src/ui/PackageDependencyProvider.ts +++ b/src/ui/PackageDependencyProvider.ts @@ -16,7 +16,7 @@ import * as vscode from "vscode"; import * as fs from "fs/promises"; import * as path from "path"; import configuration from "../configuration"; -import { getRepositoryName, buildDirectoryFromWorkspacePath } from "../utilities/utilities"; +import { buildDirectoryFromWorkspacePath } from "../utilities/utilities"; import { WorkspaceContext } from "../WorkspaceContext"; import { FolderEvent } from "../WorkspaceContext"; import { FolderContext } from "../FolderContext"; From 0ec0c404eb74f88971bec622dc65f5cfedc74b60 Mon Sep 17 00:00:00 2001 From: Wang Lun Date: Sun, 31 Jul 2022 02:30:29 +0900 Subject: [PATCH 3/4] add location for PackageNode and fix `View repository` --- src/commands.ts | 2 +- src/ui/PackageDependencyProvider.ts | 21 +++++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index cb9425f2c..8d6f230e1 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -421,7 +421,7 @@ async function executeTaskWithUI( */ function openInExternalEditor(packageNode: PackageNode) { try { - const uri = vscode.Uri.parse(packageNode.path, true); + const uri = vscode.Uri.parse(packageNode.location, true); vscode.env.openExternal(uri); } catch { // ignore error diff --git a/src/ui/PackageDependencyProvider.ts b/src/ui/PackageDependencyProvider.ts index 78d20574f..7a6fa55ec 100644 --- a/src/ui/PackageDependencyProvider.ts +++ b/src/ui/PackageDependencyProvider.ts @@ -41,6 +41,7 @@ export class PackageNode { constructor( public name: string, public path: string, + public location: string, public version: string, public type: "local" | "remote" | "editing" ) {} @@ -163,7 +164,14 @@ export class PackageDependenciesProvider implements vscode.TreeDataProvider Date: Sun, 31 Jul 2022 02:57:14 +0900 Subject: [PATCH 4/4] fixed editing package can `view repository` --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e523706ec..b047629f0 100644 --- a/package.json +++ b/package.json @@ -310,7 +310,7 @@ }, { "command": "swift.openExternal", - "when": "view == packageDependencies && viewItem == remote" + "when": "view == packageDependencies && viewItem != local" } ] },