File: src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Formatting\Rules\EndOfFileTokenFormattingRule.cs
Web Access
Project: src\src\CodeStyle\CSharp\Analyzers\Microsoft.CodeAnalysis.CSharp.CodeStyle.csproj (Microsoft.CodeAnalysis.CSharp.CodeStyle)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using Microsoft.CodeAnalysis.Formatting.Rules;
 
namespace Microsoft.CodeAnalysis.CSharp.Formatting;
 
internal class EndOfFileTokenFormattingRule : BaseFormattingRule
{
    internal const string Name = "CSharp End Of File Token Formatting Rule";
 
    public override AdjustNewLinesOperation? GetAdjustNewLinesOperation(in SyntaxToken previousToken, in SyntaxToken currentToken, in NextGetAdjustNewLinesOperation nextOperation)
    {
        // * <End Of File> case for C#, make sure we don't insert new line between * and <End of
        // File> tokens.
        if (currentToken.Kind() == SyntaxKind.EndOfFileToken)
        {
            return CreateAdjustNewLinesOperation(0, AdjustNewLinesOption.PreserveLines);
        }
 
        return nextOperation.Invoke(in previousToken, in currentToken);
    }
 
    public override AdjustSpacesOperation? GetAdjustSpacesOperation(in SyntaxToken previousToken, in SyntaxToken currentToken, in NextGetAdjustSpacesOperation nextOperation)
    {
        // * <End Of File) case
        // for C#, make sure we have nothing between these two tokens
        if (currentToken.Kind() == SyntaxKind.EndOfFileToken)
        {
            return CreateAdjustSpacesOperation(0, AdjustSpacesOption.ForceSpacesIfOnSingleLine);
        }
 
        return nextOperation.Invoke(in previousToken, in currentToken);
    }
}