New Features

  • Introduce experimental version of new macro expansion engine. Turning it on the plugin can correctly process modules and impl blocks generated by macros. It means that all intellisence features like highlighting, name resolution, completion, etc. work with generated modules and methods from impl blocks as expected. The new engine is not enabled by default for now. You can choose it via Preferences | Languages & Frameworks | Rust | Expand declarative macros option. If you have any problem related to the new macro expansion engine, please file an issue in our tracker

  • Improve language support:
    • Support extern_crate_self syntax that will be stabilized in Rust 1.34. See the corresponding tracking issue for more details
    • Support C-variadic functions. See the corresponding RFC for more details
  • Debugger improvements:
    • Provide LLDB formatters for HashMap and HashSet collections. Note, these formatters require Rust 1.33 or above to work properly
    • Now Step Over, Step Into, and other debugger actions correctly work with stdlib code.

  • External tools integration improvements:
    • Initial Valgrind Memcheck support in CLion since 2019.1. At this moment it’s available only on Linux and macOS. You can read more about Valgrind configuring here
    • You don’t need to install rustfilt to get human readable function names and Jump to Source action in macOS profiler. Now the plugin provides these features out-of-the-box
  • Add Use destructuring declaration intention

  • Completion improvements:
    • Reorder completion list. Now local items have higher priority and should be placed at the top of the completion list
    • Highlight deprecated items and move them at the bottom while completion (by @isamborskiy)
  • Show documentation of the corresponding trait item if element documentation is empty

  • Add Remove dbg! intention (by @gfreezy)

  • Add impl and implt live templates

  • Provide name resolution and completion for builtin macros like assert, include, etc.

Fixes

  • Prevent stack overflow while name resolution

  • Do not reparse files while analyzing code by inspections if possible. Previously, some inspections triggered non opened file reparsing. It should slightly decrease memory consumption

  • Fix regression related to MSVC toolchain detection on start of debug session. Now the plugin correctly notify user that MSVC toolchain is not supported

  • Do not show false positive error annotation about duplicate parameter with function parameters like fn foo(x: i32, f: fn(x: i32, y: i32))

  • Fix wrong type inference for empty structs

  • Import items only one time when multiple carets are used (by @SomeoneToIgnore)

  • Correctly highlighting crate and Self keywords

  • Do not interfere to renaming refactoring in JavaScript files. Previously the plugin triggered on each renaming even non related to rust code

Internal Improvements

  • Implement proper Rust project settings migration

  • Update IDEA & CLion