@@ -132,10 +132,10 @@ extension HTMLKitUtilities {
132132 break
133133 }
134134 }
135- return . interpolation( expr_to_single_line ( function) )
135+ return . interpolation( to_single_line ( function) )
136136 }
137137 if let member: MemberAccessExprSyntax = expression. memberAccess {
138- return . interpolation( expr_to_single_line ( member) )
138+ return . interpolation( to_single_line ( member) )
139139 }
140140 if let array: ArrayExprSyntax = expression. array {
141141 let separator : String
@@ -181,33 +181,35 @@ extension HTMLKitUtilities {
181181 }
182182 }
183183 if let unwrap: ForceUnwrapExprSyntax = expression. as ( ForceUnwrapExprSyntax . self) {
184- let merged : String = expr_to_single_line ( unwrap)
184+ let merged : String = to_single_line ( unwrap)
185185 return . interpolation( " \\ ( " + merged + " ) " )
186186 }
187187 return nil
188188 }
189189
190- // MARK: Expr to Single Line
191- static func expr_to_single_line ( _ expression: ExprSyntax ) -> String {
190+ // MARK: To Single Line
191+ static func to_single_line ( _ expression: ExprSyntax ) -> String {
192192 if let function: FunctionCallExprSyntax = expression. functionCall {
193- return expr_to_single_line ( function)
193+ return to_single_line ( function)
194194 } else if let member: MemberAccessExprSyntax = expression. memberAccess {
195- return expr_to_single_line ( member)
195+ return to_single_line ( member)
196196 } else if let force_unwrap: ForceUnwrapExprSyntax = expression. as ( ForceUnwrapExprSyntax . self) {
197- return expr_to_single_line ( force_unwrap) + " ! "
197+ return to_single_line ( force_unwrap) + " ! "
198+ } else if let closure: ClosureExprSyntax = expression. as ( ClosureExprSyntax . self) {
199+ return to_single_line ( closure)
198200 } else {
199201 return " \( expression) "
200202 }
201203 }
202- static func expr_to_single_line ( _ force_unwrap: ForceUnwrapExprSyntax ) -> String {
203- return expr_to_single_line ( force_unwrap. expression) + " ! "
204+ static func to_single_line ( _ force_unwrap: ForceUnwrapExprSyntax ) -> String {
205+ return to_single_line ( force_unwrap. expression) + " ! "
204206 }
205- static func expr_to_single_line ( _ member: MemberAccessExprSyntax ) -> String {
207+ static func to_single_line ( _ member: MemberAccessExprSyntax ) -> String {
206208 var string : String = " \( member) "
207209 string. removeAll { $0. isWhitespace }
208210 return string
209211 }
210- static func expr_to_single_line ( _ function: FunctionCallExprSyntax ) -> String {
212+ static func to_single_line ( _ function: FunctionCallExprSyntax ) -> String {
211213 var string : String = " \( function. calledExpression) "
212214 string. removeAll { $0. isWhitespace }
213215 var args : String = " "
@@ -223,7 +225,7 @@ extension HTMLKitUtilities {
223225 arg. insert ( " , " , at: arg. startIndex)
224226 }
225227 arg += " : "
226- var expr : String = expr_to_single_line ( argument. expression)
228+ var expr : String = to_single_line ( argument. expression)
227229 while expr. first? . isWhitespace ?? false {
228230 expr. removeFirst ( )
229231 }
@@ -237,9 +239,57 @@ extension HTMLKitUtilities {
237239 args += arg
238240 is_first = false
239241 }
242+ if let closure: ClosureExprSyntax = function. trailingClosure {
243+ args += to_single_line ( closure)
244+ }
240245 args = " ( " + args + " ) "
241246 return string + args
242247 }
248+ static func to_single_line( _ decl: DeclSyntax ) -> String {
249+ return " \( decl) " // TODO: fix?
250+ }
251+ static func to_single_line( _ statement: StmtSyntax ) -> String {
252+ return " \( statement) " // TODO: fix?
253+ }
254+ static func to_single_line( _ closure: ClosureExprSyntax ) -> String {
255+ var signature : String = " " , body : String = " "
256+ if let sig: ClosureSignatureSyntax = closure. signature {
257+ signature = to_single_line ( sig)
258+ }
259+ var is_first : Bool = true
260+ for statement in closure. statements {
261+ if !is_first {
262+ body += " ; "
263+ }
264+ switch statement. item {
265+ case . decl( let decl) : body += to_single_line ( decl)
266+ case . expr( let expression) : body += to_single_line ( expression)
267+ case . stmt( let stmt) : body += to_single_line ( stmt)
268+ }
269+ is_first = false
270+ }
271+ return " { " + signature + body + " } "
272+ }
273+ static func to_single_line( _ signature: ClosureSignatureSyntax ) -> String {
274+ var string : String = " "
275+ switch signature. parameterClause {
276+ case nil :
277+ break
278+ case . simpleInput( let list) :
279+ for i in list {
280+ string += i. name. text
281+ }
282+ break
283+ case . parameterClause( let clause) :
284+ string += " ( "
285+ for i in clause. parameters {
286+ string += " \( i) "
287+ }
288+ string += " ) "
289+ break
290+ }
291+ return string + " in "
292+ }
243293}
244294
245295// MARK: LiteralReturnType
0 commit comments