@@ -18,16 +18,13 @@ import Workspace
1818
1919protocol ScriptCommand : ParsableCommand {
2020 var swiftOptions : SwiftToolOptions { get }
21- var options : ScriptToolOptions { get }
21+ var file : String { get }
2222
2323 func run( _ swiftTool: SwiftTool , as productName: String , at cacheDirPath: AbsolutePath ) throws
2424}
2525
2626extension ScriptCommand {
2727 public func run( ) throws {
28- guard let file = options. file else {
29- throw ScriptError . fileNotFound ( " " )
30- }
3128 let ( productName, cacheDirPath) = try checkAndPerformCache ( for: file)
3229
3330 var swiftOptions = swiftOptions
@@ -51,10 +48,6 @@ struct ScriptToolOptions: ParsableArguments {
5148
5249 var shouldBuild : Bool { !shouldSkipBuild }
5350
54- /// The script file to run.
55- @Argument ( help: " The script file to run " )
56- var file : String ?
57-
5851 /// The arguments to pass to the executable.
5952 @Argument ( parsing: . unconditionalRemaining,
6053 help: " The arguments to pass to the executable " )
@@ -84,14 +77,16 @@ public struct SwiftScriptTool: ParsableCommand {
8477 public static var _errorLabel : String { " error " }
8578}
8679
87- /// swift-run tool namespace
8880extension SwiftScriptTool {
8981 struct Run : ScriptCommand {
9082 static let configuration = CommandConfiguration (
9183 abstract: " Runs a script " )
9284
9385 @OptionGroup ( _hiddenFromHelp: true )
9486 var swiftOptions : SwiftToolOptions
87+
88+ @Argument ( help: " The script file to run " )
89+ var file : String
9590
9691 @OptionGroup ( )
9792 var options : ScriptToolOptions
@@ -136,6 +131,9 @@ extension SwiftScriptTool {
136131
137132 @OptionGroup ( _hiddenFromHelp: true )
138133 var swiftOptions : SwiftToolOptions
134+
135+ @Argument ( help: " The script file to build " )
136+ var file : String
139137
140138 @OptionGroup ( )
141139 var options : ScriptToolOptions
@@ -177,8 +175,8 @@ extension SwiftScriptTool {
177175 @OptionGroup ( _hiddenFromHelp: true )
178176 var swiftOptions : SwiftToolOptions
179177
180- @OptionGroup ( )
181- var options : ScriptToolOptions
178+ @Argument ( help : " The script file to clean build cache " )
179+ var file : String
182180
183181 func run( _ swiftTool: SwiftTool , as productName: String , at cacheDirPath: AbsolutePath ) throws {
184182 try swiftTool. getActiveWorkspace ( ) . clean ( with: swiftTool. diagnostics)
@@ -192,8 +190,8 @@ extension SwiftScriptTool {
192190 @OptionGroup ( _hiddenFromHelp: true )
193191 var swiftOptions : SwiftToolOptions
194192
195- @OptionGroup ( )
196- var options : ScriptToolOptions
193+ @Argument ( help : " The script file to reset build cache " )
194+ var file : String
197195
198196 func run( _ swiftTool: SwiftTool , as productName: String , at cacheDirPath: AbsolutePath ) throws {
199197 try localFileSystem. removeFileTree ( cacheDirPath)
@@ -207,8 +205,8 @@ extension SwiftScriptTool {
207205 @OptionGroup ( _hiddenFromHelp: true )
208206 var swiftOptions : SwiftToolOptions
209207
210- @OptionGroup ( )
211- var options : ScriptToolOptions
208+ @Argument ( help : " The script file to update dependencies " )
209+ var file : String
212210
213211 @Flag ( name: [ . long, . customShort( " n " ) ] ,
214212 help: " Display the list of dependencies that can be updated " )
@@ -251,35 +249,6 @@ extension SwiftScriptTool {
251249 }
252250}
253251
254- extension SwiftScriptTool {
255- struct List : ParsableCommand {
256- static let configuration = CommandConfiguration (
257- abstract: " List script caches " )
258-
259- @OptionGroup ( _hiddenFromHelp: true )
260- var swiftOptions : SwiftToolOptions
261-
262- func run( ) throws {
263- let cacheDir = try localFileSystem. getOrCreateSwiftScriptCacheDirectory ( )
264- let scripts = try localFileSystem. getDirectoryContents ( cacheDir)
265- let resolved = try scripts. map { script -> ( String , AbsolutePath ) in
266- let sourceDir = cacheDir. appending ( components: script, " Sources " )
267- guard localFileSystem. isDirectory ( sourceDir) ,
268- let name = try localFileSystem. getDirectoryContents ( sourceDir) . first,
269- case let realpath = resolveSymlinks ( sourceDir. appending ( components: name, " main.swift " ) ) else {
270- throw Diagnostics . fatalError
271- }
272- return ( script, realpath)
273- }
274- print ( " \( scripts. count) script \( scripts. count > 1 ? " s " : " " ) cached at \( cacheDir) " )
275- guard let maxLength = resolved. map ( \. 0 . count) . max ( ) else { return }
276- resolved. forEach { ( name, path) in
277- print ( name + String( repeating: " " , count: maxLength - name. count + 2 ) + path. pathString)
278- }
279- }
280- }
281- }
282-
283252extension SwiftScriptTool {
284253 struct ResolveOptions : ParsableArguments {
285254 @Option ( help: " The version to resolve at " , transform: { Version ( string: $0) } )
@@ -302,8 +271,8 @@ extension SwiftScriptTool {
302271 @OptionGroup ( _hiddenFromHelp: true )
303272 var swiftOptions : SwiftToolOptions
304273
305- @OptionGroup ( )
306- var options : ScriptToolOptions
274+ @Argument ( help : " The script file to clean " )
275+ var file : String
307276
308277 @OptionGroup ( )
309278 var resolveOptions : ResolveOptions
@@ -330,6 +299,35 @@ extension SwiftScriptTool {
330299 }
331300}
332301
302+ extension SwiftScriptTool {
303+ struct List : ParsableCommand {
304+ static let configuration = CommandConfiguration (
305+ abstract: " List script caches " )
306+
307+ @OptionGroup ( _hiddenFromHelp: true )
308+ var swiftOptions : SwiftToolOptions
309+
310+ func run( ) throws {
311+ let cacheDir = try localFileSystem. getOrCreateSwiftScriptCacheDirectory ( )
312+ let scripts = try localFileSystem. getDirectoryContents ( cacheDir)
313+ let resolved = try scripts. map { script -> ( String , AbsolutePath ) in
314+ let sourceDir = cacheDir. appending ( components: script, " Sources " )
315+ guard localFileSystem. isDirectory ( sourceDir) ,
316+ let name = try localFileSystem. getDirectoryContents ( sourceDir) . first,
317+ case let realpath = resolveSymlinks ( sourceDir. appending ( components: name, " main.swift " ) ) else {
318+ throw Diagnostics . fatalError
319+ }
320+ return ( script, realpath)
321+ }
322+ print ( " \( scripts. count) script \( scripts. count > 1 ? " s " : " " ) cached at \( cacheDir) " )
323+ guard let maxLength = resolved. map ( \. 0 . count) . max ( ) else { return }
324+ resolved. forEach { ( name, path) in
325+ print ( name + String( repeating: " " , count: maxLength - name. count + 2 ) + path. pathString)
326+ }
327+ }
328+ }
329+ }
330+
333331/// Executes the executable at the specified path.
334332fileprivate func run(
335333 _ executablePath: AbsolutePath ,
0 commit comments