[svn] r6608: vs-plugin/trunk: Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/ExprFinder.n Nemerle.Co...

IT svnadmin at nemerle.org
Sun Sep 3 07:51:53 CEST 2006


Log:
Working on message/error/hint highlighting.

Author: IT
Date: Sun Sep  3 07:51:50 2006
New Revision: 6608

Modified:
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/ExprFinder.n
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/XmlDocReader.n
   vs-plugin/trunk/Nemerle.VsIntegration/NemerleLanguage.cs

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/ExprFinder.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/ExprFinder.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/ExprFinder.n	Sun Sep  3 07:51:50 2006
@@ -52,6 +52,7 @@
       | ParameterBuilder => // { body : Typedtree.Fun_parm; }
 
         PrintUnknown(syntaxElement);
+
       }
     }
 
@@ -81,8 +82,10 @@
         Go(func.header.ret_type);
       }
       else
+      {
         Go(func.body);
     }
+    }
 
     Go(expression : PExpr) : void
     {
@@ -401,8 +404,6 @@
 
       | DefValIn(nm, val, body) => // { name : LocalValue; val : TExpr; mutable body : TExpr; }
 
-        _ = expression.ToString();
-
         Check(
           nm. Location, fun() { CheckLocated(nm) },
           val.Location, fun() { Go(val)          });

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/XmlDocReader.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/XmlDocReader.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/XmlDocReader.n	Sun Sep  3 07:51:50 2006
@@ -3,8 +3,10 @@
 using System.Xml;
 
 using Nemerle.Compiler;
-using Nemerle.Completion2.Engine;
 using Nemerle.Compiler.Utils;
+using Nemerle.Imperative;
+
+using Nemerle.Completion2.Engine;
 
 namespace Nemerle.Completion2
 {
@@ -56,7 +58,35 @@
         when (string.IsNullOrEmpty(location.File) || location.EndLine > 0)
           ret(null);
 
-        def name = Path.ChangeExtension(location.File, ".xml");
+        def file = if (location.File.IndexOf("GAC") > 0)
+        {
+          def fn  = location.File;
+
+          /*
+          def low = Path.GetFullPath(fn).ToLower();
+
+          foreach (assembly in AppDomain.CurrentDomain.GetAssemblies())
+          {
+            def cb = Path.GetFullPath(assembly.CodeBase.Replace("file:///", "")).ToLower();
+
+            def aName = assembly.GetName();
+
+            when (cb == low)
+            {
+              aName.ToString();
+              break;
+            }
+          }
+          */
+
+          fn
+        }
+        else
+        {
+          location.File
+        }
+
+        def name = Path.ChangeExtension(file, ".xml");
 
         unless (File.Exists(name))
           ret(null);

Modified: vs-plugin/trunk/Nemerle.VsIntegration/NemerleLanguage.cs
==============================================================================
--- vs-plugin/trunk/Nemerle.VsIntegration/NemerleLanguage.cs	(original)
+++ vs-plugin/trunk/Nemerle.VsIntegration/NemerleLanguage.cs	Sun Sep  3 07:51:50 2006
@@ -125,6 +125,8 @@
 			return _scanner;
 		}
 
+		#region ParseSource
+
 		public override AuthoringScope ParseSource(ParseRequest request)
 		{
 			if (null == request)
@@ -135,86 +137,71 @@
 				Path.GetFileName(request.FileName), request.Line, request.Col, request.Reason,
 				request.Timestamp);
 
-			//if (req.Reason == ParseReason.)
 			switch (request.Reason)
 			{
-				case ParseReason.Autos:
-					break;
-				case ParseReason.Check:
-					/*
-					TextSpan ts = new TextSpan();
+				case ParseReason.Autos:             break;
+				case ParseReason.Check:             return Check(request);
+				case ParseReason.CodeSpan:          break;
+				case ParseReason.CompleteWord:      return GetCompleteWord(request);
+				case ParseReason.DisplayMemberList: break;
+				case ParseReason.Goto:              break;
+				case ParseReason.HighlightBraces:   break;
+				case ParseReason.MatchBraces:       break;
+				case ParseReason.MemberSelect:      break;
+				case ParseReason.MemberSelectAndHighlightBraces: break;
+				case ParseReason.MethodTip:         break;
+				case ParseReason.None:              break;
+				case ParseReason.QuickInfo:         return GetQuickInfo(request);
+			}
 
-					ts.iStartLine = 0;
-					ts.iEndLine = 0;
-					ts.iStartIndex = 1;
-					ts.iEndIndex = 10;
-
-					request.Sink.AddError(request.FileName, "456", ts, Severity.Error);
-					*/
-					break;
-				case ParseReason.CodeSpan:
-					break;
-				case ParseReason.CompleteWord:
-					try
-					{
-						return CompleteWord(request);
+			NemerleSource source;
+
+			if (_specialSources.TryGetValue(request.View, out source) && source.ScopeCreator != null)
+				return source.ScopeCreator(request);
+
+			return GetDefaultScope(request);
 					}
-					catch (Exception ex)
+
+		private AuthoringScope Check(ParseRequest request)
 					{
-						Trace.Assert(false, ex.ToString());
-						Trace.WriteLine(ex);
-					}
+			ProjectInfo project = ProjectInfo.FindProject(request.FileName);
 
-					return new NemerleAuthoringScope(
-						ProjectInfo.FindProject(request.FileName), (NemerleAuthoringSink)request.Sink);
+			if (project == null)
+				return null;
 
-				case ParseReason.DisplayMemberList:
-					break;
-				case ParseReason.Goto:
-					break;
-				case ParseReason.HighlightBraces:
-					break;
-				case ParseReason.MatchBraces:
-					break;
-				case ParseReason.MemberSelect:
-					break;
-				case ParseReason.MemberSelectAndHighlightBraces:
-					break;
-				case ParseReason.MethodTip:
-					break;
-				case ParseReason.None:
-					break;
-				case ParseReason.QuickInfo:
-					return GetRequestedScope(request);
-				default:
-					break;
-			}
+			project.UpdateFile(request);
 
-			NemerleSource source;
+			project.Engine.GetProject();
 
-			if (_specialSources.TryGetValue(request.View, out source)
-				&& null != source.ScopeCreator)
+			foreach (CompilerMessage cm in project.Engine.CompilerMessages)
 			{
-				return source.ScopeCreator(request);
+				TextSpan ts = new TextSpan();
+
+				ts.iStartLine  = cm.Location.Line      - 1;
+				ts.iEndLine    = cm.Location.EndLine   - 1;
+				ts.iStartIndex = cm.Location.Column    - 1;
+				ts.iEndIndex   = cm.Location.EndColumn - 1;
+
+				request.Sink.AddError(
+					request.FileName,
+					cm.Message,
+					ts,
+					cm.MessageKind == MessageKind.Error   ? Severity.Error :
+					cm.MessageKind == MessageKind.Warning ? Severity.Warning :
+					                                        Severity.Hint);
 			}
 
-			return new NemerleAuthoringScope(
-				ProjectInfo.FindProject(request.FileName), (NemerleAuthoringSink)request.Sink);
+			return GetDefaultScope(request);
 		}
 
-		AuthoringScope GetRequestedScope(ParseRequest request)
+		AuthoringScope GetQuickInfo(ParseRequest request)
 		{
 			string text;
 
-			if (request.View.GetTextStream(
-					request.Line, request.Col,
-					request.Line, request.Col + 1,
-					out text) != VSConstants.S_OK)
-			{
-				return null;
-			}
+			int res = request.View.GetTextStream(
+				request.Line, request.Col, request.Line, request.Col + 1, out text);
 
-			if (text.Length == 0 || text[0] == ' ' || text[0] == '\t')
+			if (res != VSConstants.S_OK || text.Length == 0 || text[0] == ' ' || text[0] == '\t')
 				return null;
 
 			ProjectInfo projectInfo = ProjectInfo.FindProject(request.FileName);
@@ -234,7 +221,9 @@
 				});
 		}
 
-		AuthoringScope CompleteWord(ParseRequest request)
+		AuthoringScope GetCompleteWord(ParseRequest request)
+		{
+			try
 		{
 			ProjectInfo proj = ProjectInfo.FindProject(request.FileName);
 
@@ -269,8 +258,15 @@
 			}
 
 			Trace.WriteLine("### RunCompletionEngine() return empty list!");
-			return new NemerleAuthoringScope(
-				ProjectInfo.FindProject(request.FileName), (NemerleAuthoringSink)request.Sink);
+				return GetDefaultScope(request);
+			}
+			catch (Exception ex)
+			{
+				Trace.Assert(false, ex.ToString());
+				Trace.WriteLine(ex);
+			}
+
+			return GetDefaultScope(request);
 		}
 
 		string GetCodeRegion(ParseRequest request, int startLine, int startCol,
@@ -287,6 +283,14 @@
 			return "";
 		}
 
+		private static AuthoringScope GetDefaultScope(ParseRequest request)
+		{
+			return new NemerleAuthoringScope(
+				ProjectInfo.FindProject(request.FileName), (NemerleAuthoringSink)request.Sink);
+		}
+
+		#endregion
+
 		public override ImageList GetImageList()
 		{
 			ImageList il = base.GetImageList();



More information about the svn mailing list