@@ -598,13 +598,42 @@ type TypeCheckInfo
598598let GetPreciseItemsFromNameResolutionVS ( line , colAtEndOfNames , membersByResidue , filterCtors , resolveOverloads , hasTextChangedSinceLastTypecheck ) =
599599 GetPreciseItemsFromNameResolution( Pos.fromVS line colAtEndOfNames, membersByResidue, filterCtors, resolveOverloads, hasTextChangedSinceLastTypecheck)
600600
601- let GetSettableFields endOfExprPos hasTextChangedSinceLastTypecheck =
601+ let CollectParameters ( methods : MethInfo list ) amap m : Item list =
602+ methods
603+ |> List.collect( fun meth ->
604+ match meth.GetParamDatas( amap, m, meth.FormalMethodInst) with
605+ | x::_ -> x|> List.choose( fun ( ParamData ( _isParamArray , _isOut , _optArgInfo , name , _ , ty )) ->
606+ match namewith
607+ | Some n-> Some( Item.ArgName( Ident( n, m), ty, Some( ArgumentContainer.Method meth)))
608+ | None-> None
609+ )
610+ | _ -> []
611+ )
612+
613+ let GetNamedParametersAndSettableFields endOfExprPos hasTextChangedSinceLastTypecheck =
602614let cnrs = GetCapturedNameResolutions endOfExprPos ResolveOverloads.No|> ResizeArray.toList|> List.rev
603- match cnrswith
604- | CNR(_, Item.CtorGroup(_, ctor::_), _, denv, nenv, ad, m)::_ ->
605- let result = ResolveCompletionsInType ncenv nenv ResolveCompletionTargets.SettablePropertiesAndFields m adfalse ctor.EnclosingType
615+ let result =
616+ match cnrswith
617+ | CNR(_, Item.CtorGroup(_, (( ctor::_) as ctors)), _, denv, nenv, ad, m)::_ ->
618+ let props = ResolveCompletionsInType ncenv nenv ResolveCompletionTargets.SettablePropertiesAndFields m adfalse ctor.EnclosingType
619+ let parameters = CollectParameters ctors amap m
620+ Some( denv, m, props@ parameters)
621+ | CNR(_, Item.MethodGroup(_, methods), _, denv, nenv, ad, m)::_ ->
622+ let props =
623+ methods
624+ |> List.collect( fun meth ->
625+ let retTy = meth.GetFSharpReturnTy( amap, m, meth.FormalMethodInst)
626+ ResolveCompletionsInType ncenv nenv ResolveCompletionTargets.SettablePropertiesAndFields m adfalse retTy
627+ )
628+ let parameters = CollectParameters methods amap m
629+ Some( denv, m, props@ parameters)
630+ | _ ->
631+ None
632+ match resultwith
633+ | None->
634+ NameResResult.Empty
635+ | Some( denv, m, result) ->
606636 ReturnItemsOfType result g denv m TypeNameResolutionFlag.ResolveTypeNamesToTypeRefs hasTextChangedSinceLastTypecheck NameResResult.Members
607- | _ -> NameResResult.Empty
608637
609638/// finds captured typing for the given position
610639let GetExprTypingForPosition ( endOfExprPos ) =
@@ -645,7 +674,6 @@ type TypeCheckInfo
645674 Some( items, denv, m)
646675| _ -> None
647676
648-
649677/// Looks at the exact expression types at the position to the left of the
650678/// residue then the source when it was typechecked.
651679let GetPreciseCompletionListFromExprTypings ( untypedParseInfo : UntypedParseInfo , line , colAtEndOfNames , filterCtors , hasTextChangedSinceLastTypecheck : ( obj * Range -> bool )) =
@@ -946,8 +974,8 @@ type TypeCheckInfo
946974| Some( CompletionContext.RecordField( RecordContext.Constructor( typeName))) ->
947975 FindRecordFieldsInEnv([ typeName], None)
948976|> Some
949- | Some( NewObject ( endPos, fields)) ->
950- let results = GetSettableFields endPos hasTextChangedSinceLastTypecheck
977+ | Some( CompletionContext.ParameterList ( endPos, fields)) ->
978+ let results = GetNamedParametersAndSettableFields endPos hasTextChangedSinceLastTypecheck
951979
952980let declaredItems = getDeclaredItemsfalse
953981