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?

Was it helpful?

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;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top