Browse Source

fcl-passrc: resolver: fixed emit hints for used units

mattias 3 years ago
parent
commit
36d7b53437
2 changed files with 26 additions and 1 deletions
  1. 1 1
      packages/fcl-passrc/src/pasresolver.pp
  2. 25 0
      packages/fcl-passrc/tests/tcresolver.pas

+ 1 - 1
packages/fcl-passrc/src/pasresolver.pp

@@ -6039,7 +6039,7 @@ begin
     for j:=0 to length(IntfHelpers)-1 do
     for j:=0 to length(IntfHelpers)-1 do
       AddActiveHelper(TPRHelperEntry(IntfHelpers[j]).Helper);
       AddActiveHelper(TPRHelperEntry(IntfHelpers[j]).Helper);
 
 
-    EmitElementHints(Section,UseUnit);
+    EmitElementHints(UseUnit,UseModule);
     end;
     end;
 
 
   // Add first name of dotted unitname (top level subnamespace) as identifier
   // Add first name of dotted unitname (top level subnamespace) as identifier

+ 25 - 0
packages/fcl-passrc/tests/tcresolver.pas

@@ -940,6 +940,7 @@ type
     Procedure TestHint_ElementHintsMsg;
     Procedure TestHint_ElementHintsMsg;
     Procedure TestHint_ElementHintsAlias;
     Procedure TestHint_ElementHintsAlias;
     Procedure TestHint_ElementHints_WarnOff_SymbolDeprecated;
     Procedure TestHint_ElementHints_WarnOff_SymbolDeprecated;
+    Procedure TestHint_UsesHints;
     Procedure TestHint_Garbage;
     Procedure TestHint_Garbage;
 
 
     // helpers
     // helpers
@@ -17207,12 +17208,14 @@ begin
   '  TPlatform = longint platform;',
   '  TPlatform = longint platform;',
   '  TExperimental = longint experimental;',
   '  TExperimental = longint experimental;',
   '  TUnimplemented = longint unimplemented;',
   '  TUnimplemented = longint unimplemented;',
+  '  TExperimentalPlatform = boolean experimental platform;',
   'var',
   'var',
   '  vDeprecated: TDeprecated;',
   '  vDeprecated: TDeprecated;',
   '  vLibrary: TLibrary;',
   '  vLibrary: TLibrary;',
   '  vPlatform: TPlatform;',
   '  vPlatform: TPlatform;',
   '  vExperimental: TExperimental;',
   '  vExperimental: TExperimental;',
   '  vUnimplemented: TUnimplemented;',
   '  vUnimplemented: TUnimplemented;',
+  '  vExperimentalPlatform: TExperimentalPlatform;',
   'begin',
   'begin',
   '']);
   '']);
   ParseProgram;
   ParseProgram;
@@ -17221,6 +17224,8 @@ begin
   CheckResolverHint(mtWarning,nSymbolXIsNotPortable,'Symbol "TPlatform" is not portable');
   CheckResolverHint(mtWarning,nSymbolXIsNotPortable,'Symbol "TPlatform" is not portable');
   CheckResolverHint(mtWarning,nSymbolXIsExperimental,'Symbol "TExperimental" is experimental');
   CheckResolverHint(mtWarning,nSymbolXIsExperimental,'Symbol "TExperimental" is experimental');
   CheckResolverHint(mtWarning,nSymbolXIsNotImplemented,'Symbol "TUnimplemented" is not implemented');
   CheckResolverHint(mtWarning,nSymbolXIsNotImplemented,'Symbol "TUnimplemented" is not implemented');
+  CheckResolverHint(mtWarning,nSymbolXIsExperimental,'Symbol "TExperimentalPlatform" is experimental');
+  CheckResolverHint(mtWarning,nSymbolXIsNotPortable,'Symbol "TExperimentalPlatform" is not portable');
   CheckResolverUnexpectedHints;
   CheckResolverUnexpectedHints;
 end;
 end;
 
 
@@ -17288,6 +17293,26 @@ begin
   CheckResolverUnexpectedHints(true);
   CheckResolverUnexpectedHints(true);
 end;
 end;
 
 
+procedure TTestResolver.TestHint_UsesHints;
+var
+  Src: String;
+begin
+  Src:='{$mode objfpc}';
+  Src+='unit unit2 experimental platform;'+LineEnding;
+  Src+='interface'+LineEnding;
+  Src+='implementation'+LineEnding;
+  Src+='end.'+LineEnding;
+  AddModuleWithSrc('unit2',Src);
+
+  StartProgram(true);
+  Add([
+  'uses unit2;',
+  'begin']);
+  ParseProgram;
+  CheckResolverHint(mtWarning,nSymbolXIsExperimental,'Symbol "unit2" is experimental');
+  CheckResolverHint(mtWarning,nSymbolXIsNotPortable,'Symbol "unit2" is not portable');
+end;
+
 procedure TTestResolver.TestHint_Garbage;
 procedure TTestResolver.TestHint_Garbage;
 begin
 begin
   StartProgram(false);
   StartProgram(false);