New Features

  • #7211 Allow users to create their own postfix templates (by @shocoman)

  • #7137 Add an intention to create a tuple struct from an unresolved function call (by @Kobzol)

  • #7060 Add Generate documentation stub intention to generate a documentation stub as described here and here (by @0x7CA)

  • #7247 Display enums with variants in code completion popup when appropriate (by @shocoman)

  • #7307 Support procedural macro expansion on Apple Silicon machines. Note:

    • You should use aarch64-apple-darwin toolchain to make procedural macro expansion work

    • The procedural macro expansion is still disabled by default. To turn it on, enable and org.rust.macros.proc experimental features

  • #7067 Crates local index for dependencies completion and inspections is now being updated on project changes. Note, currently this feature is experimental and can be enabled with org.rust.crates.local.index option in experimental features dialog.

  • Highlighting improvements:

    • #7171 Highlight all await operators when under the caret (by @t-kameyama)

      Highlight `await` operators

    • #7356 Provide highlighting of format string literals in any macros that expand to macros like println, write, format, etc

    • #7347 Highlight *emphasis* and **strong emphasis** text in Rust doc comments

    • #7369 Support doctests in code fences wrapped in different number of backticks or tildes

    • #7362 Introduce Format specifier inside format parameter color for std::fmt format specifiers

    • #7243 Fix syntax highlighting for variables / parameters (by @LastExceed)

  • #7373 Support :pat_param macro_rules! matcher (from Rust 1.53.0)

  • #6842 Extend Self convention inspection with new method prefixes (get_, set_ and with_) (by @Kobzol)


  • #7393 Improve Implement Members action and quick-fix:

    • Never expand type aliases

    • Don’t expand macro types

    • Auto-import trait names from type bounds

    • Resolve name conflicts during auto-import:

      • If the target item is in the scope with a different name (use A as B), use that name

      • If the name exists in the scope, but refers to another item, use a qualified path to the target item

      • If the target can’t be imported, use crate-qualified path to the item (this may produce incorrect code, but it should be simpler to fix)

  • #7412 Do not expand type aliases when generating getters and setters (by @Kobzol)

  • #6663 Properly substitute generic method arguments in Fill missing arguments quick-fix (by @Kobzol)

  • #7407 Parenthesize inlined expressions in Inline Value refactoring if they could produce invalid or semantically different code after performing the refactoring (by @Kobzol)

  • #7339 Keep existing comments when using Nest use statements intention (by @Kobzol)

  • #7397 The Nest use statements intention now works properly on all places inside a use group (by @Kobzol)

  • #7390 Support modules named after Rust keywords in cargo test run configurations (by @Kobzol)

  • #7267 The type of custom macros that have log-like names (like error!, warn! or debug!) is now correctly inferred (by @Kobzol)

  • #7316 Fix pretty printers if WSL toolchain is used (it can be enabled using org.rust.wsl experimental feature)

  • #7395 Properly escape crate URLs produced by line markers in Cargo.toml. Should fix exception by clicking on the corresponding icon if you use IntelliJ Projector with IntelliJ Rust plugin on backend

  • #7288 Fix false-positive Use of possibly uninitialized variable E0381 errors and infinite analysis when a function contains asm!() macro calls

  • #7384 Don’t allow sharing/exporting data of crate local index

  • #7300 Fix links to Clippy lints in annotations

  • #7373 Fix :pat matcher - now it should not parse or patterns

Internal Improvements

  • #7358 Remove special handling of log macros in the parser. Log macros can now be resolved via the macro expansion machinery (by @Kobzol)

  • #7401 Add API to get inferred method type and substitution

Full set of changes can be found here