Interactive Crystal in Terminal using fswatch
We love using Crystal, but a compiled language is hard to be as dynamic as Ruby. This makes developers hard to test out basic ideas with REPL or tools like Ruby irb. However, we can use a well-known C++ tool fswatch to watch and auto-execute the file for us.
Without fswatch
The ordinary way to execute a .cr
file is to create a file like hello.cr
and add:
puts "hello world"
and execute:
$ crystal hello.cr
This process is simple, but will become a problem if it repeats more than 100 times when you are dealing with an algorithm. It can be helpful if we let it run automatically after save. Let get started with fswatch!
Installation
I'm using Mac so according to the installation guide it is easy to install with Homebrew:
$ brew install fswatch
Installations on other platforms are also available in the guide.
Starting a watch server
After installation, create hello.cr
file:
$ touch hello.cr
And watch its change using fswatch:
$ fswatch -o hello.cr | xargs -n1 -I{} crystal hello.cr
It will wait for file change and run the crystal hello.cr
command, so keep the window opened.
Edit the file
Go to your text edior and start messing around with the file:
# hello.cr
puts "hello world"
On each save, you will see the terminal output.
hello world
Note that it is not Ruby irb so nothing will be displayed if we don't use puts
and print
methods.
Quick Recap
The formula:
$ fswatch -o [filename] | xargs -n1 -I{} [command]
You don't have to specify a path. Run it like you're in the working directory. Just replace filename
and command
and it will go well.
And we're done!
More configuration to find in its wiki page. Hope it improves your workflow in programming in Crystal.