문제

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?

도움이 되었습니까?

해결책

Maybe using a parser is not so bad idea?

다른 팁

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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top