While writing a lot generic code, I decided that probably a very generics-oriented unit might look nicer in delphi mode. Just my opinion, but declaring generic types and specialization looks obvious from context (specifically the use of a type variable gives it away).
I would argue the opposite.
Within the "type" declaration block it is possible to argue that the <> indicate a generic. But they already are easier to overlook, than the dedicated "specialize" (or "generic") keyword.
When you however specialize inside the code (which I personally dislike... / but generic function require it), then you could have code like
begin
if a<b>(c and d) then foo;
end;
And, if you don't know what the identifiers are, then this could be
var a,b: cardinal; c,d: boolean;
begin
if a<b>(c and d) then foo;
end;
or it could be
function A<B>(x:B): boolean; begin {} end;
type b=cardinal; var c,d: cardinal;
begin
if a<b>(c and d) then foo;
end;
So, in mode Delphi, you can't tell from the syntax alone. In mode objfpc the "specialize" keyword would tell you.
Add to that overloaded operators, so "<" (smaller) can return other than boolean, and then the use of ">" (greater) after such an expression becomes more plausible (than the above "bool > bool" comparison
{$Mode objfpc} // declare in diff unit
operator < (a:byte; b:pointer): integer; begin end;
And generics allow a lot of tricks of their own, to produce "interesting" syntactic constructs....
So, detecting them, just based on the presence of <>, that can be challenging.