提交 4c467bf6 编写于 作者: S Sam Harwell

Pass NextOperation and OperationCache by reference

上级 f7f993f3
......@@ -197,7 +197,7 @@ private class BraceCompletionFormattingRule : BaseFormattingRule
public static readonly AbstractFormattingRule Instance = new BraceCompletionFormattingRule();
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
// Eg Cases -
// new MyObject {
......@@ -221,7 +221,7 @@ public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken p
}
}
return base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, nextOperation);
return base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, ref nextOperation);
}
public override void AddAlignTokensOperations(List<AlignTokensOperation> list, SyntaxNode node, OptionSet optionSet, NextAction<AlignTokensOperation> nextOperation)
......
......@@ -10,7 +10,7 @@ internal partial class CSharpEditorFormattingService : IEditorFormattingService
{
internal class PasteFormattingRule : AbstractFormattingRule
{
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (currentToken.Parent != null)
{
......
......@@ -118,10 +118,10 @@ private bool CloseBraceOfTryOrDoBlock(SyntaxToken endToken)
private class NoLineChangeFormattingRule : AbstractFormattingRule
{
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
// no line operation. no line changes what so ever
var lineOperation = base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, nextOperation);
var lineOperation = base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, ref nextOperation);
if (lineOperation != null)
{
// ignore force if same line option
......@@ -146,9 +146,9 @@ public override void AddSuppressOperations(List<SuppressOperation> list, SyntaxN
// don't suppress anything
}
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
{
var spaceOperation = base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, nextOperation);
var spaceOperation = base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, ref nextOperation);
// if there is force space operation, convert it to ForceSpaceIfSingleLine operation.
// (force space basically means remove all line breaks)
......
......@@ -19,7 +19,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.Formatting.Indentation
' don't suppress anything
End Sub
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
' unlike regular one. force position of attribute
Dim attributeNode = TryCast(previousToken.Parent, AttributeListSyntax)
......@@ -38,7 +38,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.Formatting.Indentation
Return Nothing
End Function
Public Overrides Function GetAdjustSpacesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, nextOperation As NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
Public Overrides Function GetAdjustSpacesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
Dim spaceOperation = MyBase.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, nextOperation)
' if there is force space operation, convert it to ForceSpaceIfSingleLine operation.
......
......@@ -15,7 +15,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.Utilities
Private Sub New()
End Sub
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
If Not CommonFormattingHelpers.HasAnyWhitespaceElasticTrivia(previousToken, currentToken) Then
Return nextOperation.Invoke()
End If
......
......@@ -44,14 +44,14 @@ private void AddChangeSignatureIndentOperation(List<IndentBlockOperation> list,
}
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (previousToken.Kind() == SyntaxKind.CommaToken && s_allowableKinds.Contains(previousToken.Parent.Kind()))
{
return FormattingOperations.CreateAdjustNewLinesOperation(0, AdjustNewLinesOption.PreserveLines);
}
return base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, nextOperation);
return base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, ref nextOperation);
}
}
}
......@@ -15,10 +15,10 @@ public FormattingRule()
{
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
// for extract method case, for a hybrid case, don't force rule, but preserve user style
var operation = base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, nextOperation);
var operation = base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, ref nextOperation);
if (operation == null)
{
return null;
......
......@@ -96,24 +96,24 @@ private bool ForceSingleSpace(SyntaxToken previousToken, SyntaxToken currentToke
return false;
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (ForceSingleSpace(previousToken, currentToken))
{
return null;
}
return base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, nextOperation);
return base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, ref nextOperation);
}
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
{
if (ForceSingleSpace(previousToken, currentToken))
{
return new AdjustSpacesOperation(1, AdjustSpacesOption.ForceSpaces);
}
return base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, nextOperation);
return base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, ref nextOperation);
}
}
......
......@@ -40,7 +40,7 @@ private bool IsQuestionOrColonOfNewConditional(SyntaxToken token)
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(
SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (IsQuestionOrColonOfNewConditional(currentToken))
{
......
......@@ -243,7 +243,7 @@ public CleanUpNewLinesFormatter(SourceText text)
_text = text;
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
// Since we know the general shape of these new import statements, we simply look for where
// tokens are not on the same line and force them to only be separated by a single newline.
......
......@@ -27,7 +27,7 @@ public FormatLargeBinaryExpressionRule(ISyntaxFactsService syntaxFacts)
/// Wrap the large &amp;&amp; expression after every &amp;&amp; token.
/// </summary>
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(
SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (_syntaxFacts.IsLogicalAndExpression(previousToken.Parent))
{
......
......@@ -16,7 +16,7 @@ protected abstract class AbstractMetadataFormattingRule : AbstractFormattingRule
protected abstract bool IsNewLine(char c);
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(
SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (previousToken.RawKind == 0 || currentToken.RawKind == 0)
{
......
......@@ -32,7 +32,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ChangeSignature
End If
End Sub
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
If previousToken.IsKind(SyntaxKind.CommaToken) AndAlso
(previousToken.Parent.IsKind(SyntaxKind.ParameterList) OrElse previousToken.Parent.IsKind(SyntaxKind.ArgumentList)) Then
Return FormattingOperations.CreateAdjustNewLinesOperation(0, AdjustNewLinesOption.PreserveLines)
......
......@@ -115,7 +115,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExtractMethod
Private Class FormattingRule
Inherits AbstractFormattingRule
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
If Not previousToken.IsLastTokenOfStatement() Then
Return nextOperation.Invoke()
End If
......
......@@ -37,7 +37,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UseConditionalExpression
End Function
Public Overrides Function GetAdjustNewLinesOperation(
previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
If IsCommaOfNewConditional(previousToken) Then
' We want to force the expressions after the commas to be put on the
' next line.
......
......@@ -26,7 +26,7 @@ private bool IsAfterEndRegionBeforeMethodDeclaration(SyntaxToken previousToken,
return false;
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (IsAfterEndRegionBeforeMethodDeclaration(previousToken, currentToken))
{
......
......@@ -15,7 +15,7 @@ private BlankLineInGeneratedMethodFormattingRule()
{
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
// case: insert blank line in empty method body.
if (previousToken.Kind() == SyntaxKind.OpenBraceToken &&
......
......@@ -13,9 +13,9 @@ internal class ContainedDocumentPreserveFormattingRule : AbstractFormattingRule
private static readonly AdjustSpacesOperation s_preserveSpace = FormattingOperations.CreateAdjustSpacesOperation(0, AdjustSpacesOption.PreserveSpaces);
private static readonly AdjustNewLinesOperation s_preserveLine = FormattingOperations.CreateAdjustNewLinesOperation(0, AdjustNewLinesOption.PreserveLines);
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
{
var operation = base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, nextOperation);
var operation = base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, ref nextOperation);
if (operation != null)
{
return s_preserveSpace;
......@@ -24,9 +24,9 @@ public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previ
return operation;
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
var operation = base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, nextOperation);
var operation = base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, ref nextOperation);
if (operation != null)
{
return s_preserveLine;
......
......@@ -34,13 +34,13 @@ public override void AddAlignTokensOperations(List<AlignTokensOperation> list, S
{
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
return null;
}
// return 1 space for every token pairs as a default operation
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
{
int space = currentToken.Kind() == SyntaxKind.EndOfFileToken ? 0 : 1;
return FormattingOperations.CreateAdjustSpacesOperation(space, AdjustSpacesOption.DefaultSpacesIfOnSingleLine);
......
......@@ -96,7 +96,7 @@ private InitializerExpressionSyntax GetInitializerNode(SyntaxNode node)
return null;
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
var operation = nextOperation.Invoke();
if (operation == null)
......@@ -218,7 +218,7 @@ private AdjustNewLinesOperation GetAdjustNewLinesOperationBetweenMembers(SyntaxT
return FormattingOperations.CreateAdjustNewLinesOperation(2 /* +1 for member itself and +1 for a blank line*/, AdjustNewLinesOption.ForceLines);
}
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
{
var operation = nextOperation.Invoke();
if (operation == null)
......
......@@ -9,7 +9,7 @@ internal class EndOfFileTokenFormattingRule : BaseFormattingRule
{
internal const string Name = "CSharp End Of File Token Formatting Rule";
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
// * <End Of File> case for C#, make sure we don't insert new line between * and <End of
// File> tokens.
......@@ -21,7 +21,7 @@ public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken p
return nextOperation.Invoke();
}
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
{
// * <End Of File) case
// for C#, make sure we have nothing between these two tokens
......
......@@ -45,7 +45,7 @@ private bool IsControlBlock(SyntaxNode node)
}
}
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
{
var operation = nextOperation.Invoke();
......@@ -166,7 +166,7 @@ public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previ
return operation;
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
var operation = nextOperation.Invoke();
......
......@@ -105,7 +105,7 @@ public override void AddAnchorIndentationOperations(List<AnchorIndentationOperat
}
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (previousToken.IsNestedQueryExpression())
{
......
......@@ -11,7 +11,7 @@ namespace Microsoft.CodeAnalysis.CSharp.Formatting
{
internal class SpacingFormattingRule : BaseFormattingRule
{
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
{
if (optionSet == null)
{
......
......@@ -10,7 +10,7 @@ internal class StructuredTriviaFormattingRule : BaseFormattingRule
{
internal const string Name = "CSharp Structured Trivia Formatting Rule";
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (previousToken.Parent is StructuredTriviaSyntax || currentToken.Parent is StructuredTriviaSyntax)
{
......@@ -20,18 +20,18 @@ public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken p
return nextOperation.Invoke();
}
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
{
if (previousToken.Parent is StructuredTriviaSyntax || currentToken.Parent is StructuredTriviaSyntax)
{
// this doesn't take care of all cases where tokens belong to structured trivia. this is only for cases we care
return GetAdjustSpacesOperation(previousToken, currentToken, nextOperation);
return GetAdjustSpacesOperation(previousToken, currentToken, in nextOperation);
}
return nextOperation.Invoke();
}
private AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, NextOperation<AdjustSpacesOperation> nextOperation)
private AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, in NextOperation<AdjustSpacesOperation> nextOperation)
{
if (previousToken.Kind() == SyntaxKind.HashToken && SyntaxFacts.IsPreprocessorKeyword(currentToken.Kind()))
{
......
......@@ -12,7 +12,7 @@ internal class TokenBasedFormattingRule : BaseFormattingRule
{
internal const string Name = "CSharp Token Based Formatting Rule";
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
////////////////////////////////////////////////////
// brace related operations
......@@ -186,7 +186,7 @@ public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken p
return nextOperation.Invoke();
}
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
{
//////////////////////////////////////////////////////
// ";" related operations
......
......@@ -53,11 +53,11 @@ public ChainedFormattingRules(IEnumerable<AbstractFormattingRule> formattingRule
this.AddContinuedOperations);
_newLinesFuncCache = new OperationCache<AdjustNewLinesOperation>(
(index, token1, token2, next) => _formattingRules[index].GetAdjustNewLinesOperation(token1, token2, _optionSet, next),
(int index, SyntaxToken token1, SyntaxToken token2, ref NextOperation<AdjustNewLinesOperation> next) => _formattingRules[index].GetAdjustNewLinesOperation(token1, token2, _optionSet, ref next),
this.GetContinuedOperations);
_spaceFuncCache = new OperationCache<AdjustSpacesOperation>(
(index, token1, token2, next) => _formattingRules[index].GetAdjustSpacesOperation(token1, token2, _optionSet, next),
(int index, SyntaxToken token1, SyntaxToken token2, ref NextOperation<AdjustSpacesOperation> next) => _formattingRules[index].GetAdjustSpacesOperation(token1, token2, _optionSet, ref next),
this.GetContinuedOperations);
}
......@@ -107,7 +107,7 @@ private void AddContinuedOperations<TArg1>(int index, List<TArg1> arg1, SyntaxNo
}
}
private TResult GetContinuedOperations<TResult>(int index, SyntaxToken token1, SyntaxToken token2, OperationCache<TResult> funcCache)
private TResult GetContinuedOperations<TResult>(int index, SyntaxToken token1, SyntaxToken token2, in OperationCache<TResult> funcCache)
{
// If we have no remaining handlers to execute, then we'll execute our last handler
if (index >= _formattingRules.Count)
......@@ -118,7 +118,7 @@ private TResult GetContinuedOperations<TResult>(int index, SyntaxToken token1, S
{
// Call the handler at the index, passing a continuation that will come back to here with index + 1
var continuation = new NextOperation<TResult>(index + 1, token1, token2, funcCache);
return funcCache.NextOperation(index, token1, token2, continuation);
return funcCache.NextOperation(index, token1, token2, ref continuation);
}
}
}
......
......@@ -10,15 +10,18 @@ namespace Microsoft.CodeAnalysis.Formatting
/// </summary>
internal readonly struct OperationCache<TResult>
{
public delegate TResult NextOperationFunc(int index, SyntaxToken token1, SyntaxToken token2, ref NextOperation<TResult> next);
public delegate TResult ContinuationFunc(int index, SyntaxToken token1, SyntaxToken token2, in OperationCache<TResult> operationCache);
public OperationCache(
Func<int, SyntaxToken, SyntaxToken, NextOperation<TResult>, TResult> nextOperation,
Func<int, SyntaxToken, SyntaxToken, OperationCache<TResult>, TResult> continuation)
NextOperationFunc nextOperation,
ContinuationFunc continuation)
{
this.NextOperation = nextOperation;
this.Continuation = continuation;
}
public Func<int, SyntaxToken, SyntaxToken, NextOperation<TResult>, TResult> NextOperation { get; }
public Func<int, SyntaxToken, SyntaxToken, OperationCache<TResult>, TResult> Continuation { get; }
public NextOperationFunc NextOperation { get; }
public ContinuationFunc Continuation { get; }
}
}
......@@ -47,7 +47,7 @@ public virtual void AddAlignTokensOperations(List<AlignTokensOperation> list, Sy
/// <summary>
/// returns AdjustNewLinesOperation between two tokens either by itself or by filtering/replacing a operation returned by NextOperation
/// </summary>
public virtual AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustNewLinesOperation> nextOperation)
public virtual AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
return nextOperation.Invoke();
}
......@@ -55,7 +55,7 @@ public virtual AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken pr
/// <summary>
/// returns AdjustSpacesOperation between two tokens either by itself or by filtering/replacing a operation returned by NextOperation
/// </summary>
public virtual AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
public virtual AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
{
return nextOperation.Invoke();
}
......
......@@ -6,14 +6,14 @@ namespace Microsoft.CodeAnalysis.Formatting.Rules
/// <summary>
/// Represents a next operation to run in a continuation style chaining.
/// </summary>
internal struct NextOperation<TResult>
internal readonly struct NextOperation<TResult>
{
private readonly int _index;
private SyntaxToken _token1;
private SyntaxToken _token2;
private readonly SyntaxToken _token1;
private readonly SyntaxToken _token2;
private readonly OperationCache<TResult> _operationCache;
public NextOperation(int index, SyntaxToken token1, SyntaxToken token2, OperationCache<TResult> operationCache)
public NextOperation(int index, SyntaxToken token1, SyntaxToken token2, in OperationCache<TResult> operationCache)
{
_index = index;
_token1 = token1;
......@@ -23,7 +23,7 @@ public NextOperation(int index, SyntaxToken token1, SyntaxToken token2, Operatio
public TResult Invoke()
{
return _operationCache.Continuation(_index, _token1, _token2, _operationCache);
return _operationCache.Continuation(_index, _token1, _token2, in _operationCache);
}
}
}
......@@ -31,7 +31,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Formatting
Public Overrides Sub AddAlignTokensOperations(operations As List(Of AlignTokensOperation), node As SyntaxNode, optionSet As OptionSet, nextAction As NextAction(Of AlignTokensOperation))
End Sub
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
If previousToken.Parent Is Nothing Then
Return Nothing
End If
......@@ -149,7 +149,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Formatting
End Function
' return 1 space for every token pairs as a default operation
Public Overrides Function GetAdjustSpacesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, nextOperation As NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
Public Overrides Function GetAdjustSpacesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
If previousToken.Kind = SyntaxKind.ColonToken AndAlso
TypeOf previousToken.Parent Is LabelStatementSyntax AndAlso
currentToken.Kind <> SyntaxKind.EndOfFileToken Then
......
......@@ -12,7 +12,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Formatting
Public Sub New()
End Sub
Public Overrides Function GetAdjustSpacesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, nextFunc As NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
Public Overrides Function GetAdjustSpacesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextFunc As NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
' * <end of file token>
If currentToken.Kind = SyntaxKind.EndOfFileToken Then
Return CreateAdjustSpacesOperation(0, AdjustSpacesOption.ForceSpacesIfOnSingleLine)
......
......@@ -84,7 +84,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Formatting
End If
End Sub
Public Overrides Function GetAdjustSpacesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, nextOperation As Rules.NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
Public Overrides Function GetAdjustSpacesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As Rules.NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
' if it doesn't have elastic trivia, pass it through
If Not CommonFormattingHelpers.HasAnyWhitespaceElasticTrivia(previousToken, currentToken) Then
Return nextOperation.Invoke()
......@@ -124,7 +124,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Formatting
previousToken As SyntaxToken,
currentToken As SyntaxToken,
optionSet As OptionSet,
nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
' if it doesn't have elastic trivia, pass it through
If Not CommonFormattingHelpers.HasAnyWhitespaceElasticTrivia(previousToken, currentToken) Then
......
......@@ -12,7 +12,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Formatting
Public Sub New()
End Sub
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
If UnderStructuredTrivia(previousToken, currentToken) Then
Return Nothing
End If
......@@ -21,7 +21,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Formatting
End Function
Public Overrides Function GetAdjustSpacesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, nextOperation As NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
Public Overrides Function GetAdjustSpacesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
If UnderStructuredTrivia(previousToken, currentToken) Then
If previousToken.Kind = SyntaxKind.HashToken AndAlso SyntaxFacts.IsPreprocessorKeyword(CType(currentToken.Kind, SyntaxKind)) Then
Return CreateAdjustSpacesOperation(space:=0, option:=AdjustSpacesOption.ForceSpacesIfOnSingleLine)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册