In this release, we enable the new macro expansion engine by default. It was a quite long story for us, so we decided to increase the version of our plugin from 0.2 to 0.3. Meet the IntelliJ Rust 0.3! We’ll release a dedicated blog post about the new expansion engine in CLion blog soon.

New Features

  • Enable new macro expansion engine by default. Let’s remember why the new engine is better:
    • it supports impl blocks and mod declarations generated by declarative macros, i.e. if some methods are inside impl block generated by macro invocation, the plugin makes name resolution and completions for these methods as expected. Support for generated mod declarations provides proper name resolution and completion for crates like tokio, async-std, reqwest, etc.
    • it’s now possible to find macro-generated items by Go To Struct Declaration Ctrl + N or Go To Symbol Ctrl + Shift + N.
    • it brings semantic highlighting in macro invocations;
    • most of the IDE features now work inside macro invocations just like in a regular code: code completion, Find Usages / Go To Declaration (Ctrl + B), Go To Implementation (Ctrl + Alt + B), Go To Type Declaration (Ctrl + Shift + B), Type Info (Ctrl + Shift + P), Extend Selection (Ctrl + W), etc.

    If you ran into an issue with the new engine, you can switch it back to the old one in the plugin settings Settings | Languages & Frameworks | Rust | Expand Declarative Macros.

  • Add initial implementation of Move refactoring (F6) for top-level items like structs, enums, etc.

  • Initial support of unstable or_patterns syntax. Note, some code analysis may still not work with such patterns
  • Add an option to sort items alphabetically in Structure View (Ctrl + F12) (by @t-kameyama)
  • Allow extracting non-root modules with Extract inline module intention action (by @Kobzol)
  • Update icons for targets in the Cargo tool window (see differences)
  • Notify users if they use too old Rust toolchain that isn’t already supported by the plugin. Today we support Rust 1.32.0 or higher.

Fixes

  • Use more precise error annotations for missing/extraneous function call arguments. Previously, all function arguments were highlighted (by @Kobzol)
  • Render aliased types for local bindings in the quick documentation Ctrl + Q (by @Kobzol)
  • Fix location detection of cargo binaries like evcxr (used by Rust REPL) or grcov (needed for Run with Coverage)
  • Fix Run external linter action (was broken in the previous release) (by @Stzx)
  • Fix infinite cargo refresh if you have openid = 0.4.0 dependency crate
  • Fix false-positive annotation produced by Lift return inspection on match expression without any arm.
  • Fix some false-positives in move analysis related to path assignments. See the issue for details.
  • Fix some corner cases in doc rendering (Ctrl + Q). See the issue for details.
  • Fix Run with Coverage

Performance Improvements

  • Slightly speed up highlighting and macro expansion

Internal Improvements

  • Add custom-build cargo target kind (needed in order to distinguish cargo target for build.rs)
  • Release Toml plugin builds from GitHub Actions

Full set of changes can be found here