[svn] r6431: nemerle/trunk/ncc: completion/CodeCompletionEngine.n testsuite/completion-playground/compl-me...

trupill svnadmin at nemerle.org
Thu Jul 6 20:39:36 CEST 2006


Log:
More changes to allow tracking of member references. Added simple 
testcase.


Author: trupill
Date: Thu Jul  6 20:39:32 2006
New Revision: 6431

Added:
   nemerle/trunk/ncc/testsuite/completion-playground/compl-membersref.n
Modified:
   nemerle/trunk/ncc/completion/CodeCompletionEngine.n
   nemerle/trunk/ncc/testsuite/completion-playground/compl-s2.n

Modified: nemerle/trunk/ncc/completion/CodeCompletionEngine.n
==============================================================================
--- nemerle/trunk/ncc/completion/CodeCompletionEngine.n	(original)
+++ nemerle/trunk/ncc/completion/CodeCompletionEngine.n	Thu Jul  6 20:39:32 2006
@@ -324,27 +324,33 @@
         public override MarkAsUsed (member : IMember, location : Location) : void
         {
             member.HasBeenUsed = true;
-            add_to_ref (member, get_real_location (location, member.Name));
+            add_to_ref (member, location);
         }
     
         public override MarkAsAssigned (member : IField, location : Location) : void
         {
             member.HasBeenAssigned = true;
-            add_to_ref (member, get_real_location (location, member.Name));
+            add_to_ref (member, location);
         }
         
         static get_real_location (location : Location, name : string) : Location
         {
-            Location (location.FileIndex, location.Line, location.Column - name.Length,
+            Location (location.FileIndex, location.Line, (location.Column - name.Length + 1),
                 location.EndLine, location.EndColumn)
         }
         
         add_to_ref (member : IMember, location : Location) : void
         {
+            try {
             unless (referencesLocation.ContainsKey (member))
                 referencesLocation.Add (member, []);
             
-            referencesLocation [member] ::= location;
+                referencesLocation [member] ::= get_real_location (location, member.Name);
+            }
+            catch {
+            | ex => System.Console.WriteLine (ex.Message);
+                   System.Console.WriteLine (ex.StackTrace);
+            }
         }
         
         // If you want to recover the messages done by the parser/typer

Added: nemerle/trunk/ncc/testsuite/completion-playground/compl-membersref.n
==============================================================================
--- (empty file)
+++ nemerle/trunk/ncc/testsuite/completion-playground/compl-membersref.n	Thu Jul  6 20:39:32 2006
@@ -0,0 +1,37 @@
+using Nemerle.Compiler;
+using Nemerle.Completion;
+using Nemerle.Collections;
+using Nemerle.Utility;
+using System;
+using System.IO;
+using System.Console;
+
+def engine = Engine ();
+def files = Hashtable ();
+def rawArgs = System.Environment.GetCommandLineArgs ().ToList();
+def (progName, args) = rawArgs.Head :: rawArgs.Tail;
+
+when (args.Length == 0)
+{
+	WriteLine(
+  $ "usage: $progName <filename>\n" +
+    "       <filename> is the Nemerle source code you want to pass to the \n" +
+    "       code completion engine");
+	System.Environment.Exit(1);
+}
+
+foreach (path in args)
+{
+  def source = File.ReadAllText (path);
+  engine.Sources.Add (path, source);
+  files [path] = source;
+}
+
+def type_tree = engine.GetTypeTree ();
+
+foreach (r in engine.ReferencesToMembers)
+{
+    System.Console.WriteLine ("references to: " + r.Key.Name);
+    foreach (p in r.Value)
+        System.Console.WriteLine ("* {0} ({1}, {2})", p.File, p.Line, p.Column);
+}

Modified: nemerle/trunk/ncc/testsuite/completion-playground/compl-s2.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/completion-playground/compl-s2.n	(original)
+++ nemerle/trunk/ncc/testsuite/completion-playground/compl-s2.n	Thu Jul  6 20:39:32 2006
@@ -11,7 +11,7 @@
   
     mutable n : string;
   
-    public Foo () : void
+    public Foo () : Seasons
     {
     }
     



More information about the svn mailing list