簡體   English   中英

羅斯林VisitArgumentList和VisitArgument如何獲得逗號瑣事?

[英]Roslyn VisitArgumentList and VisitArgument how do I get the comma trivia?

如果我使用VisitArgementList(Node),則Node是一個用逗號分隔的列表(x,y,z),而VisitArgument(node)節點則是介於逗號,x或y或z之間的東西。 但是我對附加在逗號上的瑣事(換行符)感興趣。 有沒有一種方法可以訪問逗號,然后重新創建列表而不會丟失換行符。

(x,
 y,
 z)

下面的代碼是我如何創建新行並且所有換行都丟失的方式

Public Overrides Function VisitArgumentList(ByVal node As CSS.ArgumentListSyntax) As VisualBasicSyntaxNode
    Return SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList(node.Arguments.[Select](Function(a As CSS.ArgumentSyntax) CType(a.Accept(Me), ArgumentSyntax))))
End Function

您可以使用GetSeparators從Node獲取分隔符

Dim NodeList As New List(Of ArgumentSyntax)
' Fill the node list and deal with Trivia
Dim Separators As IEnumerable(Of SyntaxToken) = node.Arguments.GetSeparators

然后是所有SyntaxFactory.SeparatedList方法和其他列表函數的另一個版本(SyntaxFactory.ArgumentList)。 它們采用節點列表(帶瑣事)和分隔符(帶瑣事),甚至包含括號或括號的版本。 使用這些版本,您可以將瑣事添加到每個元素。 需要注意的一件事是C#允許使用一個額外的分隔符(例如8個節點,8個分隔符),其中VB所需要的分隔符比節點(8個節點,7個分隔符)少。 使用Select Function在循環中填充NodeList更加容易,因此您可以管理瑣事並處理VB中缺少的Separator,並且並非在節點后允許所有瑣事,某些必須移到分隔符之后。 以下是部分示例

Return SyntaxFactory.ArgumentList(
    SyntaxFactory.Token(SyntaxKind.OpenParenToken).WithConvertedLeadingTriviaFrom(node.OpenParenToken),
    SyntaxFactory.SeparatedList(NodeList, Separators),
    CloseParenToken.WithConvertedTrailingTriviaFrom(node.CloseParenToken)
    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM