diff --git a/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BaseMethodDeclaration.cs b/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BaseMethodDeclaration.cs index 32603bdda..a4e4300c8 100644 --- a/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BaseMethodDeclaration.cs +++ b/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BaseMethodDeclaration.cs @@ -27,7 +27,7 @@ public static Doc Print(CSharpSyntaxNode node, PrintingContext context) TypeSyntax? returnType = null; ExplicitInterfaceSpecifierSyntax? explicitInterfaceSpecifier = null; TypeParameterListSyntax? typeParameterList = null; - Func? identifier = null; + Func? identifier = null; SyntaxList? constraintClauses = null; ParameterListSyntax? parameterList = null; ConstructorInitializerSyntax? constructorInitializer = null; @@ -46,21 +46,32 @@ public static Doc Print(CSharpSyntaxNode node, PrintingContext context) { returnType = methodDeclarationSyntax.ReturnType; explicitInterfaceSpecifier = methodDeclarationSyntax.ExplicitInterfaceSpecifier; - identifier = () => Token.Print(methodDeclarationSyntax.Identifier, context); + identifier = static (node, context) => + { + var methodDeclarationSyntax = (MethodDeclarationSyntax)node; + return Token.Print(methodDeclarationSyntax.Identifier, context); + }; typeParameterList = methodDeclarationSyntax.TypeParameterList; constraintClauses = methodDeclarationSyntax.ConstraintClauses; } - else if (node is DestructorDeclarationSyntax destructorDeclarationSyntax) + else if (node is DestructorDeclarationSyntax) { - identifier = () => - Doc.Concat( + identifier = static (node, context) => + { + var destructorDeclarationSyntax = (DestructorDeclarationSyntax)node; + return Doc.Concat( Token.Print(destructorDeclarationSyntax.TildeToken, context), Token.Print(destructorDeclarationSyntax.Identifier, context) ); + }; } else if (node is ConstructorDeclarationSyntax constructorDeclarationSyntax) { - identifier = () => Token.Print(constructorDeclarationSyntax.Identifier, context); + identifier = static (node, context) => + { + var constructorDeclarationSyntax = (ConstructorDeclarationSyntax)node; + return Token.Print(constructorDeclarationSyntax.Identifier, context); + }; constructorInitializer = constructorDeclarationSyntax.Initializer; } @@ -71,7 +82,11 @@ public static Doc Print(CSharpSyntaxNode node, PrintingContext context) attributeLists = localFunctionStatementSyntax.AttributeLists; modifiers = localFunctionStatementSyntax.Modifiers; returnType = localFunctionStatementSyntax.ReturnType; - identifier = () => Token.Print(localFunctionStatementSyntax.Identifier, context); + identifier = static (node, context) => + { + var localFunctionStatementSyntax = (LocalFunctionStatementSyntax)node; + return Token.Print(localFunctionStatementSyntax.Identifier, context); + }; typeParameterList = localFunctionStatementSyntax.TypeParameterList; parameterList = localFunctionStatementSyntax.ParameterList; constraintClauses = localFunctionStatementSyntax.ConstraintClauses; @@ -163,7 +178,7 @@ void PrintMethodUnformattedWithoutAttributes(SyntaxTriviaList syntaxTriviaList) if (identifier != null) { - declarationGroup.Add(identifier()); + declarationGroup.Add(identifier(node, context)); } if (node is ConversionOperatorDeclarationSyntax conversionOperatorDeclarationSyntax) diff --git a/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BasePropertyDeclaration.cs b/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BasePropertyDeclaration.cs index 939592aaf..993098b0b 100644 --- a/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BasePropertyDeclaration.cs +++ b/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BasePropertyDeclaration.cs @@ -11,7 +11,7 @@ public static Doc Print(BasePropertyDeclarationSyntax node, PrintingContext cont { EqualsValueClauseSyntax? initializer = null; ExplicitInterfaceSpecifierSyntax? explicitInterfaceSpecifierSyntax = null; - Func? identifier = null; + Func? identifier = null; Doc eventKeyword = Doc.Null; ArrowExpressionClauseSyntax? expressionBody = null; SyntaxToken? semicolonToken = null; @@ -21,25 +21,37 @@ public static Doc Print(BasePropertyDeclarationSyntax node, PrintingContext cont expressionBody = propertyDeclarationSyntax.ExpressionBody; initializer = propertyDeclarationSyntax.Initializer; explicitInterfaceSpecifierSyntax = propertyDeclarationSyntax.ExplicitInterfaceSpecifier; - identifier = () => Token.Print(propertyDeclarationSyntax.Identifier, context); + identifier = static (node, context) => + { + var propertyDeclarationSyntax = (PropertyDeclarationSyntax)node; + return Token.Print(propertyDeclarationSyntax.Identifier, context); + }; semicolonToken = propertyDeclarationSyntax.SemicolonToken; } else if (node is IndexerDeclarationSyntax indexerDeclarationSyntax) { expressionBody = indexerDeclarationSyntax.ExpressionBody; explicitInterfaceSpecifierSyntax = indexerDeclarationSyntax.ExplicitInterfaceSpecifier; - identifier = () => - Doc.Concat( + identifier = static (node, context) => + { + var indexerDeclarationSyntax = (IndexerDeclarationSyntax)node; + return Doc.Concat( Token.Print(indexerDeclarationSyntax.ThisKeyword, context), Node.Print(indexerDeclarationSyntax.ParameterList, context) ); + }; + semicolonToken = indexerDeclarationSyntax.SemicolonToken; } else if (node is EventDeclarationSyntax eventDeclarationSyntax) { eventKeyword = Token.PrintWithSuffix(eventDeclarationSyntax.EventKeyword, " ", context); explicitInterfaceSpecifierSyntax = eventDeclarationSyntax.ExplicitInterfaceSpecifier; - identifier = () => Token.Print(eventDeclarationSyntax.Identifier, context); + identifier = static (node, context) => + { + var eventDeclarationSyntax = (EventDeclarationSyntax)node; + return Token.Print(eventDeclarationSyntax.Identifier, context); + }; semicolonToken = eventDeclarationSyntax.SemicolonToken; } @@ -56,7 +68,7 @@ public static Doc Print(BasePropertyDeclarationSyntax node, PrintingContext cont Token.Print(explicitInterfaceSpecifierSyntax.DotToken, context) ) : Doc.Null, - identifier != null ? identifier() : Doc.Null, + identifier != null ? identifier(node, context) : Doc.Null, Contents(node, expressionBody, context), initializer != null ? EqualsValueClause.Print(initializer, context) : Doc.Null, semicolonToken.HasValue ? Token.Print(semicolonToken.Value, context) : Doc.Null diff --git a/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BaseTypeDeclaration.cs b/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BaseTypeDeclaration.cs index 15e1c5828..e1dcbb117 100644 --- a/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BaseTypeDeclaration.cs +++ b/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BaseTypeDeclaration.cs @@ -15,7 +15,7 @@ public static Doc Print(BaseTypeDeclarationSyntax node, PrintingContext context) SyntaxList? constraintClauses = null; SyntaxToken? recordKeyword = null; SyntaxToken? keyword = null; - Func? members = null; + Func? members = null; SyntaxToken? semicolonToken = null; if (node is TypeDeclarationSyntax typeDeclarationSyntax) @@ -24,14 +24,17 @@ public static Doc Print(BaseTypeDeclarationSyntax node, PrintingContext context) constraintClauses = typeDeclarationSyntax.ConstraintClauses; if (typeDeclarationSyntax.Members.Count > 0) { - members = () => - Doc.Indent( + members = static (node, context) => + { + var typeDeclarationSyntax = (TypeDeclarationSyntax)node; + return Doc.Indent( MembersWithForcedLines.Print( typeDeclarationSyntax, typeDeclarationSyntax.Members, context ) ); + }; } if (node is ClassDeclarationSyntax classDeclarationSyntax) @@ -66,14 +69,17 @@ public static Doc Print(BaseTypeDeclarationSyntax node, PrintingContext context) { if (enumDeclarationSyntax.Members.Count > 0) { - members = () => - Doc.Indent( + members = static (node, context) => + { + var enumDeclarationSyntax = (EnumDeclarationSyntax)node; + return Doc.Indent( MembersWithForcedLines.Print( enumDeclarationSyntax, enumDeclarationSyntax.Members, context ) ); + }; } keyword = enumDeclarationSyntax.EnumKeyword; @@ -151,7 +157,7 @@ public static Doc Print(BaseTypeDeclarationSyntax node, PrintingContext context) if (members != null) { - var membersContent = members(); + var membersContent = members(node, context); DocUtilities.RemoveInitialDoubleHardLine(membersContent);