Browse Source

fixed http://community.sharpdevelop.net/forums/t/10571.aspx

Special statements like "Else", "ElseIf", "Else If", "Catch", "Finally", etc.
are now handled as block end + immediate block start. Removed weird "special case" logic.
Added some indentation unit tests.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@5362 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Siegfried Pammer 16 years ago
parent
commit
50c7ac7475
  1. 13
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs
  2. 176
      src/AddIns/BackendBindings/VBNetBinding/Test/FormattingStrategy/IndentationTests.cs

13
src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs

@ -584,15 +584,6 @@ namespace VBNetBinding.FormattingStrategy @@ -584,15 +584,6 @@ namespace VBNetBinding.FormattingStrategy
if (currentToken.Kind == Tokens.EOL)
isDelegate = isDeclare = isMustOverride = false;
if (IsSpecialCase(currentToken, prevToken)) {
ApplyToRange(textArea, indentation, oldLine, currentToken.Location.Line, begin, end);
Unindent(indentation);
ApplyToRange(textArea, indentation, currentToken.Location.Line - 1, currentToken.Location.Line, begin, end);
Indent(textArea, indentation);
oldLine = currentToken.Location.Line;
}
if (IsBlockEnd(currentToken, prevToken)) {
ApplyToRange(textArea, indentation, oldLine, currentToken.Location.Line - 1, begin, end);
@ -728,7 +719,7 @@ namespace VBNetBinding.FormattingStrategy @@ -728,7 +719,7 @@ namespace VBNetBinding.FormattingStrategy
return true;
}
return false;
return IsSpecialCase(current, prev);
}
bool IsBlockEnd(Token current, Token prev)
@ -750,7 +741,7 @@ namespace VBNetBinding.FormattingStrategy @@ -750,7 +741,7 @@ namespace VBNetBinding.FormattingStrategy
return false;
}
return false;
return IsSpecialCase(current, prev);
}
bool IsSpecialCase(Token current, Token prev)

176
src/AddIns/BackendBindings/VBNetBinding/Test/FormattingStrategy/IndentationTests.cs

@ -11,7 +11,7 @@ using ICSharpCode.Core; @@ -11,7 +11,7 @@ using ICSharpCode.Core;
using NUnit.Framework;
using VBNetBinding.FormattingStrategy;
namespace VBNetBinding.Tests.FormattingStrategy
namespace VBNetBinding.Tests
{
[TestFixture]
public class IndentationTests
@ -116,6 +116,180 @@ End Class"; @@ -116,6 +116,180 @@ End Class";
RunFormatTest(code, expected);
}
[Test]
public void ElseIfMultiLineContinuationTest()
{
string expected = @"Public Class Test
Private Sub Tester()
If True Then
'CODE HERE
Else If False And _
False Then
'CODE HERE1
End If
End Sub
End Class";
string code = @"Public Class Test
Private Sub Tester()
If True Then
'CODE HERE
Else If False And _
False Then
'CODE HERE1
End If
End Sub
End Class";
RunFormatTest(code, expected);
}
[Test]
public void SelectCaseTest()
{
string expected = @"Public Class Test
Private Sub Tester()
Select Case a
Case 0
DoSomething()
' TEST CASE 0
Case 1
'TEST CASE 1
Case 2
'TEST CASE 2
Case Else
DoElse()
End Select
End Sub
End Class";
string code = @"Public Class Test
Private Sub Tester()
Select Case a
Case 0
DoSomething()
' TEST CASE 0
Case 1
'TEST CASE 1
Case 2
'TEST CASE 2
Case Else
DoElse()
End Select
End Sub
End Class";
RunFormatTest(code, expected);
}
[Test]
public void SelectCaseTest2()
{
string expected = @"Public Class Test
Private Sub Tester()
Select Case a
Case 0
DoSomething()
Case 1
Case 2
Case Else
DoElse()
End Select
End Sub
End Class";
string code = @"Public Class Test
Private Sub Tester()
Select Case a
Case 0
DoSomething()
Case 1
Case 2
Case Else
DoElse()
End Select
End Sub
End Class";
RunFormatTest(code, expected);
}
[Test]
public void WithTest()
{
string expected = @"Public Class Test
Private Sub Tester()
With a
If True Then
' Test
ElseIf False Then
' Test3
Else
' Test2
End If
End With
End Sub
End Class";
string code = @"Public Class Test
Private Sub Tester()
With a
If True Then
' Test
ElseIf False Then
' Test3
Else
' Test2
End If
End With
End Sub
End Class";
RunFormatTest(code, expected);
}
[Test]
public void WithTest2()
{
string expected = @"Public Class Test
Private Sub Tester()
With a
If True Then
' Test
ElseIf False Then
' Test3
Else
Try
DoSomething()
Catch ex As Exception
'Handle
End Try
End If
End With
End Sub
End Class";
string code = @"Public Class Test
Private Sub Tester()
With a
If True Then
' Test
ElseIf False Then
' Test3
Else
Try
DoSomething()
Catch ex As Exception
'Handle
End Try
End If
End With
End Sub
End Class";
RunFormatTest(code, expected);
}
void RunFormatTest(string code, string expectedCode)
{
using (TextEditorControl editor = new TextEditorControl()) {

Loading…
Cancel
Save