From b4dbc9704e0a67a8eda13a29469e90f3346cdccc Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Sat, 31 Aug 2024 02:36:01 -0700 Subject: [PATCH] Add a rule for single-case `case-lambda` (#260) --- default-recommendations/function-shortcuts-test.rkt | 5 +++++ default-recommendations/function-shortcuts.rkt | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/default-recommendations/function-shortcuts-test.rkt b/default-recommendations/function-shortcuts-test.rkt index a7426a4..f04c609 100644 --- a/default-recommendations/function-shortcuts-test.rkt +++ b/default-recommendations/function-shortcuts-test.rkt @@ -31,3 +31,8 @@ test: "apply with recursive list* can be flattened" test: "apply with quasiquoted list can be flattened" - (apply + 0 `(1 2 ,@'(3 4))) - (apply + 0 1 2 '(3 4)) + + +test: "single-case case-lambda refactorable to regular lambda" +- (case-lambda [(x y z) (+ x y z)]) +- (λ (x y z) (+ x y z)) diff --git a/default-recommendations/function-shortcuts.rkt b/default-recommendations/function-shortcuts.rkt index 92b4e64..41b1956 100644 --- a/default-recommendations/function-shortcuts.rkt +++ b/default-recommendations/function-shortcuts.rkt @@ -65,8 +65,15 @@ (id function arg ... trailing-arg.lifted ... trailing-arg.trailing)]) +(define-refactoring-rule case-lambda-with-single-case-to-lambda + #:description "This `case-lambda` form only has one case. Use a regular lambda instead." + #:literals (case-lambda) + [(case-lambda [args body ...]) (λ args body ...)]) + + (define function-shortcuts (refactoring-suite #:name (name function-shortcuts) #:rules - (list apply-flattening))) + (list apply-flattening + case-lambda-with-single-case-to-lambda)))