{"id":921,"date":"2025-07-25T14:14:30","date_gmt":"2025-07-25T21:14:30","guid":{"rendered":"https:\/\/sysprogs.com\/tutorials\/?p=921"},"modified":"2025-07-25T14:14:30","modified_gmt":"2025-07-25T21:14:30","slug":"advanced-change-reviewing","status":"publish","type":"post","link":"https:\/\/sysprogs.com\/CodeVROOM\/documentation\/features\/diffs\/","title":{"rendered":"Advanced Change Reviewing"},"content":{"rendered":"<p>One of the good uses for AI in large projects is scattered refactoring. A prompt like &#8220;<strong>Route AdvancedScopePresenter to PlacedComponent._Presenter via ctors +update children<\/strong>&#8221; can quickly edit 3 different constructors and update 7 call sites in just about 1 second of time.<\/p>\n<p>If you are not willing to trust every AI edit, and want to review the proposed changes, CodeVROOM provides several mechanisms to make it easier for you:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/diff-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-925\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/diff-2.png\" alt=\"\" width=\"1594\" height=\"922\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/diff-2.png 1594w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/diff-2-300x174.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/diff-2-1024x592.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/diff-2-768x444.png 768w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/diff-2-1536x888.png 1536w\" sizes=\"(max-width: 1594px) 100vw, 1594px\" \/><\/a><\/p>\n<h1>Outline View<\/h1>\n<p>CodeVROOM has built-in awareness of the hierarchical structure of the edited source files. So, it can map the AI-suggested edits to specific classes, methods and other symbols in the source file, and allows viewing the changes in the outline view:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/outline-3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-926\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/outline-3.png\" alt=\"\" width=\"330\" height=\"341\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/outline-3.png 330w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/outline-3-290x300.png 290w\" sizes=\"(max-width: 330px) 100vw, 330px\" \/><\/a>The numbers correspond to separately added\/removed blocks, not lines or characters. E.g. in the example above, the <strong>_Presenter<\/strong> field is completely new, and the Text() constructor got 2 new blocks.<\/p>\n<p>One glance at the outline is often enough to see if the model misunderstood the request, and quickly retry it, or switch to a smarter model.<\/p>\n<h1>Condensed View<\/h1>\n<p>If the AI changes are limited to a handful of fields or methods, CodeVROOM can collapse the unchanged ones, so you won&#8217;t need to scroll half way across the source file to get to the next change:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/condensed-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-929\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/condensed-1.png\" alt=\"\" width=\"1069\" height=\"517\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/condensed-1.png 1069w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/condensed-1-300x145.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/condensed-1-1024x495.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/condensed-1-768x371.png 768w\" sizes=\"(max-width: 1069px) 100vw, 1069px\" \/><\/a><\/p>\n<p>You can always expand them back via the outlining bar to the left, or disable condensed view via the change reviewing bar.<\/p>\n<p>And, unlike viewing raw diffs, this view still presents the hierarchical structure of the code, so you can see that <strong>Text()\u00a0<\/strong>is a constructor for the <strong>Text<\/strong> class inside <strong>PlaceComponent<\/strong> class.<\/p>\n<h1>Side-by-Side Mode<\/h1>\n<p>Trivial code changes are easy to review inline. E.g. it&#8217;s obvious what got removed and what got added here:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/inline.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-930\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/inline.png\" alt=\"\" width=\"991\" height=\"169\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/inline.png 991w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/inline-300x51.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/inline-768x131.png 768w\" sizes=\"(max-width: 991px) 100vw, 991px\" \/><\/a><\/p>\n<p>Others are not so easy:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/inline2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-931\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/inline2.png\" alt=\"\" width=\"711\" height=\"89\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/inline2.png 711w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/inline2-300x38.png 300w\" sizes=\"(max-width: 711px) 100vw, 711px\" \/><\/a>Sure <strong>Presenter<\/strong> got changed, but what was there before? Showing <s>presenter<\/s>Presenter would not make things less confusing. So, CodeVROOM has a switch to quickly toggle between inline diff and side-by-side diff (default hotkey is Ctrl+\\):<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/outofline.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-932\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/outofline.png\" alt=\"\" width=\"1314\" height=\"233\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/outofline.png 1314w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/outofline-300x53.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/outofline-1024x182.png 1024w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/outofline-768x136.png 768w\" sizes=\"(max-width: 1314px) 100vw, 1314px\" \/><\/a><\/p>\n<p>You can use inline view for trivial changes, and side-by-side view if you need more details.<\/p>\n<h1>Navigating Through Changes<\/h1>\n<p>You can quickly accept a change and go to the next one by pressing Ctrl+Enter, or reject one by pressing Ctrl+Backspace. Buttons in the reviewing bar, or context menu will work equally fine. You can also select a block of text covering multiple changes, and accept\/reject them in bulk.<\/p>\n<p>The changes are also color-coded in the scroll bar:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/bar.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-933\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/bar.png\" alt=\"\" width=\"784\" height=\"378\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/bar.png 784w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/bar-300x145.png 300w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/bar-768x370.png 768w\" sizes=\"(max-width: 784px) 100vw, 784px\" \/><\/a>Filled rectangles mean whole lines got added\/removed. Hollow rectangles correspond to in-line changes (green means added tokens, red &#8211; removed tokens, yellow &#8211; replaced tokens). Red and green side-by-side means different types of changes too close together to show distinctly.<\/p>\n<p>The navigation bar view can be especially useful when asking AI to add new fields, or route some data through function calls. The most common AI mistake would be trying to optimize a similar construct elsewhere in the code, and it will immediately get highlighted as either changed or removed token.<\/p>\n<h1>File Filters<\/h1>\n<p>If you are asking AI to do changes to multiple files, CodeVROOM can automatically filter the Files window accordingly:<a href=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/files.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-934\" src=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/files.png\" alt=\"\" width=\"417\" height=\"364\" srcset=\"https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/files.png 417w, https:\/\/sysprogs.com\/tutorials\/wp-content\/uploads\/2025\/07\/files-300x262.png 300w\" sizes=\"(max-width: 417px) 100vw, 417px\" \/><\/a>You can see the changed files, quickly understand what folder\/project they belong to, and even see the number of remaining unconfirmed changes inside them.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the good uses for AI in large projects is scattered refactoring. A prompt like &#8220;Route AdvancedScopePresenter to PlacedComponent._Presenter<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[67],"tags":[],"_links":{"self":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts\/921"}],"collection":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/comments?post=921"}],"version-history":[{"count":1,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts\/921\/revisions"}],"predecessor-version":[{"id":935,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/posts\/921\/revisions\/935"}],"wp:attachment":[{"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/media?parent=921"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/categories?post=921"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sysprogs.com\/tutorials\/wp-json\/wp\/v2\/tags?post=921"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}