[英]How to add XML Comments to a MethodDeclarationSyntax node using Roslyn?
我正在嘗試使用 Roslyn 編譯器和 Microsoft 的 CodeAnalysis API 將 XML 注釋添加到 C# 代碼中作為代碼修復。 到目前為止,我已經能夠弄清楚如何更改MethodDeclarationSyntax
當前 XML 注釋。
我從MethodDeclarationSyntax
檢索DocumentationCommentTriviaSyntax
。 由於這些對象是不可變的,我使用我的舊評論的內容創建了一個新的DocumentationCommentTriviaSyntax
,就像我使用SyntaxFactory.DocumentationCommentTrivia
新評論SyntaxFactory.DocumentationCommentTrivia
。 然后我為語法樹創建一個新根,使用root.ReplaceNode
用我的新根替換舊的DocumentationCommentTriviaSyntax
。 然后我使用這個新根創建一個新文檔並返回它。
但是我似乎無法弄清楚如何添加 XML 注釋,如果沒有開始,並且無法找到任何文檔來幫助我。 如果沒有開頭的注釋,我的DocumentationCommentTriviaSyntax
為 null 並且ReplaceNode
拋出錯誤。
有人可以指出我正確的方向嗎? 我提前感謝您的幫助!
您需要修改MethodDeclarationSyntax
並使用它調用 ReplaceNode。
因此,假設我們有以下文檔瑣事:
var testDocumentation = SyntaxFactory.DocumentationCommentTrivia(
SyntaxKind.SingleLineDocumentationCommentTrivia,
SyntaxFactory.List<XmlNodeSyntax>(
new XmlNodeSyntax[]{
SyntaxFactory.XmlText()
.WithTextTokens(
SyntaxFactory.TokenList(
SyntaxFactory.XmlTextLiteral(
SyntaxFactory.TriviaList(
SyntaxFactory.DocumentationCommentExterior("///")),
" ",
" ",
SyntaxFactory.TriviaList()))),
SyntaxFactory.XmlElement(
SyntaxFactory.XmlElementStartTag(
SyntaxFactory.XmlName(
SyntaxFactory.Identifier("summary"))),
SyntaxFactory.XmlElementEndTag(
SyntaxFactory.XmlName(
SyntaxFactory.Identifier("summary"))))
.WithContent(
SyntaxFactory.SingletonList<XmlNodeSyntax>(
SyntaxFactory.XmlText()
.WithTextTokens(
SyntaxFactory.TokenList(
SyntaxFactory.XmlTextLiteral(
SyntaxFactory.TriviaList(),
"test",
"test",
SyntaxFactory.TriviaList()))))),
SyntaxFactory.XmlText()
.WithTextTokens(
SyntaxFactory.TokenList(
SyntaxFactory.XmlTextNewLine(
SyntaxFactory.TriviaList(),
"\n",
"\n",
SyntaxFactory.TriviaList())))}));
...我們有一個public static void Main()
方法,我們要向其中添加文檔。 它已經有瑣事(但不一定):
SyntaxFactory.TokenList(
new []{
SyntaxFactory.Token(SyntaxKind.PublicKeyword),
SyntaxFactory.Token(SyntaxKind.StaticKeyword)}));
我們需要在一個新的瑣事列表中包裝該列表中的第一個令牌的內容(我將把它留給您以編程方式執行..):
var newMethodNode = oldMethodNode.WithModifiers(
SyntaxFactory.TokenList(
new []{
SyntaxFactory.Token(
SyntaxFactory.TriviaList(
SyntaxFactory.Trivia(testDocumentation)), // xmldoc
SyntaxKind.PublicKeyword, // original 1st token
SyntaxFactory.TriviaList()),
SyntaxFactory.Token(SyntaxKind.StaticKeyword)}))
root.ReplaceNode (oldMethodNode, newMethodNode);
要准確確定要構建的瑣事,請使用RoslynQuoter 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.