mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-08 00:02:03 +02:00
codetools: linkscanner: add link for skipped code
git-svn-id: trunk@38525 -
This commit is contained in:
parent
04176d39b8
commit
4a5400aa16
@ -2649,14 +2649,14 @@ begin
|
||||
CleanPos:=0;
|
||||
exit(-2);
|
||||
end;
|
||||
//DebugLn(['TCustomCodeTool.CaretToCleanPos A ',Caret.Code.Filename,' ',Caret.Y,',',Caret.X,' ',Caret.Code.SourceLength]);
|
||||
//DebugLn(['TCustomCodeTool.CaretToCleanPos A ',Caret.Code.Filename,' ',Caret.Y,',',Caret.X,' SourceLength=',Caret.Code.SourceLength]);
|
||||
Caret.Code.LineColToPosition(Caret.Y,Caret.X,CleanPos);
|
||||
//DebugLn(['TCustomCodeTool.CaretToCleanPos B ',CleanPos,',',Caret.Y,',',Caret.X,' ',dbgstr(copy(Caret.Code.Source,CleanPos-20,20)),'|',dbgstr(copy(Caret.Code.Source,CleanPos,20))]);
|
||||
//DebugLn(['TCustomCodeTool.CaretToCleanPos B Clean=',CleanPos,',Y=',Caret.Y,',X=',Caret.X,' ',dbgstr(copy(Caret.Code.Source,CleanPos-20,20)),'|',dbgstr(copy(Caret.Code.Source,CleanPos,20))]);
|
||||
if (CleanPos>=1) then
|
||||
Result:=Scanner.CursorToCleanPos(CleanPos,Caret.Code,CleanPos)
|
||||
else
|
||||
Result:=-2; // x,y beyond source
|
||||
//DebugLn('TCustomCodeTool.CaretToCleanPos C CleanPos=',CleanPos,' Result=',Result);
|
||||
//DebugLn(['TCustomCodeTool.CaretToCleanPos C CleanPos=',CleanPos,' Result=',Result]);
|
||||
end;
|
||||
|
||||
function TCustomCodeTool.CodePosToCleanPos(const CodePos: TCodePosition; out
|
||||
|
@ -53,7 +53,7 @@ uses
|
||||
{$IFDEF MEM_CHECK}
|
||||
MemCheck,
|
||||
{$ENDIF}
|
||||
Classes, SysUtils, CodeToolsStrConsts, CodeToolMemManager, FileProcs,
|
||||
Classes, SysUtils, math, CodeToolsStrConsts, CodeToolMemManager, FileProcs,
|
||||
AVL_Tree, ExprEval, SourceLog, KeywordFuncLists, BasicCodeTools;
|
||||
|
||||
const
|
||||
@ -755,8 +755,6 @@ begin
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
{ TLinkScanner }
|
||||
|
||||
procedure TLinkScanner.AddLink(ASrcPos: integer; ACode: Pointer;
|
||||
@ -1698,11 +1696,13 @@ begin
|
||||
end;
|
||||
// links
|
||||
for i:=0 to LinkCount-1 do begin
|
||||
DebugLn(' Link ',dbgs(i),':'
|
||||
,' CleanedPos=',dbgs(FLinks[i].CleanedPos)
|
||||
,' SrcPos=',dbgs(FLinks[i].SrcPos)
|
||||
DebugLn([' Link ',i,':'
|
||||
,' CleanedPos=',FLinks[i].CleanedPos
|
||||
,' SrcPos=',FLinks[i].SrcPos
|
||||
,' Code=',dbgs(FLinks[i].Code)
|
||||
);
|
||||
,' Kind=',dbgs(FLinks[i].Kind)
|
||||
,' Src="',dbgstr(CleanedSrc,FLinks[i].CleanedPos,Min(50,LinkSize(i))),'"'
|
||||
]);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -3554,6 +3554,20 @@ begin
|
||||
inc(CleanedLen);
|
||||
FCleanedSrc[CleanedLen]:=#3;
|
||||
end else begin
|
||||
if (LinkCount>0) and (FLinks[FLinkCount-1].CleanedPos=CleanedLen+1) then begin
|
||||
// last link is empty
|
||||
dec(FLinkCount);
|
||||
{$IFDEF ShowUpdateCleanedSrc}
|
||||
debugln(['TLinkScanner.AddSkipComment SkipEnd: removing empty link: ',dbgs(FLinks[FLinkCount].Kind)]);
|
||||
{$ENDIF}
|
||||
if (LinkCount>0) and (FLinks[FLinkCount-1].Kind=slkSkipStart) then begin
|
||||
// remove unneeded SkipStart
|
||||
dec(FLinkCount);
|
||||
CleanedLen:=FLinks[FLinkCount].CleanedPos;
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
AddLink(1,nil,slkSkipEnd);
|
||||
inc(CleanedLen);
|
||||
FCleanedSrc[CleanedLen]:=#3;
|
||||
@ -3740,6 +3754,7 @@ begin
|
||||
{$ENDIF}
|
||||
UpdateCleanedSource(SrcPos-1);
|
||||
AddSkipComment(true);
|
||||
AddLink(SrcPos,Code);
|
||||
|
||||
// parse till $else, $elseif or $endif
|
||||
FSkipIfLevel:=IfLevel;
|
||||
|
Loading…
Reference in New Issue
Block a user