Skip to content

Commit ddbaafd

Browse files
authored
Filter completions on abstract member type signature (dotnet#13090)
* Filter completions on abstract member type signature
1 parent 7d842a5 commit ddbaafd

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

src/Compiler/Service/ServiceParseTreeWalk.fs

100755100644
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ type SyntaxVisitorBase<'T>() =
157157
ignore (path, isRecursive, defaultTraverse, bindings, range)
158158
None
159159

160-
/// VisitType allows overriding behavior when visiting simple pats
160+
/// VisitSimplePats allows overriding behavior when visiting simple pats
161161
abstract VisitSimplePats: path: SyntaxVisitorPath * synPats: SynSimplePat list -> 'T option
162162

163163
default _.VisitSimplePats(path, synPats) =
@@ -813,8 +813,7 @@ module SyntaxTraversal =
813813

814814
match ty with
815815
| SynType.App (typeName, _, typeArgs, _, _, _, _)
816-
| SynType.LongIdentApp (typeName, _, _, typeArgs, _, _, _) ->
817-
[ yield typeName; yield! typeArgs ] |> List.tryPick (traverseSynType path)
816+
| SynType.LongIdentApp (typeName, _, _, typeArgs, _, _, _) -> typeName :: typeArgs |> List.tryPick (traverseSynType path)
818817
| SynType.Fun (argType = ty1; returnType = ty2) -> [ ty1; ty2 ] |> List.tryPick (traverseSynType path)
819818
| SynType.MeasurePower (ty, _, _)
820819
| SynType.HashConstraint (ty, _)
@@ -921,12 +920,12 @@ module SyntaxTraversal =
921920
| SynMemberDefn.AutoProperty (synExpr = synExpr) -> traverseSynExpr path synExpr
922921
| SynMemberDefn.LetBindings (synBindingList, isRecursive, _, range) ->
923922
match visitor.VisitLetOrUse(path, isRecursive, traverseSynBinding path, synBindingList, range) with
924-
| Some x -> Some x
925923
| None ->
926924
synBindingList
927925
|> List.map (fun x -> dive x x.RangeOfBindingWithRhs (traverseSynBinding path))
928926
|> pick m
929-
| SynMemberDefn.AbstractSlot (_synValSig, _memberFlags, _range) -> None
927+
| x -> x
928+
| SynMemberDefn.AbstractSlot (SynValSig (synType = synType), _memberFlags, _range) -> traverseSynType path synType
930929
| SynMemberDefn.Interface (interfaceType = synType; members = synMemberDefnsOption) ->
931930
match visitor.VisitInterfaceSynMemberDefnType(path, synType) with
932931
| None ->

vsintegration/tests/UnitTests/CompletionProviderTests.fs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,14 @@ type T() =
572572
"""
573573
VerifyNoCompletionList(fileContents, "member this.M(p:int, h")
574574

575+
[<Test>]
576+
let ``Completion list on abstract member type signature contains modules and types but not keywords or functions`` =
577+
let fileContents = """
578+
type Interface =
579+
abstract member Eat: l
580+
"""
581+
VerifyCompletionList(fileContents, "Eat: l", ["LanguagePrimitives"; "List" ], ["let"; "log"])
582+
575583
[<Test>]
576584
let ``Provide completion on first function argument type hint``() =
577585
let fileContents = """

0 commit comments

Comments
 (0)