[svn] r7196: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel: MethodTipInfo.n Project...

IT svnadmin at nemerle.org
Wed Jan 3 00:23:15 CET 2007


Log:
1. Fixed MethodTipInfo for extended methods called by its static class.
2. Fixed the navigation through method parameters.
3. Added MethodTipInfo for constructors.

Author: IT
Date: Wed Jan  3 00:23:11 2007
New Revision: 7196

Modified:
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/MethodTipInfo.n
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Type.n
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/QuickTipInfo.n

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/MethodTipInfo.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/MethodTipInfo.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/MethodTipInfo.n	Wed Jan  3 00:23:11 2007
@@ -9,15 +9,15 @@
 {
 	public class MethodTipInfo
 	{
-    public this([NotNull] methods : List[IMethod], tokens : list[Token])
+    public this([NotNull] overloads : List[OverloadPossibility], tokens : list[Token])
     {
-      _methods = methods;
+      _overloads = overloads;
       _tokens  = tokens;
 
-      _methods.Sort((x, y) =>
+      _overloads.Sort((x, y) =>
       {
-        def xparms = x.GetParameters();
-        def yparms = y.GetParameters();
+        def xparms = (x.Member :> IMethod).GetParameters();
+        def yparms = (y.Member :> IMethod).GetParameters();
 
         xparms.Length - yparms.Length;
       });
@@ -25,7 +25,7 @@
       Init();
     }
 
-    _methods : List[IMethod];
+    _overloads : List[OverloadPossibility];
     _tokens  : list[Token];
 
     [Accessor] mutable _startName       : Location;
@@ -66,6 +66,8 @@
           lg.Location.EndLine, lg.Location.EndColumn,
           lg.Location.EndLine, lg.Location.EndColumn + 1));
 
+        findComma(lg.Next);
+
         ()
       | _ => ()
       }
@@ -95,7 +97,7 @@
       {
         // TODO: This works incorrectly and should be redone.
         //
-        _defaultMethod = _methods.FindIndex(m => m.GetParameters().Length == _nextParameters.Count + 1);
+        _defaultMethod = _overloads.FindIndex(o => (o.Member :> IMethod).GetParameters().Length == _nextParameters.Count + 1);
 
         when (_defaultMethod < 0)
           _defaultMethod = 0;
@@ -109,12 +111,12 @@
 
     public GetCount() : int
     {
-      _methods.Count
+      _overloads.Count
     }
 
     public GetDescription(index : int) : string
     {
-      def member = _methods[index];
+      def member = _overloads[index].Member;
       def xml    = XmlDocReader.GetInfo(member, member.Location);
 
       if (xml != null) xml.Summary else "";
@@ -122,23 +124,26 @@
 
     public GetType(index : int) : string
     {
-      _methods[index].ReturnType.ToString()
+      (_overloads[index].Member :> IMethod).ReturnType.ToString()
     }
 
     public GetParameterCount(index : int) : int
     {
-      def len = _methods[index].GetParameters().Length;
+      def overload = _overloads[index];
+      def method   = overload.Member :> IMethod;
+      def len      = method.GetParameters().Length;
 
-      if (len > 0 && _methods[index].IsExtension) len - 1 else len;
+      if (len > 0 && IsExtension(overload)) len - 1 else len;
     }
 
     public GetParameterInfo(index : int, mutable parameter : int) : string * string * string
     {
-      when (_methods[index].IsExtension) parameter++;
+      def method = _overloads[index].Member :> IMethod;
 
-      def member      = _methods[index];
-      def parm        = member.GetParameters().Nth(parameter);
-      def xml         = XmlDocReader.GetInfo(member, member.Location);
+      when (IsExtension(_overloads[index])) parameter++;
+
+      def parm        = method.GetParameters().Nth(parameter);
+      def xml         = XmlDocReader.GetInfo(method, method.Location);
       def description = if (xml != null)
       {
         match (xml.Params.Find((name, _) => name == parm.name))
@@ -155,7 +160,30 @@
 
     public GetName(index : int) : string
     {
-      _methods[index].Name;
+      def method = _overloads[index].Member :> IMethod;
+
+      match (method.GetFunKind())
+      {
+      | Constructor => method.DeclaringType.Name;
+      | _           => method.Name;
+      }
+    }
+
+    IsExtension(overload : OverloadPossibility) : bool
+    {
+      match (overload.ExtensionMethodObject)
+      {
+      | Error
+      | null => false
+      | _    => 
+
+        match (overload.Member)
+        {
+        | m is IMethod => m.IsExtension
+        | _            => false
+        }
+
+      }
     }
   }
 }

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Type.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Type.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Type.n	Wed Jan  3 00:23:11 2007
@@ -383,22 +383,19 @@
             def timer = Stopwatch.StartNew();
             def bodyCode = source.GetRegion(loc.Line, loc.Column, loc.EndLine, loc.EndColumn);
             def tokens = TokenFinder().Find(method.BodyTokens, line, col);
+
             Trace.WriteLine($"Comlete took $(timer.Elapsed)");
 
             match (tokens.Find(t => t is Token.RoundGroup))
             {
             | Some(group) =>
 
-              //VladD2: ß ïåðåâåë êîìïëåéøîí ýíæèí íà ïîäåðæêó êîîðäèíàò â ñòèëå (ñòðîêà, ñèìâîë).
-              //VladD2: Íå òåñòèòðîâàë. Íàäî ïðîâåðèòü, ÷òî ÿ íè÷åãî íå ïîëîìàë!
-              //def completionCode = source.GetRegion(loc.Line, loc.Column, group.Location.Line, group.Location.Column);
-              //def code           = completionCode.TrimEnd(' ', '\t', '\r', '\n');
-              def result = _engine.RunCompletionEngine(method, bodyCode, 
-                loc, group.Location.Line, group.Location.Column);
+              def result = _engine.RunCompletionEngine(
+                method, bodyCode, loc, group.Location.Line, group.Location.Column);
 
               if (result != null)
               {
-                def members = List();
+                def overloads = List();
 
                 mutable l = int.MaxValue;
 
@@ -415,10 +412,10 @@
                       when (l > m.Name.Length)
                       {
                         l = m.Name.Length;
-                        members.Clear();
+                        overloads.Clear();
                       }
 
-                      members.Add(m);
+                      overloads.Add(overload);
 
                     | _            => ()
                     }
@@ -427,9 +424,9 @@
                 | _ => ()
                 }
 
-                if (members.Count > 0)
+                if (overloads.Count > 0)
                 {
-                  def tip = MethodTipInfo(members, tokens);
+                  def tip = MethodTipInfo(overloads, tokens);
                   if (tip.HasTip) (tip) else (null)
                 }
                 else

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/QuickTipInfo.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/QuickTipInfo.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/QuickTipInfo.n	Wed Jan  3 00:23:11 2007
@@ -10,7 +10,6 @@
 
 namespace Nemerle.Completion2
 {
-  //[Record]
   public class QuickTipInfo
   {
     [Accessor(flags = WantSetter)] mutable _text      : string;



More information about the svn mailing list