' 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.Runtime.CompilerServices Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions Friend Module SimpleNameSyntaxExtensions <Extension()> Public Function GetLeftSideOfDot(name As SimpleNameSyntax) As ExpressionSyntax Debug.Assert(IsSimpleMemberAccessExpressionName(name) OrElse IsRightSideOfQualifiedName(name)) If IsSimpleMemberAccessExpressionName(name) Then Return DirectCast(name.Parent, MemberAccessExpressionSyntax).Expression Else Return DirectCast(name.Parent, QualifiedNameSyntax).Left End If End Function ' Returns true if this looks like a possible type name that is on it's own (i.e. not after a ' dot). This function is not exhaustive and additional checks may be added if they are ' believed to be valuable. <Extension()> Public Function LooksLikeStandaloneTypeName(simpleName As SimpleNameSyntax) As Boolean If simpleName Is Nothing Then Return False End If ' Isn't stand-alone if it's on the right of a dot/arrow If simpleName.IsRightSideOfDot() Then Return False End If ' type names can't be invoked. If simpleName.IsParentKind(SyntaxKind.InvocationExpression) Then Dim invocationExpression = DirectCast(simpleName.Parent, InvocationExpressionSyntax) If invocationExpression.Expression Is simpleName AndAlso invocationExpression.ArgumentList IsNot Nothing Then Return False End If End If ' Looks good. However, feel free to add additional checks if this function is too ' lenient in some circumstances. Return True End Function End Module End Namespace |