Skip to content

Commit b9891ac

Browse files
Copilotjackfirth
andcommitted
Change analyzer collections from lists to sets
Co-authored-by: jackfirth <[email protected]>
1 parent 6f7416d commit b9891ac

File tree

3 files changed

+28
-20
lines changed

3 files changed

+28
-20
lines changed

base.rkt

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
(contract-out
1515
[refactoring-rule? (-> any/c boolean?)]
1616
[refactoring-rule-description (-> refactoring-rule? immutable-string?)]
17-
[refactoring-rule-analyzers (-> refactoring-rule? (listof expansion-analyzer?))]
17+
[refactoring-rule-analyzers (-> refactoring-rule? (set/c expansion-analyzer?))]
1818
[refactoring-suite? (-> any/c boolean?)]
1919
[refactoring-suite
2020
(->* ()
2121
(#:rules (sequence/c refactoring-rule?) #:name (or/c interned-symbol? #false))
2222
refactoring-suite?)]
2323
[refactoring-suite-rules (-> refactoring-suite? (listof refactoring-rule?))]
24-
[refactoring-suite-analyzers (-> refactoring-suite? (listof expansion-analyzer?))]))
24+
[refactoring-suite-analyzers (-> refactoring-suite? (set/c expansion-analyzer?))]))
2525

2626

2727
(module+ private
@@ -37,6 +37,7 @@
3737
resyntax/private/more-syntax-parse-classes)
3838
racket/list
3939
racket/sequence
40+
racket/set
4041
rebellion/base/immutable-string
4142
rebellion/base/option
4243
rebellion/base/symbol
@@ -156,9 +157,9 @@
156157
#:name 'id
157158
#:description (string->immutable-string description.c)
158159
#:uses-universal-tagged-syntax? (~? uses-universal-tagged-syntax? #false)
159-
#:analyzers (list identifier-usage-analyzer
160-
ignored-result-values-analyzer
161-
variable-mutability-analyzer)
160+
#:analyzers (set identifier-usage-analyzer
161+
ignored-result-values-analyzer
162+
variable-mutability-analyzer)
162163
#:transformer
163164
(λ (stx)
164165
(syntax-parse stx
@@ -236,8 +237,9 @@
236237
(define (refactoring-suite #:rules [rules '()] #:name [name #false])
237238
(define rule-list (sequence->list rules))
238239
(define combined-analyzers
239-
(remove-duplicates
240-
(append-map refactoring-rule-analyzers rule-list)))
240+
(for*/set ([rule (in-list rule-list)]
241+
[analyzer (in-set (refactoring-rule-analyzers rule))])
242+
analyzer))
241243
(constructor:refactoring-suite #:rules rule-list #:analyzers combined-analyzers #:name name))
242244

243245

@@ -276,8 +278,10 @@
276278
replacement)
277279

278280
(check-true (refactoring-rule? test-rule))
279-
(check-equal? (length (refactoring-rule-analyzers test-rule)) 3)
280-
(check-true (andmap expansion-analyzer? (refactoring-rule-analyzers test-rule))))
281+
(check-true (set? (refactoring-rule-analyzers test-rule)))
282+
(check-equal? (set-count (refactoring-rule-analyzers test-rule)) 3)
283+
(check-true (for/and ([analyzer (in-set (refactoring-rule-analyzers test-rule))])
284+
(expansion-analyzer? analyzer))))
281285

282286
(test-case "refactoring-suite combines analyzers from rules"
283287
(define-refactoring-rule rule1
@@ -294,9 +298,11 @@
294298

295299
(check-true (refactoring-suite? suite))
296300
(check-equal? (length (refactoring-suite-rules suite)) 2)
297-
;; All rules have the same analyzers, so the combined list should have 3 unique analyzers
298-
(check-equal? (length (refactoring-suite-analyzers suite)) 3)
299-
(check-true (andmap expansion-analyzer? (refactoring-suite-analyzers suite))))
301+
(check-true (set? (refactoring-suite-analyzers suite)))
302+
;; All rules have the same analyzers, so the combined set should have 3 unique analyzers
303+
(check-equal? (set-count (refactoring-suite-analyzers suite)) 3)
304+
(check-true (for/and ([analyzer (in-set (refactoring-suite-analyzers suite))])
305+
(expansion-analyzer? analyzer))))
300306

301307
(test-case "nested suites combine analyzers correctly"
302308
(define-refactoring-rule inner-rule
@@ -313,9 +319,9 @@
313319

314320
(define outer-suite (refactoring-suite #:rules (list outer-rule inner-rule)))
315321

316-
(check-equal? (length (refactoring-suite-analyzers inner-suite)) 3)
322+
(check-equal? (set-count (refactoring-suite-analyzers inner-suite)) 3)
317323
;; Both rules have the same analyzers, so deduplicated should still be 3
318-
(check-equal? (length (refactoring-suite-analyzers outer-suite)) 3))
324+
(check-equal? (set-count (refactoring-suite-analyzers outer-suite)) 3))
319325

320326
(test-case "define-refactoring-suite with nested suites preserves analyzers"
321327
(define-refactoring-rule rule-a
@@ -338,5 +344,6 @@
338344
;; Suite B should have both rules
339345
(check-equal? (length (refactoring-suite-rules suite-b)) 2)
340346
;; And should have 3 analyzers (deduplicated from both rules)
341-
(check-equal? (length (refactoring-suite-analyzers suite-b)) 3)
342-
(check-true (andmap expansion-analyzer? (refactoring-suite-analyzers suite-b)))))
347+
(check-equal? (set-count (refactoring-suite-analyzers suite-b)) 3)
348+
(check-true (for/and ([analyzer (in-set (refactoring-suite-analyzers suite-b))])
349+
(expansion-analyzer? analyzer)))))

main.rkt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,8 @@
473473

474474
(test-case "resyntax-analyze uses suite analyzers"
475475
(define test-suite default-recommendations)
476-
(check-true (list? (refactoring-suite-analyzers test-suite)))
477-
(check-false (empty? (refactoring-suite-analyzers test-suite)))
476+
(check-true (set? (refactoring-suite-analyzers test-suite)))
477+
(check-false (set-empty? (refactoring-suite-analyzers test-suite)))
478478
;; Verify that all analyzers in the suite are expansion-analyzer?
479-
(check-true (andmap expansion-analyzer? (refactoring-suite-analyzers test-suite)))))
479+
(check-true (for/and ([analyzer (in-set (refactoring-suite-analyzers test-suite))])
480+
(expansion-analyzer? analyzer)))))

private/analysis.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
(provide
88
(contract-out
9-
[source-analyze (->* (source? #:analyzers (listof expansion-analyzer?))
9+
[source-analyze (->* (source? #:analyzers (sequence/c expansion-analyzer?))
1010
(#:lines range-set?)
1111
source-code-analysis?)]
1212
[source-code-analysis? (-> any/c boolean?)]

0 commit comments

Comments
 (0)