{"id":11589,"date":"2017-06-28T06:58:50","date_gmt":"2017-06-28T05:58:50","guid":{"rendered":"https:\/\/sysprogs.com\/w\/?p=11589"},"modified":"2017-06-28T06:58:50","modified_gmt":"2017-06-28T05:58:50","slug":"clang-intellisense-improvements-in-visualgdb-5-3-preview-2","status":"publish","type":"post","link":"https:\/\/sysprogs.com\/w\/clang-intellisense-improvements-in-visualgdb-5-3-preview-2\/","title":{"rendered":"Clang IntelliSense Improvements in VisualGDB 5.3 Preview 2"},"content":{"rendered":"<p>Today we are excited to announce the second preview of VisualGDB 5.3 that introduces several improvements to the Clang\u00a0IntelliSense engine. In this post I will show you the highlights of the new engine.<!--more--><\/p>\n<h2>Performance Improvements<\/h2>\n<p>One of the\u00a0most frequent feedback we received on the Clang IntelliSense was relatively slow performance for huge\u00a0projects. So\u00a0we made the\u00a0VisualGDB 5.3 IntelliSense engine\u00a0automatically\u00a0diagnose the parsing bottlenecks and offers ways of improving the performance. If you ever\u00a0run into slow\u00a0performance with Clang IntelliSense, click the timing button in the top right corner of the source file:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/pchsetup.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11590 size-full\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/pchsetup.png\" alt=\"pchsetup\" width=\"879\" height=\"325\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/pchsetup.png 879w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/pchsetup-300x111.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/pchsetup-768x284.png 768w\" sizes=\"(max-width: 879px) 100vw, 879px\" \/><\/a><\/p>\n<p>If will show\u00a0where exactly did the time go and will suggest easy ways to improve the parsing speed. E.g. if your sources\u00a0intermix #include&lt;&gt; directories with other code so the included headers don&#8217;t get automatically precompiled, you can click the &#8220;Precompile headers&#8221; link and\u00a0quickly setup an IntelliSense-only\u00a0precompiled header file\u00a0that will include the heaviest headers. Once it gets precompiled, IntelliSense won&#8217;t spend much time reparsing those\u00a0headers again.<\/p>\n<p>Another source of\u00a0slowness was the &#8220;Analyzing References&#8221; stage that cross-referenced the source file to ensure instant operation of &#8220;Go to definition&#8221; and &#8220;Find all references&#8221;. With huge files including many headers, analyzing all references in all headers could take too much time. If this ever happens now,\u00a0VisualGDB will offer enabling lightweight reference analysis mode that will skip the heavy analysis unless you are explicitly searching for all references:\u00a0<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/refs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11591\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/refs.png\" alt=\"refs\" width=\"879\" height=\"332\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/refs.png 879w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/refs-300x113.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/refs-768x290.png 768w\" sizes=\"(max-width: 879px) 100vw, 879px\" \/><\/a><\/p>\n<p>We have\u00a0also made the &#8220;Go to definition&#8221; command\u00a0more tolerant to changes in common header files.\u00a0Large-scale updates to your code base will no longer trigger\u00a0the lengthy rebuild of the IntelliSense cache\u00a0if the\u00a0Clang engine manages to locate the correct source file using the old cache and only rebuild\u00a0that single file.<\/p>\n<h2>Smart Integrated Comments<\/h2>\n<p>If you are using Doxygen to document your code, we&#8217;ve got good news for you.\u00a0Typing &#8220;\/\/!&#8221; or &#8220;\/*!&#8221; in front of a function\/method declaration will automatically generate a\u00a0structured comment block with\u00a0templates for function arguments and return value description:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/comments.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11592\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/comments.png\" alt=\"comments\" width=\"506\" height=\"202\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/comments.png 506w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/comments-300x120.png 300w\" sizes=\"(max-width: 506px) 100vw, 506px\" \/><\/a>This feature is powered by Visual Studio Code Snippet mechanism, so you can conveniently jump between\u00a0different parts of the generated comment by pressing &lt;TAB&gt;.\u00a0The comment templates are fully\u00a0customizeable and\u00a0can be changed by editing files in\u00a0<strong>C:\\Program Files (x86)\\Sysprogs\\VisualGDB\\CommentTemplates<\/strong>.<\/p>\n<p>If you are using markers like TODO in your comments,\u00a0VisualGDB will now automatically\u00a0recognize them in your source files and will display them in the Tasks window:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/tasklist.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11594\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/tasklist.png\" alt=\"tasklist\" width=\"596\" height=\"304\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/tasklist.png 596w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/tasklist-300x153.png 300w\" sizes=\"(max-width: 596px) 100vw, 596px\" \/><\/a><\/p>\n<p>You can tell VisualGDB\u00a0the exact list of keywords to look for\u00a0and choose whether you want to\u00a0load the comments from open files only, like\u00a0the regular Visual C++ does, or\u00a0scan the entire project:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/scanprj.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11595\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/scanprj.png\" alt=\"scanprj\" width=\"793\" height=\"434\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/scanprj.png 793w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/scanprj-300x164.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/scanprj-768x420.png 768w\" sizes=\"(max-width: 793px) 100vw, 793px\" \/><\/a><\/p>\n<h2>Other Improvements<\/h2>\n<p>We have also\u00a0introduced\u00a0many small improvements requested by our users. \u00a0Clang IntelliSense\u00a0now fully supports the Peek Definition command:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/peek.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11596\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/peek.png\" alt=\"peek\" width=\"814\" height=\"551\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/peek.png 814w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/peek-300x203.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/peek-768x520.png 768w\" sizes=\"(max-width: 814px) 100vw, 814px\" \/><\/a><\/p>\n<p>Overriding\u00a0base class methods\u00a0now works just like in C#: type &#8220;override&#8221; inside the class definition, select a method to override and VisualGDB will automatically generate a declaration and an empty definition for it:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/override.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-11597\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/override-1024x230.png\" alt=\"override\" width=\"474\" height=\"106\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/override-1024x230.png 1024w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/override-300x67.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/override-768x173.png 768w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/override.png 1090w\" sizes=\"(max-width: 474px) 100vw, 474px\" \/><\/a><\/p>\n<p>Managing warnings is now easier as well, just select &#8220;Ignore this instance of the issue&#8221; in the smart tag menu and\u00a0VisualGDB will automatically insert a &#8220;#pragma GCC diagnostic&#8221; block around the offending line:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/warn.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11598\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/warn.png\" alt=\"warn\" width=\"987\" height=\"147\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/warn.png 987w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/warn-300x45.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/warn-768x114.png 768w\" sizes=\"(max-width: 987px) 100vw, 987px\" \/><\/a><\/p>\n<h2>Advanced CMake Project Improvements<\/h2>\n<p>The new Preview 2 build\u00a0contains several improvements to the new CMake Project Subsystem including better sorting of targets coming from multiple projects, improved support for remote projects accessed directly over SSH and convenient menu commands to build individual directories:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/cmake.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-11599\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/cmake-1024x671.png\" alt=\"cmake\" width=\"474\" height=\"311\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/cmake-1024x671.png 1024w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/cmake-300x197.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/cmake-768x503.png 768w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/06\/cmake.png 1129w\" sizes=\"(max-width: 474px) 100vw, 474px\" \/><\/a><\/p>\n<h2>Try it out<\/h2>\n<p>VisualGDB 5.3 Preview 2 is out. <a href=\"http:\/\/visualgdb.com\/download\/\">Try it out today<\/a> and don&#8217;t forget to send us your feedback via the <a href=\"http:\/\/visualgdb.com\/support\/\">support\u00a0interface<\/a> or our <a href=\"https:\/\/sysprogs.com\/w\/forums\/forum\/visualgdb\/\">forum<\/a>. Enjoy!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today we are excited to announce the second preview of VisualGDB 5.3 that introduces several improvements to the Clang\u00a0IntelliSense engine. In this post I will show you the highlights of the new engine.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"categories":[1],"tags":[422],"_links":{"self":[{"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/posts\/11589"}],"collection":[{"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/comments?post=11589"}],"version-history":[{"count":1,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/posts\/11589\/revisions"}],"predecessor-version":[{"id":11600,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/posts\/11589\/revisions\/11600"}],"wp:attachment":[{"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/media?parent=11589"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/categories?post=11589"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/tags?post=11589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}