Skip to content

Commit 1147699

Browse files
Copilotjackfirth
andauthored
Add refactoring rule for sequence-tail with in-vector (#738)
Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: jackfirth <[email protected]>
1 parent 576b20a commit 1147699

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

default-recommendations/loops/for-loop-shortcuts-test.rkt

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,3 +563,56 @@ test: "shadowed and unused in-value clause refactorable to #:do clause"
563563
[b (in-range 0 a)])
564564
(displayln (list a b)))
565565
--------------------
566+
567+
568+
test: "sequence-tail with in-vector refactorable to in-vector with start index"
569+
--------------------
570+
(require racket/sequence)
571+
(define vec (vector 1 2 3 4 5))
572+
(for ([x (sequence-tail (in-vector vec) 2)])
573+
(displayln x))
574+
====================
575+
(require racket/sequence)
576+
(define vec (vector 1 2 3 4 5))
577+
(for ([x (in-vector vec 2)])
578+
(displayln x))
579+
--------------------
580+
581+
582+
test: "sequence-tail with in-vector and variable start index refactorable"
583+
--------------------
584+
(require racket/sequence)
585+
(define vec (vector 1 2 3 4 5))
586+
(define start-idx 3)
587+
(for ([x (sequence-tail (in-vector vec) start-idx)])
588+
(displayln x))
589+
====================
590+
(require racket/sequence)
591+
(define vec (vector 1 2 3 4 5))
592+
(define start-idx 3)
593+
(for ([x (in-vector vec start-idx)])
594+
(displayln x))
595+
--------------------
596+
597+
598+
test: "sequence-tail with in-vector in for/list refactorable"
599+
--------------------
600+
(require racket/sequence)
601+
(define vec (vector 1 2 3 4 5))
602+
(for/list ([x (sequence-tail (in-vector vec) 1)])
603+
(* x 2))
604+
====================
605+
(require racket/sequence)
606+
(define vec (vector 1 2 3 4 5))
607+
(for/list ([x (in-vector vec 1)])
608+
(* x 2))
609+
--------------------
610+
611+
612+
no-change-test: "sequence-tail with non-in-vector sequence not refactorable"
613+
--------------------
614+
(require racket/sequence)
615+
(define lst (list 1 2 3 4 5))
616+
(for ([x (sequence-tail (in-list lst) 2)])
617+
(displayln x))
618+
--------------------

default-recommendations/loops/for-loop-shortcuts.rkt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
(require (for-syntax racket/base)
1313
racket/list
14+
racket/sequence
1415
racket/set
1516
resyntax/base
1617
resyntax/default-recommendations/analyzers/identifier-usage
@@ -299,6 +300,13 @@ return just that result."
299300
(for-id (clause-before ... #:do [expr] clause-after ...) body ...))
300301

301302

303+
(define-refactoring-rule sequence-tail-in-vector-to-in-vector
304+
#:description "The `in-vector` function accepts an optional start index, making `sequence-tail` unnecessary."
305+
#:literals (sequence-tail in-vector)
306+
(sequence-tail (in-vector vec) start)
307+
(in-vector vec start))
308+
309+
302310
(define-refactoring-suite for-loop-shortcuts
303311
#:rules (for/fold-building-hash-to-for/hash
304312
for/fold-result-keyword
@@ -314,5 +322,6 @@ return just that result."
314322
nested-for/and-to-for*/and
315323
nested-for/or-to-for*/or
316324
or-let-in-for/and-to-filter-clause
325+
sequence-tail-in-vector-to-in-vector
317326
unless-expression-in-for-loop-to-unless-keyword
318327
when-expression-in-for-loop-to-when-keyword))

0 commit comments

Comments
 (0)