[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