Skip to content

Commit dbd50c7

Browse files
committed
Remove unnecessary nested paragraphs from the markdown output
1 parent 5f93ca3 commit dbd50c7

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

OpenStackNetAnalyzers/OpenStackNetAnalyzers/RenderAsMarkdownCodeFix.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ private async Task<Document> CreateChangedDocument(CodeFixContext context, Docum
121121
.ReplaceExteriorTrivia(leadingTrivia)
122122
.WithLeadingTrivia(SyntaxFactory.DocumentationCommentExterior("///"));
123123

124+
// Remove unnecessary nested paragraph elements
125+
contentsOnly = contentsOnly.ReplaceNodes(contentsOnly.DescendantNodes().OfType<XmlElementSyntax>(), RemoveNestedParagraphs);
126+
124127
SyntaxNode root = await context.Document.GetSyntaxRootAsync(cancellationToken);
125128
SyntaxNode newRoot = root.ReplaceNode(documentationCommentTriviaSyntax, contentsOnly);
126129
if (documentationCommentTriviaSyntax.IsEquivalentTo(contentsOnly))
@@ -129,6 +132,45 @@ private async Task<Document> CreateChangedDocument(CodeFixContext context, Docum
129132
return context.Document.WithSyntaxRoot(newRoot);
130133
}
131134

135+
private SyntaxNode RemoveNestedParagraphs(SyntaxNode originalNode, SyntaxNode rewrittenNode)
136+
{
137+
XmlElementSyntax elementSyntax = rewrittenNode as XmlElementSyntax;
138+
if (!IsUnnecessaryParaElement(elementSyntax))
139+
return rewrittenNode;
140+
141+
return elementSyntax.Content[0].WithTriviaFrom(rewrittenNode);
142+
}
143+
144+
private static bool IsUnnecessaryParaElement(XmlElementSyntax elementSyntax)
145+
{
146+
if (elementSyntax == null)
147+
return false;
148+
149+
if (HasAttributes(elementSyntax))
150+
return false;
151+
152+
if (!IsParaElement(elementSyntax))
153+
return false;
154+
155+
if (elementSyntax.Content.Count != 1)
156+
return false;
157+
158+
if (!IsParaElement(elementSyntax.Content[0] as XmlElementSyntax))
159+
return false;
160+
161+
return true;
162+
}
163+
164+
private static bool HasAttributes(XmlElementSyntax syntax)
165+
{
166+
return syntax.StartTag?.Attributes.Count > 0;
167+
}
168+
169+
private static bool IsParaElement(XmlElementSyntax syntax)
170+
{
171+
return string.Equals("para", syntax?.StartTag?.Name?.ToString(), StringComparison.Ordinal);
172+
}
173+
132174
private SyntaxNode RenderBlockElementAsMarkdown(SyntaxNode originalNode, SyntaxNode rewrittenNode)
133175
{
134176
XmlElementSyntax elementSyntax = rewrittenNode as XmlElementSyntax;

0 commit comments

Comments
 (0)