From c6e8a3c9d8632a8ba21d572a66f15479ba949d81 Mon Sep 17 00:00:00 2001 From: Vasily Kirichenko Date: Wed, 15 Nov 2017 17:01:11 +0300 Subject: [PATCH 1/2] add static members to the extended completion --- src/fsharp/vs/ServiceAssemblyContent.fs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/fsharp/vs/ServiceAssemblyContent.fs b/src/fsharp/vs/ServiceAssemblyContent.fs index 56fae895c6b..5a41ad3fc4c 100644 --- a/src/fsharp/vs/ServiceAssemblyContent.fs +++ b/src/fsharp/vs/ServiceAssemblyContent.fs @@ -210,6 +210,7 @@ module AssemblyContentProvider = let private traverseMemberFunctionAndValues ns (parent: Parent) (membersFunctionsAndValues: seq) = membersFunctionsAndValues + |> Seq.filter (fun x -> not x.IsInstanceMember) |> Seq.collect (fun func -> let processIdents fullName idents = { FullName = fullName @@ -254,7 +255,7 @@ module AssemblyContentProvider = | None -> () let thisRequiresQualifierAccess = - if entity.IsFSharp && Symbol.hasAttribute entity.Attributes then + if (entity.IsFSharp && Symbol.hasAttribute entity.Attributes) || entity.IsClass then parent.FormatEntityFullName entity |> Option.map snd else None @@ -277,11 +278,10 @@ module AssemblyContentProvider = else parent.WithModuleSuffix Namespace = ns } - if entity.IsFSharpModule then - match entity.TryGetMembersFunctionsAndValues with - | xs when xs.Count > 0 -> - yield! traverseMemberFunctionAndValues ns currentParent xs - | _ -> () + match entity.TryGetMembersFunctionsAndValues with + | xs when xs.Count > 0 -> + yield! traverseMemberFunctionAndValues ns currentParent xs + | _ -> () for e in (try entity.NestedEntities :> _ seq with _ -> Seq.empty) do yield! traverseEntity contentType currentParent e From 27f50c414925d478a7ad5e8f6088d9e94408bfa8 Mon Sep 17 00:00:00 2001 From: Vasily Kirichenko Date: Wed, 15 Nov 2017 20:35:08 +0300 Subject: [PATCH 2/2] provide static method in completion for any type --- src/fsharp/vs/ServiceAssemblyContent.fs | 38 ++++++++++++++----------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/fsharp/vs/ServiceAssemblyContent.fs b/src/fsharp/vs/ServiceAssemblyContent.fs index 5a41ad3fc4c..2cc99bceeaf 100644 --- a/src/fsharp/vs/ServiceAssemblyContent.fs +++ b/src/fsharp/vs/ServiceAssemblyContent.fs @@ -119,16 +119,18 @@ type AssemblyContentType = Public | Full type Parent = { Namespace: Idents option - ThisRequiresQualifiedAccess: Idents option - TopRequiresQualifiedAccess: Idents option + ThisRequiresQualifiedAccess: (* isForMemberOrValue *) bool -> Idents option + TopRequiresQualifiedAccess: (* isForMemberOrValue *) bool -> Idents option AutoOpen: Idents option - WithModuleSuffix: Idents option } + WithModuleSuffix: Idents option + IsModule: bool } static member Empty = { Namespace = None - ThisRequiresQualifiedAccess = None - TopRequiresQualifiedAccess = None + ThisRequiresQualifiedAccess = fun _ -> None + TopRequiresQualifiedAccess = fun _ -> None AutoOpen = None - WithModuleSuffix = None } + WithModuleSuffix = None + IsModule = true } static member RewriteParentIdents (parentIdents: Idents option) (idents: Idents) = match parentIdents with | Some p when p.Length <= idents.Length -> @@ -190,8 +192,8 @@ module AssemblyContentProvider = { FullName = fullName CleanedIdents = cleanIdents Namespace = ns - NearestRequireQualifiedAccessParent = parent.ThisRequiresQualifiedAccess |> Option.map parent.FixParentModuleSuffix - TopRequireQualifiedAccessParent = parent.TopRequiresQualifiedAccess |> Option.map parent.FixParentModuleSuffix + NearestRequireQualifiedAccessParent = parent.ThisRequiresQualifiedAccess false |> Option.map parent.FixParentModuleSuffix + TopRequireQualifiedAccessParent = parent.TopRequiresQualifiedAccess false |> Option.map parent.FixParentModuleSuffix AutoOpenParent = parent.AutoOpen |> Option.map parent.FixParentModuleSuffix Symbol = entity Kind = fun lookupType -> @@ -216,8 +218,8 @@ module AssemblyContentProvider = { FullName = fullName CleanedIdents = parent.FixParentModuleSuffix idents Namespace = ns - NearestRequireQualifiedAccessParent = parent.ThisRequiresQualifiedAccess |> Option.map parent.FixParentModuleSuffix - TopRequireQualifiedAccessParent = parent.TopRequiresQualifiedAccess |> Option.map parent.FixParentModuleSuffix + NearestRequireQualifiedAccessParent = parent.ThisRequiresQualifiedAccess true |> Option.map parent.FixParentModuleSuffix + TopRequireQualifiedAccessParent = parent.TopRequiresQualifiedAccess true |> Option.map parent.FixParentModuleSuffix AutoOpenParent = parent.AutoOpen |> Option.map parent.FixParentModuleSuffix Symbol = func Kind = fun _ -> EntityKind.FunctionOrValue func.IsActivePattern } @@ -254,14 +256,14 @@ module AssemblyContentProvider = | Some x -> yield x | None -> () - let thisRequiresQualifierAccess = - if (entity.IsFSharp && Symbol.hasAttribute entity.Attributes) || entity.IsClass then - parent.FormatEntityFullName entity |> Option.map snd - else None + let rqa = parent.FormatEntityFullName entity |> Option.map snd + let rqaForType = if entity.IsFSharp && Symbol.hasAttribute entity.Attributes then rqa else None + let thisRequiresQualifierAccess (isForMethodOrValue: bool) = if isForMethodOrValue then rqa else rqaForType let currentParent = - { ThisRequiresQualifiedAccess = thisRequiresQualifierAccess |> Option.orElse parent.ThisRequiresQualifiedAccess - TopRequiresQualifiedAccess = parent.TopRequiresQualifiedAccess |> Option.orElse thisRequiresQualifierAccess + { ThisRequiresQualifiedAccess = thisRequiresQualifierAccess >> Option.orElse (parent.ThisRequiresQualifiedAccess false) + TopRequiresQualifiedAccess = fun forMV -> (parent.TopRequiresQualifiedAccess false) |> Option.orElse (thisRequiresQualifierAccess forMV) + AutoOpen = let isAutoOpen = entity.IsFSharpModule && Symbol.hasAttribute entity.Attributes match isAutoOpen, parent.AutoOpen with @@ -276,7 +278,9 @@ module AssemblyContentProvider = if entity.IsFSharpModule && Symbol.hasModuleSuffixAttribute entity then currentEntity |> Option.map (fun e -> e.CleanedIdents) else parent.WithModuleSuffix - Namespace = ns } + + Namespace = ns + IsModule = entity.IsFSharpModule } match entity.TryGetMembersFunctionsAndValues with | xs when xs.Count > 0 ->