Skip to content

Commit 367ae06

Browse files
Copilotjackfirth
andcommitted
Refactor API: use suggestion-count and #:no-suggestion keyword
- Changed `refactoring-rule-suggested-fixes` to `refactoring-rule-suggestion-count` returning exact-nonnegative-integer - Replaced `#:suggested-fixes 'none` parameter with `#:no-suggestion` keyword as replacement template - Updated all test files to use new API - Tests pass Co-authored-by: jackfirth <[email protected]>
1 parent 031ac67 commit 367ae06

File tree

4 files changed

+11
-14
lines changed

4 files changed

+11
-14
lines changed

base.rkt

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
[refactoring-rule? (-> any/c boolean?)]
1616
[refactoring-rule-description (-> refactoring-rule? immutable-string?)]
1717
[refactoring-rule-analyzers (-> refactoring-rule? (set/c expansion-analyzer?))]
18-
[refactoring-rule-suggested-fixes (-> refactoring-rule? (or/c 'none 'one))]
18+
[refactoring-rule-suggestion-count (-> refactoring-rule? exact-nonnegative-integer?)]
1919
[refactoring-suite? (-> any/c boolean?)]
2020
[refactoring-suite
2121
(->* ()
@@ -109,7 +109,7 @@
109109
[(_ new-stx) (syntax-property #'new-stx 'focus-replacement-on #true)]))
110110

111111

112-
(define-object-type refactoring-rule (transformer description uses-universal-tagged-syntax? analyzers suggested-fixes)
112+
(define-object-type refactoring-rule (transformer description uses-universal-tagged-syntax? analyzers suggestion-count)
113113
#:omit-root-binding
114114
#:constructor-name constructor:refactoring-rule)
115115

@@ -141,14 +141,12 @@
141141
#:description description
142142
(~optional (~seq #:uses-universal-tagged-syntax? uses-universal-tagged-syntax?))
143143
(~optional (~seq #:analyzers analyzers))
144-
(~optional (~seq #:suggested-fixes suggested-fixes))
145144
parse-option:syntax-parse-option ...
146145
pattern
147146
pattern-directive:syntax-parse-pattern-directive ...
148-
replacement)
147+
(~or (~and #:no-suggestion no-suggestion-kw) replacement))
149148
#:declare description (expr/c #'string?)
150149
#:declare analyzers (expr/c #'(sequence/c expansion-analyzer?))
151-
#:declare suggested-fixes (expr/c #'(or/c 'none 'one))
152150

153151
#:attr partial-match-log-statement
154152
(and (not (empty? (attribute pattern-directive)))
@@ -158,29 +156,31 @@
158156
(syntax-parse directive
159157
[(#:when condition:expr) #'(#:when (log-resyntax-rule-condition condition))]
160158
[_ directive]))
159+
160+
#:with suggestion-count-val (datum->syntax #'id (if (attribute no-suggestion-kw) 0 1))
161161

162162
(define id
163163
(constructor:refactoring-rule
164164
#:name 'id
165165
#:description (string->immutable-string description.c)
166166
#:uses-universal-tagged-syntax? (~? uses-universal-tagged-syntax? #false)
167167
#:analyzers (for/set ([analyzer (~? analyzers.c '())]) analyzer)
168-
#:suggested-fixes (~? suggested-fixes.c 'one)
168+
#:suggestion-count suggestion-count-val
169169
#:transformer
170170
(λ (stx)
171171
(syntax-parse stx
172172
(~@ . parse-option) ...
173173
[pattern
174174
(~? (~@ #:do [partial-match-log-statement]))
175-
(~@ . wrapped-pattern-directive) ... (present #'replacement)]
175+
(~@ . wrapped-pattern-directive) ...
176+
(~? (present #'replacement) (present #'(void)))]
176177
[_ absent])))))
177178

178179

179180
(define-syntax-parse-rule
180181
(define-definition-context-refactoring-rule id:id
181182
#:description (~var description (expr/c #'string?))
182183
(~optional (~seq #:analyzers (~var analyzers (expr/c #'(sequence/c expansion-analyzer?)))))
183-
(~optional (~seq #:suggested-fixes (~var suggested-fixes (expr/c #'(or/c 'none 'one)))))
184184
parse-option:syntax-parse-option ...
185185
splicing-pattern
186186
pattern-directive:syntax-parse-pattern-directive ...
@@ -234,7 +234,6 @@
234234
(define-refactoring-rule id
235235
#:description description
236236
(~? (~@ #:analyzers analyzers))
237-
(~? (~@ #:suggested-fixes suggested-fixes))
238237
(~var expression expression-matching-id)
239238
expression.refactored)))
240239

main.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@
384384
absent)])
385385
;; Check if this is a warning-only rule
386386
(cond
387-
[(eq? (refactoring-rule-suggested-fixes rule) 'none)
387+
[(zero? (refactoring-rule-suggestion-count rule))
388388
;; For warning-only rules, try to match the pattern
389389
(define match-result
390390
(parameterize ([current-namespace (source-code-analysis-namespace analysis)])

private/warning-rule-test.rkt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,9 @@
1010
;; Define a warning-only rule that matches any (equal? x y)
1111
(define-refactoring-rule test-warning-rule
1212
#:description "This is a test warning rule for equal?"
13-
#:suggested-fixes 'none
1413
#:literals (equal?)
1514
(equal? x y)
16-
(void))
15+
#:no-suggestion)
1716

1817
;; Test that the rule works
1918
(define test-suite (refactoring-suite #:rules (list test-warning-rule)))

test-warning-suite.rkt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@
77
;; Define a warning-only rule that matches any (equal? x y)
88
(define-refactoring-rule test-warning-rule
99
#:description "Test warning rule for equal?"
10-
#:suggested-fixes 'none
1110
#:literals (equal?)
1211
(equal? x y)
13-
(void))
12+
#:no-suggestion)
1413

1514
(define test-warning-suite
1615
(refactoring-suite #:rules (list test-warning-rule)))

0 commit comments

Comments
 (0)