This post is a part of the upcoming codurance series on different ways of setting up your Rust development environment. This time it's IntelliJ.
Ready to be inspired?
Thank you for signing up
Join our newsletter for expert tips and inspirational case studies
Your welcome email is on its way! You can pick the emails you’d like to receive by clicking the link to the Preference Centre.
There are lots of good options for Rust development. The classics are perhaps CLion and vim/emacs. IntelliJ has one important feature that none of these have. Refactoring. As you might expect, the refactoring tools are not as fully featured as those for Java - but they're there and nobody else has them.
- Fedora 26
- Virtual Box 5.2.0r118431
- High Sierra (host OS) v10.13.1
- invent the universe, followed by computers and the internet
- install Rust https://www.rust-lang.org/en-US/install.html
- this will give you cargo, rustc, rustup etc
- follow instructions for default installation
- remember to set up your current shell (instructions at end of installation), if it doesn't work, just reboot your machine
cdto parent directory you want for your project
cargo new my-project
- install IntelliJ https://www.jetbrains.com/idea/
- install "Rust" plugin from the IntelliJ plugin repositories
- open project in IntelliJ by opening the project directory
- keep an eye on the notifications panel at the top of the editor window
- IntelliJ may complain about not finding a cargo project
- try to attach it to the
cargo.tomlin your project root directory by following the promps in the notifications panel
- This may not get rid of the warning - the plugin should still be working as expected though
There you are - you now have a functional Rust environment. With code completion, code generation, syntax highlighting, suggestions and a test runner. Everything you need to get started.
If you want your environment to do more, here are some of the tools I use to improve the work flow in Rust and IntelliJ.
Format on save (rustfmt)
cargo install rustfmt
- Install the "Save Actions" plugin in IntelliJ
- Configure Save Actions like this
- You want to activate save actions on shortcut - IntelliJ does a lot of autosaving which will result in your code being reformated while you are still typing it if you use activate on save
- If you use the VIM emulator,
:wawill not trigger the reformatting - you must use the save shortcut
- (Optional) Rebind the default
ctrl+sfor more convenience
Clippy linting hinting (clippy)
Clippy is... clippy but for Rust. It will make suggestions about improvements to be made to your code. The only difference between clippy and Rust's clippy is that Rust's clippy is actually useful.
rustup toolchain install nightly
rustup run nightly cargo install clippy
cdto root directory of your project
rustup run nightly cargo clippy
Watch tasks (cargo-watch)
When I'm writing code - I hate having to flip to the terminal to compile and run the tests and ensure it's all good. I like to use watch tasks to continuously run my tests. Rust has an option for this.
cargo install cargo-watch
cdto root directory of your project
cargo watch -x test
Integrating watch and clippy into IntelliJ
This is all well and good, but the watch tasks and clippy aren't integrated into IntelliJ, they're run separately on a terminal, and only one at a time! Well it's possible to bring them into your IDE so everything is in the same place and running together.
- Ensure the "Terminal" plugin is installed and enabled in IntelliJ
- open the terminal in IntelliJ
cargo watch -s "rustup run nightly cargo clippy && cargo test"
Now you have a Rust environment capable of
- syntax highlighting
- code completion
- code generation
- error highlighting
- linting suggestions
- format on save
- continuous testing
You should be aware that IntelliJ does not support Rust debugging. If that's important to you, consider using another IDE such as VSCode, CLion, vim or emacs. If you are attached to IntelliJ then you can use
rust-lldb (installed by default with rustup) from the terminal.
Any questions ? Ask on https://users.rust-lang.org/ and ping me the link to the post on Twitter or email it to me at firstname.lastname@example.org. This way the answer will be visible to everyone in the community.
Keep on Rusting!