IntelliJ Rust

Rust plugin for IntelliJ IDEA*

*work-in-progress, expect bugs and missing features


Getting alpha builds

IntelliJ Rust is currently in the alpha stage of development. When we reach some acceptable level of stability, we publish alpha builds to the IntelliJ’s main plugin repository. You can download and install these builds directly from Plugins > Browse repositories screen in your IDE.

As this is a preview release, something might go wrong. So, be brave to face some nasty bugs. If you find one, we would very appreciate if you file an issue on our bugtracker or ping us on our chat.

Setting up nightly builds

In addition to preview releases, we also ship pre-release builds of intellij-rust and intellij-toml in the nightly channel.

To use them you need to follow the instructions of adding additional plugin repository and paste the URL for the one you need:

- Rust:

Nightly builds are daily snapshots of current development branch. So, it’s natural that there may be even more bugs than in alpha channel. If you find one, we would very appreciate if you file an issue on our bugtracker or ping us on our chat.

Compatible IDEs

The plugin should be compatible with any Intellij based IDE like IDEA, CLion or PyCharm. Latest plugin is guranteed to support the latest released major platform version (2017.3 at the moment of writing), it may support some previous or EAP versions. See Help > About menu for IDE version and Settings > Plugins menu for plugin version.



What is IntelliJ Rust

Intelligent Rust

We aim to build JetBrains-quality language support for IntelliJ IDEA and related IDEs. Right now, you get native code completionWIP, broad navigation, intentions, formatting and much more...

Corroded IDEA

...while this is still your ol' good IDE. Enjoy highly productive developer experience, VCS integration and other languages support.

What's new

IntelliJ Rust Changelog #98

New Features

  • Support 2019.2 EAPs

  • Language support improvements:
    • Support postfix await syntax
    • Parse static keyword in generator expressions correctly
  • Detection of new compiler errors: E0040, E0081, E0120 and E0184 (by @mibac138)

  • Completion improvements:
    • Take into account type information to sort suggested items while completion gif
    • Implement deref postfix completion to add * before selected expression gif (by @mibac138)
    • Add completion for deprecated attribute
  • Debugger improvements:
    • Provide GDB formatters for HashMap and HashSet collections. Note, these formatters require Rust 1.33 or above to work properly
    • Display enum values correctly while debugging with GDB
    • Provide common IDE features (e.g. name resolution and completion) in Evaluate Expression and New Watch fields gif. Note, Evaluate Expression feature is not fully supported and works in certain cases only
  • Improve Convert to named fields refactoring. Now it allows converting all usages of the the struct to the corresponding representation gif (by @rrevenantt)
  • Automatically detect stdlib sources in rustc sysroot even if rustup is absent
  • Take into account constants of primitive types: bool, f32/64, char and &str in Match Check inspection. In addition, the inspection can evaluate constant boolean expressions while analysis (constant functions are not supported) like it has already implemented for integer expressions
  • Now it’s possible to filter usage of variables and fields by read/write access png
  • Support more types from stdlib, like Rc, Arc, Cell, RefCell, etc., in Add missing fields quick fix gif (by @Kobzol)
  • Notify a user when a file is not included in the project structure. It should simplify to find out the reason why common IDE features (e.g. name resolution, completion, etc) don’t work properly in the file (by @Kobzol)
  • Allow folding of macros and macro expansion branches (by @ice1000)
  • Add Show the result of macro expansion intention to invoke cargo expand command. If you don’t have the corresponding package, the plugin shows a notification to install cargo-expand binary in one click
  • Update Extract function dialog. Now it allows changing parameter names. Also, it validates creating function name (by @Kobzol)


  • Name resolution fixes:
    • Fix name resolution of uniform paths
    • Properly process atom use items like use crate_name for 2018 edition. Previously such items broke name resolution of all items imported from the corresponding crate
    • Take into account alias of extern crate item for 2018 edition
    • Correctly detect edition of stdlib crates. It should fix unresolved references to stdlib items like BTreeMap and LinkedList
    • Perform name resolution properly when path contains primitive type name as qualifier like f64::INFINITY
    • Make GoTo Declaration, Find usages and Type Declaration actions work correctly for self parameter (by @vlad20012 & @mibac138)
  • Performance improvements:
    • Significantly speed up Find usages action especially for private and local items
    • Fix possible UI freezes caused by parameter info popup
    • Show large macro expansions faster
  • False positive annotation fixes:
    • Fix a lot of false positive error annotation like Expected Vec, found Vec for rust-lang/rust project
    • Fix false positive error annotation produced by Dropping reference inspection (by @mibac138)
    • Perform better analysis by Match Check inspection on complex patterns with multiple types
  • Type inference improvements:
    • Take into account Deref trait implementation while binary expression type inference
    • Use proper rules of match ergonomics to correctly infer types of variable bindings in all cases (previously not all rules were supported)
  • Provides navigation links from backtrace to project sources for crates with 2018 edition. This feature has been working for 2015 edition crates for long time but was broken for 2018 edition

  • Highlight const and static items properly

  • Better brace matching while deletion and inside macro calls (by @rrevenantt)

  • More precise code highlighting in doc tests
  • Parse 4 slashes in doc comments properly (by @rrevenantt)

Internal Improvements

  • Provide new API to evaluate constant expressions. It’s already used in Match Check inspection