Skip to content

Commit 0e64a5b

Browse files
committed
Remove unnecessary nested paragraphs from the markdown output
1 parent b97cfd7 commit 0e64a5b

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

OpenStackNetAnalyzers/OpenStackNetAnalyzers/RenderAsMarkdownCodeFix.cs

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

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

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

0 commit comments

Comments
 (0)