Beispiel #1
0
        private static ArgumentSyntax GenerateArgument(AssignmentExpressionSyntax assignment)
        {
            var identifier = ((IdentifierNameSyntax)assignment.Left).Identifier;
            var idString   = identifier.Text;
            var newIdToken = SyntaxTokenUtils.CreateParameterName(propertyName: idString);

            var rightTrivia = assignment.Right.GetTrailingTrivia();

            // Handle case `new Obj { Prop = expr };` -> new Obj(prop: expr);`
            var assignmentRight = rightTrivia.ToFullString() == " " ? assignment.Right.WithoutTrailingTrivia() : assignment.Right;

            var arg = SyntaxFactory.Argument(
                nameColon: SyntaxFactory.NameColon(SyntaxFactory.IdentifierName(newIdToken))
                .WithLeadingTrivia(identifier.LeadingTrivia)
                .WithTrailingTrivia(assignment.OperatorToken.TrailingTrivia),
                refKindKeyword: SyntaxFactory.Token(SyntaxKind.None),
                expression: assignmentRight);

            return(arg);
        }
Beispiel #2
0
        private ParameterSyntax GenerateParameter(PropertyDeclarationSyntax property)
        {
            var idString   = property.Identifier.Text;
            var newIdToken = SyntaxTokenUtils.CreateParameterName(propertyName: idString);

            // `int Prop { get; }` becomes `int prop`
            var param = SyntaxFactory.Parameter(
                attributeLists: SyntaxFactory.List <AttributeListSyntax>(),
                modifiers: SyntaxFactory.TokenList(),
                type: property.Type,
                identifier: newIdToken,
                @default: null);

            // TODO: can user indent settings be respected?
            var indentedParam = param.WithLeadingTrivia(
                SyntaxFactory.TriviaList(
                    new[] { property.GetLeadingTrivia().Last(t => t.IsKind(SyntaxKind.WhitespaceTrivia)) }
                    .Concat(SyntaxFactory.ParseLeadingTrivia("    "))));

            return(indentedParam);
        }