diff --git a/default-recommendations/loops/for-loop-shortcuts-test.rkt b/default-recommendations/loops/for-loop-shortcuts-test.rkt index 8ec3c5b..92f97c3 100644 --- a/default-recommendations/loops/for-loop-shortcuts-test.rkt +++ b/default-recommendations/loops/for-loop-shortcuts-test.rkt @@ -341,51 +341,91 @@ test: "nested for/and forms can be flattened to a for*/and form" ------------------------------ -test: "(when ...) in a for loop refactored to #:when clause" +test: "(when ...) in a for loop refactored to #:when clause when multiple body forms" ------------------------------------------------------------ (for ([x (in-list (list 1 2 'a 3 'b 4))]) (when (number? x) - (displayln x))) + (displayln x) + (displayln (* x 2)))) ============================================================ (for ([x (in-list (list 1 2 'a 3 'b 4))] #:when (number? x)) - (displayln x)) + (displayln x) + (displayln (* x 2))) ------------------------------------------------------------ -test: "(when ...) in a for* loop refactored to #:when clause" +no-change-test: "(when ...) with single body form in a for loop not refactored" ------------------------------------------------------------ -(for* ([x (in-list (list 1 2 'a 3 'b 4))]) +(for ([x (in-list (list 1 2 'a 3 'b 4))]) (when (number? x) (displayln x))) +------------------------------------------------------------ + + +test: "(when ...) in a for* loop refactored to #:when clause when multiple body forms" +------------------------------------------------------------ +(for* ([x (in-list (list 1 2 'a 3 'b 4))]) + (when (number? x) + (displayln x) + (displayln (* x 2)))) ============================================================ (for* ([x (in-list (list 1 2 'a 3 'b 4))] #:when (number? x)) - (displayln x)) + (displayln x) + (displayln (* x 2))) +------------------------------------------------------------ + + +no-change-test: "(when ...) with single body form in a for* loop not refactored" +------------------------------------------------------------ +(for* ([x (in-list (list 1 2 'a 3 'b 4))]) + (when (number? x) + (displayln x))) ------------------------------------------------------------ -test: "(unless ...) in a for loop refactored to #:when clause" +test: "(unless ...) in a for loop refactored to #:unless clause when multiple body forms" ------------------------------------------------------------ (for ([x (in-list (list 1 2 'a 3 'b 4))]) (unless (number? x) - (displayln x))) + (displayln x) + (displayln "non-number"))) ============================================================ (for ([x (in-list (list 1 2 'a 3 'b 4))] #:unless (number? x)) - (displayln x)) + (displayln x) + (displayln "non-number")) ------------------------------------------------------------ -test: "(unless ...) in a for* loop refactored to #:when clause" +no-change-test: "(unless ...) with single body form in a for loop not refactored" ------------------------------------------------------------ -(for* ([x (in-list (list 1 2 'a 3 'b 4))]) +(for ([x (in-list (list 1 2 'a 3 'b 4))]) (unless (number? x) (displayln x))) +------------------------------------------------------------ + + +test: "(unless ...) in a for* loop refactored to #:unless clause when multiple body forms" +------------------------------------------------------------ +(for* ([x (in-list (list 1 2 'a 3 'b 4))]) + (unless (number? x) + (displayln x) + (displayln "non-number"))) ============================================================ (for* ([x (in-list (list 1 2 'a 3 'b 4))] #:unless (number? x)) - (displayln x)) + (displayln x) + (displayln "non-number")) +------------------------------------------------------------ + + +no-change-test: "(unless ...) with single body form in a for* loop not refactored" +------------------------------------------------------------ +(for* ([x (in-list (list 1 2 'a 3 'b 4))]) + (unless (number? x) + (displayln x))) ------------------------------------------------------------ diff --git a/default-recommendations/loops/for-loop-shortcuts.rkt b/default-recommendations/loops/for-loop-shortcuts.rkt index 75bc4b6..e919475 100644 --- a/default-recommendations/loops/for-loop-shortcuts.rkt +++ b/default-recommendations/loops/for-loop-shortcuts.rkt @@ -261,6 +261,7 @@ return just that result." #:description "Use the `#:when` keyword instead of `when` to reduce loop body indentation." #:literals (when for for*) ((~or for-id:for for-id:for*) (clause ...) (when condition body ...)) + #:when (>= (length (attribute body)) 2) (for-id (clause ... #:when condition) body ...)) @@ -268,6 +269,7 @@ return just that result." #:description "Use the `#:unless` keyword instead of `unless` to reduce loop body indentation." #:literals (unless for for*) ((~or for-id:for for-id:for*) (clause ...) (unless condition body ...)) + #:when (>= (length (attribute body)) 2) (for-id (clause ... #:unless condition) body ...))