File: Syntax\InternalSyntax\SyntaxFactory.vb
Web Access
Project: src\src\Compilers\VisualBasic\Portable\Microsoft.CodeAnalysis.VisualBasic.vbproj (Microsoft.CodeAnalysis.VisualBasic)
' Licensed to the .NET Foundation under one or more agreements.
' The .NET Foundation licenses this file to you under the MIT license.
' See the LICENSE file in the project root for more information.
 
Imports System.Collections.Generic
Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
 
Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax
    Partial Friend Class SyntaxFactory
        Friend Shared ReadOnly CarriageReturnLineFeed As SyntaxTrivia = EndOfLine(vbCrLf)
        Friend Shared ReadOnly LineFeed As SyntaxTrivia = EndOfLine(vbLf)
        Friend Shared ReadOnly CarriageReturn As SyntaxTrivia = EndOfLine(vbCr)
        Friend Shared ReadOnly Space As SyntaxTrivia = Whitespace(" ")
        Friend Shared ReadOnly Tab As SyntaxTrivia = Whitespace(vbTab)
 
        Friend Shared ReadOnly ElasticCarriageReturnLineFeed As SyntaxTrivia = EndOfLine(vbCrLf, elastic:=True)
        Friend Shared ReadOnly ElasticLineFeed As SyntaxTrivia = EndOfLine(vbLf, elastic:=True)
        Friend Shared ReadOnly ElasticCarriageReturn As SyntaxTrivia = EndOfLine(vbCr, elastic:=True)
        Friend Shared ReadOnly ElasticSpace As SyntaxTrivia = Whitespace(" ", elastic:=True)
        Friend Shared ReadOnly ElasticTab As SyntaxTrivia = Whitespace(vbTab, elastic:=True)
 
        Friend Shared ReadOnly ElasticZeroSpace As SyntaxTrivia = Whitespace(String.Empty, elastic:=True)
 
        Friend Shared Function EndOfLine(text As String, Optional elastic As Boolean = False) As SyntaxTrivia
 
            Dim trivia As SyntaxTrivia = Nothing
 
            ' use predefined trivia
            Select Case text
                Case vbCr
                    trivia = If(elastic, SyntaxFactory.ElasticCarriageReturn, SyntaxFactory.CarriageReturn)
                Case vbLf
                    trivia = If(elastic, SyntaxFactory.ElasticLineFeed, SyntaxFactory.LineFeed)
                Case vbCrLf
                    trivia = If(elastic, SyntaxFactory.ElasticCarriageReturnLineFeed, SyntaxFactory.CarriageReturnLineFeed)
            End Select
 
            ' note: predefined trivia might not yet be defined during initialization
            If trivia IsNot Nothing Then
                Return trivia
            End If
 
            trivia = SyntaxTrivia(SyntaxKind.EndOfLineTrivia, text)
            If Not elastic Then
                Return trivia
            End If
 
            Return trivia.WithAnnotations(SyntaxAnnotation.ElasticAnnotation)
        End Function
 
        Friend Shared Function Whitespace(text As String, Optional elastic As Boolean = False) As SyntaxTrivia
            Dim trivia = SyntaxTrivia(SyntaxKind.WhitespaceTrivia, text)
            If Not elastic Then
                Return trivia
            End If
 
            Return trivia.WithAnnotations(SyntaxAnnotation.ElasticAnnotation)
        End Function
 
        Friend Shared Function Token(leading As GreenNode, kind As SyntaxKind, trailing As GreenNode, Optional text As String = Nothing) As SyntaxToken
            Return SyntaxToken.Create(kind, leading, trailing, If(text Is Nothing, SyntaxFacts.GetText(kind), text))
        End Function
 
        Friend Shared Function GetWellKnownTrivia() As IEnumerable(Of SyntaxTrivia)
            Return New SyntaxTrivia() {
                CarriageReturn,
                CarriageReturnLineFeed,
                LineFeed,
                Space,
                Tab,
                ElasticCarriageReturn,
                ElasticLineFeed,
                ElasticCarriageReturnLineFeed,
                ElasticSpace,
                ElasticTab,
                ElasticZeroSpace,
                Whitespace("  "),
                Whitespace("   "),
                Whitespace("    ")
                }
        End Function
 
    End Class
End Namespace