[svn] r6382: nemerle/trunk/ncc: completion/CodeCompletionEngine.n testsuite/completion-playground/compl3.n...

trupill svnadmin at nemerle.org
Thu Jun 8 18:48:18 CEST 2006


Log:
Return the type of the expression with Completion results. Changed 
testcase to show this new feature.


Author: trupill
Date: Thu Jun  8 18:48:14 2006
New Revision: 6382

Modified:
   nemerle/trunk/ncc/completion/CodeCompletionEngine.n
   nemerle/trunk/ncc/testsuite/completion-playground/compl3.n
   nemerle/trunk/ncc/typing/Typer.n

Modified: nemerle/trunk/ncc/completion/CodeCompletionEngine.n
==============================================================================
--- nemerle/trunk/ncc/completion/CodeCompletionEngine.n	(original)
+++ nemerle/trunk/ncc/completion/CodeCompletionEngine.n	Thu Jun  8 18:48:14 2006
@@ -330,7 +330,7 @@
             }
         }
         
-        public RunCompletionEngine (member : IMember, contents : string) : array[OverloadPossibility]
+        public RunCompletionEngine (member : IMember, contents : string) : CompletionResult
         {
             // Tell the methods we are in completion mode
             is_completion = true;
@@ -351,15 +351,12 @@
                 }
                 catch
                 {
-                | e is CompletionResult => completionList = e.Overloads;
+                | e is CompletionResult => completionList = e;
                 | e => System.Console.WriteLine (e.Message);
                 }
             }
             
-            if (completionList == null)
-                array (0)
-            else
-                completionList.ToArray ()
+            completionList
         }
         
         mutable listMessages : list[CompilerMessage];

Modified: nemerle/trunk/ncc/testsuite/completion-playground/compl3.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/completion-playground/compl3.n	(original)
+++ nemerle/trunk/ncc/testsuite/completion-playground/compl3.n	Thu Jun  8 18:48:14 2006
@@ -83,15 +83,16 @@
   try
   {
     WriteLine ($"\nTrying to complete: '$body'");
-    def overloads = engine.RunCompletionEngine (completionMember, body);
+    def completionResult = engine.RunCompletionEngine (completionMember, body);
 
-    if (overloads == null)
-      WriteLine ("No member found!!!");
+    if (completionResult == null)
+      WriteLine ("  No member found!!!");
     else
     {
+      WriteLine ("  Type of the member: " + Engine.GetNameFromType (completionResult.ObjectType));
       WriteLine ("  Member found:");
 
-      foreach (overl in overloads)
+      foreach (overl in completionResult.Overloads)
         WriteLine ($"    $(overl.Member.Name)  ==> $overl"
           " $(overl.Member.Attributes)");
 
@@ -111,11 +112,12 @@
 
 // Work fine:
 try_completion ("NArray.M");
+try_completion ("def a = \"a\"; a.");
+try_completion ("int.");
 //try_completion ("Fo");
 //try_completion ("System.");
 //try_completion ("System.Reflection.");
 //try_completion ("this.Fo");
-//try_completion ("def a = \"a\"; a.L");
 //try_completion ("string.For");
 //try_completion ("string.");
 //try_completion ("Q");

Modified: nemerle/trunk/ncc/typing/Typer.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer.n	(original)
+++ nemerle/trunk/ncc/typing/Typer.n	Thu Jun  8 18:48:14 2006
@@ -43,11 +43,13 @@
 
 namespace Nemerle.Compiler
 {
-  [Record]
+  [Record (Include = [Overloads, NamePrefix])]
   public class CompletionResult : System.Exception
   {
     public Overloads : list [OverloadPossibility];
     public NamePrefix : string;
+    [Accessor (flags = WantSetter)]
+    mutable object_type : MType;
   }
 
   /** A class responsible for typing a single (global or local) function.  */
@@ -1353,15 +1355,16 @@
             else
               TypeNameFull (expression, expected, for_completion = true);
 
+          def tobj = TypeExpr (obj);
           def member_overloads = 
-            match (TypeMember (TypeExpr (obj), name, expected,
+            match (TypeMember (tobj, name, expected,
                                for_completion = true)) {
               | Some (lst)
               | None with lst = [] => lst
             }
-
-          throw CompletionResult (member_overloads + name_overloads, name.Id)
-
+          def compl_exc = CompletionResult (member_overloads + name_overloads, name.Id);
+          compl_exc.ObjectType = tobj.Type.Fix();
+          throw compl_exc
 
         | PT.PExpr.ToComplete (name) =>
           // FIXME: check locals first



More information about the svn mailing list