From 8ce62b192d4ea0c128f2877b1853662cfabc539a Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Fri, 24 Mar 2023 21:02:09 +0100 Subject: [PATCH] Fixing completion for collections of anonymous records --- src/Compiler/Service/ServiceDeclarationLists.fs | 2 +- tests/service/CompletionTests.fs | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Compiler/Service/ServiceDeclarationLists.fs b/src/Compiler/Service/ServiceDeclarationLists.fs index 65d222ad6e6..c062ecec290 100644 --- a/src/Compiler/Service/ServiceDeclarationLists.fs +++ b/src/Compiler/Service/ServiceDeclarationLists.fs @@ -1087,7 +1087,7 @@ type DeclarationListInfo(declarations: DeclarationListItem[], isForType: bool, i // Make a 'Declarations' object for a set of selected items static member Create(infoReader:InfoReader, ad, m: range, denv, getAccessibility: Item -> FSharpAccessibility, items: CompletionItem list, currentNamespace: string[] option, isAttributeApplicationContext: bool) = let g = infoReader.g - let isForType = items |> List.exists (fun x -> x.Type.IsSome) + let isForType = items |> List.exists (fun x -> x.Type.IsSome || (x.Item |> function Item.AnonRecdField _ -> true | _ -> false)) let items = items |> RemoveExplicitlySuppressedCompletionItems g let tyconRefOptEq tref1 tref2 = diff --git a/tests/service/CompletionTests.fs b/tests/service/CompletionTests.fs index 4409f73737b..0759b5b4f8c 100644 --- a/tests/service/CompletionTests.fs +++ b/tests/service/CompletionTests.fs @@ -17,6 +17,12 @@ let assertHasItemWithNames names (completionInfo: DeclarationListInfo) = for name in names do Assert.That(Set.contains name itemNames, name) +let assertHasExactlyNamesAndNothingElse names (completionInfo: DeclarationListInfo) = + let itemNames = getCompletionItemNames completionInfo |> set + let expectedNames = Set.ofList names + + Assert.That(itemNames, Is.EqualTo expectedNames) + [] let ``Expr - record - field 01 - anon module`` () = @@ -57,3 +63,11 @@ let record = { Field = 1 } { } """ assertHasItemWithNames ["Field"; "record"] info + +[] +let ``Expr - array of anonymous records`` () = + let info = getCompletionInfo "x[0]." (3, 6) """ +let x = [ {| Name = "foo" |} ] +x[0]. +""" + assertHasExactlyNamesAndNothingElse ["Name"; "Equals"; "GetHashCode"; "GetType"; "ToString"] info