فهرست منبع

Add 'procedure' and 'function' headers to the hints and also show those without parameters.

Martijn Laan 7 ماه پیش
والد
کامیت
2679b7feec
2فایلهای تغییر یافته به همراه48 افزوده شده و 31 حذف شده
  1. 18 10
      Projects/Src/IDE.MainForm.pas
  2. 30 21
      Projects/Src/IDE.ScintStylerInnoSetup.pas

+ 18 - 10
Projects/Src/IDE.MainForm.pas

@@ -5394,9 +5394,10 @@ begin
     FCallTipState.LastPosCallTip := Pos;
     FCallTipState.LastPosCallTip := Pos;
 
 
   // Should get current api definition
   // Should get current api definition
-  var Word := FMemosStyler.GetScriptFunctionDefinition(FCallTipState.ClassOrRecordMember, FCallTipState.CurrentCallTipWord, FCallTipState.CurrentCallTip, FCallTipState.MaxCallTips);
-  if Word <> '' then begin
-    FCallTipState.FunctionDefinition := Word;
+  var FunctionDefinition := FMemosStyler.GetScriptFunctionDefinition(FCallTipState.ClassOrRecordMember, FCallTipState.CurrentCallTipWord, FCallTipState.CurrentCallTip, FCallTipState.MaxCallTips);
+  if ((FCallTipState.MaxCallTips = 1) and FunctionDefinition.HasParams) or //if there's a single definition then only show if it has a parameter
+     (FCallTipState.MaxCallTips > 1) then begin                            //if there's multiple then show always just like MemoHintShow, so even the one without parameters if it exists
+    FCallTipState.FunctionDefinition := FunctionDefinition.ScriptFuncWithoutHeader;
     if FCallTipState.MaxCallTips > 1 then
     if FCallTipState.MaxCallTips > 1 then
       FCallTipState.FunctionDefinition := AnsiString(Format(#1'%d of %d'#2'%s', [FCallTipState.CurrentCallTip+1, FCallTipState.MaxCallTips, FCallTipState.FunctionDefinition]));
       FCallTipState.FunctionDefinition := AnsiString(Format(#1'%d of %d'#2'%s', [FCallTipState.CurrentCallTip+1, FCallTipState.MaxCallTips, FCallTipState.FunctionDefinition]));
 
 
@@ -5721,20 +5722,27 @@ begin
           HintStr := 'Unknown error';
           HintStr := 'Unknown error';
         end;
         end;
       end else begin
       end else begin
-        var Name := FActiveMemo.GetTextRange(VarOrFuncRange.StartPos, VarOrFuncRange.EndPos);
         var ClassMember := False;
         var ClassMember := False;
+        var Name := FActiveMemo.GetTextRange(VarOrFuncRange.StartPos, VarOrFuncRange.EndPos);
         var Index := 0;
         var Index := 0;
         var Count: Integer;
         var Count: Integer;
-        var Definition := FMemosStyler.GetScriptFunctionDefinition(ClassMember, Name, Index, Count);
-        if Definition = '' then begin
+        var FunctionDefinition := FMemosStyler.GetScriptFunctionDefinition(ClassMember, Name, Index, Count);
+        if Count = 0 then begin
           ClassMember := not ClassMember;
           ClassMember := not ClassMember;
-          Definition := FMemosStyler.GetScriptFunctionDefinition(ClassMember, Name, Index, Count);
+          FunctionDefinition := FMemosStyler.GetScriptFunctionDefinition(ClassMember, Name, Index, Count);
         end;
         end;
-        while Index < Count-1 do begin
+        while Index < Count do begin
+          if Index <> 0 then
+            FunctionDefinition := FMemosStyler.GetScriptFunctionDefinition(ClassMember, Name, Index);
+          if HintStr <> '' then
+            HintStr := HintStr + #13;
+          if FunctionDefinition.WasFunction then
+            HintStr := HintStr + 'function '
+          else
+            HintStr := HintStr + 'procedure ';
+          HintStr := HintStr + String(FunctionDefinition.ScriptFuncWithoutHeader);
           Inc(Index);
           Inc(Index);
-          Definition := Definition + #13 + FMemosStyler.GetScriptFunctionDefinition(ClassMember, Name, Index);
         end;
         end;
-        HintStr := String(Definition);
       end;
       end;
 
 
       if HintStr <> '' then begin
       if HintStr <> '' then begin

+ 30 - 21
Projects/Src/IDE.ScintStylerInnoSetup.pas

@@ -74,7 +74,12 @@ type
     stISPPReservedWord, stISPPString, stISPPNumber);
     stISPPReservedWord, stISPPString, stISPPNumber);
 
 
   TWordsBySection = TObjectDictionary<TInnoSetupStylerSection, TStringList>;
   TWordsBySection = TObjectDictionary<TInnoSetupStylerSection, TStringList>;
-  TFunctionDefinitions = array of AnsiString;
+  TFunctionDefinition = record
+    ScriptFuncWithoutHeader: AnsiString;
+    WasFunction, HasParams: Boolean;
+    constructor Create(const ScriptFunc: AnsiString);
+  end;
+  TFunctionDefinitions = array of TFunctionDefinition;
   TFunctionDefinitionsByName = TDictionary<String, TFunctionDefinitions>;
   TFunctionDefinitionsByName = TDictionary<String, TFunctionDefinitions>;
 
 
   TInnoSetupStyler = class(TScintCustomStyler)
   TInnoSetupStyler = class(TScintCustomStyler)
@@ -141,9 +146,9 @@ type
     class function IsParamSection(const Section: TInnoSetupStylerSection): Boolean;
     class function IsParamSection(const Section: TInnoSetupStylerSection): Boolean;
     class function IsSymbolStyle(const Style: TScintStyleNumber): Boolean;
     class function IsSymbolStyle(const Style: TScintStyleNumber): Boolean;
     function GetScriptFunctionDefinition(const ClassMember: Boolean;
     function GetScriptFunctionDefinition(const ClassMember: Boolean;
-      const Name: String; const Index: Integer; out Count: Integer): AnsiString; overload;
+      const Name: String; const Index: Integer; out Count: Integer): TFunctionDefinition; overload;
     function GetScriptFunctionDefinition(const ClassMember: Boolean;
     function GetScriptFunctionDefinition(const ClassMember: Boolean;
-      const Name: String; const Index: Integer): AnsiString; overload;
+      const Name: String; const Index: Integer): TFunctionDefinition; overload;
     function SectionHasFlag(const Section: TInnoSetupStylerSection; const Flag: String): Boolean;
     function SectionHasFlag(const Section: TInnoSetupStylerSection; const Flag: String): Boolean;
     property ConstantsWordList: AnsiString read FConstantsWordList;
     property ConstantsWordList: AnsiString read FConstantsWordList;
     property EventFunctionsWordList[Procedures: Boolean]: AnsiString read GetEventFunctionsWordList;
     property EventFunctionsWordList[Procedures: Boolean]: AnsiString read GetEventFunctionsWordList;
@@ -567,6 +572,14 @@ begin
   Result := True;
   Result := True;
 end;
 end;
 
 
+{ TFunctionDefinition }
+
+constructor TFunctionDefinition.Create(const ScriptFunc: AnsiString);
+begin
+  ScriptFuncWithoutHeader := RemoveScriptFuncHeader(ScriptFunc, WasFunction);
+  HasParams := ScriptFuncHasParameters(ScriptFunc);
+end;
+
 { TInnoSetupStyler }
 { TInnoSetupStyler }
 
 
 constructor TInnoSetupStyler.Create(AOwner: TComponent);
 constructor TInnoSetupStyler.Create(AOwner: TComponent);
@@ -796,20 +809,18 @@ procedure TInnoSetupStyler.BuildScriptFunctionsLists(
   const SL: TStringList);
   const SL: TStringList);
 begin
 begin
   for var ScriptFunc in ScriptFuncTable do begin
   for var ScriptFunc in ScriptFuncTable do begin
-    var ScriptFuncWithoutHeader := RemoveScriptFuncHeader(ScriptFunc);
-    var ScriptFuncName := ExtractScriptFuncWithoutHeaderName(ScriptFuncWithoutHeader);
+    var FunctionDefinition := TFunctionDefinition.Create(ScriptFunc);
+    var ScriptFuncName := ExtractScriptFuncWithoutHeaderName(FunctionDefinition.ScriptFuncWithoutHeader);
     var DoAddWordToList := True;
     var DoAddWordToList := True;
-    if ScriptFuncHasParameters(ScriptFunc) then begin
-      var Key := String(ScriptFuncName);
-      if not FScriptFunctionsByName[ClassMembers].TryAdd(Key, [ScriptFuncWithoutHeader]) then begin
-        { Function has multiple prototypes }
-        var ScriptFunctions := FScriptFunctionsByName[ClassMembers][Key];
-        var N := Length(ScriptFunctions);
-        SetLength(ScriptFunctions, N+1);
-        ScriptFunctions[N] := ScriptFuncWithoutHeader;
-        FScriptFunctionsByName[ClassMembers][Key] := ScriptFunctions;
-        DoAddWordToList := False; { Already added it when the first prototype was found }
-      end;
+    var Key := String(ScriptFuncName);
+    if not FScriptFunctionsByName[ClassMembers].TryAdd(Key, [FunctionDefinition]) then begin
+      { Function has multiple prototypes }
+      var ScriptFunctions := FScriptFunctionsByName[ClassMembers][Key];
+      var N := Length(ScriptFunctions);
+      SetLength(ScriptFunctions, N+1);
+      ScriptFunctions[N] := FunctionDefinition;
+      FScriptFunctionsByName[ClassMembers][Key] := ScriptFunctions;
+      DoAddWordToList := False; { Already added it when the first prototype was found }
     end;
     end;
     if DoAddWordToList then
     if DoAddWordToList then
       AddWordToList(SL, ScriptFuncName, awtScriptFunction);
       AddWordToList(SL, ScriptFuncName, awtScriptFunction);
@@ -925,7 +936,7 @@ begin
 end;
 end;
 
 
 function TInnoSetupStyler.GetScriptFunctionDefinition(const ClassMember: Boolean;
 function TInnoSetupStyler.GetScriptFunctionDefinition(const ClassMember: Boolean;
-  const Name: String; const Index: Integer; out Count: Integer): AnsiString;
+  const Name: String; const Index: Integer; out Count: Integer): TFunctionDefinition;
 begin
 begin
   var ScriptFunctions: TFunctionDefinitions;
   var ScriptFunctions: TFunctionDefinitions;
   if FScriptFunctionsByName[ClassMember].TryGetValue(Name, ScriptFunctions) then begin
   if FScriptFunctionsByName[ClassMember].TryGetValue(Name, ScriptFunctions) then begin
@@ -934,15 +945,13 @@ begin
     if ResultIndex >= Count then
     if ResultIndex >= Count then
       ResultIndex := Count-1;
       ResultIndex := Count-1;
     Result := ScriptFunctions[ResultIndex]
     Result := ScriptFunctions[ResultIndex]
-  end else begin
+  end else
     Count := 0;
     Count := 0;
-    Result := '';
-  end;
 end;
 end;
 
 
 function TInnoSetupStyler.GetScriptFunctionDefinition(
 function TInnoSetupStyler.GetScriptFunctionDefinition(
   const ClassMember: Boolean; const Name: String;
   const ClassMember: Boolean; const Name: String;
-  const Index: Integer): AnsiString;
+  const Index: Integer): TFunctionDefinition;
 begin
 begin
   var Count: Integer;
   var Count: Integer;
   Result := GetScriptFunctionDefinition(ClassMember, Name, Index, Count);
   Result := GetScriptFunctionDefinition(ClassMember, Name, Index, Count);