mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-03 19:07:27 +01:00
identifier completion for uses section now searches in unit links too
git-svn-id: trunk@8706 -
This commit is contained in:
parent
0e46adcc18
commit
0466587d56
@ -154,6 +154,9 @@ function GatherUnitFiles(const BaseDir, SearchPath,
|
||||
Extensions: string; KeepDoubles, CaseInsensitive: boolean;
|
||||
var TreeOfUnitFiles: TAVLTree): boolean;
|
||||
procedure FreeTreeOfUnitFiles(TreeOfUnitFiles: TAVLTree);
|
||||
procedure AddToTreeOfUnitFiles(var TreeOfUnitFiles: TAVLTree;
|
||||
const Filename: string;
|
||||
KeepDoubles: boolean);
|
||||
function CompareUnitFileInfos(Data1, Data2: Pointer): integer;
|
||||
function CompareUnitNameAndUnitFileInfo(UnitnamePAnsiString,
|
||||
UnitFileInfo: Pointer): integer;
|
||||
@ -3257,30 +3260,6 @@ var
|
||||
Result:=false;
|
||||
end;
|
||||
|
||||
procedure AddFilename(const Filename: string);
|
||||
var
|
||||
AnUnitName: String;
|
||||
NewItem: TUnitFileInfo;
|
||||
begin
|
||||
AnUnitName:=ExtractFileNameOnly(Filename);
|
||||
//DebugLn('AddFilename AnUnitName="',AnUnitName,'" Filename="',Filename,'"');
|
||||
if (not KeepDoubles) then begin
|
||||
if (TreeOfUnitFiles<>nil)
|
||||
and (TreeOfUnitFiles.FindKey(Pointer(AnUnitName),
|
||||
@CompareUnitNameAndUnitFileInfo)<>nil)
|
||||
then begin
|
||||
// an unit with the same name was already found and doubles are not
|
||||
// wanted
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
// add
|
||||
if TreeOfUnitFiles=nil then
|
||||
TreeOfUnitFiles:=TAVLTree.Create(@CompareUnitFileInfos);
|
||||
NewItem:=TUnitFileInfo.Create(AnUnitName,Filename);
|
||||
TreeOfUnitFiles.Add(NewItem);
|
||||
end;
|
||||
|
||||
function SearchDirectory(const ADirectory: string): boolean;
|
||||
var
|
||||
FileInfo: TSearchRec;
|
||||
@ -3299,7 +3278,8 @@ var
|
||||
then
|
||||
continue;
|
||||
if ExtensionFits(FileInfo.Name) then begin
|
||||
AddFilename(ADirectory+FileInfo.Name);
|
||||
AddToTreeOfUnitFiles(TreeOfUnitFiles,ADirectory+FileInfo.Name,
|
||||
KeepDoubles);
|
||||
end;
|
||||
until SysUtils.FindNext(FileInfo)<>0;
|
||||
end;
|
||||
@ -3346,6 +3326,30 @@ begin
|
||||
TreeOfUnitFiles.Free;
|
||||
end;
|
||||
|
||||
procedure AddToTreeOfUnitFiles(var TreeOfUnitFiles: TAVLTree;
|
||||
const Filename: string; KeepDoubles: boolean);
|
||||
var
|
||||
AnUnitName: String;
|
||||
NewItem: TUnitFileInfo;
|
||||
begin
|
||||
AnUnitName:=ExtractFileNameOnly(Filename);
|
||||
if (not KeepDoubles) then begin
|
||||
if (TreeOfUnitFiles<>nil)
|
||||
and (TreeOfUnitFiles.FindKey(Pointer(AnUnitName),
|
||||
@CompareUnitNameAndUnitFileInfo)<>nil)
|
||||
then begin
|
||||
// an unit with the same name was already found and doubles are not
|
||||
// wanted
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
// add
|
||||
if TreeOfUnitFiles=nil then
|
||||
TreeOfUnitFiles:=TAVLTree.Create(@CompareUnitFileInfos);
|
||||
NewItem:=TUnitFileInfo.Create(AnUnitName,Filename);
|
||||
TreeOfUnitFiles.Add(NewItem);
|
||||
end;
|
||||
|
||||
function CompareUnitFileInfos(Data1, Data2: Pointer): integer;
|
||||
begin
|
||||
Result:=CompareIdentifiers(PChar(TUnitFileInfo(Data1).UnitName),
|
||||
|
||||
@ -53,7 +53,7 @@ uses
|
||||
{$ENDIF}
|
||||
Classes, SysUtils, FileProcs, CodeTree, CodeAtom, CustomCodeTool,
|
||||
KeywordFuncLists, BasicCodeTools, LinkScanner,
|
||||
AVL_Tree, CodeToolMemManager,
|
||||
AVL_Tree, CodeToolMemManager, DefineTemplates,
|
||||
SourceChanger, FindDeclarationTool, PascalParserTool;
|
||||
|
||||
|
||||
@ -943,10 +943,42 @@ end;
|
||||
|
||||
procedure TIdentCompletionTool.GatherUnitnames(CleanPos: integer;
|
||||
const Context: TFindContext; BeautifyCodeOptions: TBeautifyCodeOptions);
|
||||
var
|
||||
TreeOfUnitFiles: TAVLTree;
|
||||
|
||||
procedure GatherUnitsFromUnitLinks;
|
||||
var
|
||||
UnitLinks: string;
|
||||
UnitLinkStart: Integer;
|
||||
UnitLinkEnd: LongInt;
|
||||
UnitLinkLen: Integer;
|
||||
Filename: String;
|
||||
begin
|
||||
UnitLinks:=Scanner.Values[ExternalMacroStart+'UnitLinks'];
|
||||
UnitLinkStart:=1;
|
||||
while UnitLinkStart<=length(UnitLinks) do begin
|
||||
while (UnitLinkStart<=length(UnitLinks))
|
||||
and (UnitLinks[UnitLinkStart] in [#10,#13]) do
|
||||
inc(UnitLinkStart);
|
||||
UnitLinkEnd:=UnitLinkStart;
|
||||
while (UnitLinkEnd<=length(UnitLinks)) and (UnitLinks[UnitLinkEnd]<>' ')
|
||||
do
|
||||
inc(UnitLinkEnd);
|
||||
UnitLinkLen:=UnitLinkEnd-UnitLinkStart;
|
||||
if UnitLinkLen>0 then begin
|
||||
Filename:=copy(UnitLinks,UnitLinkStart,UnitLinkEnd-UnitLinkStart);
|
||||
AddToTreeOfUnitFiles(TreeOfUnitFiles,Filename,false);
|
||||
end;
|
||||
UnitLinkStart:=UnitLinkEnd+1;
|
||||
while (UnitLinkStart<=length(UnitLinks))
|
||||
and (not (UnitLinks[UnitLinkStart] in [#10,#13])) do
|
||||
inc(UnitLinkStart);
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
UnitPath, SrcPath: string;
|
||||
BaseDir: String;
|
||||
TreeOfUnitFiles: TAVLTree;
|
||||
ANode: TAVLTreeNode;
|
||||
UnitFileInfo: TUnitFileInfo;
|
||||
NewItem: TIdentifierListItem;
|
||||
@ -967,6 +999,8 @@ begin
|
||||
// search in srcpath
|
||||
SrcExt:='pp;pas';
|
||||
GatherUnitFiles(BaseDir,SrcPath,SrcExt,false,true,TreeOfUnitFiles);
|
||||
// add unitlinks
|
||||
GatherUnitsFromUnitLinks;
|
||||
// create list
|
||||
CurSourceName:=GetSourceName;
|
||||
ANode:=TreeOfUnitFiles.FindLowest;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user