Jedi code format: fix wrong error line number when formating selection.

This commit is contained in:
DomingoGP 2024-12-08 12:19:42 +01:00
parent 52c27a7cd9
commit f41f2bded2
2 changed files with 31 additions and 5 deletions

View File

@ -294,7 +294,6 @@ var
sourceCode: string;
BlockBegin, BlockEnd: TPoint;
fcConverter: TConverter;
lineStartOffset,lineEndOffset: integer;
wi,EndY: integer;
outputstr: string;
begin
@ -316,8 +315,7 @@ begin
fcConverter.GuiMessages := false; //true;
fcConverter.FileName := SourceEditorManagerIntf.ActiveEditor.FileName;
fcConverter.OnIncludeFile := OnIncludeFile;
FindLineOffsets(sourceCode,BlockBegin.Y,BlockEnd.Y,lineStartOffset,lineEndOffset);
fcConverter.ConvertPart(lineStartOffset, lineEndOffset, True);
fcConverter.ConvertRange(BlockBegin.Y, BlockEnd.Y, true);
if not fcConverter.ConvertError then
begin
wI := length(fcConverter.OutputCode);

View File

@ -51,7 +51,7 @@ type
fsInputCode, fsOutputCode: String;
fsFileName: String;
fiFirstLineNumber: integer; //used by ConvertUsingFakeUnit
fiFirstSelectionLineNumber: integer;
{ classes to lex and parse the source }
fcTokeniser: TBuildTokenList;
fcBuildParseTree: TBuildParseTree;
@ -89,6 +89,8 @@ type
procedure Convert;
procedure ConvertPart(const piStartIndex, piEndIndex: Integer;
aOnlyOutputSelection: boolean=false);
procedure ConvertRange(piStartLineNumber, piEndLineNumber: Integer;
aOnlyOutputSelection: Boolean = false);
procedure ConvertUsingFakeUnit(AFirstLineNumber:integer = 1);
procedure CollectOutput(const pcRoot: TParseTreeNode);
@ -139,6 +141,7 @@ begin
fcSingleProcess := nil;
fbGuiMessages := True; // use Ui to show parse errors by default
fiFirstLineNumber := 1;
fiFirstSelectionLineNumber:= MaxInt;
end;
destructor TConverter.Destroy;
@ -255,6 +258,8 @@ begin
end;
end;
finally
fiFirstLineNumber := 1;
fiFirstSelectionLineNumber:= MaxInt;
if lcTokenList<>nil then
begin
lcTokenList.OwnsObjects := True;
@ -377,13 +382,19 @@ end;
procedure TConverter.SendStatusMessage(const psUnit, psMessage: String; const peMessageType: TStatusMessageType; const piY, piX: Integer);
var
lsUnit: string;
liY:integer;
begin
if Assigned(fOnStatusMessage) then
begin
lsUnit := psUnit;
if lsUnit = '' then
lsUnit := fsFileName;
fOnStatusMessage(lsUnit, psMessage, peMessageType, piY + fiFirstLineNumber - 1, piX);
// adjust error line number in selection formating.
// error due jcf special added comments
liY := piY + fiFirstLineNumber - 1;
if piY > fiFirstSelectionLineNumber then
Dec(liY);
fOnStatusMessage(lsUnit, psMessage, peMessageType, liY, piX);
end;
end;
@ -444,6 +455,23 @@ begin
fsOutputCode := lsNewOutput;
end;
procedure TConverter.ConvertRange(piStartLineNumber, piEndLineNumber: Integer;
aOnlyOutputSelection: Boolean);
var
lineStartOffset,lineEndOffset: Integer;
liAux: Integer;
begin
if piStartLineNumber > piEndLineNumber then
begin
liAux := piEndLineNumber;
piEndLineNumber := piStartLineNumber;
piStartLineNumber := liAux;
end;
FindLineOffsets(fsInputCode,piStartLineNumber, piEndLineNumber,lineStartOffset,lineEndOffset);
fiFirstSelectionLineNumber:= piStartLineNumber;
ConvertPart(lineStartOffset, lineEndOffset, aOnlyOutputSelection);
end;
{ position on we insert selected CODE depending if the CODE contains interface
and/or implementation