[svn] r6645: vs-plugin/trunk:
Nemerle.Compiler.Utils/Nemerle.Compiler.Utils.csproj
Nemerle.Compiler.Utils/...
IT
svnadmin at nemerle.org
Tue Sep 12 06:16:18 CEST 2006
Log:
Working on the method parameter tips.
Author: IT
Date: Tue Sep 12 06:16:10 2006
New Revision: 6645
Added:
vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/MethodTipInfo.n
Modified:
vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Compiler.Utils.csproj
vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Type.n
vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.n
vs-plugin/trunk/Nemerle.VsIntegration/Engine/ProjectInfo.cs
vs-plugin/trunk/Nemerle.VsIntegration/NemerleAuthoringSink.cs
vs-plugin/trunk/Nemerle.VsIntegration/NemerleLanguage.cs
vs-plugin/trunk/Nemerle.VsIntegration/NemerleScanner.cs
vs-plugin/trunk/Nemerle.VsIntegration/Parsing/NemerleAuthoringScope.cs
Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Compiler.Utils.csproj
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Compiler.Utils.csproj (original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Compiler.Utils.csproj Tue Sep 12 06:16:10 2006
@@ -109,6 +109,9 @@
<ItemGroup>
<Compile Include="Nemerle.Completion2\CodeModel\GotoInfo.n" />
</ItemGroup>
+ <ItemGroup>
+ <Compile Include="Nemerle.Completion2\CodeModel\MethodTipInfo.n" />
+ </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
Added: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/MethodTipInfo.n
==============================================================================
--- (empty file)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/MethodTipInfo.n Tue Sep 12 06:16:10 2006
@@ -0,0 +1,8 @@
+using System;
+
+namespace Nemerle.Completion2
+{
+ public class MethodTipInfo
+ {
+ }
+}
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 Tue Sep 12 06:16:10 2006
@@ -16,8 +16,14 @@
public partial class Project
{
/// Complete word inside the method.
- CompleteInType(@type : Decl.Type, fileIndex : int, line : int, col : int,
- getText : GetText) : array[CompletionElem]
+ CompleteInType(
+ @type : Decl.Type,
+ fileIndex : int,
+ line : int,
+ col : int,
+ getText : GetText
+ )
+ : array[CompletionElem]
{
def typeBuilder = @type.Builder;
// Find member under cursor
@@ -70,7 +76,8 @@
fileIndex : int,
line : int,
col : int,
- getText : GetText)
+ getText : GetText
+ )
: QuickTipInfo
{
def typeBuilder = typeDecl.Builder;
@@ -174,7 +181,8 @@
fileIndex : int,
line : int,
col : int,
- getText : GetText)
+ getText : GetText
+ )
: GotoInfo
{
def typeBuilder = typeDecl.Builder;
@@ -272,5 +280,47 @@
throw System.Exception($"Unknown member type '$member'.");
}
}
+
+ GetMethodTip(
+ typeDecl : Decl.Type,
+ fileIndex : int,
+ line : int,
+ col : int,
+ getText : GetText
+ )
+ : list[MethodTipInfo]
+ {
+ def typeBuilder = typeDecl.Builder;
+ def member = typeBuilder.GetActiveMember(fileIndex, line, col);
+
+ match (member)
+ {
+ | method is MethodBuilder =>
+ def loc = method.BodyLocation;
+
+ if (loc.Contains(line, col)) // completion in method body
+ {
+ def bodyCode = getText(loc.Line, loc.Column, loc.EndLine, loc.EndColumn);
+ def completionCode = getText(loc.Line, loc.Column, line, col);
+ def result = _engine.RunCompletionEngine(method, bodyCode, completionCode.Length);
+
+ if (result == null)
+ {
+ Trace.WriteLine("### RunCompletionEngine() return null!");
+ [];
+ }
+ else
+ {
+ Trace.WriteLine($"# RunCompletionEngine() return $(result.ObjectType)");
+ _ = MakeCompletionList(result);
+ null
+ }
+ }
+ else
+ null
+ | null => []
+ | _ => throw System.Exception($"Unknown member type '$member'.");
+ }
+ }
} // end class Project
} // end namespace
Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.n (original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.n Tue Sep 12 06:16:10 2006
@@ -116,10 +116,8 @@
public GetQuickTipInfo(/*[NotNull]*/ filePath : string, line : int, col : int, getText : GetText) : QuickTipInfo
{
- def a = 0;
def fileIndex = _compileUnits.GetFileIndex(filePath);
def decl = GetActiveDecl(fileIndex, line, col);
- ignore(a);
match (decl)
{
@@ -171,5 +169,18 @@
| _ => ()
}
}
+
+ public GetMethodTip([NotNull] filePath : string, line : int, col : int, getText : GetText) : list[MethodTipInfo]
+ {
+ def fileIndex = _compileUnits.GetFileIndex(filePath);
+ def decl = GetActiveDecl(fileIndex, line, col);
+
+ match (decl)
+ {
+ | Type as tp => GetMethodTip(tp, fileIndex, line, col, getText);
+ | None => throw System.Exception()
+ | _ => null
+ }
+ }
} // end class Project
} // end namespace
Modified: vs-plugin/trunk/Nemerle.VsIntegration/Engine/ProjectInfo.cs
==============================================================================
--- vs-plugin/trunk/Nemerle.VsIntegration/Engine/ProjectInfo.cs (original)
+++ vs-plugin/trunk/Nemerle.VsIntegration/Engine/ProjectInfo.cs Tue Sep 12 06:16:10 2006
@@ -260,7 +260,7 @@
}
}
- internal CompletionElem[] CompleteWord(
+ public CompletionElem[] CompleteWord(
string filePath, int line, int col, GetText getText)
{
return Project.CompleteWord(filePath, line + 1, col + 1, getText);
@@ -280,5 +280,11 @@
{
return Project.GetGotoInfo(filePath, line + 1, col + 1, getText);
}
+
+ public Methods GetMethodTip(string filePath, int line, int col, GetText getText)
+ {
+ object obj = Project.GetMethodTip(filePath, line + 1, col + 1, getText);
+ return null;
+ }
}
}
\ No newline at end of file
Modified: vs-plugin/trunk/Nemerle.VsIntegration/NemerleAuthoringSink.cs
==============================================================================
--- vs-plugin/trunk/Nemerle.VsIntegration/NemerleAuthoringSink.cs (original)
+++ vs-plugin/trunk/Nemerle.VsIntegration/NemerleAuthoringSink.cs Tue Sep 12 06:16:10 2006
@@ -24,7 +24,5 @@
{
get { return _source; }
}
-
- //override
}
}
Modified: vs-plugin/trunk/Nemerle.VsIntegration/NemerleLanguage.cs
==============================================================================
--- vs-plugin/trunk/Nemerle.VsIntegration/NemerleLanguage.cs (original)
+++ vs-plugin/trunk/Nemerle.VsIntegration/NemerleLanguage.cs Tue Sep 12 06:16:10 2006
@@ -127,9 +127,13 @@
#region ParseSource
+ ParseRequest _request;
+
public override AuthoringScope ParseSource(ParseRequest request)
{
- if (null == request)
+ _request = request;
+
+ if (request == null)
throw new ArgumentNullException("request");
Debug.Print(
@@ -139,18 +143,18 @@
switch (request.Reason)
{
- case ParseReason.Check: return Check(request);
+ case ParseReason.Check: return Check();
case ParseReason.MemberSelect:
- case ParseReason.CompleteWord: return GetCompleteWord(request);
+ case ParseReason.CompleteWord: return GetCompleteWord();
case ParseReason.Goto:
- case ParseReason.QuickInfo: return GetScope(request);
+ case ParseReason.QuickInfo: return GetMethodScope();
+ case ParseReason.MethodTip: return GetMethodTip ();
case ParseReason.Autos:
case ParseReason.CodeSpan:
case ParseReason.DisplayMemberList:
case ParseReason.HighlightBraces:
case ParseReason.MatchBraces:
case ParseReason.None:
- case ParseReason.MethodTip:
case ParseReason.MemberSelectAndHighlightBraces: break;
}
@@ -159,12 +163,12 @@
if (_specialSources.TryGetValue(request.View, out source) && source.ScopeCreator != null)
return source.ScopeCreator(request);
- return GetDefaultScope(request);
+ return GetDefaultScope();
}
- private AuthoringScope Check(ParseRequest request)
+ private AuthoringScope Check()
{
- ProjectInfo projectInfo = ProjectInfo.FindProject(request.FileName);
+ ProjectInfo projectInfo = ProjectInfo.FindProject(_request.FileName);
if (projectInfo == null)
return null;
@@ -172,12 +176,12 @@
try
{
projectInfo.Engine.ProcessMessages = true;
- projectInfo.UpdateFile(request);
+ projectInfo.UpdateFile(_request);
Project project = projectInfo.Project;
project.CheckErrors(
- request.FileName,
+ _request.FileName,
delegate(CompilerMessage cm)
{
TextSpan ts = new TextSpan();
@@ -187,87 +191,56 @@
ts.iStartIndex = cm.Location.Column - 1;
ts.iEndIndex = cm.Location.EndColumn - 1;
- request.Sink.AddError(
- request.FileName,
+ _request.Sink.AddError(
+ _request.FileName,
cm.Message,
ts,
cm.MessageKind == MessageKind.Error ? Severity.Error :
cm.MessageKind == MessageKind.Warning ? Severity.Warning :
Severity.Hint);
},
- delegate(int lineStart, int colStart, int lineEnd, int colEnd)
- {
- return GetCodeRegion(request, lineStart - 1, colStart - 1, lineEnd - 1, colEnd - 1);
- });
+ GetCodeRegion);
}
finally
{
projectInfo.Engine.ProcessMessages = false;
}
- return GetDefaultScope(request);
+ return GetDefaultScope();
}
- AuthoringScope GetScope(ParseRequest request)
+ private AuthoringScope GetMethodScope()
{
string text;
- int res = request.View.GetTextStream(
- request.Line, request.Col, request.Line, request.Col + 1, out text);
+ int res = _request.View.GetTextStream(
+ _request.Line, _request.Col, _request.Line, _request.Col + 1, out text);
if (res != VSConstants.S_OK || text.Length == 0 || text[0] == ' ' || text[0] == '\t')
return null;
- ProjectInfo projectInfo = ProjectInfo.FindProject(request.FileName);
+ ProjectInfo projectInfo = GetProject();
if (projectInfo == null)
return null;
- projectInfo.UpdateFile(request);
-
- return new NemerleAuthoringScope(
- projectInfo,
- (NemerleAuthoringSink)request.Sink,
- request.FileName,
- delegate(int lineStart, int colStart, int lineEnd, int colEnd)
- {
- return GetCodeRegion(request, lineStart - 1, colStart - 1, lineEnd - 1, colEnd - 1);
- });
+ return new NemerleAuthoringScope(projectInfo, _request.Sink, _request.FileName, GetCodeRegion);
}
- AuthoringScope GetCompleteWord(ParseRequest request)
+ private AuthoringScope GetCompleteWord()
{
try
{
- ProjectInfo proj = ProjectInfo.FindProject(request.FileName);
+ ProjectInfo projectInfo = GetProject();
- if (proj == null)
+ if (projectInfo == null)
return null;
- proj.UpdateFile(request);
-
- string filePath = request.FileName;
-
- // getText() uses location pos from (1, 1)
- GetText getText = delegate(int lineStart, int colStart, int lineEnd, int colEnd)
- {
- // GetCodeRegion() uses location pos from (0, 0),
- // so, we need to adjust it.
- return GetCodeRegion(request, lineStart - 1, colStart - 1, lineEnd - 1, colEnd - 1);
- };
-
- CompletionElem[] overloads = proj.CompleteWord(
- filePath, request.Line, request.Col, getText);
+ CompletionElem[] overloads = projectInfo.CompleteWord(
+ _request.FileName, _request.Line, _request.Col, GetCodeRegion);
if (overloads.Length > 0)
- {
- return new NemerleAuthoringScope(
- ProjectInfo.FindProject(request.FileName),
- (NemerleAuthoringSink)request.Sink, overloads);
- }
-
- Trace.WriteLine("### RunCompletionEngine() return empty list!");
- return GetDefaultScope(request);
+ return new NemerleAuthoringScope(projectInfo, _request.Sink, overloads);
}
catch (Exception ex)
{
@@ -275,15 +248,40 @@
Trace.WriteLine(ex);
}
- return GetDefaultScope(request);
+ return GetDefaultScope();
}
- string GetCodeRegion(ParseRequest request, int startLine, int startCol, int endLine, int endCol)
+ private AuthoringScope GetMethodTip()
+ {
+ ProjectInfo projectInfo = GetProject();
+
+ if (projectInfo == null)
+ return null;
+
+ Methods methods = projectInfo.GetMethodTip(
+ _request.FileName, _request.Line, _request.Col, GetCodeRegion);
+
+ if (methods != null)
+ {
+ return new NemerleAuthoringScope(
+ ProjectInfo.FindProject(_request.FileName),
+ (NemerleAuthoringSink)_request.Sink, methods);
+ }
+
+ return GetDefaultScope();
+ }
+
+ private string GetCodeRegion(int startLine, int startCol, int endLine, int endCol)
{
string region;
- if (request.View.GetTextStream(startLine, startCol,
- endLine, endCol, out region) == VSConstants.S_OK)
+ if (_request.View.GetTextStream(
+ startLine - 1,
+ startCol - 1,
+ endLine - 1,
+ endCol - 1,
+ out region
+ ) == VSConstants.S_OK)
{
return region;
}
@@ -291,18 +289,27 @@
return "";
}
- private static AuthoringScope GetDefaultScope(ParseRequest request)
+ private AuthoringScope GetDefaultScope()
{
return new NemerleAuthoringScope(
- ProjectInfo.FindProject(request.FileName), (NemerleAuthoringSink)request.Sink);
+ ProjectInfo.FindProject(_request.FileName), _request.Sink);
+ }
+
+ private ProjectInfo GetProject()
+ {
+ ProjectInfo projectInfo = ProjectInfo.FindProject(_request.FileName);
+
+ if (projectInfo != null)
+ projectInfo.UpdateFile(_request);
+
+ return projectInfo;
}
#endregion
public override ImageList GetImageList()
{
- ImageList il = base.GetImageList();
- return il;
+ return base.GetImageList();
}
public override int ValidateBreakpointLocation(
Modified: vs-plugin/trunk/Nemerle.VsIntegration/NemerleScanner.cs
==============================================================================
--- vs-plugin/trunk/Nemerle.VsIntegration/NemerleScanner.cs (original)
+++ vs-plugin/trunk/Nemerle.VsIntegration/NemerleScanner.cs Tue Sep 12 06:16:10 2006
@@ -39,7 +39,7 @@
//TODO: it has to handle # (pragma, region, etc)
- switch(token.Token)
+ switch (token.Token)
{
case SyntaxType.WhiteSpace:
tokenInfo.Color = TokenColor.Text;
Modified: vs-plugin/trunk/Nemerle.VsIntegration/Parsing/NemerleAuthoringScope.cs
==============================================================================
--- vs-plugin/trunk/Nemerle.VsIntegration/Parsing/NemerleAuthoringScope.cs (original)
+++ vs-plugin/trunk/Nemerle.VsIntegration/Parsing/NemerleAuthoringScope.cs Tue Sep 12 06:16:10 2006
@@ -15,17 +15,16 @@
public NemerleAuthoringScope(
ProjectInfo project,
- NemerleAuthoringSink sink,
+ AuthoringSink sink,
CompletionElem[] overloadPossibility)
+ : this(project, sink)
{
- _project = project;
- _sink = sink;
_overloadPossibility = overloadPossibility;
}
public NemerleAuthoringScope(
ProjectInfo project,
- NemerleAuthoringSink sink,
+ AuthoringSink sink,
string filePath,
GetText getText)
: this(project, sink)
@@ -34,19 +33,28 @@
_getText = getText;
}
- public NemerleAuthoringScope(ProjectInfo project, NemerleAuthoringSink sink)
+ public NemerleAuthoringScope(
+ ProjectInfo project,
+ AuthoringSink sink,
+ Methods methods)
+ : this(project, sink)
+ {
+ _methods = methods;
+ }
+
+ public NemerleAuthoringScope(ProjectInfo project, AuthoringSink sink)
{
_project = project;
_sink = sink;
- _overloadPossibility = new CompletionElem[0];
}
#endregion
#region fields
- private NemerleAuthoringSink _sink;
+ private AuthoringSink _sink;
private CompletionElem[] _overloadPossibility;
+ private Methods _methods;
private ProjectInfo _project;
private string _filePath;
private GetText _getText;
@@ -100,7 +108,7 @@
public override Methods GetMethods(int line, int col, string name)
{
- throw new Exception("The method or operation is not implemented.");
+ return _methods;
}
}
}
More information about the svn
mailing list