The static code analysis performed by FixInsight can help you find bugs early in the development process. You will be able to identify potential errors and oddities. Think of FixInsight as a compiler extension that lets you instantly find issues in your code which you would spend hours debugging otherwise. Find bugs in your code before your customers do.
Examine your source code and get a list of issues found
Improve application reliability and quality
Reduce overall costs of development, maintenance and support
In addition to producing a list of warnings when issues are found, the tool also checks your code for coding convention compliance. You can find a full list of code patterns handled by FixInsight in documentation. You even can integrate FixInsight with your build process using the command-line tool, it has a whole set of options that will let you run analysis automatically.
FixInsight supports RAD Studio XE8 as well as the older IDE releases (2006—XE8). After installation FixInsight adds a menu item in the RAD Studio 'Project' menu. In Delphi 2010 and above it also adds a menu in the project manager's context menu.
Command Line Tool
The FixInsight command line tool (FixInsightCL.exe) may be used during the build process or with continuous integration.
--project=XXX.dpr (a project to analyze)
--defines=XXX;YYY;ZZZ (compiler defines separated by semicolon)
--output=XXX (write output to a file)
--settings=XXX.ficfg (override project settings)
--xml (format output as xml)
A --project parameter is mandatory, other parameters are optional.
W501 Empty EXCEPT block
The empty except block warning means the exception is caught, but not handled correctly. Which in turn means the cause of the exception that occurred in the try block is still there and affecting the app is executed. Want to produce a chain reaction of errors that are impossible to trace? An empty except block is a perfect way to achieve this.
W503 Assignment right hand side is equal to its left hand side
While such statement do not affect performance or produce errors, they are potentially dangerous if some other expression was expected on the right hand side. Of course, no one normally writes code like this, but copy-pasted code may end up with this type of assignment.
W504 Missing INHERITED call in constructor/destructor
One of cool things OOP has is inheritance. You don’t have to write the same methods over and over, you can re-use the constructors, methods and event handlers of the parent. The back side of the coin is that you have to call inherited destructors too. Otherwise, you end up with memory leaks as a minimum.
Delphi XE8 support
Introduced rule W522 ("Destructor without an override directive")
Introduced rule W523 ("Interface declared without a GUID")
Improved rules W504, W513, W517, W521