33open FSharp.Compiler .CodeAnalysis
44open FSharp.Compiler .EditorServices
55open FSharp.Test .Assert
6+ open FSharp.Test .Compiler .Assertions .TextBasedDiagnosticAsserts
67open Xunit
78
89let private assertItemsWithNames contains names ( completionInfo : DeclarationListInfo ) =
9- let itemNames = completionInfo.Items |> Array.map _. NameInCode |> set
10+ let itemNames =
11+ completionInfo.Items
12+ |> Array.map _. NameInCode
13+ |> Array.map normalizeNewLines
14+ |> set
1015
1116 for name in names do
17+ let name = normalizeNewLines name
1218 Set.contains name itemNames |> shouldEqual contains
1319
1420let assertHasItemWithNames names ( completionInfo : DeclarationListInfo ) =
@@ -373,24 +379,29 @@ let test = System.Sp{caret}
373379#endif
374380
375381module Options =
382+ let private assertItemWithOptions getOption ( options : FSharpCodeCompletionOptions list ) name source =
383+ options
384+ |> List.iter ( fun options ->
385+ let contains = getOption options
386+ let info = Checker.getCompletionInfoWithOptions options source
387+ assertItemsWithNames contains [ name] info
388+ )
389+
376390 module AllowObsolete =
377391 let private allowObsoleteOptions = { FSharpCodeCompletionOptions.Default with SuggestObsoleteSymbols = true }
378392 let private disallowObsoleteOptions = { FSharpCodeCompletionOptions.Default with SuggestObsoleteSymbols = false }
379393
380- let private assertItemWithOptions assertAllowed assertDisallowed name source =
381- if assertAllowed then
382- let info = Checker.getCompletionInfoWithOptions allowObsoleteOptions source
383- assertHasItemWithNames [ name] info
394+ let private assertItemWithOptions =
395+ assertItemWithOptions _. SuggestObsoleteSymbols
384396
385- if assertDisallowed then
386- let info = Checker.getCompletionInfoWithOptions disallowObsoleteOptions source
387- assertHasNoItemsWithNames [ name] info
397+ let assertItem ( name : string ) source =
398+ assertItemWithOptions [ allowObsoleteOptions; disallowObsoleteOptions] name source
388399
389- let assertItem name ( source ) =
390- assertItemWithOptions true true name source
400+ let assertItemAllowed name source =
401+ assertItemWithOptions [ allowObsoleteOptions ] name source
391402
392- let assertItemAllowed name ( source ) =
393- assertItemWithOptions true false name source
403+ let assertItemNotAllowed name source =
404+ assertItemWithOptions [ disallowObsoleteOptions ] name source
394405
395406 [<Fact>]
396407 let ``Prop - Instance 01`` () =
@@ -680,3 +691,40 @@ exception E
680691try () with E{caret}
681692"""
682693
694+
695+ module PatternNameSuggestions =
696+ let private suggestPatternNames = { FSharpCodeCompletionOptions.Default with SuggestPatternNames = true }
697+ let private doNotSuggestPatternNames = { FSharpCodeCompletionOptions.Default with SuggestPatternNames = false }
698+
699+ let assertItemWithOptions =
700+ assertItemWithOptions _. SuggestPatternNames
701+
702+ let assertItem name source =
703+ assertItemWithOptions [ suggestPatternNames; doNotSuggestPatternNames] name source
704+
705+ [<Fact>]
706+ let ``Union case field 01`` () =
707+ assertItem " named" """
708+ type U =
709+ | A of named: int
710+
711+ match A 1 with
712+ | A n{caret}
713+ """
714+
715+ module OverrideSuggestions =
716+ let private suggestOverrides = { FSharpCodeCompletionOptions.Default with SuggestGeneratedOverrides = true }
717+ let private doNotSuggestOverrides = { FSharpCodeCompletionOptions.Default with SuggestGeneratedOverrides = false }
718+
719+ let assertItemWithOptions =
720+ assertItemWithOptions _. SuggestGeneratedOverrides
721+
722+ let assertItem name source =
723+ assertItemWithOptions [ suggestOverrides; doNotSuggestOverrides] name source
724+
725+ [<Fact>]
726+ let ``Override 01`` () =
727+ assertItem " this.ToString (): string = \n base.ToString()" """
728+ type T() =
729+ override {caret}
730+ """
0 commit comments