@@ -21,7 +21,7 @@ import { WorkspaceContext } from "../WorkspaceContext";
21
21
import { FolderEvent } from "../WorkspaceContext" ;
22
22
import { FolderContext } from "../FolderContext" ;
23
23
import contextKeys from "../contextKeys" ;
24
- import { Version } from "../utilities/version " ;
24
+ import { WorkspaceState } from "../SwiftPackage " ;
25
25
26
26
/**
27
27
* References:
@@ -147,14 +147,15 @@ export class PackageDependenciesProvider implements vscode.TreeDataProvider<Tree
147
147
return [ ] ;
148
148
}
149
149
if ( ! element ) {
150
+ const workspaceState = await folderContext . swiftPackage . loadWorkspaceState ( ) ;
150
151
// Build PackageNodes for all dependencies. Because Package.resolved might not
151
152
// be up to date with edited dependency list, we need to remove the edited
152
153
// dependencies from the list before adding in the edit version
153
154
const children = [
154
- ...this . getLocalDependencies ( folderContext ) ,
155
+ ...this . getLocalDependencies ( workspaceState ) ,
155
156
...this . getRemoteDependencies ( folderContext ) ,
156
157
] ;
157
- const editedChildren = await this . getEditedDependencies ( folderContext ) ;
158
+ const editedChildren = await this . getEditedDependencies ( workspaceState ) ;
158
159
const uneditedChildren : PackageNode [ ] = [ ] ;
159
160
for ( const child of children ) {
160
161
const editedVersion = editedChildren . find ( item => item . name === child . name ) ;
@@ -186,25 +187,28 @@ export class PackageDependenciesProvider implements vscode.TreeDataProvider<Tree
186
187
* Returns a {@link PackageNode} for every local dependency
187
188
* declared in **Package.swift**.
188
189
*/
189
- private getLocalDependencies ( folderContext : FolderContext ) : PackageNode [ ] {
190
- const swiftVersion = folderContext . workspaceContext . toolchain . swiftVersion ;
191
- // prior to Swift 5.6 local dependencies had no requirements
192
- if ( swiftVersion . isLessThan ( new Version ( 5 , 6 , 0 ) ) ) {
193
- return folderContext . swiftPackage . dependencies
194
- . filter ( dependency => ! dependency . requirement && dependency . url )
195
- . map (
196
- dependency =>
197
- new PackageNode ( dependency . identity , dependency . url ! , "local" , "local" )
198
- ) ;
199
- } else {
200
- // since Swift 5.6 local dependencies have `type` `fileSystem`
201
- return folderContext . swiftPackage . dependencies
202
- . filter ( dependency => dependency . type === "fileSystem" && dependency . path )
190
+ private getLocalDependencies ( workspaceState : WorkspaceState | undefined ) : PackageNode [ ] {
191
+ return (
192
+ workspaceState ?. object . dependencies
193
+ . filter ( item => {
194
+ // need to check for both "local" and "fileSystem" as swift 5.5 and earlier
195
+ // use "local" while 5.6 and later use "fileSystem"
196
+ return (
197
+ ( item . packageRef . kind === "local" ||
198
+ item . packageRef . kind === "fileSystem" ) &&
199
+ item . packageRef . location
200
+ ) ;
201
+ } )
203
202
. map (
204
203
dependency =>
205
- new PackageNode ( dependency . identity , dependency . path ! , "local" , "local" )
206
- ) ;
207
- }
204
+ new PackageNode (
205
+ dependency . packageRef . identity ,
206
+ dependency . packageRef . location ,
207
+ "local" ,
208
+ "local"
209
+ )
210
+ ) ?? [ ]
211
+ ) ;
208
212
}
209
213
210
214
/**
@@ -229,9 +233,21 @@ export class PackageDependenciesProvider implements vscode.TreeDataProvider<Tree
229
233
* @param folderContext Folder to get edited dependencies for
230
234
* @returns Array of packages
231
235
*/
232
- private async getEditedDependencies ( folderContext : FolderContext ) : Promise < PackageNode [ ] > {
233
- return ( await folderContext . getEditedPackages ( ) ) . map (
234
- item => new PackageNode ( item . name , item . folder , "local" , "editing" )
236
+ private getEditedDependencies ( workspaceState : WorkspaceState | undefined ) : PackageNode [ ] {
237
+ return (
238
+ workspaceState ?. object . dependencies
239
+ . filter ( item => {
240
+ return item . state . name === "edited" && item . state . path ;
241
+ } )
242
+ . map (
243
+ item =>
244
+ new PackageNode (
245
+ item . packageRef . identity ,
246
+ item . state . path ! ,
247
+ "local" ,
248
+ "editing"
249
+ )
250
+ ) ?? [ ]
235
251
) ;
236
252
}
237
253
0 commit comments