cody: report for all nodes

git-svn-id: trunk@35353 -
This commit is contained in:
mattias 2012-02-13 11:36:20 +00:00
parent 94f13cc509
commit 61109853af
2 changed files with 54 additions and 21 deletions

View File

@ -10,8 +10,8 @@ object CodyNodeInfoDialog: TCodyNodeInfoDialog
LCLVersion = '0.9.31'
object ButtonPanel1: TButtonPanel
Left = 6
Height = 42
Top = 419
Height = 30
Top = 431
Width = 569
OKButton.Name = 'OKButton'
OKButton.DefaultCaption = True
@ -26,7 +26,7 @@ object CodyNodeInfoDialog: TCodyNodeInfoDialog
end
object PageControl1: TPageControl
Left = 0
Height = 413
Height = 425
Top = 0
Width = 581
ActivePage = ReportTabSheet
@ -35,18 +35,19 @@ object CodyNodeInfoDialog: TCodyNodeInfoDialog
TabOrder = 1
object ReportTabSheet: TTabSheet
Caption = 'ReportTabSheet'
ClientHeight = 380
ClientWidth = 577
ClientHeight = 386
ClientWidth = 575
object ReportMemo: TMemo
Left = 0
Height = 380
Height = 386
Top = 0
Width = 577
Width = 575
Align = alClient
Lines.Strings = (
'ReportMemo'
)
ReadOnly = True
ScrollBars = ssAutoBoth
TabOrder = 0
end
end

View File

@ -50,8 +50,10 @@ type
ReportTabSheet: TTabSheet;
procedure FormCreate(Sender: TObject);
private
procedure AddReportAboutBaseTypeCache(Report: TStringList;
procedure ReportBaseTypeCache(Report: TStringList;
Tool: TFindDeclarationTool; Node: TCodeTreeNode);
procedure ReportAllNodes(Report: TStringList;
Tool: TFindDeclarationTool);
public
procedure UpdateReport;
end;
@ -83,7 +85,7 @@ begin
UpdateReport;
end;
procedure TCodyNodeInfoDialog.AddReportAboutBaseTypeCache(Report: TStringList;
procedure TCodyNodeInfoDialog.ReportBaseTypeCache(Report: TStringList;
Tool: TFindDeclarationTool; Node: TCodeTreeNode);
procedure ReportNode(Prefix: string; ATool: TFindDeclarationTool;
@ -152,6 +154,27 @@ begin
end;
end;
procedure TCodyNodeInfoDialog.ReportAllNodes(Report: TStringList;
Tool: TFindDeclarationTool);
var
Node: TCodeTreeNode;
s: String;
begin
Report.Add('');
Report.Add('Nodes:');
if Tool=nil then exit;
if Tool.Tree=nil then exit;
Node:=Tool.Tree.Root;
while Node<>nil do begin
s:=GetIndentStr(Node.GetLevel*2);
s:=s+Node.DescAsString;
s:=s+',Start='+IntToStr(Node.StartPos)+'='+Tool.CleanPosToStr(Node.StartPos);
s:=s+',End='+IntToStr(Node.EndPos)+'='+Tool.CleanPosToStr(Node.EndPos);
Report.Add(s);
Node:=Node.Next;
end;
end;
procedure TCodyNodeInfoDialog.UpdateReport;
var
SrcEdit: TSourceEditorInterface;
@ -185,21 +208,30 @@ begin
sl.Add('Unit='+Tool.MainFilename);
Tool.BuildTreeAndGetCleanPos(trTillCursor,lsrEnd,CursorPos,CleanPos,
[btSetIgnoreErrorPos]);
sl.Add('Scanner.ScannedRange='+dbgs(Tool.Scanner.ScannedRange));
sl.Add('Tool.ScannedRange='+dbgs(Tool.ScannedRange));
Node:=Tool.FindDeepestNodeAtPos(CleanPos,false);
if Node=nil then begin
sl.Add('Error: no node at cursor');
exit;
end;
sl.Add('Node.Desc='+Node.DescAsString);
sl.Add('Node.SubDesc=%'+binStr(Node.SubDesc,16));
sl.Add('Node.StartPos='+dbgs(Node.StartPos)+'='+Tool.CleanPosToStr(Node.StartPos));
sl.Add('Node.EndPos='+dbgs(Node.EndPos)+'='+Tool.CleanPosToStr(Node.EndPos));
s:=dbgstr(Tool.Src,Node.StartPos,Node.EndPos-Node.StartPos);
if length(s)>100 then
s:=copy(s,1,48)+'...'+copy(s,length(s)-47,48);
sl.Add('Node Src="'+s+'"');
try
Tool.RaiseCursorOutsideCode(CursorPos);
except
on E: Exception do begin
sl.Add('Error: '+E.Message);
end;
end;
end else begin
sl.Add('Node.Desc='+Node.DescAsString);
sl.Add('Node.SubDesc=%'+binStr(Node.SubDesc,16));
sl.Add('Node.StartPos='+dbgs(Node.StartPos)+'='+Tool.CleanPosToStr(Node.StartPos));
sl.Add('Node.EndPos='+dbgs(Node.EndPos)+'='+Tool.CleanPosToStr(Node.EndPos));
s:=dbgstr(Tool.Src,Node.StartPos,Node.EndPos-Node.StartPos);
if length(s)>100 then
s:=copy(s,1,48)+'...'+copy(s,length(s)-47,48);
sl.Add('Node Src="'+s+'"');
AddReportAboutBaseTypeCache(sl,Tool,Node);
ReportBaseTypeCache(sl,Tool,Node);
ReportAllNodes(sl,Tool);
end;
except
on e: Exception do CodeToolBoss.HandleException(e);
end;