@@ -858,6 +858,15 @@ type internal CrossReferenceResolver(root, collectionName, qualify, extensions)
858858 else
859859 None
860860
861+ let tryGetShortMemberNameFromMemberName ( memberName : string ) =
862+ let sub = removeParen memberName
863+ let lastPeriod = sub.LastIndexOf( " ." )
864+
865+ if lastPeriod > 0 then
866+ Some( memberName.Substring( lastPeriod + 1 ))
867+ else
868+ None
869+
861870 let getMemberName keepParts hasModuleSuffix ( memberNameNoParen : string ) =
862871 let splits = memberNameNoParen.Split( '.' ) |> Array.toList
863872
@@ -992,6 +1001,13 @@ type internal CrossReferenceResolver(root, collectionName, qualify, extensions)
9921001 let simple = getMemberName 1 false typeName
9931002 externalDocsLink false simple typeName typeName
9941003
1004+ let mfvToCref ( mfv : FSharpMemberOrFunctionOrValue ) =
1005+ let entityUrlBaseName = getUrlBaseNameForRegisteredEntity mfv.DeclaringEntity.Value
1006+
1007+ { IsInternal = true
1008+ ReferenceLink = internalCrossReferenceForMember entityUrlBaseName mfv
1009+ NiceName = mfv.DeclaringEntity.Value.DisplayName + " ." + mfv.DisplayName }
1010+
9951011 let tryResolveCrossReferenceForMemberByXmlSig ( memberXmlSig : string ) =
9961012 assert
9971013 ( memberXmlSig.StartsWith( " M:" )
@@ -1000,13 +1016,7 @@ type internal CrossReferenceResolver(root, collectionName, qualify, extensions)
10001016 || memberXmlSig.StartsWith( " E:" ))
10011017
10021018 match xmlDocNameToSymbol.TryGetValue( memberXmlSig) with
1003- | true , (:? FSharpMemberOrFunctionOrValue as memb) when memb.DeclaringEntity.IsSome ->
1004- let entityUrlBaseName = getUrlBaseNameForRegisteredEntity memb.DeclaringEntity.Value
1005-
1006- { IsInternal = true
1007- ReferenceLink = internalCrossReferenceForMember entityUrlBaseName memb
1008- NiceName = memb.DeclaringEntity.Value.DisplayName + " ." + memb.DisplayName }
1009- |> Some
1019+ | true , (:? FSharpMemberOrFunctionOrValue as memb) when memb.DeclaringEntity.IsSome -> memb |> mfvToCref |> Some
10101020 | _ ->
10111021 // If we can't find the exact symbol for the member, don't despair, look for the type
10121022 let memberName = memberXmlSig.Substring( 2 ) |> removeParen
@@ -1019,10 +1029,19 @@ type internal CrossReferenceResolver(root, collectionName, qualify, extensions)
10191029 | true , (:? FSharpEntity as entity) ->
10201030 let urlBaseName = getUrlBaseNameForRegisteredEntity entity
10211031
1022- Some
1023- { IsInternal = true
1024- ReferenceLink = internalCrossReference urlBaseName
1025- NiceName = getMemberName 2 entity.HasFSharpModuleSuffix memberName }
1032+ // See if we find the member that was intended, otherwise default to containing entity
1033+ tryGetShortMemberNameFromMemberName memberName
1034+ |> Option.bind ( fun shortName ->
1035+ entity.MembersFunctionsAndValues
1036+ |> Seq.tryFind ( fun mfv -> mfv.DisplayName = shortName))
1037+ |> function
1038+ | Some mb -> Some( mfvToCref mb)
1039+ | None ->
1040+ Some
1041+ { IsInternal = true
1042+ ReferenceLink = internalCrossReference urlBaseName
1043+ NiceName = getMemberName 2 entity.HasFSharpModuleSuffix memberName }
1044+
10261045 | _ ->
10271046 // A reference to something external, currently assumed to be in .NET
10281047 let simple = getMemberName 2 false memberName
0 commit comments