{"id":464472,"date":"2024-04-09T15:45:41","date_gmt":"2024-04-09T14:45:41","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=rscpp&#038;p=464472"},"modified":"2024-04-09T15:45:46","modified_gmt":"2024-04-09T14:45:46","slug":"resharper-cpp-2024-1","status":"publish","type":"rscpp","link":"https:\/\/blog.jetbrains.com\/fr\/rscpp\/2024\/04\/09\/resharper-cpp-2024-1","title":{"rendered":"ReSharper C++ 2024.1: Slate UI Framework and Better Support for C++20 Modules"},"content":{"rendered":"\n<p>We\u2019ve just released ReSharper C++ 2024.1!<\/p>\n\n\n\n<p>This latest version brings improved support for C++20 modules and implements outgoing calls in <em>Call Tracking<\/em>. Coding assistance changes include enhancements for <em>Change Signature<\/em>, updated documentation comment functionality, and more. For Unreal Engine developers, ReSharper C++ 2024.1 includes support for the Slate UI framework and asset path completion in C++ code.<\/p>\n\n\n\n<p>Read on for details about all of this version\u2019s key improvements.<\/p>\n\n\n\n<p><img decoding=\"async\" alt=\"ReSharper C++ 2024.1\" width=\"1600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/04\/Blogpost_image_800x400_ReSharperCPP-2x.png\"><\/p>\n\n\n\n<p>Update or start a free 30-day trial today! The brand-new build is available on our website, and all of our tools for Visual Studio can be downloaded via the <a href=\"https:\/\/www.jetbrains.com\/toolbox-app\" target=\"_blank\" rel=\"noopener\">Toolbox App<\/a>.<\/p>\n\n\n<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com\/resharper-cpp\/download\/?utm_source=social&amp;utm_medium=blog_post&amp;utm_campaign=rscpp_release_2024_1\" target=\"_blank\" rel=\"noopener\"><i class=\"download-icon\"><\/i>DOWNLOAD RESHARPER C++<\/a><\/p>\n\n\n<h2 class=\"wp-block-heading\">Game development with Unreal Engine<\/h2>\n\n\n\n<p>ReSharper C++ is tuned to help developers create glitch-free games with Unreal Engine faster.&nbsp;<\/p>\n\n\n\n<p>ReSharper C++ 2024.1 introduces support for Unreal Engine\u2019s <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/slate-user-interface-programming-framework-for-unreal-engine\" target=\"_blank\" rel=\"noopener\">Slate UI framework<\/a>. The Unreal Editor interface is largely built using Slate. It\u2019s designed to make building user interfaces for tools and applications more efficient.<\/p>\n\n\n\n<p>You can rely on ReSharper\u2019s code formatter and typing assistance to format your Slate code according to Unreal Engine\u2019s conventions. Features, like <em>Go to declaration<\/em>, <em>Find Usages<\/em>, and <em>Rename,<\/em> have also been updated to understand Slate\u2019s declarative syntax.<\/p>\n\n\n\n<p><img decoding=\"async\" alt=\"Slate UI support\" width=\"600\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/04\/UESlate.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/04\/UESlate.png\"><\/p>\n\n\n\n<p>Other enhancements for game developers include:<\/p>\n\n\n\n<ul>\n<li>Blueprints:\n<ul>\n<li>ReSharper C++ now adds core redirects when renaming a UENUM instance.<\/li>\n\n\n\n<li>Code completion now works for asset paths for resource names in C++ code.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>HLSL interfaces used for the dynamic shader linkages are now supported in shader code.<\/li>\n\n\n\n<li>C files in Unreal Engine projects are now handled correctly by ReSharper C++ as C, not C++, files.<\/li>\n<\/ul>\n\n\n\n<p><em>If you\u2019re interested in a stand-alone cross-platform IDE for Unreal Engine development, consider <\/em><a href=\"https:\/\/www.jetbrains.com\/lp\/rider-unreal\/\" target=\"_blank\" rel=\"noopener\"><em>Rider<\/em><\/a><em>. Unreal Engine support in Rider and ReSharper C++ is aligned, and you can expect the same improvements in the Rider 2024.1 update.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C++ language support<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">C++20 modules support<\/h3>\n\n\n\n<p>Are you using C++20 modules in your projects or considering starting with them? As per the results of our <a href=\"https:\/\/www.jetbrains.com\/lp\/devecosystem-2023\/cpp\/#cpp_features_two_years\" target=\"_blank\" rel=\"noopener\">Developer Ecosystem 2023 research<\/a>, half of respondents plan to use C++20 modules in the next 12 months.<\/p>\n\n\n\n<p>As one of the major improvements in this new version, we expect a significant reduction in the footprint of exported modules. To achieve this, we reworked the internal representation of exported C++20 modules to facilitate transitive references to entities imported from other modules. ReSharper C++ no longer reexports these entities from the module that imported them, which leads to reduced memory consumption.<\/p>\n\n\n\n<p>ReSharper C++ now supports internal partition units, which are module partition units that do not contribute to the external interface of a module. In other words, they are module partitions without an associated export module declaration.<br><\/p>\n\n\n\n<p><img decoding=\"async\" alt=\"C++20 Modules\" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/04\/ModuleInternalPartition.png\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Better support for built-in functions<\/h3>\n\n\n\n<p>More accurate handling for built-in functions like <code>__builtin_bit_cast<\/code>, <code>__builtin_choose_expr<\/code>, <code>__builtin_types_compatible_p<\/code>, and <code>__builtin_strlen<\/code> was implemented.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C++ coding assistance<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Outgoing calls in <em>Call Tracking<\/em><\/h3>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/rscpp\/2023\/02\/03\/resharper-cpp-2023-1-eap3-call-tracking\/#call_tracking\"><em>Call Tracking<\/em><\/a> enables you to view and navigate through call chains in your code. v2024.1 now supports navigation through outgoing C++ call chains, in addition to the existing support for tracking incoming calls. To explore outgoing calls, place the caret at any function and select <em>Inspect | Outgoing calls<\/em> from the context menu. Alternatively, you can press Ctrl+Shift+Alt+A to invoke it from the <em>Inspect This<\/em> menu.<\/p>\n\n\n\n<p><img decoding=\"async\" alt=\"Call Tracking\" width=\"800\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/04\/call_tracking.png\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><em>Change Signature<\/em> improvements<\/h3>\n\n\n\n<p>The <em>Change Signature<\/em> refactoring allows you to make one or more modifications to the signature of a function. All usages, implementations, and overrides of the function will be updated accordingly. As one of the most valuable and game-changing refactorings, it has gone through a major overhaul in this release:<\/p>\n\n\n\n<ul>\n<li>Now you can use the <em>Change Signature<\/em> refactoring to change the type of a function parameter between a pointer, a reference, or a value type. All usages and function arguments at the function call sites will be updated for you by ReSharper C++.\n<p><img decoding=\"async\" alt=\"Change Signature parameter\" width=\"600\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/04\/ChangeSignaturePtrRef.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/04\/ChangeSignaturePtrRef.png\"><\/p>\n<\/li>\n\n\n\n<li>If you want a value to be used as the default for the new function parameter, you can do so in the <em>Change Signature<\/em> dialog via <em>Set as the default value in the parameter declaration<\/em> option.<\/li>\n\n\n\n<li>If you are refactoring the function used in the dependent code, ReShaper C++ now lets you verify the changes and confirm which usages need to be updated.<\/li>\n\n\n\n<li><em>Change Signature<\/em> now preserves array types and the int type specifier in unsigned int types.<\/li>\n\n\n\n<li>The refactoring now correctly updates function arguments for call sites inside macro calls.<\/li>\n\n\n\n<li>When updating function parameters described in doxygen comments, <em>Change Signature<\/em> now also updates doxygen parameter descriptions:\n<p><img decoding=\"async\" alt=\"Change Signature doxygen\" width=\"600\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/04\/DocCommentsChangeSignature.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/04\/DocCommentsChangeSignature.png\"><\/p>\n<\/li>\n\n\n\n<li>The refactoring now handles variadic function templates correctly.<\/li>\n\n\n\n<li>The refactoring now supports specifying noexcept for functions with dynamic exception specification.<\/li>\n<\/ul>\n\n\n\n<p>Regarding refactorings, ReSharper C++ continues to outperform other tools by passing more test cases according to the latest results from the extensive <a href=\"https:\/\/github.com\/LegalizeAdulthood\/refactor-test-suite\/blob\/master\/SummaryResults.md\" target=\"_blank\" rel=\"noopener\">test suite<\/a> for C++ refactoring tools maintained by Richard Thomson. Hooray! As a part of our constant work to improve the quality of ReSharper\u2019s suggestions, we\u2019ve addressed several issues identified by Richard\u2019s test suite in ReSharper C++ 2024.1.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Code analysis update<\/h3>\n\n\n\n<p>ReSharper\u2019s code analyzer works as you type and help you catch potential issues and guideline violations faster:<\/p>\n\n\n\n<ul>\n<li>ReSharper C++ 2024.1 now suggests removing redundant idiomatic zero initializers in aggregate initialization.<\/li>\n\n\n\n<li>A new inspection was added to catch redundant inline specifiers on static constexpr data members.<\/li>\n\n\n\n<li><em>Apply \u2018auto\u2019 style<\/em> now handles global variables and class members in addition to local variables.<\/li>\n\n\n\n<li>Support in the code analyzer for the attributes [[maybe_unused]] and [[has_side_effects]] was improved.<\/li>\n<\/ul>\n\n\n\n<p>If you want to suppress an inspection in a specific scope, previously, you could use ReSharper-specific \/\/ ReSharper disable comments. ReSharper C++ 2024.1 additionally recognizes the NOLINT, NOLINTNEXTLINE, and NOLINTBEGIN \u2026 NOLINTEND comments that clang-tidy uses.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Code formatting update<\/h3>\n\n\n\n<ul>\n<li>ReSharper C++ 2024.1 introduces several new formatting options:\n<ul>\n<li><em>Break line after goto labels<\/em> and <em>Indent goto labels<\/em> enhance the formatting of labeled statements.<\/li>\n\n\n\n<li>Settings that control wrapping inside enumerations under <em>Arrangement of enumerations<\/em>.<\/li>\n\n\n\n<li><em>Empty braces formatting<\/em> now includes the <em>Do not change<\/em> option.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>When using a .clang-format config, ReSharper\u2019s formatter now respects the DisableFormat and IndentAccessModifiers settings.<\/li>\n\n\n\n<li>The GNU built-in clang-format style is now supported.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Code documentation<\/h2>\n\n\n\n<p>ReSharper C++ can generate comments for Doxygen-style documentation in your code. The specific style of this comment, for example, the presence of the @brief tag or the style of the parameter description, can now be configured in the default template settings in <em>Settings | Code editing | C++ | Code generation<\/em>.<\/p>\n\n\n\n<p><img decoding=\"async\" alt=\"Documentation settings\" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/04\/DocCommentsSettings.png\"><\/p>\n\n\n\n<p><a href=\"https:\/\/www.jetbrains.com\/resharper\/whatsnew\/#version-2023-3-grammar-and-spelling-checking\" target=\"_blank\" rel=\"noopener\">JetBrains Grazie<\/a> was introduced in ReSharper 2023.3 for built-in grammar and spelling checks. In the 2024.1 release, Grazie-powered grammar inspections are also available inside C++ documentation comments.<\/p>\n\n\n\n<p>Are you interested in the latest changes introduced to ReSharper in this release? Check out our <a href=\"https:\/\/blog.jetbrains.com\/dotnet\/2024\/04\/09\/resharper-2024-1\/\">blog post<\/a>.<\/p>\n\n\n\n<p>Your feedback is highly appreciated and plays a crucial role in improving the product. We encourage you to share your thoughts and suggestions regarding the new features and updates. If you spot a bug, please report it to our <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/RSCPP\" target=\"_blank\" rel=\"noopener\">issue tracker<\/a>.<\/p>\n\n\n<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com\/resharper-cpp\/download\/?utm_source=social&amp;utm_medium=blog_post&amp;utm_campaign=rscpp_release_2024_1\" target=\"_blank\" rel=\"noopener\"><i class=\"download-icon\"><\/i>DOWNLOAD RESHARPER C++<\/a><\/p>\n<p><em>Your ReSharper C++ team<\/em><br \/>\nJetBrains<br \/>\nThe Drive to Develop<\/p>","protected":false},"author":266,"featured_media":464713,"comment_status":"closed","ping_status":"closed","template":"","categories":[89,907],"tags":[8368,3606,8467,6732,8466,2095],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rscpp\/464472"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rscpp"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/rscpp"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/266"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=464472"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rscpp\/464472\/revisions"}],"predecessor-version":[{"id":464963,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rscpp\/464472\/revisions\/464963"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/464713"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=464472"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=464472"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=464472"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=464472"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}