mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-12 05:21:27 +02:00
IDE: use pas2js msg parser
git-svn-id: trunk@57905 -
This commit is contained in:
parent
b1d331665f
commit
f65a30ed47
@ -31,7 +31,7 @@ const
|
||||
SubToolFPCAssembler = 'FPCAssembler';
|
||||
|
||||
SubToolPas2js = 'Pas2JS';
|
||||
SubToolPas2jsPriority = 101;
|
||||
SubToolPas2jsPriority = 99;
|
||||
|
||||
SubToolMake = 'make';
|
||||
SubToolMakePriority = 1000; // higher than FPC
|
||||
|
@ -525,6 +525,7 @@ begin
|
||||
ExternalTools:=TExternalTools.Create(Self);
|
||||
EnvOptsChanged;
|
||||
RegisterFPCParser;
|
||||
RegisterPas2jsParser;
|
||||
RegisterMakeParser;
|
||||
ExternalToolList.RegisterParser(TDefaultParser);
|
||||
|
||||
|
@ -334,7 +334,10 @@ begin
|
||||
CompileTool:=ExternalToolList.Add(dlgCCOTestToolCompilingEmptyFile);
|
||||
CompileTool.Reference(Self,ClassName);
|
||||
try
|
||||
CompileTool.AddParsers(SubToolFPC);
|
||||
if GuessCompilerType(CompilerFilename)=pcPas2js then
|
||||
CompileTool.AddParsers(SubToolPas2js)
|
||||
else
|
||||
CompileTool.AddParsers(SubToolFPC);
|
||||
CompileTool.AddParsers(SubToolMake);
|
||||
CompileTool.Process.CurrentDirectory:=TestDir;
|
||||
CompileTool.Process.Executable:=CompilerFilename;
|
||||
|
@ -41,7 +41,7 @@ uses
|
||||
Classes, SysUtils, LCLProc, Forms, Controls, contnrs, strutils,
|
||||
IDEExternToolIntf, IDEMsgIntf, LazIDEIntf, MacroIntf, LazUTF8,
|
||||
IDECmdLine, LazarusIDEStrConsts, CompilerOptions, Project,
|
||||
DefineTemplates, TransferMacros, EnvironmentOpts, LazFileUtils;
|
||||
DefineTemplates, LinkScanner, TransferMacros, EnvironmentOpts, LazFileUtils;
|
||||
|
||||
type
|
||||
TOnCmdLineCreate = procedure(var CmdLine: string; var Abort:boolean) of object;
|
||||
@ -274,7 +274,7 @@ var
|
||||
Title: String;
|
||||
TargetOS: String;
|
||||
TargetCPU: String;
|
||||
TargetFilename: String;
|
||||
TargetFilename, SubTool: String;
|
||||
begin
|
||||
Result:=mrCancel;
|
||||
if ConsoleVerbosity>=1 then
|
||||
@ -336,7 +336,10 @@ begin
|
||||
Tool.CmdLineParams:=CmdLine;
|
||||
Tool.Process.CurrentDirectory:=WorkingDir;
|
||||
Tool.CurrentDirectoryIsTestDir:=CurrentDirectoryIsTestDir;
|
||||
FPCParser:=TFPCParser(Tool.AddParsers(SubToolFPC));
|
||||
SubTool:=SubToolFPC;
|
||||
if GuessCompilerType(CompilerFilename)=pcPas2js then
|
||||
SubTool:=SubToolPas2js;
|
||||
FPCParser:=TFPCParser(Tool.AddParsers(SubTool));
|
||||
FPCParser.ShowLinesCompiled:=EnvironmentOptions.MsgViewShowFPCMsgLinesCompiled;
|
||||
FPCParser.HideHintsSenderNotUsed:=not AProject.CompilerOptions.ShowHintsForSenderNotUsed;
|
||||
FPCParser.HideHintsUnitNotUsedInMainSource:=not AProject.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc;
|
||||
|
@ -118,7 +118,7 @@ type
|
||||
procedure EnterCriticalsection;
|
||||
procedure LeaveCriticalSection;
|
||||
procedure GetMsgFileNames(CompilerFilename, TargetOS, TargetCPU: string;
|
||||
out anEnglishFile, aTranslationFile: string); // (main thread)
|
||||
out anEnglishFile, aTranslationFile: string); virtual; // (main thread)
|
||||
property DefaultEnglishFile: string read FDefaultEnglishFile write SetDefaultEnglishFile;
|
||||
property DefaulTranslationFile: string read FDefaultTranslationFile write SetDefaultTranslationFile;
|
||||
property OnLoadFile: TETLoadFileEvent read FOnLoadFile write FOnLoadFile; // (main or workerthread)
|
||||
@ -831,6 +831,7 @@ begin
|
||||
Result:=nil;
|
||||
GetMsgFileNames(EnvironmentOptions.GetParsedCompilerFilename,'','',
|
||||
anEnglishFile,aTranslationFile);
|
||||
writeln('TFPCMsgFilePool.LoadCurrentEnglishFile ',anEnglishFile);
|
||||
if not FilenameIsAbsolute(anEnglishFile) then exit;
|
||||
Result:=LoadFile(anEnglishFile,UpdateFromDisk,AThread);
|
||||
end;
|
||||
@ -1255,7 +1256,7 @@ begin
|
||||
end;
|
||||
MsgLine:=CreateMsgLine;
|
||||
MsgLine.Urgency:=mluProgress;
|
||||
MsgLine.SubTool:=SubToolFPC;
|
||||
MsgLine.SubTool:=DefaultSubTool;
|
||||
MsgLine.Filename:=AFilename;
|
||||
MsgLine.Msg:=OldP;
|
||||
inherited AddMsgLine(MsgLine);
|
||||
@ -1273,7 +1274,7 @@ begin
|
||||
if (not Result) and (not CompStr('Assembling ',p)) then exit;
|
||||
MsgLine:=CreateMsgLine;
|
||||
MsgLine.Urgency:=mluProgress;
|
||||
MsgLine.SubTool:=SubToolFPC;
|
||||
MsgLine.SubTool:=DefaultSubTool;
|
||||
MsgLine.Urgency:=mluProgress;
|
||||
MsgLine.Msg:=OldP;
|
||||
inherited AddMsgLine(MsgLine);
|
||||
@ -1390,7 +1391,7 @@ begin
|
||||
end;
|
||||
MsgLine:=CreateMsgLine;
|
||||
MsgLine.Urgency:=MsgType;
|
||||
MsgLine.SubTool:=SubToolFPC;
|
||||
MsgLine.SubTool:=DefaultSubTool;
|
||||
MsgLine.Msg:=p;
|
||||
MsgLine.TranslatedMsg:=TranslatedMsg;
|
||||
AddMsgLine(MsgLine);
|
||||
@ -1411,7 +1412,7 @@ begin
|
||||
if not ReadNumberWithThousandSep(p) then exit;
|
||||
if not ReadChar(p,' ') then exit;
|
||||
MsgLine:=CreateMsgLine;
|
||||
MsgLine.SubTool:=SubToolFPC;
|
||||
MsgLine.SubTool:=DefaultSubTool;
|
||||
MsgLine.Urgency:=mluProgress;
|
||||
MsgLine.Msg:=OldP;
|
||||
inherited AddMsgLine(MsgLine);
|
||||
@ -1433,7 +1434,7 @@ begin
|
||||
end;
|
||||
Result:=true;
|
||||
MsgLine:=CreateMsgLine;
|
||||
MsgLine.SubTool:=SubToolFPC;
|
||||
MsgLine.SubTool:=DefaultSubTool;
|
||||
if ShowLinesCompiled then
|
||||
MsgLine.Urgency:=mluImportant
|
||||
else
|
||||
@ -1469,7 +1470,7 @@ begin
|
||||
end;
|
||||
Result:=true;
|
||||
MsgLine:=CreateMsgLine;
|
||||
MsgLine.SubTool:=SubToolFPC;
|
||||
MsgLine.SubTool:=DefaultSubTool;
|
||||
MsgLine.Urgency:=mluProgress;
|
||||
MsgLine.Msg:=OldStart;
|
||||
inherited AddMsgLine(MsgLine);
|
||||
@ -1595,7 +1596,7 @@ begin
|
||||
if MsgType=mluNone then
|
||||
MsgType:=mluVerbose;
|
||||
MsgLine:=CreateMsgLine;
|
||||
MsgLine.SubTool:=SubToolFPC;
|
||||
MsgLine.SubTool:=DefaultSubTool;
|
||||
MsgLine.Urgency:=MsgType;
|
||||
if (fMsgID=FPCMsgIDLogo) and ReadFPCLogo(PatternItem,aFPCVersion) then begin
|
||||
if aFPCVersion<>PC_FullVersion then begin
|
||||
@ -1730,7 +1731,7 @@ begin
|
||||
if MsgLine.MsgID=MsgID then exit(true);
|
||||
Result:=false;
|
||||
if MsgLine.MsgID<>0 then exit;
|
||||
if MsgLine.SubTool<>SubToolFPC then exit;
|
||||
if MsgLine.SubTool<>DefaultSubTool then exit;
|
||||
if Item=nil then begin
|
||||
Item:=MsgFile.GetMsg(MsgID);
|
||||
if Item=nil then
|
||||
@ -2480,7 +2481,7 @@ begin
|
||||
//debugln(['TIDEFPCParser.FindSrcViaPPU i=',i,' PPUFilename="',PPUFilename,'" Filename="',aFilename,'"']);
|
||||
if (i>0) then begin
|
||||
PrevMsgLine:=Tool.WorkerMessages[i-1];
|
||||
if (PrevMsgLine.SubTool=SubToolFPC)
|
||||
if (PrevMsgLine.SubTool=DefaultSubTool)
|
||||
and (CompareFilenames(PPUFilename,PrevMsgLine.Attribute['PPU'])=0)
|
||||
and FilenameIsAbsolute(PrevMsgLine.Filename)
|
||||
and (CompareFilenames(ExtractFilename(PrevMsgLine.Filename),ExtractFilename(aFilename))=0)
|
||||
@ -2685,7 +2686,7 @@ begin
|
||||
if ShowLinesCompiled then MsgUrgency:=mluImportant;
|
||||
end;
|
||||
MsgLine:=CreateMsgLine;
|
||||
MsgLine.SubTool:=SubToolFPC;
|
||||
MsgLine.SubTool:=DefaultSubTool;
|
||||
MsgLine.Urgency:=MsgUrgency;
|
||||
MsgLine.Msg:=Msg;
|
||||
MsgLine.TranslatedMsg:=TranslatedMsg;
|
||||
@ -2821,10 +2822,10 @@ begin
|
||||
MsgItem:=MsgFile.GetMsg(fMsgID);
|
||||
Translate(p,MsgItem,TranslatedItem,TranslatedMsg,MsgType);
|
||||
if (TranslatedItem=nil) and (MsgItem=nil) then begin
|
||||
if ConsoleVerbosity>=0 then
|
||||
if ConsoleVerbosity>=1 then
|
||||
debugln(['TFPCParser.CheckForFileLineColMessage msgid not found: ',fMsgID]);
|
||||
end else if MsgType=mluNone then begin
|
||||
if ConsoleVerbosity>=0 then
|
||||
if ConsoleVerbosity>=1 then
|
||||
debugln(['TFPCParser.CheckForFileLineColMessage msgid has no type: ',fMsgID]);
|
||||
end;
|
||||
end;
|
||||
@ -2836,7 +2837,7 @@ begin
|
||||
Column:=0;
|
||||
|
||||
MsgLine:=CreateMsgLine;
|
||||
MsgLine.SubTool:=SubToolFPC;
|
||||
MsgLine.SubTool:=DefaultSubTool;
|
||||
MsgLine.Urgency:=MsgType;
|
||||
aFilename:=GetString(FileStartPos,FileEndPos-FileStartPos);
|
||||
if PPUFileStartPos<>nil then
|
||||
@ -2868,7 +2869,7 @@ begin
|
||||
if not ReadString(p,') unit ') then exit;
|
||||
end;
|
||||
MsgLine:=CreateMsgLine;
|
||||
MsgLine.SubTool:=SubToolFPC;
|
||||
MsgLine.SubTool:=DefaultSubTool;
|
||||
MsgLine.Urgency:=mluProgress;
|
||||
MsgLine.Msg:=OldP;
|
||||
AddMsgLine(MsgLine);
|
||||
@ -3088,7 +3089,7 @@ begin
|
||||
Y:=MsgLine.Line;
|
||||
X:=MsgLine.Column;
|
||||
if (Y>0) and (X>0)
|
||||
and (MsgLine.SubTool=SubToolFPC) and (MsgLine.Filename<>'')
|
||||
and (MsgLine.SubTool=DefaultSubTool) and (MsgLine.Filename<>'')
|
||||
then begin
|
||||
if mlfTestBuildFile in MsgLine.Flags then
|
||||
aFilename:=MsgLine.Attribute[MsgAttrDiskFilename]
|
||||
@ -3106,7 +3107,7 @@ begin
|
||||
// short file name => 1. search the full file name in previous message
|
||||
if i>0 then begin
|
||||
PrevMsgLine:=Tool.WorkerMessages[i-1];
|
||||
if (PrevMsgLine.SubTool=SubToolFPC)
|
||||
if (PrevMsgLine.SubTool=DefaultSubTool)
|
||||
and FilenameIsAbsolute(PrevMsgLine.Filename)
|
||||
and (CompareFilenames(ExtractFilename(PrevMsgLine.Filename),ExtractFilename(aFilename))=0)
|
||||
then begin
|
||||
|
@ -359,8 +359,8 @@ type
|
||||
function GetAboutView: TLMsgWndView;
|
||||
function GetViews(Index: integer): TLMsgWndView;
|
||||
procedure HideSearch;
|
||||
procedure ImagesGetWidthForPPI(Sender: TCustomImageList; AImageWidth,
|
||||
APPI: Integer; var AResultWidth: Integer);
|
||||
procedure ImagesGetWidthForPPI(Sender: TCustomImageList; {%H-}AImageWidth,
|
||||
{%H-}APPI: Integer; var AResultWidth: Integer);
|
||||
procedure SaveClicked(OnlyShown: boolean);
|
||||
procedure CopyAllClicked(OnlyShown: boolean);
|
||||
procedure CopyMsgToClipboard(OnlyFilename: boolean);
|
||||
|
@ -40,10 +40,11 @@ type
|
||||
|
||||
TPas2jsMsgFilePool = class(TFPCMsgFilePool)
|
||||
public
|
||||
destructor Destroy; override;
|
||||
function LoadCurrentEnglishFile(UpdateFromDisk: boolean; AThread: TThread
|
||||
): TFPCMsgFilePoolItem; override;
|
||||
procedure GetMsgFileNames({%H-}CompilerFilename, {%H-}TargetOS, {%H-}TargetCPU: string;
|
||||
out anEnglishFile, aTranslationFile: string);
|
||||
out anEnglishFile, aTranslationFile: string); override;
|
||||
end;
|
||||
|
||||
{ TIDEPas2jsParser }
|
||||
@ -59,10 +60,24 @@ type
|
||||
var
|
||||
Pas2jsMsgFilePool: TFPCMsgFilePool = nil;
|
||||
|
||||
procedure RegisterPas2jsParser;
|
||||
|
||||
implementation
|
||||
|
||||
procedure RegisterPas2jsParser;
|
||||
begin
|
||||
ExternalToolList.RegisterParser(TIDEPas2jsParser);
|
||||
end;
|
||||
|
||||
{ TPas2jsMsgFilePool }
|
||||
|
||||
destructor TPas2jsMsgFilePool.Destroy;
|
||||
begin
|
||||
inherited Destroy;
|
||||
if Pas2jsMsgFilePool=Self then
|
||||
Pas2jsMsgFilePool:=nil;
|
||||
end;
|
||||
|
||||
function TPas2jsMsgFilePool.LoadCurrentEnglishFile(UpdateFromDisk: boolean;
|
||||
AThread: TThread): TFPCMsgFilePoolItem;
|
||||
var
|
||||
@ -100,7 +115,7 @@ end;
|
||||
|
||||
class function TIDEPas2jsParser.MsgFilePool: TFPCMsgFilePool;
|
||||
begin
|
||||
Result:=inherited MsgFilePool;
|
||||
Result:=Pas2jsMsgFilePool;
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
@ -295,7 +295,7 @@ begin
|
||||
MsgID:=0;
|
||||
Tool:=nil;
|
||||
if (Msg.Urgency>=mluError)
|
||||
or (Msg.SubTool<>SubToolFPC)
|
||||
or ((Msg.SubTool<>SubToolFPC) and (Msg.SubTool<>SubToolPas2js))
|
||||
or (Msg.MsgID=0)
|
||||
then exit;
|
||||
MsgID:=Msg.MsgID;
|
||||
@ -371,7 +371,8 @@ var
|
||||
Code: TCodeBuffer;
|
||||
begin
|
||||
Result:=false;
|
||||
if (Msg=nil) or (Msg.SubTool<>SubToolFPC) or (Msg.MsgID<1)
|
||||
if (Msg=nil) or (Msg.MsgID<1)
|
||||
or ((Msg.SubTool<>SubToolFPC) and (Msg.SubTool<>SubToolPas2js))
|
||||
or (not Msg.HasSourcePosition) then exit;
|
||||
|
||||
// Check: Local variable "$1" does not seem to be initialized
|
||||
@ -512,7 +513,7 @@ begin
|
||||
ToolData:=nil;
|
||||
IDETool:=nil;
|
||||
if (Msg.Urgency>=mluError)
|
||||
or (Msg.SubTool<>SubToolFPC)
|
||||
or ((Msg.SubTool<>SubToolFPC) and (Msg.SubTool<>SubToolPas2js))
|
||||
or (Msg.MsgID=0)
|
||||
then exit;
|
||||
ToolData:=Msg.GetToolData;
|
||||
@ -578,7 +579,7 @@ begin
|
||||
CurMsg:=Msg.Lines[i];
|
||||
if (CurMsg.MsgID<>Msg.MsgID)
|
||||
or (CurMsg.Urgency>=mluError)
|
||||
or (CurMsg.SubTool<>SubToolFPC)
|
||||
or ((CurMsg.SubTool<>SubToolFPC) and (CurMsg.SubTool<>SubToolPas2js))
|
||||
then continue;
|
||||
CurMsg.MarkFixed;
|
||||
end;
|
||||
@ -597,7 +598,10 @@ var
|
||||
begin
|
||||
Result:=false;
|
||||
// Check: Local variable "$1" not used
|
||||
if not TIDEFPCParser.MsgLineIsId(Msg,5025,Identifier,Dummy) then
|
||||
if IDEFPCParser.MsgLineIsId(Msg,5025,Identifier,Dummy)
|
||||
or IDEPas2jsParser.MsgLineIsId(Msg,5025,Identifier,Dummy) then
|
||||
// ok
|
||||
else
|
||||
exit;
|
||||
if not Msg.HasSourcePosition or not IsValidIdent(Identifier) then exit;
|
||||
|
||||
@ -676,10 +680,12 @@ var
|
||||
begin
|
||||
Result:=false;
|
||||
if (not Msg.HasSourcePosition) then exit;
|
||||
if IDEFPCParser.MsgLineIsId(Msg,4046,aClassname,Dummy) then begin
|
||||
if IDEFPCParser.MsgLineIsId(Msg,4046,aClassname,Dummy)
|
||||
or IDEPas2jsParser.MsgLineIsId(Msg,4046,aClassname,Dummy) then begin
|
||||
// Constructing a class "$1" with abstract method "$2"
|
||||
Result:=true;
|
||||
end else if IDEFPCParser.MsgLineIsId(Msg,5042,MissingMethod,Dummy) then begin
|
||||
end else if IDEFPCParser.MsgLineIsId(Msg,5042,MissingMethod,Dummy)
|
||||
or IDEFPCParser.MsgLineIsId(Msg,5042,MissingMethod,Dummy) then begin
|
||||
// No matching implementation for interface method "$1" found
|
||||
// The position is on the 'class' keyword
|
||||
// The MissingMethod is 'interfacename.procname'
|
||||
@ -765,12 +771,23 @@ function TQuickFixUnitNotFound_Remove.IsApplicable(Msg: TMessageLine; out
|
||||
begin
|
||||
Result:=false;
|
||||
if Msg=nil then exit;
|
||||
if (Msg.SubTool<>SubToolFPC)
|
||||
or (not Msg.HasSourcePosition)
|
||||
or ((Msg.MsgID<>5023) // Unit "$1" not used in $2
|
||||
and (Msg.MsgID<>FPCMsgIDCantFindUnitUsedBy) // Can't find unit $1 used by $2
|
||||
and (Msg.MsgID<>10023)) // Unit $1 was not found but $2 exists
|
||||
then exit;
|
||||
if (Msg.SubTool=SubToolFPC) then begin
|
||||
if Msg.HasSourcePosition
|
||||
and ((Msg.MsgID=5023) // Unit "$1" not used in $2
|
||||
or (Msg.MsgID=FPCMsgIDCantFindUnitUsedBy) // Can't find unit $1 used by $2
|
||||
or (Msg.MsgID=10023)) // Unit $1 was not found but $2 exists
|
||||
then
|
||||
// ok
|
||||
else exit;
|
||||
end else if (Msg.SubTool=SubToolPas2js) then begin
|
||||
if Msg.HasSourcePosition
|
||||
and ((Msg.MsgID=5023) // Unit "$1" not used in $2
|
||||
or (Msg.MsgID=3073)) // Can't find unit $1
|
||||
then
|
||||
// ok
|
||||
else exit;
|
||||
end else
|
||||
exit;
|
||||
|
||||
MissingUnitName:=Msg.Attribute[FPCMsgAttrMissingUnit];
|
||||
UsedByUnit:=Msg.Attribute[FPCMsgAttrUsedByUnit];
|
||||
@ -849,7 +866,10 @@ begin
|
||||
Result:=false;
|
||||
Identifier:='';
|
||||
// check: identifier not found "$1"
|
||||
if not IDEFPCParser.MsgLineIsId(Msg,5000,Identifier,Dummy) then
|
||||
if IDEFPCParser.MsgLineIsId(Msg,5000,Identifier,Dummy)
|
||||
or IDEPas2jsParser.MsgLineIsId(Msg,3001,Identifier,Dummy) then
|
||||
// ok
|
||||
else
|
||||
exit;
|
||||
if not Msg.HasSourcePosition or not IsValidIdent(Identifier) then exit;
|
||||
|
||||
@ -997,7 +1017,7 @@ function TQuickFix_HideWithIDEDirective.IsApplicable(Msg: TMessageLine): boolean
|
||||
begin
|
||||
Result:=false;
|
||||
if (Msg.Urgency>=mluError)
|
||||
or (Msg.SubTool<>SubToolFPC)
|
||||
or ((Msg.SubTool<>SubToolFPC) and (Msg.SubTool<>SubToolPas2js))
|
||||
or (not Msg.HasSourcePosition)
|
||||
or (mlfHiddenByIDEDirective in Msg.Flags)
|
||||
then exit;
|
||||
|
Loading…
Reference in New Issue
Block a user