Browse Source

Added FormattingStrategy for Boo and fixed BOO-535: Code completion for generator syntax.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@611 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 21 years ago
parent
commit
8a0c189a50
  1. 4
      src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin
  2. 1
      src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj
  3. 13
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs
  4. 17
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/VariableLookupVisitor.cs
  5. 40
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/FormattingStrategy.cs
  6. 5
      src/Main/Base/Project/Src/Dom/MemberLookupHelper.cs
  7. 9
      src/Main/Base/Test/MemberLookupHelperTests.cs

4
src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin

@ -44,6 +44,10 @@ @@ -44,6 +44,10 @@
class = "Grunwald.BooBinding.CodeCompletion.BooParser"/>
</Path>
<Path name = "/AddIns/DefaultTextEditor/Formatter/Boo">
<Class id = "BooFormatter" class = "Grunwald.BooBinding.BooFormattingStrategy"/>
</Path>
<Path name = "/AddIns/DefaultTextEditor/CodeCompletion">
<CodeCompletionBinding id = "Boo" extensions = ".boo" class = "Grunwald.BooBinding.CodeCompletion.CompletionBinding"/>
</Path>

1
src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj

@ -84,6 +84,7 @@ @@ -84,6 +84,7 @@
<Compile Include="Src\Designer\CodeDomVisitor.cs" />
<Compile Include="Src\BooCodeGenerator.cs" />
<Compile Include="Src\CodeCompletion\ElementReturnType.cs" />
<Compile Include="Src\FormattingStrategy.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="BooBinding.addin">

13
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs

@ -429,6 +429,19 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -429,6 +429,19 @@ namespace Grunwald.BooBinding.CodeCompletion
}
#endregion
public override void OnGeneratorExpression(GeneratorExpression node)
{
ClearResult();
node.Expression.Accept(this);
if (resolveResult != null) {
IClass enumerable = ProjectContentRegistry.Mscorlib.GetClass("System.Collections.Generic.IEnumerable", 1);
MakeResult(new ConstructedReturnType(enumerable.DefaultReturnType, new IReturnType[] { resolveResult.ResolvedType }));
} else {
MakeResult(new GetClassReturnType(projectContent, "System.Collections.IEnumerable", 0));
}
}
public override void OnBinaryExpression(BinaryExpression node)
{
switch (node.Operator) {

17
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/VariableLookupVisitor.cs

@ -108,6 +108,23 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -108,6 +108,23 @@ namespace Grunwald.BooBinding.CodeCompletion
InferResult(node.Iterator, node.Declarations[0].Name, node.LexicalInfo, true);
}
}
public override void OnGeneratorExpression(GeneratorExpression node)
{
if (node.LexicalInfo.Line != resolver.CaretLine)
return;
LoggingService.Warn("GeneratorExpression: " + node.EndSourceLocation.Line);
if (node.Declarations.Count != 1) {
// TODO: support unpacking
base.OnGeneratorExpression(node);
return;
}
if (node.Declarations[0].Name == lookFor) {
Visit(node.Declarations[0]);
InferResult(node.Iterator, node.Declarations[0].Name, node.LexicalInfo, true);
}
base.OnGeneratorExpression(node);
}
}
/// <summary>

40
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/FormattingStrategy.cs

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
/*
* Created by SharpDevelop.
* User: Daniel Grunwald
* Date: 22.10.2005
* Time: 21:51
*/
using System;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Document;
using ICSharpCode.TextEditor.Actions;
namespace Grunwald.BooBinding
{
public class BooFormattingStrategy : DefaultFormattingStrategy
{
protected override int SmartIndentLine(TextArea area, int line)
{
IDocument document = area.Document;
LineSegment previousLine = document.GetLineSegment(line-1);
if (document.GetText(previousLine).EndsWith(":")) {
LineSegment currentLine = document.GetLineSegment(line);
string indentation = GetIndentation(area, line-1);
indentation += Tab.GetIndentationString(document);
document.Replace(currentLine.Offset,
currentLine.Length,
indentation + document.GetText(currentLine));
return indentation.Length;
}
return base.SmartIndentLine(area, line);
}
// Deactivate indenting multiple lines with Ctrl-I
public override void IndentLines(TextArea textArea, int begin, int end)
{
}
}
}

5
src/Main/Base/Project/Src/Dom/MemberLookupHelper.cs

@ -692,6 +692,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -692,6 +692,11 @@ namespace ICSharpCode.SharpDevelop.Dom
{
IClass c = returnType.GetUnderlyingClass();
if (c == null) return null;
if (baseClass.CompareTo(c) == 0) {
if (returnType.TypeArguments == null || baseClassTypeParameterIndex >= returnType.TypeArguments.Count)
return null;
return returnType.TypeArguments[baseClassTypeParameterIndex];
}
foreach (IReturnType baseType in c.BaseTypes) {
if (baseClass.CompareTo(baseType.GetUnderlyingClass()) == 0) {
if (baseType.TypeArguments == null || baseClassTypeParameterIndex >= baseType.TypeArguments.Count)

9
src/Main/Base/Test/MemberLookupHelperTests.cs

@ -40,5 +40,14 @@ namespace ICSharpCode.SharpDevelop.Tests @@ -40,5 +40,14 @@ namespace ICSharpCode.SharpDevelop.Tests
Assert.AreEqual("System.String", res.TypeArguments[0].FullyQualifiedName);
Assert.AreEqual("System.Int32", res.TypeArguments[1].FullyQualifiedName);
}
[Test]
public void TypeParameterPassedToBaseClassSameClass()
{
IReturnType[] stringArr = { ReflectionReturnType.String };
IReturnType rrt = new ConstructedReturnType(EnumerableClass.DefaultReturnType, stringArr);
IReturnType res = MemberLookupHelper.GetTypeParameterPassedToBaseClass(rrt, EnumerableClass, 0);
Assert.AreEqual("System.String", res.FullyQualifiedName);
}
}
}

Loading…
Cancel
Save