New Features

  • #6378 Introduce the new experimental engine for name resolution (disabled by default). The new algorithm (aka name resolution 2.0) uses the fixed-point iteration approach and aims to improve our support for complex glob imports (use foo::*) and re-exports. Also, it will allow the plugin to expand the upcoming macros 2.0 properly. The new algorithm works for top-level items only, so local variables as well as type inference functionality won’t be affected. If you are ready to give it a try, enable Use experimental name resolution engine option in Settings / Preferences | Languages & Frameworks | Rust settings. Although the feature is currently experimental, we encourage you to try it out and share if you face any issues. It will help us to polish the new algorithm and make it the default one. Please use Help | Create New Issue action in your IDE or our issue tracker directly to file your issues.

  • #6276 Support Go to Declaration (Ctrl + B) for Cargo features in cfg and cfg_attr attributes.

  • #6396 Take into account macro invocations in type context, e.g. const FOO: foobar!() = 1

  • Compiler errors detection improvements:

    • #6352, #6413 Detect attributes that require parentheses but haven’t them, and suggest Add parentheses quick-fix (by @zeroeightysix)

    • #6372 Detect the missing type of const and static items as a semantic error and produce a user-friendly error message. Also, provide a quick-fix to add explicit type in such cases (by @Kobzol)

    • #6319 Detect E0057 in some cases (by @zeroeightysix)

Performance Improvements

  • #6395 Slightly optimize syntax highlighting and other analysis

Fixes

  • #6380 Fix macro group matching in some cases. In particular, this fixes completion in tokio 0.3

  • #6323 Validate Perf profiler settings when running code with CPU profiler on Linux. Now, in case of no perf path specified in settings, IDE will show an error with a link to configure the profiler settings

Full set of changes can be found here