@@ -111,7 +111,8 @@ type AssemblySymbol =
111111 TopRequireQualifiedAccessParent: Idents option
112112 AutoOpenParent: Idents option
113113 Symbol: FSharpSymbol
114- Kind: LookupType -> EntityKind }
114+ Kind: LookupType -> EntityKind
115+ UnresolvedSymbol: UnresolvedSymbol }
115116override x.ToString () = sprintf" %A " x
116117
117118type AssemblyPath = string
@@ -186,14 +187,33 @@ type IAssemblyContentCache =
186187module AssemblyContentProvider =
187188open System.IO
188189
189- let private createEntity ns ( parent : Parent ) ( entity : FSharpEntity ) =
190+ let unresolvedSymbol ( topRequireQualifiedAccessParent : Idents option ) ( cleanedIdents : Idents ) ( fullName : string ) =
191+ let getNamespace ( idents : Idents ) =
192+ if idents.Length> 1 then Some idents.[.. idents.Length- 2 ] else None
193+
194+ let ns =
195+ topRequireQualifiedAccessParent
196+ |> Option.bind getNamespace
197+ |> Option.orElseWith( fun () -> getNamespace cleanedIdents)
198+ |> Option.defaultValue[||]
199+
200+ let displayName =
201+ let nameIdents = if cleanedIdents.Length> ns.Lengththen cleanedIdents|> Array.skip ns.Lengthelse cleanedIdents
202+ nameIdents|> String.concat" ."
203+
204+ { FullName= fullName
205+ DisplayName= displayName
206+ Namespace= ns}
207+
208+ let createEntity ns ( parent : Parent ) ( entity : FSharpEntity ) =
190209 parent.FormatEntityFullName entity
191210|> Option.map( fun ( fullName , cleanIdents ) ->
211+ let topRequireQualifiedAccessParent = parent.TopRequiresQualifiedAccessfalse |> Option.map parent.FixParentModuleSuffix
192212{ FullName= fullName
193213 CleanedIdents= cleanIdents
194214 Namespace= ns
195215 NearestRequireQualifiedAccessParent= parent.ThisRequiresQualifiedAccessfalse |> Option.map parent.FixParentModuleSuffix
196- TopRequireQualifiedAccessParent= parent.TopRequiresQualifiedAccess false |> Option.map parent.FixParentModuleSuffix
216+ TopRequireQualifiedAccessParent= topRequireQualifiedAccessParent
197217 AutoOpenParent= parent.AutoOpen|> Option.map parent.FixParentModuleSuffix
198218 Symbol= entity
199219 Kind= fun lookupType ->
@@ -208,21 +228,26 @@ module AssemblyContentProvider =
208228match entitywith
209229| Symbol.Attribute-> EntityKind.Attribute
210230| _ -> EntityKind.Type
231+ UnresolvedSymbol= unresolvedSymbol topRequireQualifiedAccessParent cleanIdents fullName
211232})
212233
213- let private traverseMemberFunctionAndValues ns ( parent : Parent ) ( membersFunctionsAndValues : seq < FSharpMemberOrFunctionOrValue >) =
234+ let traverseMemberFunctionAndValues ns ( parent : Parent ) ( membersFunctionsAndValues : seq < FSharpMemberOrFunctionOrValue >) =
235+ let topRequireQualifiedAccessParent = parent.TopRequiresQualifiedAccesstrue |> Option.map parent.FixParentModuleSuffix
236+ let autoOpenParent = parent.AutoOpen|> Option.map parent.FixParentModuleSuffix
214237 membersFunctionsAndValues
215238|> Seq.filter( fun x -> not x.IsInstanceMember&& not x.IsPropertyGetterMethod&& not x.IsPropertySetterMethod)
216239|> Seq.collect( fun func ->
217240let processIdents fullName idents =
241+ let cleanedIdentes = parent.FixParentModuleSuffix idents
218242{ FullName= fullName
219- CleanedIdents= parent.FixParentModuleSuffix idents
243+ CleanedIdents= cleanedIdentes
220244 Namespace= ns
221245 NearestRequireQualifiedAccessParent= parent.ThisRequiresQualifiedAccesstrue |> Option.map parent.FixParentModuleSuffix
222- TopRequireQualifiedAccessParent= parent.TopRequiresQualifiedAccess true |> Option.map parent.FixParentModuleSuffix
223- AutoOpenParent= parent.AutoOpen |> Option.map parent.FixParentModuleSuffix
246+ TopRequireQualifiedAccessParent= topRequireQualifiedAccessParent
247+ AutoOpenParent= autoOpenParent
224248 Symbol= func
225- Kind= fun _ -> EntityKind.FunctionOrValue func.IsActivePattern}
249+ Kind= fun _ -> EntityKind.FunctionOrValue func.IsActivePattern
250+ UnresolvedSymbol= unresolvedSymbol topRequireQualifiedAccessParent cleanedIdentes fullName}
226251
227252[ yield ! func.TryGetFullDisplayName()
228253|> Option.map( fun fullDisplayName -> processIdents func.FullName( fullDisplayName.Split'.' ))
@@ -241,7 +266,7 @@ module AssemblyContentProvider =
241266 processIdents( fullCompiledIdents|> String.concat" ." ) fullCompiledIdents)
242267|> Option.toList])
243268
244- let rec private traverseEntity contentType ( parent : Parent ) ( entity : FSharpEntity ) =
269+ let rec traverseEntity contentType ( parent : Parent ) ( entity : FSharpEntity ) =
245270
246271seq {
247272#if ! NO_ EXTENSIONTYPING
@@ -308,7 +333,7 @@ module AssemblyContentProvider =
308333|> Seq.distinctBy( fun {FullName =fullName ;CleanedIdents =cleanIdents }-> ( fullName, cleanIdents))
309334|> Seq.toList
310335
311- let private getAssemblySignaturesContent contentType ( assemblies : FSharpAssembly list ) =
336+ let getAssemblySignaturesContent contentType ( assemblies : FSharpAssembly list ) =
312337 assemblies|> List.collect( fun asm -> getAssemblySignatureContent contentType asm.Contents)
313338
314339let getAssemblyContent ( withCache : ( IAssemblyContentCache -> _ ) -> _ ) contentType ( fileName : string option ) ( assemblies : FSharpAssembly list ) =