mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 09:39:31 +02:00
IDE: quickfix for IDE warning: other sources path of package %s contains directory..., open package
git-svn-id: trunk@45533 -
This commit is contained in:
parent
d101548d68
commit
8399cd5e34
@ -238,7 +238,7 @@ function FPCMsgFits(const Msg, Pattern: string;
|
||||
VarStarts: PPChar = nil; VarEnds: PPChar = nil // 10 PChars
|
||||
): boolean;
|
||||
function GetFPCMsgValue1(const Src, Pattern: string; out Value1: string): boolean;
|
||||
function GetFPCMsgValues(Src, Pattern: string; out Value1, Value2: string): boolean;
|
||||
function GetFPCMsgValues2(Src, Pattern: string; out Value1, Value2: string): boolean;
|
||||
|
||||
// not thread safe
|
||||
function IsFileInIDESrcDir(Filename: string): boolean; // (main thread)
|
||||
@ -488,7 +488,7 @@ begin
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
function GetFPCMsgValues(Src, Pattern: string; out Value1, Value2: string
|
||||
function GetFPCMsgValues2(Src, Pattern: string; out Value1, Value2: string
|
||||
): boolean;
|
||||
{ Pattern: 'Unit $1 was not found but $2 exists'
|
||||
Src: 'Unit dialogprocs was not found but dialogpr exists'
|
||||
@ -2027,7 +2027,7 @@ procedure TIDEFPCParser.ImproveMsgLinkerUndefinedReference(
|
||||
begin
|
||||
Result:=false;
|
||||
if MsgLine.HasSourcePosition then exit;
|
||||
if not etFPCMsgParser.GetFPCMsgValues(MsgLine.Msg,' _$1 in $2.o',
|
||||
if not etFPCMsgParser.GetFPCMsgValues2(MsgLine.Msg,' _$1 in $2.o',
|
||||
MangledName,aUnitName)
|
||||
then exit;
|
||||
Result:=true;
|
||||
@ -2816,7 +2816,7 @@ begin
|
||||
Result:=false;
|
||||
if Msg.MsgID<=0 then exit;
|
||||
if Msg.SubTool<>SubToolFPC then exit;
|
||||
Result:=etFPCMsgParser.GetFPCMsgValues(Msg.Msg,GetFPCMsgPattern(Msg),Value1,Value2);
|
||||
Result:=etFPCMsgParser.GetFPCMsgValues2(Msg.Msg,GetFPCMsgPattern(Msg),Value1,Value2);
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
@ -62,25 +62,6 @@ uses
|
||||
|
||||
type
|
||||
|
||||
{ TQuickFix_HideWithIDEDirective - hide with IDE directive %H- }
|
||||
|
||||
TQuickFix_HideWithIDEDirective = class(TMsgQuickFix)
|
||||
public
|
||||
function IsApplicable(Msg: TMessageLine): boolean;
|
||||
procedure CreateMenuItems(Fixes: TMsgQuickFixes); override;
|
||||
procedure QuickFix(Fixes: TMsgQuickFixes; Msg: TMessageLine); override;
|
||||
end;
|
||||
|
||||
{ TQuickFix_HideWithCompilerOption - hide with compiler option -vm<id> }
|
||||
|
||||
TQuickFix_HideWithCompilerOption = class(TMsgQuickFix)
|
||||
public
|
||||
function IsApplicable(Msg: TMessageLine; out ToolData: TIDEExternalToolData;
|
||||
out IDETool: TObject): boolean;
|
||||
procedure CreateMenuItems(Fixes: TMsgQuickFixes); override;
|
||||
procedure QuickFix(Fixes: TMsgQuickFixes; Msg: TMessageLine); override;
|
||||
end;
|
||||
|
||||
{ TQuickFixIdentifierNotFoundAddLocal }
|
||||
|
||||
TQuickFixIdentifierNotFoundAddLocal = class(TMsgQuickFix)
|
||||
@ -120,6 +101,37 @@ type
|
||||
procedure QuickFix(Fixes: TMsgQuickFixes; Msg: TMessageLine); override;
|
||||
end;
|
||||
|
||||
{ TQuickFixSrcPathOfPkgContains_OpenPkg
|
||||
QuickFix for IDE warning "other sources path of package %s contains directory "%s", ..."
|
||||
Open Package
|
||||
}
|
||||
|
||||
TQuickFixSrcPathOfPkgContains_OpenPkg = class(TMsgQuickFix)
|
||||
public
|
||||
function IsApplicable(Msg: TMessageLine; out PkgName: string): boolean;
|
||||
procedure CreateMenuItems(Fixes: TMsgQuickFixes); override;
|
||||
procedure QuickFix(Fixes: TMsgQuickFixes; Msg: TMessageLine); override;
|
||||
end;
|
||||
|
||||
{ TQuickFix_HideWithIDEDirective - hide with IDE directive %H- }
|
||||
|
||||
TQuickFix_HideWithIDEDirective = class(TMsgQuickFix)
|
||||
public
|
||||
function IsApplicable(Msg: TMessageLine): boolean;
|
||||
procedure CreateMenuItems(Fixes: TMsgQuickFixes); override;
|
||||
procedure QuickFix(Fixes: TMsgQuickFixes; Msg: TMessageLine); override;
|
||||
end;
|
||||
|
||||
{ TQuickFix_HideWithCompilerOption - hide with compiler option -vm<id> }
|
||||
|
||||
TQuickFix_HideWithCompilerOption = class(TMsgQuickFix)
|
||||
public
|
||||
function IsApplicable(Msg: TMessageLine; out ToolData: TIDEExternalToolData;
|
||||
out IDETool: TObject): boolean;
|
||||
procedure CreateMenuItems(Fixes: TMsgQuickFixes); override;
|
||||
procedure QuickFix(Fixes: TMsgQuickFixes; Msg: TMessageLine); override;
|
||||
end;
|
||||
|
||||
{ TIDEQuickFixes }
|
||||
|
||||
TIDEQuickFixes = class(TMsgQuickFixes)
|
||||
@ -184,6 +196,63 @@ begin
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
{ TQuickFixSrcPathOfPkgContains_OpenPkg }
|
||||
|
||||
function TQuickFixSrcPathOfPkgContains_OpenPkg.IsApplicable(Msg: TMessageLine;
|
||||
out PkgName: string): boolean;
|
||||
var
|
||||
Dir: string;
|
||||
Pattern: String;
|
||||
p: SizeInt;
|
||||
begin
|
||||
Result:=false;
|
||||
if Msg=nil then exit;
|
||||
if Msg.MsgID<>0 then exit;
|
||||
|
||||
Pattern:=lisOtherSourcesPathOfPackageContainsDirectoryWhichIsA;
|
||||
p:=Pos('%s',Pattern);
|
||||
if p<1 then begin
|
||||
debugln(['TQuickFixSrcPathOfPkgContains_OpenPkg.IsApplicable resourcestring misses %s: lisOtherSourcesPathOfPackageContainsDirectoryWhichIsA=',lisOtherSourcesPathOfPackageContainsDirectoryWhichIsA]);
|
||||
exit;
|
||||
end;
|
||||
ReplaceSubstring(Pattern,p,2,'$1');
|
||||
p:=Pos('%s',Pattern);
|
||||
if p<1 then begin
|
||||
debugln(['TQuickFixSrcPathOfPkgContains_OpenPkg.IsApplicable resourcestring misses %s: lisOtherSourcesPathOfPackageContainsDirectoryWhichIsA=',lisOtherSourcesPathOfPackageContainsDirectoryWhichIsA]);
|
||||
exit;
|
||||
end;
|
||||
ReplaceSubstring(Pattern,p,2,'$2');
|
||||
|
||||
if not GetFPCMsgValues2(Msg.Msg,Pattern,PkgName,Dir) then exit;
|
||||
if PkgName='' then exit;
|
||||
PkgName:=GetIdentifier(PChar(PkgName));
|
||||
Result:=IsValidIdent(PkgName);
|
||||
end;
|
||||
|
||||
procedure TQuickFixSrcPathOfPkgContains_OpenPkg.CreateMenuItems(
|
||||
Fixes: TMsgQuickFixes);
|
||||
var
|
||||
i: Integer;
|
||||
Msg: TMessageLine;
|
||||
PkgName: string;
|
||||
begin
|
||||
for i:=0 to Fixes.LineCount-1 do begin
|
||||
Msg:=Fixes.Lines[i];
|
||||
if not IsApplicable(Msg,PkgName) then continue;
|
||||
Fixes.AddMenuItem(Self, Msg, 'Open package "'+PkgName+'"');
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TQuickFixSrcPathOfPkgContains_OpenPkg.QuickFix(Fixes: TMsgQuickFixes;
|
||||
Msg: TMessageLine);
|
||||
var
|
||||
PkgName: string;
|
||||
begin
|
||||
if not IsApplicable(Msg,PkgName) then exit;
|
||||
PackageEditingInterface.DoOpenPackageWithName(PkgName,[pofAddToRecent],false);
|
||||
end;
|
||||
|
||||
{ TQuickFix_HideWithCompilerOption }
|
||||
|
||||
function TQuickFix_HideWithCompilerOption.IsApplicable(Msg: TMessageLine; out
|
||||
@ -765,12 +834,15 @@ begin
|
||||
fMenuItemToInfo:=TPointerToPointerTree.Create;
|
||||
|
||||
// init standard quickfixes
|
||||
IDEQuickFixes.RegisterQuickFix(TQuickFix_HideWithIDEDirective.Create);
|
||||
// add them in the order of usefulness
|
||||
IDEQuickFixes.RegisterQuickFix(TQuickFixIdentifierNotFoundAddLocal.Create);
|
||||
IDEQuickFixes.RegisterQuickFix(TQuickFixLocalVariableNotUsed_Remove.Create);
|
||||
IDEQuickFixes.RegisterQuickFix(TQuickFixUnitNotFound_Remove.Create);
|
||||
IDEQuickFixes.RegisterQuickFix(TQuickFixClassWithAbstractMethods.Create);
|
||||
IDEQuickFixes.RegisterQuickFix(TQuickFixSrcPathOfPkgContains_OpenPkg.Create);
|
||||
|
||||
// add as last (no fix, just hide message)
|
||||
IDEQuickFixes.RegisterQuickFix(TQuickFix_HideWithIDEDirective.Create);
|
||||
IDEQuickFixes.RegisterQuickFix(TQuickFix_HideWithCompilerOption.Create);
|
||||
end;
|
||||
|
||||
|
@ -3887,6 +3887,9 @@ resourcestring
|
||||
lisPkgMangTheFollowingPackageFailedToLoad = 'The following package failed to load:';
|
||||
lisPkgMangTheFollowingPackagesFailedToLoad = 'The following packages failed to load:';
|
||||
lisMissingPackages = 'Missing Packages';
|
||||
lisOtherSourcesPathOfPackageContainsDirectoryWhichIsA = 'other sources path '
|
||||
+'of package %s contains directory "%s", which is already in the unit '
|
||||
+'search path.';
|
||||
lisPkgManginvalidCompilerFilename = 'invalid Compiler filename';
|
||||
lisPkgMangTheCompilerFileForPackageIsNotAValidExecutable = 'The compiler '
|
||||
+'file for package %s is not a valid executable:%s%s';
|
||||
|
@ -2641,7 +2641,9 @@ var
|
||||
Dir:=GetNextDirectoryInSearchPath(UnparsedSrcPath,p);
|
||||
if Dir='' then exit;
|
||||
if SearchDirectoryInSearchPath(UnparsedUnitPath,Dir)>0 then begin
|
||||
s:='other sources path of '+aCompilerOptions.GetOwnerName+' contains directory "'+Dir+'", which is already in the unit search path.';
|
||||
// Note: when changing this, update TQuickFixSrcPathOfPkgContains_OpenPkg
|
||||
s:=Format(lisOtherSourcesPathOfPackageContainsDirectoryWhichIsA, [
|
||||
aCompilerOptions.GetOwnerName, Dir]);
|
||||
debugln(['CheckSrcPathIsInUnitPath WARNING: ',s]);
|
||||
{ ToDo: ask user and remove dir from unit path }
|
||||
IDEMessagesWindow.AddCustomMessage(mluWarning,s);
|
||||
|
Loading…
Reference in New Issue
Block a user