[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