internal static string ResolveTagHelperTypeName(string returnTypeName, string propertyName, string displayName)
        {
            // A BoundAttributeDescriptor does not have a direct reference to its parent TagHelper.
            // However, when it was constructed the parent TagHelper's type name was embedded into
            // its DisplayName. In VSCode we can't use the DisplayName verbatim for descriptions
            // because the DisplayName is typically too long to display properly. Therefore we need
            // to break it apart and then reconstruct it in a reduced format.
            // i.e. this is the format the display name comes in:
            // ReturnTypeName SomeTypeName.SomePropertyName

            // We must simplify the return type name before using it to determine the type name prefix
            // because that is how the display name was originally built (a little hacky).
            if (!TypeNameStringResolver.TryGetSimpleName(returnTypeName, out var simpleReturnType))
            {
                simpleReturnType = returnTypeName;
            }

            // "ReturnTypeName "
            var typeNamePrefixLength = simpleReturnType.Length + 1 /* space */;

            // ".SomePropertyName"
            var typeNameSuffixLength = /* . */ 1 + propertyName.Length;

            // "SomeTypeName"
            var typeNameLength    = displayName.Length - typeNamePrefixLength - typeNameSuffixLength;
            var tagHelperTypeName = displayName.Substring(typeNamePrefixLength, typeNameLength);

            return(tagHelperTypeName);
        }
        public void GetSimpleName_SimplifiesPrimitiveTypes_ReturnsTrue(string typeName, string expectedTypeName)
        {
            // Arrange

            // Act
            var result = TypeNameStringResolver.TryGetSimpleName(typeName, out var resolvedTypeName);

            // Assert
            Assert.True(result);
            Assert.Equal(expectedTypeName, resolvedTypeName);
        }
        public void TryGetSimpleName_NonPrimitiveType_ReturnsFalse()
        {
            // Arrange
            var typeName = "Microsoft.AspNetCore.SomeType";

            // Act
            var result = TypeNameStringResolver.TryGetSimpleName(typeName, out var resolvedTypeName);

            // Assert
            Assert.False(result);
            Assert.Null(resolvedTypeName);
        }