@@ -159,55 +159,49 @@ extension SwiftPackageTool {
159
159
struct Describe : SwiftCommand {
160
160
static let configuration = CommandConfiguration (
161
161
abstract: " Describe the current package " )
162
-
162
+
163
163
@OptionGroup ( _hiddenFromHelp: true )
164
164
var swiftOptions : SwiftToolOptions
165
-
165
+
166
166
@Option ( help: " json | text " )
167
167
var type : DescribeMode = . text
168
-
168
+
169
169
func run( _ swiftTool: SwiftTool ) throws {
170
170
let workspace = try swiftTool. getActiveWorkspace ( )
171
- let root = try swiftTool. getWorkspaceRoot ( )
172
-
173
- let rootManifests = try temp_await {
174
- workspace. loadRootManifests ( packages: root. packages, diagnostics: swiftTool. observabilityScope. makeDiagnosticsEngine ( ) , completion: $0)
171
+
172
+ guard let packagePath = try swiftTool. getWorkspaceRoot ( ) . packages. first else {
173
+ throw StringError ( " unknown package " )
175
174
}
176
- guard let rootManifest = rootManifests. values. first else {
177
- throw StringError ( " invalid manifests at \( root. packages) " )
175
+
176
+ let package = try tsc_await {
177
+ workspace. loadRootPackage (
178
+ at: packagePath,
179
+ observabilityScope: swiftTool. observabilityScope,
180
+ completion: $0
181
+ )
178
182
}
179
-
180
- let builder = PackageBuilder (
181
- identity: . plain( rootManifest. name) ,
182
- manifest: rootManifest,
183
- productFilter: . everything,
184
- path: try swiftTool. getPackageRoot ( ) ,
185
- xcTestMinimumDeploymentTargets: MinimumDeploymentTarget . default. xcTestMinimumDeploymentTargets,
186
- fileSystem: localFileSystem,
187
- observabilityScope: swiftTool. observabilityScope
188
- )
189
- let package = try builder. construct ( )
190
- self . describe ( package , in: type, on: swiftTool. outputStream)
183
+
184
+ try self . describe ( package , in: type, on: swiftTool. outputStream)
191
185
}
192
-
186
+
193
187
/// Emits a textual description of `package` to `stream`, in the format indicated by `mode`.
194
- func describe( _ package : Package , in mode: DescribeMode , on stream: OutputByteStream ) {
188
+ func describe( _ package : Package , in mode: DescribeMode , on stream: OutputByteStream ) throws {
195
189
let desc = DescribedPackage ( from: package )
196
190
let data : Data
197
191
switch mode {
198
192
case . json:
199
193
let encoder = JSONEncoder . makeWithDefaults ( )
200
194
encoder. keyEncodingStrategy = . convertToSnakeCase
201
- data = try ! encoder. encode ( desc)
195
+ data = try encoder. encode ( desc)
202
196
case . text:
203
197
var encoder = PlainTextEncoder ( )
204
198
encoder. formattingOptions = [ . prettyPrinted]
205
- data = try ! encoder. encode ( desc)
199
+ data = try encoder. encode ( desc)
206
200
}
207
201
stream <<< String ( decoding: data, as: UTF8 . self) <<< " \n "
208
202
stream. flush ( )
209
203
}
210
-
204
+
211
205
enum DescribeMode : String , ExpressibleByArgument {
212
206
/// JSON format (guaranteed to be parsable and stable across time).
213
207
case json
@@ -269,28 +263,18 @@ extension SwiftPackageTool {
269
263
270
264
// Get the root package.
271
265
let workspace = try swiftTool. getActiveWorkspace ( )
272
- let root = try swiftTool. getWorkspaceRoot ( )
273
- let rootManifests = try temp_await {
274
- workspace. loadRootManifests (
275
- packages: root. packages,
276
- diagnostics: swiftTool. observabilityScope. makeDiagnosticsEngine ( ) ,
266
+
267
+ guard let packagePath = try swiftTool. getWorkspaceRoot ( ) . packages. first else {
268
+ throw StringError ( " unknown package " )
269
+ }
270
+
271
+ let package = try tsc_await {
272
+ workspace. loadRootPackage (
273
+ at: packagePath,
274
+ observabilityScope: swiftTool. observabilityScope,
277
275
completion: $0
278
276
)
279
277
}
280
- guard let rootManifest = rootManifests. values. first else {
281
- throw StringError ( " invalid manifests at \( root. packages) " )
282
- }
283
-
284
- let builder = PackageBuilder (
285
- identity: . plain( rootManifest. name) ,
286
- manifest: rootManifest,
287
- productFilter: . everything,
288
- path: try swiftTool. getPackageRoot ( ) ,
289
- xcTestMinimumDeploymentTargets: [ : ] , // Minimum deployment target does not matter for this operation.
290
- fileSystem: localFileSystem,
291
- observabilityScope: swiftTool. observabilityScope
292
- )
293
- let package = try builder. construct ( )
294
278
295
279
// Use the user provided flags or default to formatting mode.
296
280
let formatOptions = swiftFormatFlags. isEmpty
@@ -304,7 +288,7 @@ extension SwiftPackageTool {
304
288
}
305
289
} . map { $0. pathString }
306
290
307
- let args = [ swiftFormat. pathString] + formatOptions + [ rootManifest . path . pathString] + paths
291
+ let args = [ swiftFormat. pathString] + formatOptions + [ packagePath . pathString] + paths
308
292
print ( " Running: " , args. map { $0. spm_shellEscaped ( ) } . joined ( separator: " " ) )
309
293
310
294
let result = try Process . popen ( arguments: args)
0 commit comments