Skip to content

Commit ae6f593

Browse files
vasily-kirichenkoKevinRansom
authored andcommitted
Add static members to the extended completion (#3949)
* add static members to the extended completion * provide static method in completion for any type
1 parent 39d8459 commit ae6f593

File tree

1 file changed

+26
-22
lines changed

1 file changed

+26
-22
lines changed

src/fsharp/vs/ServiceAssemblyContent.fs

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -119,16 +119,18 @@ type AssemblyContentType = Public | Full
119119

120120
type Parent =
121121
{ Namespace: Idents option
122-
ThisRequiresQualifiedAccess: Idents option
123-
TopRequiresQualifiedAccess: Idents option
122+
ThisRequiresQualifiedAccess: (* isForMemberOrValue *) bool -> Idents option
123+
TopRequiresQualifiedAccess: (* isForMemberOrValue *) bool -> Idents option
124124
AutoOpen: Idents option
125-
WithModuleSuffix: Idents option }
125+
WithModuleSuffix: Idents option
126+
IsModule: bool }
126127
static member Empty =
127128
{ Namespace = None
128-
ThisRequiresQualifiedAccess = None
129-
TopRequiresQualifiedAccess = None
129+
ThisRequiresQualifiedAccess = fun _ -> None
130+
TopRequiresQualifiedAccess = fun _ -> None
130131
AutoOpen = None
131-
WithModuleSuffix = None }
132+
WithModuleSuffix = None
133+
IsModule = true }
132134
static member RewriteParentIdents (parentIdents: Idents option) (idents: Idents) =
133135
match parentIdents with
134136
| Some p when p.Length <= idents.Length ->
@@ -190,8 +192,8 @@ module AssemblyContentProvider =
190192
{ FullName = fullName
191193
CleanedIdents = cleanIdents
192194
Namespace = ns
193-
NearestRequireQualifiedAccessParent = parent.ThisRequiresQualifiedAccess |> Option.map parent.FixParentModuleSuffix
194-
TopRequireQualifiedAccessParent = parent.TopRequiresQualifiedAccess |> Option.map parent.FixParentModuleSuffix
195+
NearestRequireQualifiedAccessParent = parent.ThisRequiresQualifiedAccess false |> Option.map parent.FixParentModuleSuffix
196+
TopRequireQualifiedAccessParent = parent.TopRequiresQualifiedAccess false |> Option.map parent.FixParentModuleSuffix
195197
AutoOpenParent = parent.AutoOpen |> Option.map parent.FixParentModuleSuffix
196198
Symbol = entity
197199
Kind = fun lookupType ->
@@ -210,13 +212,14 @@ module AssemblyContentProvider =
210212

211213
let private traverseMemberFunctionAndValues ns (parent: Parent) (membersFunctionsAndValues: seq<FSharpMemberOrFunctionOrValue>) =
212214
membersFunctionsAndValues
215+
|> Seq.filter (fun x -> not x.IsInstanceMember)
213216
|> Seq.collect (fun func ->
214217
let processIdents fullName idents =
215218
{ FullName = fullName
216219
CleanedIdents = parent.FixParentModuleSuffix idents
217220
Namespace = ns
218-
NearestRequireQualifiedAccessParent = parent.ThisRequiresQualifiedAccess |> Option.map parent.FixParentModuleSuffix
219-
TopRequireQualifiedAccessParent = parent.TopRequiresQualifiedAccess |> Option.map parent.FixParentModuleSuffix
221+
NearestRequireQualifiedAccessParent = parent.ThisRequiresQualifiedAccess true |> Option.map parent.FixParentModuleSuffix
222+
TopRequireQualifiedAccessParent = parent.TopRequiresQualifiedAccess true |> Option.map parent.FixParentModuleSuffix
220223
AutoOpenParent = parent.AutoOpen |> Option.map parent.FixParentModuleSuffix
221224
Symbol = func
222225
Kind = fun _ -> EntityKind.FunctionOrValue func.IsActivePattern }
@@ -253,14 +256,14 @@ module AssemblyContentProvider =
253256
| Some x -> yield x
254257
| None -> ()
255258

256-
let thisRequiresQualifierAccess =
257-
if entity.IsFSharp && Symbol.hasAttribute<RequireQualifiedAccessAttribute> entity.Attributes then
258-
parent.FormatEntityFullName entity |> Option.map snd
259-
else None
259+
let rqa = parent.FormatEntityFullName entity |> Option.map snd
260+
let rqaForType = if entity.IsFSharp && Symbol.hasAttribute<RequireQualifiedAccessAttribute> entity.Attributes then rqa else None
261+
let thisRequiresQualifierAccess (isForMethodOrValue: bool) = if isForMethodOrValue then rqa else rqaForType
260262

261263
let currentParent =
262-
{ ThisRequiresQualifiedAccess = thisRequiresQualifierAccess |> Option.orElse parent.ThisRequiresQualifiedAccess
263-
TopRequiresQualifiedAccess = parent.TopRequiresQualifiedAccess |> Option.orElse thisRequiresQualifierAccess
264+
{ ThisRequiresQualifiedAccess = thisRequiresQualifierAccess >> Option.orElse (parent.ThisRequiresQualifiedAccess false)
265+
TopRequiresQualifiedAccess = fun forMV -> (parent.TopRequiresQualifiedAccess false) |> Option.orElse (thisRequiresQualifierAccess forMV)
266+
264267
AutoOpen =
265268
let isAutoOpen = entity.IsFSharpModule && Symbol.hasAttribute<AutoOpenAttribute> entity.Attributes
266269
match isAutoOpen, parent.AutoOpen with
@@ -275,13 +278,14 @@ module AssemblyContentProvider =
275278
if entity.IsFSharpModule && Symbol.hasModuleSuffixAttribute entity then
276279
currentEntity |> Option.map (fun e -> e.CleanedIdents)
277280
else parent.WithModuleSuffix
278-
Namespace = ns }
279281

280-
if entity.IsFSharpModule then
281-
match entity.TryGetMembersFunctionsAndValues with
282-
| xs when xs.Count > 0 ->
283-
yield! traverseMemberFunctionAndValues ns currentParent xs
284-
| _ -> ()
282+
Namespace = ns
283+
IsModule = entity.IsFSharpModule }
284+
285+
match entity.TryGetMembersFunctionsAndValues with
286+
| xs when xs.Count > 0 ->
287+
yield! traverseMemberFunctionAndValues ns currentParent xs
288+
| _ -> ()
285289

286290
for e in (try entity.NestedEntities :> _ seq with _ -> Seq.empty) do
287291
yield! traverseEntity contentType currentParent e

0 commit comments

Comments
 (0)