Browse Source

fcl-passrc: omit hint for not used anonymous type

mattias 2 years ago
parent
commit
a2182cb7a5

+ 10 - 0
packages/fcl-passrc/src/pasuseanalyzer.pas

@@ -2887,6 +2887,12 @@ begin
 end;
 end;
 
 
 procedure TPasAnalyzer.EmitTypeHints(El: TPasType);
 procedure TPasAnalyzer.EmitTypeHints(El: TPasType);
+
+  function IsRightStr(const s, right: string): boolean;
+  begin
+    Result:=RightStr(s,length(right))=right;
+  end;
+
 var
 var
   C: TClass;
   C: TClass;
   Usage: TPAElement;
   Usage: TPAElement;
@@ -2918,6 +2924,9 @@ begin
           end;
           end;
       end;
       end;
 
 
+    if IsRightStr(El.Name,Resolver.AnonymousElTypePostfix) then
+      exit; // anonymous type
+
     if (El.Visibility in [visPrivate,visStrictPrivate]) then
     if (El.Visibility in [visPrivate,visStrictPrivate]) then
       EmitMessage(20170312000020,mtHint,nPAPrivateTypeXNeverUsed,
       EmitMessage(20170312000020,mtHint,nPAPrivateTypeXNeverUsed,
         sPAPrivateTypeXNeverUsed,[El.FullName],El)
         sPAPrivateTypeXNeverUsed,[El.FullName],El)
@@ -2929,6 +2938,7 @@ begin
       EmitMessage(20170312000025,mtHint,nPALocalXYNotUsed,
       EmitMessage(20170312000025,mtHint,nPALocalXYNotUsed,
         sPALocalXYNotUsed,[El.ElementTypeName,GetElementNameAndParams(El)],El);
         sPALocalXYNotUsed,[El.ElementTypeName,GetElementNameAndParams(El)],El);
       end;
       end;
+
     exit;
     exit;
     end;
     end;
   // emit hints for sub elements
   // emit hints for sub elements

+ 18 - 0
packages/fcl-passrc/tests/tcuseanalyzer.pas

@@ -109,6 +109,7 @@ type
     procedure TestM_Hint_ArgPassed_No_ParameterNotUsed;
     procedure TestM_Hint_ArgPassed_No_ParameterNotUsed;
     procedure TestM_Hint_ArrayArg_No_ParameterNotUsed;
     procedure TestM_Hint_ArrayArg_No_ParameterNotUsed;
     procedure TestM_Hint_ArrayArg_No_ParameterNotUsed2;
     procedure TestM_Hint_ArrayArg_No_ParameterNotUsed2;
+    procedure TestM_Hint_ArrayStaticDim2_No_LocalArrayTypeNotUsed;
     procedure TestM_Hint_InheritedWithoutParams;
     procedure TestM_Hint_InheritedWithoutParams;
     procedure TestM_Hint_LocalVariableNotUsed;
     procedure TestM_Hint_LocalVariableNotUsed;
     procedure TestM_HintsOff_LocalVariableNotUsed;
     procedure TestM_HintsOff_LocalVariableNotUsed;
@@ -1798,6 +1799,23 @@ begin
   CheckUseAnalyzerUnexpectedHints;
   CheckUseAnalyzerUnexpectedHints;
 end;
 end;
 
 
+procedure TTestUseAnalyzer.TestM_Hint_ArrayStaticDim2_No_LocalArrayTypeNotUsed;
+begin
+  StartProgram(false);
+  Add([
+  'type',
+  '  TObject = class',
+  '  end;',
+  'var',
+  '  oa: array [1..10, 1..10] of TObject;',
+  'begin',
+  '']);
+  AnalyzeProgram;
+  CheckUseAnalyzerHint(mtHint,nPALocalXYNotUsed,'Local class "TObject" not used');
+  CheckUseAnalyzerHint(mtHint,nPALocalVariableNotUsed,'Local variable "oa" not used');
+  CheckUseAnalyzerUnexpectedHints;
+end;
+
 procedure TTestUseAnalyzer.TestM_Hint_InheritedWithoutParams;
 procedure TTestUseAnalyzer.TestM_Hint_InheritedWithoutParams;
 begin
 begin
   StartProgram(false);
   StartProgram(false);

+ 18 - 0
packages/pastojs/tests/tcpas2jsanalyzer.pas

@@ -48,6 +48,7 @@ type
   Published
   Published
     procedure TestM_ProgramLocalVar;
     procedure TestM_ProgramLocalVar;
     procedure TestM_PassRecordToJSValue;
     procedure TestM_PassRecordToJSValue;
+    procedure TestM_StaticArrayDim2;
   end;
   end;
 
 
 
 
@@ -96,6 +97,23 @@ begin
   AnalyzeProgram;
   AnalyzeProgram;
 end;
 end;
 
 
+procedure TTestPas2jsAnalyzer.TestM_StaticArrayDim2;
+begin
+  StartProgram(false);
+  Add([
+  'type',
+  '  TObject = class',
+  '  end;',
+  'var',
+  '  oa: array [1..10, 1..10] of TObject;',
+  'begin',
+  'end.']);
+  AnalyzeProgram;
+  CheckUseAnalyzerHint(mtHint,nPALocalXYNotUsed,'Local class "TObject" not used');
+  CheckUseAnalyzerHint(mtHint,nPALocalVariableNotUsed,'Local variable "oa" not used');
+  CheckUseAnalyzerUnexpectedHints;
+end;
+
 { TCustomTestPas2jsAnalyzer }
 { TCustomTestPas2jsAnalyzer }
 
 
 function TCustomTestPas2jsAnalyzer.GetPAMessages(Index: integer): TPAMessage;
 function TCustomTestPas2jsAnalyzer.GetPAMessages(Index: integer): TPAMessage;