diff --git a/default-recommendations/list-shortcuts-test.rkt b/default-recommendations/list-shortcuts-test.rkt index 7a4fccc..1a68b93 100644 --- a/default-recommendations/list-shortcuts-test.rkt +++ b/default-recommendations/list-shortcuts-test.rkt @@ -179,3 +179,16 @@ test: "used map expression not refactorable to for-each" (define (f func xs ys zs) (map func xs ys zs)) ------------------------------ + + +test: "build-list with const refactorable to make-list" +------------------------------ +(require racket/function + racket/list) +(build-list 5 (const 42)) +------------------------------ +------------------------------ +(require racket/function + racket/list) +(make-list 5 42) +------------------------------ diff --git a/default-recommendations/list-shortcuts.rkt b/default-recommendations/list-shortcuts.rkt index 311239e..f3e6748 100644 --- a/default-recommendations/list-shortcuts.rkt +++ b/default-recommendations/list-shortcuts.rkt @@ -10,6 +10,7 @@ (require (for-syntax racket/base) + racket/function racket/list racket/set rebellion/private/static-name @@ -132,9 +133,17 @@ (body-before ... (~replacement (for-each proc list ...) #:original map-expr) body-after ...)) +(define-refactoring-rule build-list-const-to-make-list + #:description "Using `build-list` with `const` is equivalent to using `make-list`." + #:literals (build-list const) + (build-list count (const elem)) + (make-list count elem)) + + (define-refactoring-suite list-shortcuts #:rules (append-single-list-to-single-list append*-and-map-to-append-map + build-list-const-to-make-list equal-null-list-to-null-predicate filter-to-remove* filter-to-remq*