From 0a399ce023aa74763f27ac9356cf34187d0c7cc4 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 22 Nov 2024 04:53:00 -0800 Subject: [PATCH] Add `build-list-const-to-make-list` rule --- default-recommendations/list-shortcuts-test.rkt | 13 +++++++++++++ default-recommendations/list-shortcuts.rkt | 9 +++++++++ 2 files changed, 22 insertions(+) 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*