[svn] r6152: nemerle/trunk/ncc: completion/CodeCompletionEngine.n testsuite/completion-playground/compl2.n

trupill svnadmin at nemerle.org
Sun Mar 5 16:40:34 CET 2006


Log:
Adding first support for type completion.


Author: trupill
Date: Sun Mar  5 16:40:30 2006
New Revision: 6152

Modified:
   nemerle/trunk/ncc/completion/CodeCompletionEngine.n
   nemerle/trunk/ncc/testsuite/completion-playground/compl2.n

Modified: nemerle/trunk/ncc/completion/CodeCompletionEngine.n
==============================================================================
--- nemerle/trunk/ncc/completion/CodeCompletionEngine.n	(original)
+++ nemerle/trunk/ncc/completion/CodeCompletionEngine.n	Sun Mar  5 16:40:30 2006
@@ -284,33 +284,6 @@
                 def theMember = memberInfo._member;
                 def observed_method = theMember :> MethodBuilder;
                 
-                // As a NemerleMemberInfo is provided, we don't need to
-                // search every type for the member
-                /*Passes.Hierarchy.infos.Iter (fun (ti) {
-                    when (ti.Name == typeName && ti.NamespaceNode.Parent.Name.ToString(".") == namespaceName) {
-                        foreach (member in ti.GetDirectMembers ()) {
-                        | meth is MethodBuilder => 
-                            when (meth.Name == methodName)
-                                observed_method = meth;
-                        | prop is PropertyBuilder =>
-                            def getter = prop.GetGetter() :> MethodBuilder;
-                            def setter = prop.GetSetter() :> MethodBuilder;
-                            when (getter != null && methodName == ("get_" + prop.Name))
-                                observed_method = getter;
-                            when (setter != null && methodName == ("set_" + prop.Name))
-                                observed_method = setter;
-                        | ev is EventBuilder =>
-                            def adder = ev.GetAdder();
-                            def remover = ev.GetRemover();
-                            when (adder != null && methodName == ("add_" + ev.Name))
-                                observed_method = adder;
-                            when (remover != null && methodName == ("remove_" + ev.Name))
-                                observed_method = remover;
-                        | _ => ();
-                        }
-                    }
-                } );*/
-                
                 mutable completionList  = null;
                 when (observed_method != null) {
                     def env = observed_method.DeclaringType.GlobalEnv;
@@ -377,13 +350,23 @@
 
                 if (complete_types)
                 {
+                    def cinfo = CompletionTypes ();
+                    cinfo.Namespace = "";
+                    mutable typex = [];
+                    foreach (possibility in ovpos) {
+                        when (!typex.Contains (possibility.from.tycon.Name)) {
+                            def my_type = complete_type (possibility.from.tycon);
+                            cinfo.AddType (my_type);
+                            typex ::= possibility.from.tycon.Name;
+                        }
+                    }
+                    info = cinfo;
                 }
                 else
                 {
-                    def cinfo = CompletionMembers();
+                    def cinfo = CompletionMembers ();
                     cinfo.Type = complete_type (first.from.tycon);
-                    foreach (possibility in ovpos)
-                    {
+                    foreach (possibility in ovpos) {
                       match (possibility.Member) {
                       | y is IField => cinfo.AddMember (complete_field (y));
                       | y is IMethod => cinfo.AddMember (complete_method (y));

Modified: nemerle/trunk/ncc/testsuite/completion-playground/compl2.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/completion-playground/compl2.n	(original)
+++ nemerle/trunk/ncc/testsuite/completion-playground/compl2.n	Sun Mar  5 16:40:30 2006
@@ -46,12 +46,22 @@
     System.Console.WriteLine ("NO MEMBER FOUND");
   }
   else {
-    when (info.CompletionKind == CompletionKind.Members) {
+    if (info.CompletionKind == CompletionKind.Members) {
       System.Console.WriteLine ("FOUND MEMBERS\n=============");
       def members = info :> CompletionMembers;
       foreach (member in members.Members)
         System.Console.WriteLine (member.Name);
     }
+    else {
+      System.Console.WriteLine ("FOUND TYPES\n===========");
+      def types = info :> CompletionTypes;
+      foreach (t in types.Types) {
+        if (t.TypeKind == NemerleTypeKind.DeclaredType)
+          System.Console.WriteLine ((t :> DeclaredTypeInfo).Name);
+        else
+          System.Console.WriteLine ((t :> ReferencedTypeInfo).Type.Name);
+      } 
+    }
   }
   System.Console.WriteLine ("Finished");
 }
@@ -61,3 +71,5 @@
 try_completion ("string.For");
 try_completion ("string.");
 try_completion ("Q");
+try_completion ("System.");
+try_completion ("System.IO.");



More information about the svn mailing list