[svn] r6154: nemerle/trunk/ncc: completion/CodeCompletionEngine.n completion/CompletionEngineTree.n testsu...

trupill svnadmin at nemerle.org
Sun Mar 5 21:30:46 CET 2006


Log:
Final touches to Code Completion Engine. Now namespace completion works 
OK.


Author: trupill
Date: Sun Mar  5 21:30:42 2006
New Revision: 6154

Modified:
   nemerle/trunk/ncc/completion/CodeCompletionEngine.n
   nemerle/trunk/ncc/completion/CompletionEngineTree.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 21:30:42 2006
@@ -300,7 +300,7 @@
                     catch
                     {
                     | e is CompletionResult => completionList = translate_ovpossibility_to_info (e.Overloads);
-                    | _ => ();
+                    | e => System.Console.WriteLine (e.Message);
                     }
                 }
                 IsInCompletionMode = false;
@@ -345,27 +345,39 @@
             {
                 mutable complete_types = false;
                 def first = ovpos.Head;
-                when (first.Member.Name == ".ctor" || first.Member.Name == ".cctor")
+                when (first.Member.Name == ".ctor" || first.Member.Name == ".cctor" ||
+                    first.Member is TypeInfo) {
                    complete_types = true;
+                }
 
                 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;
+                    
+                    def node = first.from.tycon.FullName;
+                    def ns_node = NamespaceTree.namespace_tree.Path (node).Parent;
+                    mutable already_added = [];
+                    foreach (child in ns_node.children)
+                    {
+                        match (child.Value.Value) {
+                        | Cached (tycon) => def type_name = child.Key.TrimEnd('*').TrimEnd ('1', '2', '3', '4').TrimEnd('`');
+                            when (!already_added.Contains (type_name))
+                            {
+                                cinfo.AddType (complete_type (tycon));
+                                already_added ::= type_name;
+                            }
+                        //| NotLoaded (tycon) => System.Console.WriteLine ("notloaded " + child.Key);
+                        | NamespaceReference => cinfo.AddNamespace (child.Key);
+                        | _ => ();
                         }
                     }
+                    
                     info = cinfo;
                 }
                 else
                 {
                     def cinfo = CompletionMembers ();
-                    cinfo.Type = complete_type (first.from.tycon);
+                    try {
                     foreach (possibility in ovpos) {
                       match (possibility.Member) {
                       | y is IField => cinfo.AddMember (complete_field (y));
@@ -378,6 +390,10 @@
                     }
                     info = cinfo;
                  }
+                    catch {
+                    | e => System.Console.WriteLine (e.Message + "\n" + e.StackTrace);
+                    }
+                 }
             }
             info
         }
@@ -660,7 +676,7 @@
                  uniqueTypesTable.Add(uniqueName, returnType);
                  try
                  {
-                     returnType.Name = t.Name;
+                     returnType.Name = t.Name.TrimEnd('*').TrimEnd ('1', '2', '3', '4').TrimEnd('`');
                      
                      if (t.DeclaringType == null) {
                          returnType.Namespace = t.NamespaceNode.Parent.Name.ToString(".");

Modified: nemerle/trunk/ncc/completion/CompletionEngineTree.n
==============================================================================
--- nemerle/trunk/ncc/completion/CompletionEngineTree.n	(original)
+++ nemerle/trunk/ncc/completion/CompletionEngineTree.n	Sun Mar  5 21:30:42 2006
@@ -58,7 +58,6 @@
         
         mutable members : list[NemerleMemberInfo];
         
-        public mutable Type : NemerleTypeInfo;
         public Members : array[NemerleMemberInfo]
         {
             get { members.ToArray() }
@@ -81,11 +80,16 @@
         { get { CompletionKind.Types } }
         
         mutable types : list[NemerleTypeInfo];
+        mutable namespaces : list[string];
         
-        public mutable Namespace : string;
         public Types : array[NemerleTypeInfo]
         {
-            get { types.ToArray() }
+            get { types.ToArray () }
+        }
+        
+        public Namespaces : array[string]
+        {
+            get { namespaces.ToArray () }
         }
         
         public AddType (t : NemerleTypeInfo) : void
@@ -93,9 +97,15 @@
             types ::= t;
         }
         
+        public AddNamespace (ns : string) : void
+        {
+            namespaces ::= ns;
+        }
+        
         public this ()
         {
             types = [];
+            namespaces = [];
         }
     }
     

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 21:30:42 2006
@@ -67,9 +67,9 @@
 }
 
 try_completion ("this.Fo");
-try_completion ("def a = \"a\"; a.");
+try_completion ("def a = \"a\"; a.L");
 try_completion ("string.For");
 try_completion ("string.");
 try_completion ("Q");
 try_completion ("System.");
-try_completion ("System.IO.");
+try_completion ("System.Reflection.");



More information about the svn mailing list