From 3b85486861952abaf6df9da38efd848d236b9445 Mon Sep 17 00:00:00 2001 From: Jacqueline Firth Date: Wed, 8 Jan 2025 01:34:45 -0800 Subject: [PATCH] Fix `string-append-and-string-join-to-string-join` (#439) --- .../string-shortcuts-test.rkt | 5 +++++ default-recommendations/string-shortcuts.rkt | 22 +++++++------------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/default-recommendations/string-shortcuts-test.rkt b/default-recommendations/string-shortcuts-test.rkt index f40c2fb..87544a4 100644 --- a/default-recommendations/string-shortcuts-test.rkt +++ b/default-recommendations/string-shortcuts-test.rkt @@ -44,6 +44,11 @@ test: "string-append around string-join refactorable to string-join with keyword - (string-join (list "fox" "hen" "dog") #:before-first "The " #:after-last " jumped") +test: "string-append before string-join with sep refactorable to string-join with #:before-first" +- (string-append "The " (string-join (list "fox" "hen" "dog") ", ")) +- (string-join (list "fox" "hen" "dog") ", " #:before-first "The ") + + test: "multiline string-append around string-join refactorable to multiline string-join with keyword\ arguments" diff --git a/default-recommendations/string-shortcuts.rkt b/default-recommendations/string-shortcuts.rkt index a658a4a..a31e817 100644 --- a/default-recommendations/string-shortcuts.rkt +++ b/default-recommendations/string-shortcuts.rkt @@ -50,29 +50,23 @@ (~@ . after))) -(define-syntax-class keywordless-string-join-call - #:attributes ([original 1]) +(define-splicing-syntax-class keywordless-string-join-call #:literals (string-join) - - (pattern ((~and id string-join) strs) - #:with (original ...) #'(id strs)) - - (pattern ((~and id string-join) strs sep) - #:with (original ...) #'(id sep))) + (pattern (~seq string-join strs (~optional sep)))) (define-syntax-class string-append-and-string-join-expression #:attributes (refactored) #:literals (string-append) - (pattern (string-append before join-call:keywordless-string-join-call) - #:with refactored #'(join-call.original ... #:before-first before)) + (pattern (string-append before (join-call:keywordless-string-join-call)) + #:with refactored #'((~@ . join-call) #:before-first before)) - (pattern (string-append join-call:keywordless-string-join-call after) - #:with refactored #'(join-call.original ... #:after-last after)) + (pattern (string-append (join-call:keywordless-string-join-call) after) + #:with refactored #'((~@ . join-call) #:after-last after)) - (pattern (string-append before join-call:keywordless-string-join-call after) - #:with refactored #'(join-call.original ... #:before-first before #:after-last after))) + (pattern (string-append before (join-call:keywordless-string-join-call) after) + #:with refactored #'((~@ . join-call) #:before-first before #:after-last after))) (define-refactoring-rule string-append-and-string-join-to-string-join