// Internal for testing internal static string ResolveTagHelperTypeName(TagHelperAttributeDescriptionInfo info) { // 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). var simpleReturnType = GetSimpleName(info.ReturnTypeName); // "ReturnTypeName " var typeNamePrefixLength = simpleReturnType.Length + 1 /* space */; // ".SomePropertyName" var typeNameSuffixLength = /* . */ 1 + info.PropertyName.Length; // "SomeTypeName" var typeNameLength = info.DisplayName.Length - typeNamePrefixLength - typeNameSuffixLength; var tagHelperTypeName = info.DisplayName.Substring(typeNamePrefixLength, typeNameLength); return(tagHelperTypeName); }
public void ResolveTagHelperTypeName_ExtractsTypeName_ComplexReturnType() { // Arrange var info = new TagHelperAttributeDescriptionInfo( displayName: "SomeReturnTypeName SomeTypeName.SomePropertyName", propertyName: "SomePropertyName", returnTypeName: "SomeReturnTypeName", documentation: string.Empty); // Act var typeName = DefaultTagHelperDescriptionFactory.ResolveTagHelperTypeName(info); // Assert Assert.Equal("SomeTypeName", typeName); }