IDE: use pas2js msg parser

git-svn-id: trunk@57905 -
This commit is contained in:
mattias 2018-05-12 15:36:26 +00:00
parent b1d331665f
commit f65a30ed47
8 changed files with 84 additions and 41 deletions

View File

@ -31,7 +31,7 @@ const
SubToolFPCAssembler = 'FPCAssembler'; SubToolFPCAssembler = 'FPCAssembler';
SubToolPas2js = 'Pas2JS'; SubToolPas2js = 'Pas2JS';
SubToolPas2jsPriority = 101; SubToolPas2jsPriority = 99;
SubToolMake = 'make'; SubToolMake = 'make';
SubToolMakePriority = 1000; // higher than FPC SubToolMakePriority = 1000; // higher than FPC

View File

@ -525,6 +525,7 @@ begin
ExternalTools:=TExternalTools.Create(Self); ExternalTools:=TExternalTools.Create(Self);
EnvOptsChanged; EnvOptsChanged;
RegisterFPCParser; RegisterFPCParser;
RegisterPas2jsParser;
RegisterMakeParser; RegisterMakeParser;
ExternalToolList.RegisterParser(TDefaultParser); ExternalToolList.RegisterParser(TDefaultParser);

View File

@ -334,7 +334,10 @@ begin
CompileTool:=ExternalToolList.Add(dlgCCOTestToolCompilingEmptyFile); CompileTool:=ExternalToolList.Add(dlgCCOTestToolCompilingEmptyFile);
CompileTool.Reference(Self,ClassName); CompileTool.Reference(Self,ClassName);
try try
CompileTool.AddParsers(SubToolFPC); if GuessCompilerType(CompilerFilename)=pcPas2js then
CompileTool.AddParsers(SubToolPas2js)
else
CompileTool.AddParsers(SubToolFPC);
CompileTool.AddParsers(SubToolMake); CompileTool.AddParsers(SubToolMake);
CompileTool.Process.CurrentDirectory:=TestDir; CompileTool.Process.CurrentDirectory:=TestDir;
CompileTool.Process.Executable:=CompilerFilename; CompileTool.Process.Executable:=CompilerFilename;

View File

@ -41,7 +41,7 @@ uses
Classes, SysUtils, LCLProc, Forms, Controls, contnrs, strutils, Classes, SysUtils, LCLProc, Forms, Controls, contnrs, strutils,
IDEExternToolIntf, IDEMsgIntf, LazIDEIntf, MacroIntf, LazUTF8, IDEExternToolIntf, IDEMsgIntf, LazIDEIntf, MacroIntf, LazUTF8,
IDECmdLine, LazarusIDEStrConsts, CompilerOptions, Project, IDECmdLine, LazarusIDEStrConsts, CompilerOptions, Project,
DefineTemplates, TransferMacros, EnvironmentOpts, LazFileUtils; DefineTemplates, LinkScanner, TransferMacros, EnvironmentOpts, LazFileUtils;
type type
TOnCmdLineCreate = procedure(var CmdLine: string; var Abort:boolean) of object; TOnCmdLineCreate = procedure(var CmdLine: string; var Abort:boolean) of object;
@ -274,7 +274,7 @@ var
Title: String; Title: String;
TargetOS: String; TargetOS: String;
TargetCPU: String; TargetCPU: String;
TargetFilename: String; TargetFilename, SubTool: String;
begin begin
Result:=mrCancel; Result:=mrCancel;
if ConsoleVerbosity>=1 then if ConsoleVerbosity>=1 then
@ -336,7 +336,10 @@ begin
Tool.CmdLineParams:=CmdLine; Tool.CmdLineParams:=CmdLine;
Tool.Process.CurrentDirectory:=WorkingDir; Tool.Process.CurrentDirectory:=WorkingDir;
Tool.CurrentDirectoryIsTestDir:=CurrentDirectoryIsTestDir; 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.ShowLinesCompiled:=EnvironmentOptions.MsgViewShowFPCMsgLinesCompiled;
FPCParser.HideHintsSenderNotUsed:=not AProject.CompilerOptions.ShowHintsForSenderNotUsed; FPCParser.HideHintsSenderNotUsed:=not AProject.CompilerOptions.ShowHintsForSenderNotUsed;
FPCParser.HideHintsUnitNotUsedInMainSource:=not AProject.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc; FPCParser.HideHintsUnitNotUsedInMainSource:=not AProject.CompilerOptions.ShowHintsForUnusedUnitsInMainSrc;

View File

@ -118,7 +118,7 @@ type
procedure EnterCriticalsection; procedure EnterCriticalsection;
procedure LeaveCriticalSection; procedure LeaveCriticalSection;
procedure GetMsgFileNames(CompilerFilename, TargetOS, TargetCPU: string; 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 DefaultEnglishFile: string read FDefaultEnglishFile write SetDefaultEnglishFile;
property DefaulTranslationFile: string read FDefaultTranslationFile write SetDefaultTranslationFile; property DefaulTranslationFile: string read FDefaultTranslationFile write SetDefaultTranslationFile;
property OnLoadFile: TETLoadFileEvent read FOnLoadFile write FOnLoadFile; // (main or workerthread) property OnLoadFile: TETLoadFileEvent read FOnLoadFile write FOnLoadFile; // (main or workerthread)
@ -831,6 +831,7 @@ begin
Result:=nil; Result:=nil;
GetMsgFileNames(EnvironmentOptions.GetParsedCompilerFilename,'','', GetMsgFileNames(EnvironmentOptions.GetParsedCompilerFilename,'','',
anEnglishFile,aTranslationFile); anEnglishFile,aTranslationFile);
writeln('TFPCMsgFilePool.LoadCurrentEnglishFile ',anEnglishFile);
if not FilenameIsAbsolute(anEnglishFile) then exit; if not FilenameIsAbsolute(anEnglishFile) then exit;
Result:=LoadFile(anEnglishFile,UpdateFromDisk,AThread); Result:=LoadFile(anEnglishFile,UpdateFromDisk,AThread);
end; end;
@ -1255,7 +1256,7 @@ begin
end; end;
MsgLine:=CreateMsgLine; MsgLine:=CreateMsgLine;
MsgLine.Urgency:=mluProgress; MsgLine.Urgency:=mluProgress;
MsgLine.SubTool:=SubToolFPC; MsgLine.SubTool:=DefaultSubTool;
MsgLine.Filename:=AFilename; MsgLine.Filename:=AFilename;
MsgLine.Msg:=OldP; MsgLine.Msg:=OldP;
inherited AddMsgLine(MsgLine); inherited AddMsgLine(MsgLine);
@ -1273,7 +1274,7 @@ begin
if (not Result) and (not CompStr('Assembling ',p)) then exit; if (not Result) and (not CompStr('Assembling ',p)) then exit;
MsgLine:=CreateMsgLine; MsgLine:=CreateMsgLine;
MsgLine.Urgency:=mluProgress; MsgLine.Urgency:=mluProgress;
MsgLine.SubTool:=SubToolFPC; MsgLine.SubTool:=DefaultSubTool;
MsgLine.Urgency:=mluProgress; MsgLine.Urgency:=mluProgress;
MsgLine.Msg:=OldP; MsgLine.Msg:=OldP;
inherited AddMsgLine(MsgLine); inherited AddMsgLine(MsgLine);
@ -1390,7 +1391,7 @@ begin
end; end;
MsgLine:=CreateMsgLine; MsgLine:=CreateMsgLine;
MsgLine.Urgency:=MsgType; MsgLine.Urgency:=MsgType;
MsgLine.SubTool:=SubToolFPC; MsgLine.SubTool:=DefaultSubTool;
MsgLine.Msg:=p; MsgLine.Msg:=p;
MsgLine.TranslatedMsg:=TranslatedMsg; MsgLine.TranslatedMsg:=TranslatedMsg;
AddMsgLine(MsgLine); AddMsgLine(MsgLine);
@ -1411,7 +1412,7 @@ begin
if not ReadNumberWithThousandSep(p) then exit; if not ReadNumberWithThousandSep(p) then exit;
if not ReadChar(p,' ') then exit; if not ReadChar(p,' ') then exit;
MsgLine:=CreateMsgLine; MsgLine:=CreateMsgLine;
MsgLine.SubTool:=SubToolFPC; MsgLine.SubTool:=DefaultSubTool;
MsgLine.Urgency:=mluProgress; MsgLine.Urgency:=mluProgress;
MsgLine.Msg:=OldP; MsgLine.Msg:=OldP;
inherited AddMsgLine(MsgLine); inherited AddMsgLine(MsgLine);
@ -1433,7 +1434,7 @@ begin
end; end;
Result:=true; Result:=true;
MsgLine:=CreateMsgLine; MsgLine:=CreateMsgLine;
MsgLine.SubTool:=SubToolFPC; MsgLine.SubTool:=DefaultSubTool;
if ShowLinesCompiled then if ShowLinesCompiled then
MsgLine.Urgency:=mluImportant MsgLine.Urgency:=mluImportant
else else
@ -1469,7 +1470,7 @@ begin
end; end;
Result:=true; Result:=true;
MsgLine:=CreateMsgLine; MsgLine:=CreateMsgLine;
MsgLine.SubTool:=SubToolFPC; MsgLine.SubTool:=DefaultSubTool;
MsgLine.Urgency:=mluProgress; MsgLine.Urgency:=mluProgress;
MsgLine.Msg:=OldStart; MsgLine.Msg:=OldStart;
inherited AddMsgLine(MsgLine); inherited AddMsgLine(MsgLine);
@ -1595,7 +1596,7 @@ begin
if MsgType=mluNone then if MsgType=mluNone then
MsgType:=mluVerbose; MsgType:=mluVerbose;
MsgLine:=CreateMsgLine; MsgLine:=CreateMsgLine;
MsgLine.SubTool:=SubToolFPC; MsgLine.SubTool:=DefaultSubTool;
MsgLine.Urgency:=MsgType; MsgLine.Urgency:=MsgType;
if (fMsgID=FPCMsgIDLogo) and ReadFPCLogo(PatternItem,aFPCVersion) then begin if (fMsgID=FPCMsgIDLogo) and ReadFPCLogo(PatternItem,aFPCVersion) then begin
if aFPCVersion<>PC_FullVersion then begin if aFPCVersion<>PC_FullVersion then begin
@ -1730,7 +1731,7 @@ begin
if MsgLine.MsgID=MsgID then exit(true); if MsgLine.MsgID=MsgID then exit(true);
Result:=false; Result:=false;
if MsgLine.MsgID<>0 then exit; if MsgLine.MsgID<>0 then exit;
if MsgLine.SubTool<>SubToolFPC then exit; if MsgLine.SubTool<>DefaultSubTool then exit;
if Item=nil then begin if Item=nil then begin
Item:=MsgFile.GetMsg(MsgID); Item:=MsgFile.GetMsg(MsgID);
if Item=nil then if Item=nil then
@ -2480,7 +2481,7 @@ begin
//debugln(['TIDEFPCParser.FindSrcViaPPU i=',i,' PPUFilename="',PPUFilename,'" Filename="',aFilename,'"']); //debugln(['TIDEFPCParser.FindSrcViaPPU i=',i,' PPUFilename="',PPUFilename,'" Filename="',aFilename,'"']);
if (i>0) then begin if (i>0) then begin
PrevMsgLine:=Tool.WorkerMessages[i-1]; PrevMsgLine:=Tool.WorkerMessages[i-1];
if (PrevMsgLine.SubTool=SubToolFPC) if (PrevMsgLine.SubTool=DefaultSubTool)
and (CompareFilenames(PPUFilename,PrevMsgLine.Attribute['PPU'])=0) and (CompareFilenames(PPUFilename,PrevMsgLine.Attribute['PPU'])=0)
and FilenameIsAbsolute(PrevMsgLine.Filename) and FilenameIsAbsolute(PrevMsgLine.Filename)
and (CompareFilenames(ExtractFilename(PrevMsgLine.Filename),ExtractFilename(aFilename))=0) and (CompareFilenames(ExtractFilename(PrevMsgLine.Filename),ExtractFilename(aFilename))=0)
@ -2685,7 +2686,7 @@ begin
if ShowLinesCompiled then MsgUrgency:=mluImportant; if ShowLinesCompiled then MsgUrgency:=mluImportant;
end; end;
MsgLine:=CreateMsgLine; MsgLine:=CreateMsgLine;
MsgLine.SubTool:=SubToolFPC; MsgLine.SubTool:=DefaultSubTool;
MsgLine.Urgency:=MsgUrgency; MsgLine.Urgency:=MsgUrgency;
MsgLine.Msg:=Msg; MsgLine.Msg:=Msg;
MsgLine.TranslatedMsg:=TranslatedMsg; MsgLine.TranslatedMsg:=TranslatedMsg;
@ -2821,10 +2822,10 @@ begin
MsgItem:=MsgFile.GetMsg(fMsgID); MsgItem:=MsgFile.GetMsg(fMsgID);
Translate(p,MsgItem,TranslatedItem,TranslatedMsg,MsgType); Translate(p,MsgItem,TranslatedItem,TranslatedMsg,MsgType);
if (TranslatedItem=nil) and (MsgItem=nil) then begin if (TranslatedItem=nil) and (MsgItem=nil) then begin
if ConsoleVerbosity>=0 then if ConsoleVerbosity>=1 then
debugln(['TFPCParser.CheckForFileLineColMessage msgid not found: ',fMsgID]); debugln(['TFPCParser.CheckForFileLineColMessage msgid not found: ',fMsgID]);
end else if MsgType=mluNone then begin end else if MsgType=mluNone then begin
if ConsoleVerbosity>=0 then if ConsoleVerbosity>=1 then
debugln(['TFPCParser.CheckForFileLineColMessage msgid has no type: ',fMsgID]); debugln(['TFPCParser.CheckForFileLineColMessage msgid has no type: ',fMsgID]);
end; end;
end; end;
@ -2836,7 +2837,7 @@ begin
Column:=0; Column:=0;
MsgLine:=CreateMsgLine; MsgLine:=CreateMsgLine;
MsgLine.SubTool:=SubToolFPC; MsgLine.SubTool:=DefaultSubTool;
MsgLine.Urgency:=MsgType; MsgLine.Urgency:=MsgType;
aFilename:=GetString(FileStartPos,FileEndPos-FileStartPos); aFilename:=GetString(FileStartPos,FileEndPos-FileStartPos);
if PPUFileStartPos<>nil then if PPUFileStartPos<>nil then
@ -2868,7 +2869,7 @@ begin
if not ReadString(p,') unit ') then exit; if not ReadString(p,') unit ') then exit;
end; end;
MsgLine:=CreateMsgLine; MsgLine:=CreateMsgLine;
MsgLine.SubTool:=SubToolFPC; MsgLine.SubTool:=DefaultSubTool;
MsgLine.Urgency:=mluProgress; MsgLine.Urgency:=mluProgress;
MsgLine.Msg:=OldP; MsgLine.Msg:=OldP;
AddMsgLine(MsgLine); AddMsgLine(MsgLine);
@ -3088,7 +3089,7 @@ begin
Y:=MsgLine.Line; Y:=MsgLine.Line;
X:=MsgLine.Column; X:=MsgLine.Column;
if (Y>0) and (X>0) if (Y>0) and (X>0)
and (MsgLine.SubTool=SubToolFPC) and (MsgLine.Filename<>'') and (MsgLine.SubTool=DefaultSubTool) and (MsgLine.Filename<>'')
then begin then begin
if mlfTestBuildFile in MsgLine.Flags then if mlfTestBuildFile in MsgLine.Flags then
aFilename:=MsgLine.Attribute[MsgAttrDiskFilename] aFilename:=MsgLine.Attribute[MsgAttrDiskFilename]
@ -3106,7 +3107,7 @@ begin
// short file name => 1. search the full file name in previous message // short file name => 1. search the full file name in previous message
if i>0 then begin if i>0 then begin
PrevMsgLine:=Tool.WorkerMessages[i-1]; PrevMsgLine:=Tool.WorkerMessages[i-1];
if (PrevMsgLine.SubTool=SubToolFPC) if (PrevMsgLine.SubTool=DefaultSubTool)
and FilenameIsAbsolute(PrevMsgLine.Filename) and FilenameIsAbsolute(PrevMsgLine.Filename)
and (CompareFilenames(ExtractFilename(PrevMsgLine.Filename),ExtractFilename(aFilename))=0) and (CompareFilenames(ExtractFilename(PrevMsgLine.Filename),ExtractFilename(aFilename))=0)
then begin then begin

View File

@ -359,8 +359,8 @@ type
function GetAboutView: TLMsgWndView; function GetAboutView: TLMsgWndView;
function GetViews(Index: integer): TLMsgWndView; function GetViews(Index: integer): TLMsgWndView;
procedure HideSearch; procedure HideSearch;
procedure ImagesGetWidthForPPI(Sender: TCustomImageList; AImageWidth, procedure ImagesGetWidthForPPI(Sender: TCustomImageList; {%H-}AImageWidth,
APPI: Integer; var AResultWidth: Integer); {%H-}APPI: Integer; var AResultWidth: Integer);
procedure SaveClicked(OnlyShown: boolean); procedure SaveClicked(OnlyShown: boolean);
procedure CopyAllClicked(OnlyShown: boolean); procedure CopyAllClicked(OnlyShown: boolean);
procedure CopyMsgToClipboard(OnlyFilename: boolean); procedure CopyMsgToClipboard(OnlyFilename: boolean);

View File

@ -40,10 +40,11 @@ type
TPas2jsMsgFilePool = class(TFPCMsgFilePool) TPas2jsMsgFilePool = class(TFPCMsgFilePool)
public public
destructor Destroy; override;
function LoadCurrentEnglishFile(UpdateFromDisk: boolean; AThread: TThread function LoadCurrentEnglishFile(UpdateFromDisk: boolean; AThread: TThread
): TFPCMsgFilePoolItem; override; ): TFPCMsgFilePoolItem; override;
procedure GetMsgFileNames({%H-}CompilerFilename, {%H-}TargetOS, {%H-}TargetCPU: string; procedure GetMsgFileNames({%H-}CompilerFilename, {%H-}TargetOS, {%H-}TargetCPU: string;
out anEnglishFile, aTranslationFile: string); out anEnglishFile, aTranslationFile: string); override;
end; end;
{ TIDEPas2jsParser } { TIDEPas2jsParser }
@ -59,10 +60,24 @@ type
var var
Pas2jsMsgFilePool: TFPCMsgFilePool = nil; Pas2jsMsgFilePool: TFPCMsgFilePool = nil;
procedure RegisterPas2jsParser;
implementation implementation
procedure RegisterPas2jsParser;
begin
ExternalToolList.RegisterParser(TIDEPas2jsParser);
end;
{ TPas2jsMsgFilePool } { TPas2jsMsgFilePool }
destructor TPas2jsMsgFilePool.Destroy;
begin
inherited Destroy;
if Pas2jsMsgFilePool=Self then
Pas2jsMsgFilePool:=nil;
end;
function TPas2jsMsgFilePool.LoadCurrentEnglishFile(UpdateFromDisk: boolean; function TPas2jsMsgFilePool.LoadCurrentEnglishFile(UpdateFromDisk: boolean;
AThread: TThread): TFPCMsgFilePoolItem; AThread: TThread): TFPCMsgFilePoolItem;
var var
@ -100,7 +115,7 @@ end;
class function TIDEPas2jsParser.MsgFilePool: TFPCMsgFilePool; class function TIDEPas2jsParser.MsgFilePool: TFPCMsgFilePool;
begin begin
Result:=inherited MsgFilePool; Result:=Pas2jsMsgFilePool;
end; end;
initialization initialization

View File

@ -295,7 +295,7 @@ begin
MsgID:=0; MsgID:=0;
Tool:=nil; Tool:=nil;
if (Msg.Urgency>=mluError) if (Msg.Urgency>=mluError)
or (Msg.SubTool<>SubToolFPC) or ((Msg.SubTool<>SubToolFPC) and (Msg.SubTool<>SubToolPas2js))
or (Msg.MsgID=0) or (Msg.MsgID=0)
then exit; then exit;
MsgID:=Msg.MsgID; MsgID:=Msg.MsgID;
@ -371,7 +371,8 @@ var
Code: TCodeBuffer; Code: TCodeBuffer;
begin begin
Result:=false; 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; or (not Msg.HasSourcePosition) then exit;
// Check: Local variable "$1" does not seem to be initialized // Check: Local variable "$1" does not seem to be initialized
@ -512,7 +513,7 @@ begin
ToolData:=nil; ToolData:=nil;
IDETool:=nil; IDETool:=nil;
if (Msg.Urgency>=mluError) if (Msg.Urgency>=mluError)
or (Msg.SubTool<>SubToolFPC) or ((Msg.SubTool<>SubToolFPC) and (Msg.SubTool<>SubToolPas2js))
or (Msg.MsgID=0) or (Msg.MsgID=0)
then exit; then exit;
ToolData:=Msg.GetToolData; ToolData:=Msg.GetToolData;
@ -578,7 +579,7 @@ begin
CurMsg:=Msg.Lines[i]; CurMsg:=Msg.Lines[i];
if (CurMsg.MsgID<>Msg.MsgID) if (CurMsg.MsgID<>Msg.MsgID)
or (CurMsg.Urgency>=mluError) or (CurMsg.Urgency>=mluError)
or (CurMsg.SubTool<>SubToolFPC) or ((CurMsg.SubTool<>SubToolFPC) and (CurMsg.SubTool<>SubToolPas2js))
then continue; then continue;
CurMsg.MarkFixed; CurMsg.MarkFixed;
end; end;
@ -597,7 +598,10 @@ var
begin begin
Result:=false; Result:=false;
// Check: Local variable "$1" not used // 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; exit;
if not Msg.HasSourcePosition or not IsValidIdent(Identifier) then exit; if not Msg.HasSourcePosition or not IsValidIdent(Identifier) then exit;
@ -676,10 +680,12 @@ var
begin begin
Result:=false; Result:=false;
if (not Msg.HasSourcePosition) then exit; 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" // Constructing a class "$1" with abstract method "$2"
Result:=true; 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 // No matching implementation for interface method "$1" found
// The position is on the 'class' keyword // The position is on the 'class' keyword
// The MissingMethod is 'interfacename.procname' // The MissingMethod is 'interfacename.procname'
@ -765,12 +771,23 @@ function TQuickFixUnitNotFound_Remove.IsApplicable(Msg: TMessageLine; out
begin begin
Result:=false; Result:=false;
if Msg=nil then exit; if Msg=nil then exit;
if (Msg.SubTool<>SubToolFPC) if (Msg.SubTool=SubToolFPC) then begin
or (not Msg.HasSourcePosition) if Msg.HasSourcePosition
or ((Msg.MsgID<>5023) // Unit "$1" not used in $2 and ((Msg.MsgID=5023) // Unit "$1" not used in $2
and (Msg.MsgID<>FPCMsgIDCantFindUnitUsedBy) // Can't find unit $1 used by $2 or (Msg.MsgID=FPCMsgIDCantFindUnitUsedBy) // Can't find unit $1 used by $2
and (Msg.MsgID<>10023)) // Unit $1 was not found but $2 exists or (Msg.MsgID=10023)) // Unit $1 was not found but $2 exists
then exit; 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]; MissingUnitName:=Msg.Attribute[FPCMsgAttrMissingUnit];
UsedByUnit:=Msg.Attribute[FPCMsgAttrUsedByUnit]; UsedByUnit:=Msg.Attribute[FPCMsgAttrUsedByUnit];
@ -849,7 +866,10 @@ begin
Result:=false; Result:=false;
Identifier:=''; Identifier:='';
// check: identifier not found "$1" // 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; exit;
if not Msg.HasSourcePosition or not IsValidIdent(Identifier) then exit; if not Msg.HasSourcePosition or not IsValidIdent(Identifier) then exit;
@ -997,7 +1017,7 @@ function TQuickFix_HideWithIDEDirective.IsApplicable(Msg: TMessageLine): boolean
begin begin
Result:=false; Result:=false;
if (Msg.Urgency>=mluError) if (Msg.Urgency>=mluError)
or (Msg.SubTool<>SubToolFPC) or ((Msg.SubTool<>SubToolFPC) and (Msg.SubTool<>SubToolPas2js))
or (not Msg.HasSourcePosition) or (not Msg.HasSourcePosition)
or (mlfHiddenByIDEDirective in Msg.Flags) or (mlfHiddenByIDEDirective in Msg.Flags)
then exit; then exit;