resyntax
resyntax copied to clipboard
A Racket refactoring engine
Consider this code: ```scheme (define (f x) (do-some-stuff) (let ([y (whatever)]) (do-more-stuff))) ``` This is what the command line UI currently outputs: ``` Internal definitions are recommended instead of let...
Rules produce _syntax replacements_. The `syntax-replacement?` type should be documented. This will also help me keep my head around the underlying data model that `resyntax` operates on.
At present, `resyntax` relies on the undocumented and deeply magic `current-expand-observe` parameter (intended for the macro stepper) to apply refactoring rules to visited syntax objects. This has a few problems:...
It's hard to tell whether a rule will actually be useful. It should be possible to run rules over a large corpus of existing code and gather statistics about how...
The designer of a rule may know that the rhs of its rule may contain code that can be simplified. Then, if applying all existing rules is too expensive (though...
Imagine someone writes the following rule: ```racket (define-refactoring-rule smurf #:literals (if begin) [(smurf x x y z) (if x y (void))]) ``` but, unbeknownst to the someone above, the following...
The bare bones of `resyntax` are working, though [not very well](https://github.com/jackfirth/resyntax/issues?q=is%3Aissue+is%3Aopen+label%3Abug). It can refactor code by using [refactoring rules](https://github.com/jackfirth/resyntax/blob/master/refactoring-rule.rkt) written with the `syntax-parse` macro system like so: ```scheme (define-refactoring-rule vector-immutable/c-migration...
Many contracts use `->*` with `#:rest` to contract a function with a rest argument. However, `->*` is difficult to read. Since Racket 6.5, `->` supports `...`, which can be used...
When a library wants to rename an identifier, it has to keep the old name around to avoid breaking backward compatibility. This is usually achieved with `rename-out`. It would be...
The cause of #298 was improper handling of line range filtering in `source-analyze`. To avoid similar issues, I ought to augment `#lang resyntax/testing/refactoring-test` with the ability to specify that only...