[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