From 50c7ac7475e0a24ba7022a16d1e5824916f11d15 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Thu, 31 Dec 2009 12:23:58 +0000 Subject: [PATCH] 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 --- .../VBNetFormattingStrategy.cs | 13 +- .../FormattingStrategy/IndentationTests.cs | 176 +++++++++++++++++- 2 files changed, 177 insertions(+), 12 deletions(-) diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs index f6531b5d32..43d71e98fb 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs @@ -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 return true; } - return false; + return IsSpecialCase(current, prev); } bool IsBlockEnd(Token current, Token prev) @@ -750,7 +741,7 @@ namespace VBNetBinding.FormattingStrategy return false; } - return false; + return IsSpecialCase(current, prev); } bool IsSpecialCase(Token current, Token prev) diff --git a/src/AddIns/BackendBindings/VBNetBinding/Test/FormattingStrategy/IndentationTests.cs b/src/AddIns/BackendBindings/VBNetBinding/Test/FormattingStrategy/IndentationTests.cs index bd3f09f5b3..da26ce02b0 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Test/FormattingStrategy/IndentationTests.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Test/FormattingStrategy/IndentationTests.cs @@ -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"; 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()) {