private static Task <Document> GetConstructorOrDestructorDocumentationTransformedDocumentAsync(Document document, SyntaxNode root, BaseMethodDeclarationSyntax declaration, CancellationToken cancellationToken) { SyntaxTriviaList leadingTrivia = declaration.GetLeadingTrivia(); int insertionIndex = GetInsertionIndex(ref leadingTrivia); string newLineText = document.Project.Solution.Workspace.Options.GetOption(FormattingOptions.NewLine, LanguageNames.CSharp); var documentationNodes = new List <XmlNodeSyntax>(); var typeDeclaration = declaration.FirstAncestorOrSelf <BaseTypeDeclarationSyntax>(); var standardText = SA1642SA1643CodeFixProvider.GenerateStandardText(document, declaration, typeDeclaration, cancellationToken); var standardTextSyntaxList = SA1642SA1643CodeFixProvider.BuildStandardTextSyntaxList(typeDeclaration, newLineText, standardText[0], standardText[1]); // Remove the empty line generated by build standard text, as this is not needed with constructing a new summary element. standardTextSyntaxList = standardTextSyntaxList.RemoveAt(0); documentationNodes.Add(XmlSyntaxFactory.SummaryElement(newLineText, standardTextSyntaxList)); if (declaration.ParameterList != null) { foreach (var parameter in declaration.ParameterList.Parameters) { documentationNodes.Add(XmlSyntaxFactory.NewLine(newLineText)); documentationNodes.Add(XmlSyntaxFactory.ParamElement(parameter.Identifier.ValueText)); } } var documentationComment = XmlSyntaxFactory.DocumentationComment( newLineText, documentationNodes.ToArray()); var trivia = SyntaxFactory.Trivia(documentationComment); SyntaxTriviaList newLeadingTrivia = leadingTrivia.Insert(insertionIndex, trivia); SyntaxNode newElement = declaration.WithLeadingTrivia(newLeadingTrivia); return(Task.FromResult(document.WithSyntaxRoot(root.ReplaceNode(declaration, newElement)))); }
private static Task <Document> GetMethodDocumentationTransformedDocumentAsync(Document document, SyntaxNode root, SemanticModel semanticModel, MethodDeclarationSyntax methodDeclaration, CancellationToken cancellationToken) { SyntaxTriviaList leadingTrivia = methodDeclaration.GetLeadingTrivia(); int insertionIndex = GetInsertionIndex(ref leadingTrivia); string newLineText = document.Project.Solution.Workspace.Options.GetOption(FormattingOptions.NewLine, LanguageNames.CSharp); var documentationNodes = new List <XmlNodeSyntax>(); documentationNodes.Add(XmlSyntaxFactory.SummaryElement(newLineText)); if (methodDeclaration.TypeParameterList != null) { foreach (var typeParameter in methodDeclaration.TypeParameterList.Parameters) { documentationNodes.Add(XmlSyntaxFactory.NewLine(newLineText)); documentationNodes.Add(XmlSyntaxFactory.TypeParamElement(typeParameter.Identifier.ValueText)); } } if (methodDeclaration.ParameterList != null) { foreach (var parameter in methodDeclaration.ParameterList.Parameters) { documentationNodes.Add(XmlSyntaxFactory.NewLine(newLineText)); documentationNodes.Add(XmlSyntaxFactory.ParamElement(parameter.Identifier.ValueText)); } } TypeSyntax typeName; var typeSymbol = semanticModel.GetSymbolInfo(methodDeclaration.ReturnType, cancellationToken).Symbol as INamedTypeSymbol; if (typeSymbol.IsGenericType) { typeName = SyntaxFactory.ParseTypeName("global::System.Threading.Tasks.Task<TResult>"); } else { typeName = SyntaxFactory.ParseTypeName("global::System.Threading.Tasks.Task"); } XmlNodeSyntax[] returnContent = { XmlSyntaxFactory.Text(DocumentationResources.TaskReturnElementFirstPart), XmlSyntaxFactory.SeeElement(SyntaxFactory.TypeCref(typeName)).WithAdditionalAnnotations(Simplifier.Annotation), XmlSyntaxFactory.Text(DocumentationResources.TaskReturnElementSecondPart), }; documentationNodes.Add(XmlSyntaxFactory.NewLine(newLineText)); documentationNodes.Add(XmlSyntaxFactory.ReturnsElement(returnContent)); var documentationComment = XmlSyntaxFactory.DocumentationComment( newLineText, documentationNodes.ToArray()); var trivia = SyntaxFactory.Trivia(documentationComment); SyntaxTriviaList newLeadingTrivia = leadingTrivia.Insert(insertionIndex, trivia); SyntaxNode newElement = methodDeclaration.WithLeadingTrivia(newLeadingTrivia); return(Task.FromResult(document.WithSyntaxRoot(root.ReplaceNode(methodDeclaration, newElement)))); }
public void TestParamElement() { string expected = "<param name=\"parameterName\">Parameter.</param>"; Assert.Equal(expected, XmlSyntaxFactory.ParamElement("parameterName", XmlSyntaxFactory.Text("Parameter.")).ToFullString()); }