我想查看Roslyn SyntaxTrivia并查看VB代码中的各个部分,但我还是看不到要分开各种类型的部分。有很多类型,只为C#我找到了下面的类型(不完整)。通常在Roslyn中,您可以将对象转换为更具体的类型,然后查看特定于语言的部分。我不知道如何用Trivia做到这一点。
URL
答案 0 :(得分:3)
大多数琐事只是 - 没有进一步信息的琐事。但是,有些琐事包含SyntaxNodes,您可以像往常一样解析和处理一小段差异 - 您需要告诉您的方法您想要找到它们。这些不是SyntaxTrivias,而是StructuredTriviaSyntax元素,您可以按如下方式找到它们:
// C#
var structuredTriviaSyntax = root.DescendantNodes(
descendIntoTrivia: true)
.OfType<StructuredTriviaSyntax>();
// VB
Dim structuredTriviaSyntax = root.DescendantNodes(
descendIntoTrivia:=True)
.OfType(Of StructuredTriviaSyntax)
您可以通过调用SyntaxTrivia对象的GetStructure方法从SyntaxTrivia对象获取StructuredTrivia:
// C#
var leadingTrivia = anySyntaxNode.GetLeadingTrivia();
foreach(var trivia in leadingTrivia){
var structure = trivia.GetStructure();
}
// VB
Dim leadingTrivia = anySyntaxNode.GetLeadingTrivia
For Each trivia In leadingTrivia
Dim structureNode = trivia.GetStructure
Next
这对所有类型的琐事都不起作用,因为大多数琐事都没有SyntaxNode表示,但是例如DocumentationCommentTriviaSyntax以及RegionDirectiveTriviaSyntax和EndRegionDirectiveTriviaSyntax都提供了更具体的类型,可以通过这种方式进行分析。
如果使用SyntaxWalker或SyntaxRewriter,则需要在构造函数中传递“true”作为参数来搜索琐事。
然后可以通过查看各种Xml语法元素的DescendandNodes来分析DocumentationCommentTriviaSyntax。