|
15 | 15 | [refactoring-rule? (-> any/c boolean?)] |
16 | 16 | [refactoring-rule-description (-> refactoring-rule? immutable-string?)] |
17 | 17 | [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?)] |
19 | 19 | [refactoring-suite? (-> any/c boolean?)] |
20 | 20 | [refactoring-suite |
21 | 21 | (->* () |
|
109 | 109 | [(_ new-stx) (syntax-property #'new-stx 'focus-replacement-on #true)])) |
110 | 110 |
|
111 | 111 |
|
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) |
113 | 113 | #:omit-root-binding |
114 | 114 | #:constructor-name constructor:refactoring-rule) |
115 | 115 |
|
|
141 | 141 | #:description description |
142 | 142 | (~optional (~seq #:uses-universal-tagged-syntax? uses-universal-tagged-syntax?)) |
143 | 143 | (~optional (~seq #:analyzers analyzers)) |
144 | | - (~optional (~seq #:suggested-fixes suggested-fixes)) |
145 | 144 | parse-option:syntax-parse-option ... |
146 | 145 | pattern |
147 | 146 | pattern-directive:syntax-parse-pattern-directive ... |
148 | | - replacement) |
| 147 | + (~or (~and #:no-suggestion no-suggestion-kw) replacement)) |
149 | 148 | #:declare description (expr/c #'string?) |
150 | 149 | #:declare analyzers (expr/c #'(sequence/c expansion-analyzer?)) |
151 | | - #:declare suggested-fixes (expr/c #'(or/c 'none 'one)) |
152 | 150 |
|
153 | 151 | #:attr partial-match-log-statement |
154 | 152 | (and (not (empty? (attribute pattern-directive))) |
|
158 | 156 | (syntax-parse directive |
159 | 157 | [(#:when condition:expr) #'(#:when (log-resyntax-rule-condition condition))] |
160 | 158 | [_ directive])) |
| 159 | + |
| 160 | + #:with suggestion-count-val (datum->syntax #'id (if (attribute no-suggestion-kw) 0 1)) |
161 | 161 |
|
162 | 162 | (define id |
163 | 163 | (constructor:refactoring-rule |
164 | 164 | #:name 'id |
165 | 165 | #:description (string->immutable-string description.c) |
166 | 166 | #:uses-universal-tagged-syntax? (~? uses-universal-tagged-syntax? #false) |
167 | 167 | #:analyzers (for/set ([analyzer (~? analyzers.c '())]) analyzer) |
168 | | - #:suggested-fixes (~? suggested-fixes.c 'one) |
| 168 | + #:suggestion-count suggestion-count-val |
169 | 169 | #:transformer |
170 | 170 | (λ (stx) |
171 | 171 | (syntax-parse stx |
172 | 172 | (~@ . parse-option) ... |
173 | 173 | [pattern |
174 | 174 | (~? (~@ #:do [partial-match-log-statement])) |
175 | | - (~@ . wrapped-pattern-directive) ... (present #'replacement)] |
| 175 | + (~@ . wrapped-pattern-directive) ... |
| 176 | + (~? (present #'replacement) (present #'(void)))] |
176 | 177 | [_ absent]))))) |
177 | 178 |
|
178 | 179 |
|
179 | 180 | (define-syntax-parse-rule |
180 | 181 | (define-definition-context-refactoring-rule id:id |
181 | 182 | #:description (~var description (expr/c #'string?)) |
182 | 183 | (~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))))) |
184 | 184 | parse-option:syntax-parse-option ... |
185 | 185 | splicing-pattern |
186 | 186 | pattern-directive:syntax-parse-pattern-directive ... |
|
234 | 234 | (define-refactoring-rule id |
235 | 235 | #:description description |
236 | 236 | (~? (~@ #:analyzers analyzers)) |
237 | | - (~? (~@ #:suggested-fixes suggested-fixes)) |
238 | 237 | (~var expression expression-matching-id) |
239 | 238 | expression.refactored))) |
240 | 239 |
|
|
0 commit comments