How to get the structure of a module by ToolsAPI in Delphi?
Question
I want to get the structure information of a module (pascal unit) by ToolsAPI. just like the structure view of the IDE does.
Classes, Records, Interfaces, Variables/Constants, etc Members, Parameters, etc.
Is there already an easy & efficient way to get these metadata?
Solution
Maybe using a parser is not so bad idea?
OTHER TIPS
AFAIK there is no way to query special structured information for a given file.
What you could do is to access the information in the Structure pane. That way requires the file to be the active module (can be achieved by the OTA), the output depends on the Structure pane settings (Tools | Options... -> Environment Options | Explorer) and if a node is a field, a procedure or whatever needs to be determined over the image index, parent...
This code walks through the Structure pane.
procedure StructureViewToSL(ASL: TStringList);
procedure TreeToSL(ANode: IOTAStructureNode; ASL: TStringList; const APrefix: string);
var
I: Integer;
begin
ASL.Add(APrefix + ANode.Caption);
for I := 0 to ANode.ChildCount - 1 do
TreeToSL(ANode.Child[I], ASL, APrefix + ' ');
end;
var
StructureView: IOTAStructureView;
StructureContext: IOTAStructureContext;
Node: IOTAStructureNode;
I: Integer;
begin
StructureView := BorlandIDEServices as IOTAStructureView;
StructureContext := StructureView.GetStructureContext;
for I := 0 to StructureContext.RootNodeCount - 1 do
begin
Node := StructureContext.GetRootStructureNode(I);
TreeToSL(Node, ASL, '');
end;
end;