提交 e5c8870f 编写于 作者: C Cyrus Najmabadi

Simplify.

上级 990dde2b
......@@ -13,7 +13,7 @@ public CSharpBinaryExpressionWrapper()
{
}
public override SyntaxTriviaList GetNewLineBeforeOperatorTrivia(SyntaxTriviaList newLine)
protected override SyntaxTriviaList GetNewLineBeforeOperatorTrivia(SyntaxTriviaList newLine)
=> newLine;
}
}
......@@ -14,7 +14,7 @@ public CSharpChainedExpressionWrapper()
{
}
public override SyntaxTriviaList GetNewLineBeforeOperatorTrivia(SyntaxTriviaList newLine)
protected override SyntaxTriviaList GetNewLineBeforeOperatorTrivia(SyntaxTriviaList newLine)
=> newLine;
}
}
......@@ -9,17 +9,7 @@
namespace Microsoft.CodeAnalysis.Editor.Wrapping.BinaryExpression
{
internal abstract partial class AbstractBinaryExpressionWrapper : AbstractSyntaxWrapper
{
/// <summary>
/// Get's the language specific trivia that should be inserted before an operator if the
/// user wants to wrap the operator to the next line. For C# this is a simple newline-trivia.
/// For VB, this will be a line-continuation char (<c>_</c>), followed by a newline.
/// </summary>
public abstract SyntaxTriviaList GetNewLineBeforeOperatorTrivia(SyntaxTriviaList newLine);
}
internal abstract partial class AbstractBinaryExpressionWrapper<TBinaryExpressionSyntax> : AbstractBinaryExpressionWrapper
internal abstract partial class AbstractBinaryExpressionWrapper<TBinaryExpressionSyntax> : AbstractSyntaxWrapper
where TBinaryExpressionSyntax : SyntaxNode
{
private readonly ISyntaxFactsService _syntaxFacts;
......@@ -33,6 +23,13 @@ internal abstract partial class AbstractBinaryExpressionWrapper<TBinaryExpressio
_precedenceService = precedenceService;
}
/// <summary>
/// Get's the language specific trivia that should be inserted before an operator if the
/// user wants to wrap the operator to the next line. For C# this is a simple newline-trivia.
/// For VB, this will be a line-continuation char (<c>_</c>), followed by a newline.
/// </summary>
protected abstract SyntaxTriviaList GetNewLineBeforeOperatorTrivia(SyntaxTriviaList newLine);
public sealed override async Task<ICodeActionComputer> TryCreateComputerAsync(
Document document, int position, SyntaxNode node, CancellationToken cancellationToken)
{
......
......@@ -16,7 +16,7 @@ namespace Microsoft.CodeAnalysis.Editor.Wrapping.BinaryExpression
internal partial class AbstractBinaryExpressionWrapper<TBinaryExpressionSyntax>
{
private class BinaryExpressionCodeActionComputer :
AbstractCodeActionComputer<AbstractBinaryExpressionWrapper>
AbstractCodeActionComputer<AbstractBinaryExpressionWrapper<TBinaryExpressionSyntax>>
{
private readonly ImmutableArray<SyntaxNodeOrToken> _exprsAndOperators;
private readonly OperatorPlacementWhenWrappingPreference _preference;
......@@ -25,7 +25,7 @@ private class BinaryExpressionCodeActionComputer :
private readonly SyntaxTriviaList _newlineBeforeOperatorTrivia;
public BinaryExpressionCodeActionComputer(
AbstractBinaryExpressionWrapper service,
AbstractBinaryExpressionWrapper<TBinaryExpressionSyntax> service,
Document document,
SourceText originalSourceText,
DocumentOptionSet options,
......
......@@ -9,16 +9,6 @@
namespace Microsoft.CodeAnalysis.Editor.Wrapping.ChainedExpression
{
internal abstract partial class AbstractChainedExpressionWrapper : AbstractSyntaxWrapper
{
/// <summary>
/// Gets the language specific trivia that should be inserted before an operator if the
/// user wants to wrap the operator to the next line. For C# this is a simple newline-trivia.
/// For VB, this will be a line-continuation char (<c>_</c>), followed by a newline.
/// </summary>
public abstract SyntaxTriviaList GetNewLineBeforeOperatorTrivia(SyntaxTriviaList newLine);
}
/// <summary>
/// Finds and wraps 'chained' expressions. For the purpose of this feature, a chained
/// expression is built out of 'chunks' where each chunk is of the form
......@@ -53,7 +43,7 @@ internal abstract partial class AbstractChainedExpressionWrapper : AbstractSynta
/// </summary>
internal abstract partial class AbstractChainedExpressionWrapper<
TNameSyntax,
TBaseArgumentListSyntax> : AbstractChainedExpressionWrapper
TBaseArgumentListSyntax> : AbstractSyntaxWrapper
where TNameSyntax : SyntaxNode
where TBaseArgumentListSyntax : SyntaxNode
{
......@@ -71,6 +61,13 @@ internal abstract partial class AbstractChainedExpressionWrapper<
_questionTokenKind = questionTokenKind;
}
/// <summary>
/// Gets the language specific trivia that should be inserted before an operator if the
/// user wants to wrap the operator to the next line. For C# this is a simple newline-trivia.
/// For VB, this will be a line-continuation char (<c>_</c>), followed by a newline.
/// </summary>
protected abstract SyntaxTriviaList GetNewLineBeforeOperatorTrivia(SyntaxTriviaList newLine);
public sealed override async Task<ICodeActionComputer> TryCreateComputerAsync(
Document document, int position, SyntaxNode node, CancellationToken cancellationToken)
{
......
......@@ -34,7 +34,7 @@ internal abstract partial class AbstractChainedExpressionWrapper<
/// filter it out.
/// </summary>
private class CallExpressionCodeActionComputer :
AbstractCodeActionComputer<AbstractChainedExpressionWrapper>
AbstractCodeActionComputer<AbstractChainedExpressionWrapper<TNameSyntax, TBaseArgumentListSyntax>>
{
/// <summary>
/// The chunks to normalize and wrap. The first chunk will be normalized,
......@@ -56,7 +56,7 @@ private class CallExpressionCodeActionComputer :
private readonly SyntaxTriviaList _newlineBeforeOperatorTrivia;
public CallExpressionCodeActionComputer(
AbstractChainedExpressionWrapper service,
AbstractChainedExpressionWrapper<TNameSyntax, TBaseArgumentListSyntax> service,
Document document,
SourceText originalSourceText,
DocumentOptionSet options,
......
......@@ -11,7 +11,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.Wrapping.BinaryExpression
MyBase.New(VisualBasicSyntaxFactsService.Instance, VisualBasicPrecedenceService.Instance)
End Sub
Public Overrides Function GetNewLineBeforeOperatorTrivia(newLine As SyntaxTriviaList) As SyntaxTriviaList
Protected Overrides Function GetNewLineBeforeOperatorTrivia(newLine As SyntaxTriviaList) As SyntaxTriviaList
Return newLine.InsertRange(0, {SyntaxFactory.WhitespaceTrivia(" "), SyntaxFactory.LineContinuationTrivia("_")})
End Function
End Class
......
......@@ -11,7 +11,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.Wrapping.ChainedExpression
MyBase.New(VisualBasicSyntaxFactsService.Instance, SyntaxKind.DotToken, SyntaxKind.QuestionToken)
End Sub
Public Overrides Function GetNewLineBeforeOperatorTrivia(newLine As SyntaxTriviaList) As SyntaxTriviaList
Protected Overrides Function GetNewLineBeforeOperatorTrivia(newLine As SyntaxTriviaList) As SyntaxTriviaList
Return newLine.InsertRange(0, {SyntaxFactory.WhitespaceTrivia(" "), SyntaxFactory.LineContinuationTrivia("_")})
End Function
End Class
......
......@@ -625,6 +625,12 @@ public bool IsConditionalAccessExpression(SyntaxNode node)
whenNotNull = conditionalAccess.WhenNotNull;
}
public bool IsPostfixUnaryExpression(SyntaxNode node)
=> node is PostfixUnaryExpressionSyntax;
public bool IsMemberBindingExpression(SyntaxNode node)
=> node is MemberBindingExpressionSyntax;
public bool IsPointerMemberAccessExpression(SyntaxNode node)
=> (node as MemberAccessExpressionSyntax)?.Kind() == SyntaxKind.PointerMemberAccessExpression;
......
......@@ -212,6 +212,9 @@ internal interface ISyntaxFactsService : ILanguageService
bool IsConditionalAccessExpression(SyntaxNode node);
void GetPartsOfConditionalAccessExpression(SyntaxNode node, out SyntaxNode expression, out SyntaxToken operatorToken, out SyntaxNode whenNotNull);
bool IsMemberBindingExpression(SyntaxNode node);
bool IsPostfixUnaryExpression(SyntaxNode node);
bool IsParenthesizedExpression(SyntaxNode node);
SyntaxNode GetExpressionOfParenthesizedExpression(SyntaxNode node);
......
......@@ -1867,5 +1867,15 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
expression = invocation.Expression
argumentList = invocation.ArgumentList
End Sub
Public Function IsPostfixUnaryExpression(node As SyntaxNode) As Boolean Implements ISyntaxFactsService.IsPostfixUnaryExpression
' Does not exist in VB.
Return False
End Function
Public Function IsMemberBindingExpression(node As SyntaxNode) As Boolean Implements ISyntaxFactsService.IsMemberBindingExpression
' Does not exist in VB.
Return False
End Function
End Class
End Namespace
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册