diff --git a/src/Workspaces/VisualBasic/Portable/Formatting/Rules/AdjustSpaceFormattingRule.vb b/src/Workspaces/VisualBasic/Portable/Formatting/Rules/AdjustSpaceFormattingRule.vb index 8ed981b13c6c5aefb28b3a946ba5c1f463c80d63..6a7109aeabaeeb26b41e782825560ade6216ef7b 100644 --- a/src/Workspaces/VisualBasic/Portable/Formatting/Rules/AdjustSpaceFormattingRule.vb +++ b/src/Workspaces/VisualBasic/Portable/Formatting/Rules/AdjustSpaceFormattingRule.vb @@ -197,59 +197,15 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Formatting Return CreateAdjustSpacesOperation(1, AdjustSpacesOption.ForceSpacesIfOnSingleLine) End If - ' ? . [conditional access operator] If previousToken.Kind = SyntaxKind.QuestionToken AndAlso currentToken.Kind = SyntaxKind.DotToken AndAlso - previousToken.Parent.IsKind(SyntaxKind.ConditionalAccessExpression) Then - Return CreateAdjustSpacesOperation(0, AdjustSpacesOption.ForceSpacesIfOnSingleLine) - End If - - ' identifier ? [conditional access operator] - If previousToken.Kind = SyntaxKind.IdentifierToken AndAlso currentToken.Kind = SyntaxKind.QuestionToken AndAlso - currentToken.Parent.Kind = SyntaxKind.ConditionalAccessExpression Then - - Return CreateAdjustSpacesOperation(0, AdjustSpacesOption.ForceSpacesIfOnSingleLine) - End If - - ' Me ? [conditional access operator] - If previousToken.Kind = SyntaxKind.MeKeyword AndAlso currentToken.Kind = SyntaxKind.QuestionToken AndAlso - currentToken.Parent.Kind = SyntaxKind.ConditionalAccessExpression Then - - Return CreateAdjustSpacesOperation(0, AdjustSpacesOption.ForceSpacesIfOnSingleLine) - End If - - ' MyBase ? [conditional access operator] - If previousToken.Kind = SyntaxKind.MyBaseKeyword AndAlso currentToken.Kind = SyntaxKind.QuestionToken AndAlso - currentToken.Parent.Kind = SyntaxKind.ConditionalAccessExpression Then - + previousToken.Parent.IsKind(SyntaxKind.ConditionalAccessExpression) Then Return CreateAdjustSpacesOperation(0, AdjustSpacesOption.ForceSpacesIfOnSingleLine) End If - ' MyClass ? [conditional access operator] - If previousToken.Kind = SyntaxKind.MyClassExpression AndAlso currentToken.Kind = SyntaxKind.QuestionToken AndAlso - currentToken.Parent.Kind = SyntaxKind.ConditionalAccessExpression Then - - Return CreateAdjustSpacesOperation(0, AdjustSpacesOption.ForceSpacesIfOnSingleLine) - End If - - ' } ? [conditional access operator after initializer] - If previousToken.Kind = SyntaxKind.CloseBraceToken AndAlso currentToken.Kind = SyntaxKind.QuestionToken AndAlso - currentToken.Parent.Kind = SyntaxKind.ConditionalAccessExpression Then - - Return CreateAdjustSpacesOperation(0, AdjustSpacesOption.ForceSpacesIfOnSingleLine) - End If - - ' " ? [conditional access operator after string literal] - If previousToken.Kind = SyntaxKind.StringLiteralToken AndAlso currentToken.Kind = SyntaxKind.QuestionToken AndAlso - currentToken.Parent.Kind = SyntaxKind.ConditionalAccessExpression Then - - Return CreateAdjustSpacesOperation(0, AdjustSpacesOption.ForceSpacesIfOnSingleLine) - End If - - ' ) ? [conditional access off invocation] - If previousToken.Kind = SyntaxKind.CloseParenToken AndAlso currentToken.Kind = SyntaxKind.QuestionToken AndAlso - currentToken.Parent.Kind = SyntaxKind.ConditionalAccessExpression Then - + ' * ? + If currentToken.Kind = SyntaxKind.QuestionToken AndAlso + currentToken.Parent.Kind = SyntaxKind.ConditionalAccessExpression Then Return CreateAdjustSpacesOperation(0, AdjustSpacesOption.ForceSpacesIfOnSingleLine) End If diff --git a/src/Workspaces/VisualBasicTest/Formatting/FormattingTests.vb b/src/Workspaces/VisualBasicTest/Formatting/FormattingTests.vb index 617ea6367de8eb27a059bd98d47d09925c91d313..6e1688464a30cc3e71fd2a31a3eb290665956c75 100644 --- a/src/Workspaces/VisualBasicTest/Formatting/FormattingTests.vb +++ b/src/Workspaces/VisualBasicTest/Formatting/FormattingTests.vb @@ -4034,7 +4034,7 @@ End Class Public Sub ConditionalAccessFormatting() - Dim text = + Const code = " Module Module1 Class G Public t As String @@ -4045,15 +4045,17 @@ Module Module1 Dim q = x ? . t ? ( 0 ) Dim me = Me ? . ToString() Dim mb = MyBase ? . ToString() - Dim mc = MyClas ? . ToString() + Dim mc = MyClass ? . ToString() Dim i = New With {.a = 3} ? . ToString() - Dim s = "Test" ? . ToString() + Dim s = ""Test"" ? . ToString() + Dim s2 = $""Test"" ? . ToString() + Dim x1 = ? . + Dim x2 = ? . End Sub End Module +" - - - Dim expected = + Const expected = " Module Module1 Class G Public t As String @@ -4064,15 +4066,64 @@ Module Module1 Dim q = x?.t?(0) Dim me = Me?.ToString() Dim mb = MyBase?.ToString() - Dim mc = MyClas?.ToString() + Dim mc = MyClass?.ToString() Dim i = New With {.a = 3}?.ToString() - Dim s = "Test"?.ToString() + Dim s = ""Test""?.ToString() + Dim s2 = $""Test""?.ToString() + Dim x1 = ?. + Dim x2 = ?. End Sub End Module +" - + AssertFormat(code, expected) + End Sub - AssertFormat(text.Value, expected.Value, experimental:=True) + + Public Sub ChainedConditionalAccessFormatting() + Const code = " +Module Module1 + Class G + Public t As String + End Class + + Sub Main() + Dim x = New G() + Dim q = x ? . t ? . ToString() ? . ToString ( 0 ) + Dim me = Me ? . ToString() ? . Length + Dim mb = MyBase ? . ToString() ? . Length + Dim mc = MyClass ? . ToString() ? . Length + Dim i = New With {.a = 3} ? . ToString() ? . Length + Dim s = ""Test"" ? . ToString() ? . Length + Dim s2 = $""Test"" ? . ToString() ? . Length + Dim x1 = ? . ? . + Dim x2 = ? . ? . + End Sub +End Module +" + + Const expected = " +Module Module1 + Class G + Public t As String + End Class + + Sub Main() + Dim x = New G() + Dim q = x?.t?.ToString()?.ToString(0) + Dim me = Me?.ToString()?.Length + Dim mb = MyBase?.ToString()?.Length + Dim mc = MyClass?.ToString()?.Length + Dim i = New With {.a = 3}?.ToString()?.Length + Dim s = ""Test""?.ToString()?.Length + Dim s2 = $""Test""?.ToString()?.Length + Dim x1 = ?.?. + Dim x2 = ?.?. + End Sub +End Module +" + + AssertFormat(code, expected) End Sub