
[C110] Regression from 2015.11upd2 to 2015.11upd6
This construct was correctly marked with C110 in 2015.11upd2 but is no longer marked in 2015.11upd6
private property sNameLogPrefix: string read sGetNameLogPrefixF;Although the getter name is similar, it doesn't adhere to the "strict" Get... rule

[W507] Regression from 2015.11upd2 to 2015.11upd6
This construct was correctly marked with W507 in 2015.11upd2 but is no longer marked in 2015.11upd6
if xRight then TextOut(Round((YAchse.RectTitle.Right + YAchse.RectTitle.Left - TextExtent(sValue).cy) / 2), Round((YAchse.RectTitle.Bottom + YAchse.RectTitle.Top + TextExtent(sValue).cx) / 2), sValue) else TextOut(Round((YAchse.RectTitle.Right + YAchse.RectTitle.Left - TextExtent(sValue).cy) / 2), Round((YAchse.RectTitle.Bottom + YAchse.RectTitle.Top + TextExtent(sValue).cx) / 2), sValue);

Should public fields really start with F?
type
TSomeClass = class
private
FSomeField: integer;
procedure SetSomeField(_Value: integer);
public
SomeOtherField: integer; // <- C107 here
property SomeField read FSomeField write SetSomeField;
end;
I question whether there should actually be a warning. Isn't it common practice to have some fields of a class publicly accessible and then not prefix them, so, if need arises, one could simply replace them with a property that has a getter and/or setter method without having to change code that accesses it?

Warning on unused parameters in a method call
Warning on unused parameters in a method call
function Test(const AString: string) : integer;
begin
Result := 10;
end;
AString is not used...
This is difficult because of virtual methods and event handlers, etc Too often you don't use a parameter but you must declare it.

Conventions for inherited calls
Yesterday we came accross a "nice" bug in our software which was hidden by inherited calls in constructors/destructors not being symmetrical.
constructor x.create; begin inherited; CreateLocalObjects; end; destructor x.destroy; begin inherited; <-- possible ouch CleanupLocalObjects; end;
Most of the time nothing bad happens here if it's just basic create and destroy of local objects, but if "CleanupLocalObjects" touches anything belonging to the inherited object, unpredictable results may happen.
Would it be possible to add the following two conventions:
- the inherited call in a constructor should be the first statement after "begin"
- the inherited call in a destructor should be the last statement before "end"

Make it easier to run FixInsight only on the current unit
The way I use it is first run it on the whole project, then fix the issues one unit at a time, re-running it for that one unit several times.

[W527] False positive
And another one, better hidden this time :)
In my particular case FMyObject is an XML Node with a 'Text' child node, whose 'Text' property is returned. Simple example:
function TObject.GetText: String; begin Result := FSubObject.Text.Text end;
It's clear that in this case it is not the TObject.Text property which is accessed and may cause a recursion. It is the subsubobjects text property :)
I think W527 should just trigger on these two cases:
function TObject.GetText: String; begin Result := Text end; function TObject.GetText: String; begin Result := Self.Text end;
Or did I miss something?
I have not tried what FixInsight reports, when FMyObject is an XML Node with a 'XYZ' child node, whose 'Text' property is returned or if FMyObject is an XML Node with a 'Text' child node, whose 'XYZ' property is returned.
function TObject.GetText: String; begin Result := FSubObject.XYZ.Text end; function TObject.GetText: String; begin Result := FSubObject.Text.XYZ end;

Add warning when a local constant hides class constant
(very simplistic) example:
type
TMyObject = class
private
const
cTEST = 20;
private
procedure MyMethod;
end;
procedure TMyObject.MyMethod;
const
cTEST = 30;
begin
ShowMessage(IntToStr(cTEST));
end;
A warning should appear on "cTEST = 30;" saying that it hides "cTEST = 20;"

Hint (warning?) on empty try/finally blocks
Maybe an extension to http://fixinsight.userecho.com/topic/1052114-hint-on-unnecessary-beginend-block/, in that for Win32, try-finally set ups are expensive, so removing them would make the application perform better.

[W503] False positive when assigning DB field to another DB field
DataSet.FieldByName('FIELD1').Text := DataSet.FieldByName('FIELD2').Text;
This might also apply to assigning an array property of an instance to another index of the same property and instance, but I haven't checked this, but this is something common. (e.g. list swap, exchange)
Customer support service by UserEcho