PrestoSoft Blog :: Home

Friday, January 06, 2023

ExamDiff Pro 14.0: Portable Version

Version 14.0 will introduce the ability to run ExamDiff Pro as a portable application. This means that you'll be able to run it without installing it, and without modifying your Windows configuration in any way (i.e. without moving any files anywhere or making any changes to your Windows Registry). Portable mode can be useful in situations in which you want to run ExamDiff Pro on a computer that is not yours, if you want to run ExamDiff Pro off a USB drive, etc.

The portable version of ExamDiff Pro will be a separate ZIP file that you download separately from the regular, non-portable version. Here's what the contents of this ZIP file look like:

The portable version of ExamDiff Pro supports all of the same features as the regular version of ExamDiff Pro except for the Windows Explorer Shell extension, which requires installation to function.

You can tell if you are currently running the portable version of ExamDiff Pro from the Help | About dialog:

Labels: , ,

Wednesday, January 04, 2023

ExamDiff Pro 14.0: Automatic Programming Language Detection

ExamDiff Pro 14.0 will introduce a much-requested feature: automatically detecting document types based on file content. In other words, ExamDiff Pro will now automatically detect programming languages for source code files, in turn enabling features like syntax highlighting and the scope bar. This feature is works for all built-in document types in ExamDiff Pro and is powered by the the open-source Guesslang machine-learning library.

Automatic document type detection is turned on by default and can be toggled in Options | Document types:

Now, if we paste some TypeScript code into a blank comparison window and it will automatically get detected as TypeScript, with syntax highlighting and scope bar features enabled:

More precisely, auto-detection will happen in the following situations (when the Automatically detect file type for unknown extensions option is enabled):
  • a file is compared either without a extension or with an extension that doesn't correspond to any known ExamDiff Pro doctype
  • a comparison is initiated from clipboard contents
  • text is pasted into a comparison window from the clipboard
Note that plain-text files (or any other files that Guesslang isn't sure about) will be auto-detected as the Default/Plain Text doctype, which disables features like syntax highlighting. This means that for files that aren't source code, ExamDiff Pro will continue to work as usual even with doctype auto-detection turned on.

Even if you have disabled the Automatically detect file type for unknown extensions option, you can also manually trigger doctype auto-detection at any time by selecting Set Document Type | Auto Detect from the context menu.

Lastly, note that this feature is already enabled in DiffNow, our free online file comparison tool powered by ExamDiff Pro. Simply paste any source code into it and DiffNow will auto-detect the doctype during comparison.

Labels: , , ,

Sunday, November 27, 2022

ExamDiff Pro 14.0: Matching File Structures for Comparison

ExamDiff Pro 14.0 will introduce a new advanced comparison option: the ability to match file structures (functions, classes, etc.) for comparison. This is a fairly advanced feature that can result in more clear comparison results for programmers.

Like the scope bar introduced in ExamDiff Pro 13.0, structure matching is powered by the open-source TreeSitter library, and will be available for all major programming language doctypes defined in ExamDiff Pro, including C++, C#, Java, JavaScript, and more.

Let's illustrate this feature by showing a couple of examples of situations in which it can be useful.

To start with, here's ExamDiff Pro comparing the before-and-after of simple refactor of a JavaScript function:

This diff looks ugly and doesn't do a good job of capturing what happened — that is, some functionality from the generateIDForObject() function got factored out into a separate function. The problem is that the closing brace of the generateIDForObject() function in the left file is getting matched to the wrong closing brace in the second file. Because there are not a lot of completely identical lines between the two files, ExamDiff Pro's comparison algorithm doesn't have a good way to decide which closing brace in the second file to match to the one in the first file, and it ends up making a match that results in a confusing diff.

Ideally, we would like to match the closing braces of the generateIDForObject() function in each file together. We can do this ourselves using the manual synchronization feature to link these lines together manually. Now the diff looks much clearer:

But drawing links between lines ourselves kind of defeats the purpose of using a file comparison tool. Is there any way that ExamDiff Pro could automatically determine that these lines naturally should be linked together, based on the fact that they correspond to the boundaries of the same function?

This is where the Match file structures for comparison feature comes in. We can open up Options | Text Comparison | Advanced and check the Match file structures for comparison box:

Then re-compare these files, and voila! ExamDiff Pro is able to give us exactly what we want, automatically:

So how does this work? Basically ExamDiff Pro does the same file structure parsing that it does for generating the scope bar, and uses its knowledge of which functions, classes, and other structures correspond to which between the two files to draw "invisible" links between corresponding starting and ending lines of each structure, in a similar way to how fuzzy line matching works. It's as though we went through the files and drew links at the start and end of each matching function, except ExamDiff Pro was nice enough to do all that work for us instead.

In fact, we can even visualize these "invisible" links, using the new "Show fuzzy/structure links" option under Options | Display:

Turning this option on, we can now see structure links (as well as fuzzy-matching links) between lines in the splitter, indicated by a lighter color than manual synchronization links:

Let's try a slightly more complicated example, this time showing a refactor involving overloaded C++ functions. Here's what it looks like without the Match file structures for comparison option:

This diff look a little off and doesn't really indicate what happened in the refactor — namely, one overload of GetNavigatableDiffCount() got deleted and one overload got modified. We would expect to see the GetNavigatableDiffCount(BOOL bUnresolvedConflictsOnly) method definition in the second file be matched with the GetNavigatableDiffCount(BOOL bUnresolvedConflictsOnly, int nPass) definition in the first file, but instead it's being matched with the GetNavigatableDiffCount() definition line. Without structural matching, the best ExamDiff Pro can do in terms of matching heuristically is fuzzy matching individual lines. This often gives the expected result, but here it doesn't, because the GetNavigatableDiffCount(BOOL bUnresolvedConflictsOnly, int nPass) method definition is broken into multiple lines in the first file but is a single line in the second file, so fuzzy matching can't tell that these definitions "belong together".

Fortunately for us, matching file structures comes to the rescue again! If we enable Match file structures for comparison, ExamDiff Pro is able to correctly deduce which function definitions are a closer match and links these functions' start and end lines accordingly:

Labels: , ,

Sunday, August 28, 2022

ExamDiff Pro 13.0 Released

We are pleased to announce that we've released ExamDiff Pro 13.0.

Here's what's new in this version:
  • Improved Table Comparison
  • Scope Bar (Class/Function Detection)
  • Windows 11 support
  • Ability to reset pane layout to default
  • View commands to zoom in/out views
  • Ability to copy HEX dump of data in binary comparison
  • Ability to use advanced diff algorithms in binary comparison
  • Option to show selection check boxes in directory comparison views
  • Suppress dark mode for diff report printing
  • Ability to skip resolved differences
You can find more details about ExamDiff Pro 13.0, as well as a download link, here, and the complete list of changes here.

Labels: , ,

Thursday, April 07, 2022

ExamDiff Pro 13.0 Beta

We are pleased to announce a public beta program for ExamDiff Pro 13.0.
You can download ExamDiff Pro 13.0 Beta for 32-bit Windows and for 64-bit Windows. The upgrade is free for all users who purchased ExamDiff Pro less than 12 months before this release (or more, depending on the number of maintenance years purchased).

Here's what's new in ExamDiff Pro 13.0 (as compared to 12.0):

Improved Table Comparison

Among the new features coming to ExamDiff Pro 13.0 is improved support for comparing tabular data - that is, files that are delimited by commas, tabs, or other characters. This version introduces a brand-new Table Comparison mode, with built-in functionality to sort and ignore columns and the ability to differentiate columns by color to better view tabular data.

For more information, see our blog entry about table comparison.

Scope Bar (Class/Function Detection)

ExamDiff Pro 13.0 introduces an exciting and long-awaited new feature: the ability to navigate through classes, functions, and other code blocks, via a new scope bar. This feature is powered by the open-source TreeSitter library, and is available for all major programming language doctypes defined in ExamDiff Pro, including C++, C#, Java, JavaScript, and more.

For more information, see our blog entry about scope bar.

Other Additions In ExamDiff Pro 13.0
  • Windows 11 support
  • Ability to reset pane layout to default
  • View commands to zoom in/out views
  • Ability to copy HEX dump of data in binary comparison
  • Ability to use advanced diff algorithms in binary comparison
  • Option to show selection check boxes in directory comparison views
  • Suppress dark mode for diff report printing
  • Ability to skip resolved differences

Labels: , ,