a Regex script for port ruby code to crystal, reduce friction.
Include only the easiest, most obvious, and safest parts.
with minimal effort and cost.
Note: Run this tool at your own risk.
The only dependency is the ruby builtin regex engine, MRI 2.0+ should work.
-
run bin/rubocop_double_quotes to change all single-quoted strings to double-quoted strings.
-
renamed the extension
.rbto.crfor files will in-place use this script. -
run bin/port_ruby_to_crystal, this will do in replace all "*.cr" use known rules. You bet added those files into git before do it to track changes.
-
if it give message like
syntax error in '???': ..., this may be a bug of the script making the wrong substitution, Or it's just not covered by the rules. for this case, you need fix it manually, until no any error.
$: cd you_project_root
$: port_ruby_to_crystalThis project can also be used as a learning resource to see exactly what Ruby APIs are different with Crystal, just check the diff of ./test/test.rb with ./test/test.cr.
Why not replace [] to [] of SomeType, {} to {} of SomeType => SomeType, it's really annoying of those syntax error.
There is no good default SomeType for this case, following is a good advice, you can replace all unkown type to BlackHole, make formatter check pass, then figure the correct type out.
- Add new rule into ./port_ruby_to_crystal.
- Add test cases into test/test.rb.
- Run ./test.sh ensure no error, like this:
╰─ $ ./test.sh
Running ruby test.rb successful.
Running crystal run test.cr successful.