提交 9c8b3adb 编写于 作者: S Sam Harwell

Avoid making unnecessary copies

上级 4c467bf6
......@@ -98,6 +98,7 @@
<Compile Include="..\..\..\Workspaces\Core\Portable\Formatting\ListPool.cs" Link="Formatting\ListPool.cs" />
<Compile Include="..\..\..\Workspaces\Core\Portable\Formatting\Rules\AbstractFormattingRule.cs" Link="Formatting\Rules\AbstractFormattingRule.cs" />
<Compile Include="..\..\..\Workspaces\Core\Portable\Formatting\Rules\BaseIndentationFormattingRule.cs" Link="Formatting\Rules\BaseIndentationFormattingRule.cs" />
<Compile Include="..\..\..\Workspaces\Core\Portable\Formatting\Rules\CompatAbstractFormattingRule.cs" Link="Formatting\Rules\CompatAbstractFormattingRule.cs" />
<Compile Include="..\..\..\Workspaces\Core\Portable\Formatting\Rules\NextAction`1.cs" Link="Formatting\Rules\NextAction`1.cs" />
<Compile Include="..\..\..\Workspaces\Core\Portable\Formatting\Rules\NextOperation`1.cs" Link="Formatting\Rules\NextOperation`1.cs" />
<Compile Include="..\..\..\Workspaces\Core\Portable\Formatting\Rules\NoOpFormattingRule.cs" Link="Formatting\Rules\NoOpFormattingRule.cs" />
......
......@@ -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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustNewLinesOperation> nextOperation)
{
// Eg Cases -
// new MyObject {
......@@ -221,7 +221,7 @@ public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken p
}
}
return base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, ref nextOperation);
return base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustNewLinesOperation> nextOperation)
{
// no line operation. no line changes what so ever
var lineOperation = base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, ref nextOperation);
var lineOperation = base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, in 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, ref NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustSpacesOperation> nextOperation)
{
var spaceOperation = base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, ref nextOperation);
var spaceOperation = base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, in nextOperation);
// if there is force space operation, convert it to ForceSpaceIfSingleLine operation.
// (force space basically means remove all line breaks)
......
......@@ -10,7 +10,7 @@ Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.Formatting.Indentation
Friend Class SpecialFormattingRule
Inherits AbstractFormattingRule
Inherits CompatAbstractFormattingRule
Public Sub New()
End Sub
......@@ -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, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
Public Overrides Function GetAdjustNewLinesOperationSlow(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)
......@@ -28,7 +28,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.Formatting.Indentation
End If
' no line operation. no line changes what so ever
Dim lineOperation = MyBase.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, nextOperation)
Dim lineOperation = MyBase.GetAdjustNewLinesOperationSlow(previousToken, currentToken, optionSet, nextOperation)
If lineOperation IsNot Nothing Then
' basically means don't ever put new line if there isn't already one, but do
' indentation.
......@@ -38,8 +38,8 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.Formatting.Indentation
Return Nothing
End Function
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)
Public Overrides Function GetAdjustSpacesOperationSlow(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
Dim spaceOperation = MyBase.GetAdjustSpacesOperationSlow(previousToken, currentToken, optionSet, nextOperation)
' if there is force space operation, convert it to ForceSpaceIfSingleLine operation.
' (force space basically means remove all line breaks)
......
......@@ -8,14 +8,14 @@ Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.Utilities
Friend NotInheritable Class LineAdjustmentFormattingRule
Inherits AbstractFormattingRule
Inherits CompatAbstractFormattingRule
Public Shared ReadOnly Instance As New LineAdjustmentFormattingRule()
Private Sub New()
End Sub
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
Public Overrides Function GetAdjustNewLinesOperationSlow(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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref nextOperation);
return base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, in nextOperation);
}
}
}
......@@ -15,10 +15,10 @@ public FormattingRule()
{
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref nextOperation);
var operation = base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (ForceSingleSpace(previousToken, currentToken))
{
return null;
}
return base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, ref nextOperation);
return base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, in nextOperation);
}
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustSpacesOperation> nextOperation)
{
if (ForceSingleSpace(previousToken, currentToken))
{
return new AdjustSpacesOperation(1, AdjustSpacesOption.ForceSpaces);
}
return base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, ref nextOperation);
return base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, in nextOperation);
}
}
......
......@@ -40,7 +40,7 @@ private bool IsQuestionOrColonOfNewConditional(SyntaxToken token)
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(
SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (previousToken.RawKind == 0 || currentToken.RawKind == 0)
{
......
......@@ -32,13 +32,13 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ChangeSignature
End If
End Sub
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
Public Overrides Function GetAdjustNewLinesOperationSlow(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)
End If
Return MyBase.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, nextOperation)
Return MyBase.GetAdjustNewLinesOperationSlow(previousToken, currentToken, optionSet, nextOperation)
End Function
End Class
End Namespace
......@@ -113,9 +113,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExtractMethod
End Function
Private Class FormattingRule
Inherits AbstractFormattingRule
Inherits CompatAbstractFormattingRule
Public Overrides Function GetAdjustNewLinesOperation(previousToken As SyntaxToken, currentToken As SyntaxToken, optionSet As OptionSet, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
Public Overrides Function GetAdjustNewLinesOperationSlow(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
......
......@@ -20,7 +20,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UseConditionalExpression
''' i.e. both branches will be on a newline, indented once from the parent indentation.
''' </summary>
Friend Class MultiLineConditionalExpressionFormattingRule
Inherits AbstractFormattingRule
Inherits CompatAbstractFormattingRule
Public Shared ReadOnly Instance As New MultiLineConditionalExpressionFormattingRule()
......@@ -36,7 +36,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UseConditionalExpression
Return False
End Function
Public Overrides Function GetAdjustNewLinesOperation(
Public Overrides Function GetAdjustNewLinesOperationSlow(
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
......
......@@ -26,7 +26,7 @@ private bool IsAfterEndRegionBeforeMethodDeclaration(SyntaxToken previousToken,
return false;
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (IsAfterEndRegionBeforeMethodDeclaration(previousToken, currentToken))
{
......
......@@ -15,7 +15,7 @@ private BlankLineInGeneratedMethodFormattingRule()
{
}
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustSpacesOperation> nextOperation)
{
var operation = base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, ref nextOperation);
var operation = base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustNewLinesOperation> nextOperation)
{
var operation = base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, ref nextOperation);
var operation = base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustNewLinesOperation> nextOperation)
{
if (previousToken.Parent is StructuredTriviaSyntax || currentToken.Parent is StructuredTriviaSyntax)
{
......@@ -20,7 +20,7 @@ public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken p
return nextOperation.Invoke();
}
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustSpacesOperation> nextOperation)
{
if (previousToken.Parent is StructuredTriviaSyntax || currentToken.Parent is StructuredTriviaSyntax)
{
......
......@@ -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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public override AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustSpacesOperation> nextOperation)
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustSpacesOperation> nextOperation)
{
//////////////////////////////////////////////////////
// ";" related operations
......
......@@ -53,11 +53,11 @@ public ChainedFormattingRules(IEnumerable<AbstractFormattingRule> formattingRule
this.AddContinuedOperations);
_newLinesFuncCache = new OperationCache<AdjustNewLinesOperation>(
(int index, SyntaxToken token1, SyntaxToken token2, ref NextOperation<AdjustNewLinesOperation> next) => _formattingRules[index].GetAdjustNewLinesOperation(token1, token2, _optionSet, ref next),
(int index, SyntaxToken token1, SyntaxToken token2, in NextOperation<AdjustNewLinesOperation> next) => _formattingRules[index].GetAdjustNewLinesOperation(token1, token2, _optionSet, in next),
this.GetContinuedOperations);
_spaceFuncCache = new OperationCache<AdjustSpacesOperation>(
(int index, SyntaxToken token1, SyntaxToken token2, ref NextOperation<AdjustSpacesOperation> next) => _formattingRules[index].GetAdjustSpacesOperation(token1, token2, _optionSet, ref next),
(int index, SyntaxToken token1, SyntaxToken token2, in NextOperation<AdjustSpacesOperation> next) => _formattingRules[index].GetAdjustSpacesOperation(token1, token2, _optionSet, in next),
this.GetContinuedOperations);
}
......@@ -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, ref continuation);
return funcCache.NextOperation(index, token1, token2, in continuation);
}
}
}
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Microsoft.CodeAnalysis.Formatting.Rules;
namespace Microsoft.CodeAnalysis.Formatting
......@@ -10,7 +9,7 @@ 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 NextOperationFunc(int index, SyntaxToken token1, SyntaxToken token2, in NextOperation<TResult> next);
public delegate TResult ContinuationFunc(int index, SyntaxToken token1, SyntaxToken token2, in OperationCache<TResult> operationCache);
public OperationCache(
......
......@@ -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, ref NextOperation<AdjustNewLinesOperation> nextOperation)
public virtual AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in 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, ref NextOperation<AdjustSpacesOperation> nextOperation)
public virtual AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustSpacesOperation> nextOperation)
{
return nextOperation.Invoke();
}
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.ComponentModel;
using Microsoft.CodeAnalysis.Options;
namespace Microsoft.CodeAnalysis.Formatting.Rules
{
internal abstract class CompatAbstractFormattingRule : AbstractFormattingRule
{
#pragma warning disable CS0809 // Obsolete member overrides non-obsolete member
[Obsolete("Do not call this method directly (it will Stack Overflow).", error: true)]
[EditorBrowsable(EditorBrowsableState.Never)]
public override sealed AdjustNewLinesOperation GetAdjustNewLinesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustNewLinesOperation> nextOperation)
{
var nextOperationCopy = nextOperation;
return GetAdjustNewLinesOperationSlow(previousToken, currentToken, optionSet, ref nextOperationCopy);
}
[Obsolete("Do not call this method directly (it will Stack Overflow).", error: true)]
[EditorBrowsable(EditorBrowsableState.Never)]
public override sealed AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, in NextOperation<AdjustSpacesOperation> nextOperation)
{
var nextOperationCopy = nextOperation;
return GetAdjustSpacesOperationSlow(previousToken, currentToken, optionSet, ref nextOperationCopy);
}
#pragma warning restore CS0809 // Obsolete member overrides non-obsolete member
/// <summary>
/// returns AdjustNewLinesOperation between two tokens either by itself or by filtering/replacing a operation returned by NextOperation
/// </summary>
public virtual AdjustNewLinesOperation GetAdjustNewLinesOperationSlow(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustNewLinesOperation> nextOperation)
{
return base.GetAdjustNewLinesOperation(previousToken, currentToken, optionSet, in nextOperation);
}
/// <summary>
/// returns AdjustSpacesOperation between two tokens either by itself or by filtering/replacing a operation returned by NextOperation
/// </summary>
public virtual AdjustSpacesOperation GetAdjustSpacesOperationSlow(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, ref NextOperation<AdjustSpacesOperation> nextOperation)
{
return base.GetAdjustSpacesOperation(previousToken, currentToken, optionSet, in nextOperation);
}
}
}
......@@ -12,7 +12,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Formatting
'
' to reduce number of unnecessary heap allocations, most of them just return null.
Friend NotInheritable Class DefaultOperationProvider
Inherits AbstractFormattingRule
Inherits CompatAbstractFormattingRule
Public Shared ReadOnly Instance As New DefaultOperationProvider()
......@@ -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, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
Public Overrides Function GetAdjustNewLinesOperationSlow(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, ByRef nextOperation As NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
Public Overrides Function GetAdjustSpacesOperationSlow(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, ByRef nextFunc As NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
Public Overrides Function GetAdjustSpacesOperationSlow(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)
......
......@@ -5,7 +5,7 @@ Imports Microsoft.CodeAnalysis.Text
Namespace Microsoft.CodeAnalysis.VisualBasic.Formatting
Friend Class BaseFormattingRule
Inherits AbstractFormattingRule
Inherits CompatAbstractFormattingRule
Public Sub New()
End Sub
......
......@@ -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, ByRef nextOperation As Rules.NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
Public Overrides Function GetAdjustSpacesOperationSlow(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()
......@@ -120,7 +120,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Formatting
Return operation
End Function
Public Overrides Function GetAdjustNewLinesOperation(
Public Overrides Function GetAdjustNewLinesOperationSlow(
previousToken As SyntaxToken,
currentToken As SyntaxToken,
optionSet As OptionSet,
......
......@@ -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, ByRef nextOperation As NextOperation(Of AdjustNewLinesOperation)) As AdjustNewLinesOperation
Public Overrides Function GetAdjustNewLinesOperationSlow(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, ByRef nextOperation As NextOperation(Of AdjustSpacesOperation)) As AdjustSpacesOperation
Public Overrides Function GetAdjustSpacesOperationSlow(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.
先完成此消息的编辑!
想要评论请 注册