[svn] r6570: nemerle/trunk/ncc: completion/CodeCompletionEngine.n typing/Typer-PatternTyper.n typing/Typer...

VladD2 svnadmin at nemerle.org
Wed Aug 23 15:42:30 CEST 2006


Log:
1. Add completion for 'is' and ':' patterns.
2. Add completion for static members of type.

Author: VladD2
Date: Wed Aug 23 15:42:25 2006
New Revision: 6570

Modified:
   nemerle/trunk/ncc/completion/CodeCompletionEngine.n
   nemerle/trunk/ncc/typing/Typer-PatternTyper.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	Wed Aug 23 15:42:25 2006
@@ -83,6 +83,17 @@
               | _ => elems.Add(Elem.Node (name, node));
             }
           }
+        
+        match (subNode.Value)
+        {
+          | Cached(ti) => //Nemerle.Compiler.NamespaceTree.TypeInfoCache.Cached
+            foreach (member in ti.GetMembers (BindingFlags.Public | BindingFlags.Static))
+              when (isAll || member.GetName().StartsWith(prefix, CmpOptins))
+                elems.Add(Elem.Member (member));
+
+          | _ => ()
+        }
+
       }
 
       if (obj is null)
@@ -99,6 +110,39 @@
         | None => ()
       }
     }
+
+    public GetName (this member : IMember) : string
+    {
+      match (member.MemberType)
+      {
+        | Constructor => ReplaceSpecialName (member.DeclaringType.Name)
+        | _ => member.Name
+      }
+    }
+
+    /// Look for special names
+    public ReplaceSpecialName(name : string) : string
+    {
+      | "Nemerle.Core.list" 
+      | "Nemerle.Core.list+Cons" 
+      | "Nemerle.Core.list+Nil"  => "list"
+      | "System.Byte"            => "byte"
+      | "System.SByte"           => "sbyte"
+      | "System.Int16"           => "short"
+      | "System.UInt16"          => "ushort"
+      | "System.Int32"           => "int"
+      | "System.UInt32"          => "uint"
+      | "System.Int64"           => "long"
+      | "System.UInt64"          => "ulong"
+      | "System.Single"          => "float"
+      | "System.Double"          => "double"
+      | "System.Decimal"         => "decimal"
+      | "System.String"          => "string"
+      | "System.Object"          => "object"
+      | "System.Boolean"         => "bool"
+      | "System.Char"            => "char"
+      | _                        => name
+    }
   }
 }
 

Modified: nemerle/trunk/ncc/typing/Typer-PatternTyper.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer-PatternTyper.n	(original)
+++ nemerle/trunk/ncc/typing/Typer-PatternTyper.n	Wed Aug 23 15:42:25 2006
@@ -575,17 +575,37 @@
                         foreach (m when m.Name.StartsWith (prefix, option) in members)
                           elems.Add (Elem.Node (m.Name, m.NamespaceNode));
 
+                        throw CompletionResult (elems, name.Id);
+
                     //| TypeDeclaration.VariantOption =>
                       | _ => System.Console.WriteLine(ty);
                     }
                   | _ => System.Console.WriteLine(ty);
                 }
 
-              | None =>
+              | None => System.Console.WriteLine(matched_value_type);
+            }
+
+            def nss = Manager.CoreEnv.NameTree.NamespaceTree 
+              :: name.GetEnv(Manager.CoreEnv).OpenNamespaces;
+            Completion.AddTypesAndNamespaces (elems, nss, obj, name, true);
+
+            throw CompletionResult (elems, name.Id);
+
+          | PT.PExpr.TypeEnforcement (nested, PT.PExpr.ToComplete (name)) with obj = null
+          | PT.PExpr.TypeEnforcement (nested, PT.PExpr.Member (obj, Parsetree.Splicable.HalfId (name)))
+          | PT.PExpr.Is (nested, PT.PExpr.ToComplete (name)) with obj = null
+          | PT.PExpr.Is (nested, PT.PExpr.Member (obj, Parsetree.Splicable.HalfId (name))) =>
+            def obj = obj;
+            def name = name;
+            def nested = nested;
+            ignore(obj); ignore(nested);
+
+            def elems = SCG.List ();
+
                 def nss = Manager.CoreEnv.NameTree.NamespaceTree 
                   :: name.GetEnv(Manager.CoreEnv).OpenNamespaces;
                 Completion.AddTypesAndNamespaces (elems, nss, obj, name, true);
-            }
                 
             throw CompletionResult (elems, name.Id);
 
@@ -635,6 +655,8 @@
 
 
           | PT.PExpr.Is (nested, needed_type) =>
+            def nested = nested;
+            def needed_type = needed_type;
             def needed_type = typer.BindType (needed_type).FixedValue;
             def properly_subtypes = matched_value_type.TryProvide (needed_type);
 

Modified: nemerle/trunk/ncc/typing/Typer.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer.n	(original)
+++ nemerle/trunk/ncc/typing/Typer.n	Wed Aug 23 15:42:25 2006
@@ -50,6 +50,7 @@
     | Local { Value : LocalValue }
     | Overloads  { Values : list [OverloadPossibility]; }
     | Overload   { Value : OverloadPossibility; }
+    | Member     { member : IMember; }
   }
 
   [Record (Include = [Elems, NamePrefix])]



More information about the svn mailing list