[svn] r7481: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2: CodeModel/GotoInfo.n CodeModel/Pr...

phantom svnadmin at nemerle.org
Sat Feb 24 21:54:36 CET 2007


Log:
Find Definition for function parameters.

Author: phantom
Date: Sat Feb 24 21:54:34 2007
New Revision: 7481

Modified:
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/GotoInfo.n
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Refactoring.n
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Type.n
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/Tests/Heavy.Tests/Runner.n

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/GotoInfo.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/GotoInfo.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/GotoInfo.n	Sat Feb 24 21:54:34 2007
@@ -115,9 +115,10 @@
     {
     }
 
-    public this(fp : Typedtree.Fun_parm)
+    public this(_fp : Typedtree.Fun_parm, parsedObject : object)
     {
-      this(fp.Location);
+      def name = parsedObject :> Splicable.Name;
+      this(name.Location);
     }
 
     public this(funHeader : Typedtree.Fun_header, usageType : UsageType)

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Refactoring.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Refactoring.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Refactoring.n	Sat Feb 24 21:54:34 2007
@@ -68,7 +68,7 @@
 
     private GetDefinitionInsideType(typeDecl : Decl.Type, fileIndex : int, line : int, column : int) : list [GotoInfo]
     {
-      def (_, _, tObj) = FindObject(typeDecl, fileIndex, line, column);
+      def (_, parsedObject, tObj) = FindObject(typeDecl, fileIndex, line, column);
 
       def getTypeGotoInfo(tv) 
       {
@@ -93,7 +93,7 @@
         // | mb is MethodBuilder when mb.Name == ".ctor" && mb.Ast.name.Location.IsGenerated with tb = mb.DeclaringType
         | tb is TypeBuilder                 => tb.AstParts.Map(GotoInfo);
         | fh is Typedtree.Fun_header        => [GotoInfo(fh)]
-        | fp is Typedtree.Fun_parm          => [GotoInfo(fp)]
+        | fp is Typedtree.Fun_parm          => [GotoInfo(fp, parsedObject)]
         | m  is IMember                     => [GotoInfo(m)]
         | p  is Pattern.Enum                => [GotoInfo(p.fld)]
         | _                                 => []

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	Sat Feb 24 21:54:34 2007
@@ -136,8 +136,28 @@
         //
         if (method.BodyLocation.Contains(line, col))
         {
-          //method.ResetBody(); //HACK!!!
-          ExprFinder().Find(method.BodyParsed, method.BodyTyped, line, col);
+          def found = ExprFinder().Find(method.BodyParsed, method.BodyTyped, line, col);
+          def (location, parsedObject, typedObject) = found;
+
+          def getParameter(name, parsedParameters, typedParameters)
+          {
+            match (parsedParameters)
+            {
+              | parameter :: tail =>
+                if (parameter.Name == name)
+                  (parameter.name.Location, parameter.name, typedParameters.Head)
+                else
+                  getParameter(name, tail, typedParameters.Tail)
+              | [] => (Location.Default, null, null)
+            }
+          }
+
+          match (typedObject)
+          {
+            | reference is LocalValue when (reference.ValKind is LocalValue.Kind.FunParm) =>
+              getParameter(reference.Name, ast.header.parms, method.Header.parms);
+            | _ => found
+          }
         }
         else if (ast.header.Location.Contains(line, col))
         {

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/Tests/Heavy.Tests/Runner.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/Tests/Heavy.Tests/Runner.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/Tests/Heavy.Tests/Runner.n	Sat Feb 24 21:54:34 2007
@@ -432,17 +432,19 @@
       WriteLine($"Initializing engine with $(sources.Length) sources");
       
       def manager = ProjectManager();
-      engine = Engine(manager, TraceWriter());
+      def callback = EngineCallbackStub(references);
+      engine = Engine(callback, manager, TraceWriter());
       manager.Engine = engine;
-      //WriteLine($"Compiler is in completion mode: $(engine.IsInIntellisenseMode)");
+      WriteLine($"Compiler is in completion mode: $(engine.IsIntelliSenseMode)");
+
+      //WriteLine(references);
+      //references.Iter(assembly =>
+        //if (assembly.StartsWith(@"C:\"))  // HACK: if wanna more general pathes, rewrite the code spot
+          //engine.References.Add(assembly, Assembly.LoadFile(assembly))
+        //else
+          //engine.References.Add(assembly, Assembly.Load(AssemblyName(assembly)))
+      //);
 
-      WriteLine(references);
-      references.Iter(assembly =>
-        if (assembly.StartsWith(@"C:\"))  // HACK: if wanna more general pathes, rewrite the code spot
-          engine.References.Add(assembly, Assembly.LoadFile(assembly))
-        else
-          engine.References.Add(assembly, Assembly.Load(AssemblyName(assembly)))
-      );
       sources.Iter(source => TheEngine.Sources.AddOrUpdate(source, File.ReadAllText(source)));
       Assert.AreEqual(TheEngine.Sources.Count, sources.Length);
 



More information about the svn mailing list