{"id":414594,"date":"2023-12-07T16:05:29","date_gmt":"2023-12-07T15:05:29","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=rscpp&#038;p=414594"},"modified":"2023-12-07T16:05:33","modified_gmt":"2023-12-07T15:05:33","slug":"resharper-cpp-2023-3","status":"publish","type":"rscpp","link":"https:\/\/blog.jetbrains.com\/fr\/rscpp\/2023\/12\/07\/resharper-cpp-2023-3","title":{"rendered":"ReSharper C++ 2023.3: Updated AI Assistant and Better Support for Cross-Platform Code"},"content":{"rendered":"<p>Get the most out of your developer experience with the latest ReSharper C++ update!<\/p>\n<p>ReSharper C++ 2023.3 brings a major update to JetBrains AI Assistant; a new built-in grammar and spelling checker; updates for C, C++, and HLSL support; code completion and <em>Find Usages<\/em> for inactive code inside conditional preprocessor branches; and more. Read on for details about all of this version\u2019s key improvements.<\/p>\n<p><a href=\"https:\/\/www.jetbrains.com\/resharper-cpp\/whatsnew\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" alt=\"ReSharper C++ 2023.3\" width=\"800\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/12\/Featured_Blog_1280x720_ReSharperCPP-2x.png\"\/><\/a><\/p>\n<p>Update or start a free 30-day trial today! The brand-new build is available on our website, and all 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<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com\/resharper-cpp\/download\/?utm_source=twitter&amp;utm_medium=blog_post&amp;utm_campaign=rscpp_release_2023_3\" target=\"_blank\" rel=\"noopener\"><i class=\"download-icon\"><\/i>DOWNLOAD RESHARPER C++<\/a><\/p>\n<h2 id=\"ai_assistant_is_out_of_preview\">AI Assistant is out of preview<\/h2>\n<p>JetBrains AI Assistant is now generally available with a number of new and improved features to increase your productivity. Our latest set of improvements includes better project awareness for AI actions and a prompt library.<\/p>\n<p><img decoding=\"async\" alt=\"JetBrains AI Assistant\" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/12\/ai_assistant.png\"\/><\/p>\n<p>Use AI Assistant in ReSharper C++ as a supplemental feature with a <a href=\"http:\/\/www.jetbrains.com\/ai\" target=\"_blank\" rel=\"noopener\">JetBrains AI Service<\/a> subscription.<\/p>\n<h2 id=\"grammar_and_spelling_checking\">Grammar and spelling checking<\/h2>\n<p><a href=\"https:\/\/lp.jetbrains.com\/grazie-for-software-teams\/\" target=\"_blank\" rel=\"noopener\">JetBrains Grazie<\/a> has become ReSharper\u2019s new built-in grammar and spelling checker. Grazie supports over 20 languages and catches natural language errors within code written in programming languages supported by ReSharper (C#, C++, and VB.NET), in HTML, XML, and XAML markup, and in comments. If you want Grazie to check more natural languages than just English, go to <em>Options | Grammar and Spelling | General<\/em> in ReSharper and adds the ones you need.<br \/>\n<img decoding=\"async\" alt=\"Built-in grammar and spelling checker\" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/12\/grammar_spelling.png\"\/><br \/>\nPlease note that grammar checking is currently not available in doxygen comments.<\/p>\n<h2 id=\"updates_for_cross_platform_code\">Updates for cross-platform code<\/h2>\n<p>With platform-specific or configuration-specific code, you may often find yourself editing currently inactive code blocks inside conditional preprocessor branches. ReSharper C++ 2023.3 brings two major improvements to make this easier:<\/p>\n<ul>\n<li>Code completion in these scenarios now includes symbols from the global scope. Previously, code completion only offered macros in inactive code.<img decoding=\"async\" alt=\"Completion in inactive code\" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/11\/completion_inside_inactive_if.png\"\/><\/li>\n<li><em>Find Usages<\/em> now finds possible usages in inactive code and macro bodies. Previously, if you wanted to find these usages, you had to use <em>Find Usages Advanced<\/em> and investigate textual occurrences.<\/li>\n<\/ul>\n<p>We\u2019ve also introduced support for several new clang intrinsics, such as <code>__is_const()<\/code>, <code>__is_member_pointer()<\/code>, and others, to make ReSharper C++ work better with cross-platform code.<\/p>\n<div style=\"background-color: #f1f6fe; margin-bottom: 40px; padding: 15px; margin-right: 0%; font-size: 14px; line-height: 20px; text-align: justify;\"><em>For cross-platform C and C++ development, you can try an early preview of <a href=\"https:\/\/blog.jetbrains.com\/fr\/clion\/2023\/11\/clion-nova\">CLion Nova<\/a>. It is powered by ReSharper C++ and absolutely free to use at this stage. Simply register and start coding, and don\u2019t forget to send us your feedback!<\/em><\/div>\n<h2 id=\"c_and_cpp_support\">C and C++ support<\/h2>\n<p>ReSharper C++ now correctly handles <code>__has_cpp_attribute<\/code> from C++20\u2019s feature testing to better support attribute annotations in C++ standard libraries.<br \/>\n<img decoding=\"async\" alt=\"__has_cpp_attribute\" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/10\/has_cpp_attribute.png\"\/><br \/>\nWith support for the <code>__pragma (pack)<\/code> syntax used inside macro definitions, ReSharper C++ now correctly computes the sizes of packed structures so that you can rely on the results of code analysis.<\/p>\n<p>Among the updates for C, ReSharper C++ brings new and improved support for the following language features:<\/p>\n<ul>\n<li>C99\u2019s <code>restrict<\/code> type qualifier, which can be used in pointer declarations.<img decoding=\"async\" alt=\"C99\u2019s restrict type qualifier\" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/12\/c_cpp_support_restrict.png\"\/><\/li>\n<li>Type deduction, <code>constexpr,<\/code> and <code>nullptr<\/code> from C23.<\/li>\n<li><code>void<\/code>, specifically when used in the parameter list of a function to indicate that the function doesn\u2019t take any arguments.<\/li>\n<\/ul>\n<h2 id=\"hlsl_and_unreal_engine\">HLSL and Unreal Engine<\/h2>\n<p>HLSL 2021 introduced C++-like template functions and data types. The latest ReSharper C++ update brings full support for HLSL templates:<br \/>\n<img decoding=\"async\" alt=\"HLSL template\" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/11\/hlsl_template.png\"\/><br \/>\nThis release also introduces support for <code>RayQuery<\/code> and brings all of the corresponding flags to the code completion list.<\/p>\n<p>Here are some of the key Unreal Engine updates:<\/p>\n<ul>\n<li>A new inspection will warn you when a dynamic delegate function is not marked with the <code>UFUNCTION<\/code> macro.<img decoding=\"async\" alt=\"Method is not marked with the UFUNCTION \" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/09\/ue_delegate_ufunction.png\"\/><\/li>\n<\/ul>\n<ul>\n<li>The <em>Generate hash function<\/em> action now generates code in the Unreal Engine style.<\/li>\n<\/ul>\n<div style=\"background-color: #f1f6fe; margin-bottom: 40px; padding: 15px; margin-right: 0%; font-size: 14px; line-height: 20px; text-align: justify;\"><em>If you\u2019re interested in a standalone cross-platform IDE for Unreal Engine development, consider <a href=\"https:\/\/www.jetbrains.com\/lp\/rider-unreal\/\" target=\"_blank\" rel=\"noopener\">Rider<\/a>. The Unreal Engine support in Rider and ReSharper C++ is aligned, and you can expect the same improvements in the Rider 2023.3 update.<\/em><\/div>\n<h2 id=\"attributes_for_refining_inspections\">Attributes for refining inspections<\/h2>\n<p>You can use ReSharper-specific C++ attributes to make ReSharper analyze your solution with greater accuracy and insight. In ReSharper C++ 2023.3, we\u2019ve added <code>[[jetbrains::...]]<\/code>, which joins <code>[[rscpp::...]]<\/code> as a prefix available for the <code>[[jetbrains::format]]<\/code>, <code>[[jetbrains::guard]]<\/code>, and <code>[[jetbrains::has_side_effects]]<\/code> attributes.<\/p>\n<p>The new <code>[[jetbrains::pass_by_value]]<\/code> attribute lets you suppress the <em>Pass value by const reference<\/em> inspection for function parameters.<br \/>\n<img decoding=\"async\" alt=\"[[jetbrains::pass_by_value]]\" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/10\/pass_by_value.png\"\/><\/p>\n<p>Learn more about ReSharper-specific attributes in our <a href=\"https:\/\/www.jetbrains.com\/help\/resharper\/Code_Analysis_in_CPP.html?keymap=visual_studio#Attributes\" target=\"_blank\" rel=\"noopener\">online documentation<\/a>.<\/p>\n<h2 id=\"code_analysis\">Code analysis<\/h2>\n<p>We\u2019ve upgraded the bundled clang-tidy binary to Clang 17, bringing updates from the latest LLVM release. Moreover, when clang-tidy checks output additional details alongside the warning text, ReSharper C++ now shows the additional notes in tooltips:<br \/>\n<img decoding=\"async\" alt=\"Additional notes from clang-tidy\" width=\"593\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/10\/clang_tidy_note.png\"\/><\/p>\n<p>Here is the list of the most notable updates for code analysis in ReSharper C++ 2023.3:<\/p>\n<ul>\n<li>Set of inspections for incorrect usages of the <code>export<\/code> keyword in C++20 modules.<img decoding=\"async\" alt=\"Keyword export is redundant\" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/09\/export_keyword.png\"\/><\/li>\n<li>Inspection for usages of multicharacter literals.<\/li>\n<li>Inspection with a quick-fix to remove redundant conditional operators and simplify ternary conditional expressions.<\/li>\n<\/ul>\n<h2 id=\"coding_assistance\">Coding assistance<\/h2>\n<p>The <code>Alt+Insert<\/code> <em>Generate<\/em> menu helps you quickly create boilerplate code. In ReSharper C++ 2023.3, we\u2019ve added a new action to the list, allowing you to generate a destructor.<\/p>\n<p>When invoked in a polymorphic class, the action will insert the required <code>virtual<\/code> and\/or <code>override<\/code> specifiers in accordance with your syntax style settings. You can configure the body style of the generated destructor on the <em>Code Editing | C++ | Code Generation<\/em> options page.<br \/>\n<img decoding=\"async\" alt=\"Generate destructor\" width=\"600\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/10\/generate_destructor.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/10\/generate_destructor.png\"\/><\/p>\n<p>Here are a few of the other notable improvements:<\/p>\n<ul>\n<li>We\u2019ve added support for <code>#pragma region<\/code> and <code>#pragma endregion<\/code>, including inlay hints, the ability to jump between matching directives, and folding and navigation in the <em>File Structure<\/em> window.<\/li>\n<li>Reference inlay hints now have a separate <code>[&gt;&gt;]<\/code> icon so that you can spot forwarding references at a glance.<\/li>\n<li>The new <em>Generate inline definitions<\/em> action lets you quickly generate bodies for several functions simultaneously.<\/li>\n<li>When you invoke the <em>Introduce variable<\/em> or <em>Introduce field<\/em> refactorings on a nested expression, ReSharper C++ now lets you choose the target expression explicitly instead of automatically using the outermost one.<\/li>\n<li>To improve the code navigation experience, symbols that came from macro substitutions are now hidden from <em>Go to<\/em> and the <em>File Structure<\/em> window.<\/li>\n<\/ul>\n<h2 id=\"code_formatting\">Code formatting<\/h2>\n<p>ReSharper C++ 2023.3 introduces several new formatting options:<\/p>\n<ul>\n<li><em>Break line before <\/em><em><code>-&gt;<\/code><\/em><em> in trailing return types<\/em><\/li>\n<li><em>Break line after <\/em><em><code>-&gt;<\/code><\/em><em> in trailing return types<\/em><\/li>\n<li><em>Spaces within empty blocks<\/em><\/li>\n<li><em>Allow comments after <\/em><em><code>{<\/code><\/em><\/li>\n<\/ul>\n<p><img decoding=\"async\" alt=\"New formatting options\" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/12\/code_formatting.png\"\/><\/p>\n<p>We\u2019ve also upgraded the bundled clang-format binary to Clang 17 and implemented support for the <code>InsertNewlineAtEOF<\/code> clang-format setting, which can now be used both when importing formatter settings from a <code>.clang-format<\/code> config and when using clang-format instead of the built-in formatter.<\/p>\n<p>The <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/RSCPP?q=Available%20in:%202023.3*\" target=\"_blank\" rel=\"noopener\">full list of fixed issues<\/a> is available in our issue tracker. You can also check out the latest updates in ReSharper to learn about all of the other changes introduced in this release.<\/p>\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<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com\/resharper-cpp\/download\/?utm_source=twitter&amp;utm_medium=blog_post&amp;utm_campaign=rscpp_release_2023_3\" 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>\n","protected":false},"author":1053,"featured_media":414539,"comment_status":"closed","ping_status":"closed","template":"","categories":[89,907],"tags":[8223,6346,2095],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rscpp\/414594"}],"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\/1053"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=414594"}],"version-history":[{"count":6,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rscpp\/414594\/revisions"}],"predecessor-version":[{"id":464754,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/rscpp\/414594\/revisions\/464754"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/414539"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=414594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=414594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=414594"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=414594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}