Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions src/fsharp/ConstraintSolver.fs
Original file line number Diff line number Diff line change
Expand Up @@ -2010,10 +2010,22 @@ and ReportNoCandidatesError (csenv:ConstraintSolverEnv) (nUnnamedCallerArgs,nNam

// One method, incorrect name/arg assignment
| _,_,_,_,([],[cmeth]) ->
let msgNum,msgText = FSComp.SR.csRequiredSignatureIs(NicePrint.stringOfMethInfo amap m denv cmeth.Method)
let minfo = cmeth.Method
let msgNum,msgText = FSComp.SR.csRequiredSignatureIs(NicePrint.stringOfMethInfo amap m denv minfo)
let msgNum,msgText,msgRange =
match cmeth.UnassignedNamedArgs with
| CallerNamedArg(id,_) :: _ -> (msgNum,FSComp.SR.csMemberHasNoArgumentOrReturnProperty(methodName, id.idText, msgText),id.idRange)
| CallerNamedArg(id,_) :: _ ->
if minfo.IsConstructor then
let typ = minfo.DeclaringEntityRef

let predictions =
typ.AllInstanceFieldsAsList
|> List.map (fun p -> p.Name.Replace("@",""))
|> ErrorResolutionHints.FilterPredictions id.idText

msgNum,FSComp.SR.csCtorHasNoArgumentOrReturnProperty(methodName, id.idText, msgText, ErrorResolutionHints.FormatPredictions predictions),id.idRange
else
msgNum,FSComp.SR.csMemberHasNoArgumentOrReturnProperty(methodName, id.idText, msgText),id.idRange
| [] -> (msgNum,msgText,m)
ErrorD (Error ((msgNum,msgText),msgRange))

Expand Down
1 change: 1 addition & 0 deletions src/fsharp/FSComp.txt
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,7 @@ csGenericConstructRequiresPublicDefaultConstructor,"A generic construct requires
492,csMethodIsNotAStaticMethod,"%s is not a static method"
493,csMethodIsNotAnInstanceMethod,"%s is not an instance method"
csMemberHasNoArgumentOrReturnProperty,"The member or object constructor '%s' has no argument or settable return property '%s'. %s."
csCtorHasNoArgumentOrReturnProperty,"The object constructor '%s' has no argument or settable return property '%s'. %s. %s"
495,csRequiredSignatureIs,"The required signature is %s"
496,csMemberSignatureMismatch,"The member or object constructor '%s' requires %d argument(s). The required signature is '%s'."
497,csMemberSignatureMismatch2,"The member or object constructor '%s' requires %d additional argument(s). The required signature is '%s'."
Expand Down
13 changes: 13 additions & 0 deletions tests/fsharpqa/Source/Warnings/SuggestFieldsInCtor.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// #Warnings
//<Expects status="Error" span="(11,17)" id="FS0495">The object constructor 'MyClass' has no argument or settable return property 'Property'.</Expects>
//<Expects>Maybe you want one of the following:</Expects>
//<Expects>MyProperty</Expects>

type MyClass() =
member val MyProperty = "" with get, set
member val MyProperty2 = "" with get, set
member val ABigProperty = "" with get, set

let c = MyClass(Property = "")

exit 0
1 change: 1 addition & 0 deletions tests/fsharpqa/Source/Warnings/env.lst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
SOURCE=ElseBranchHasWrongType.fs # ElseBranchHasWrongType.fs
SOURCE=MissingExpressionAfterLet.fs # MissingExpressionAfterLet.fs
SOURCE=AssignmentOnImmutable.fs # AssignmentOnImmutable.fs
SOURCE=SuggestFieldsInCtor.fs # SuggestFieldsInCtor.fs
SOURCE=RefCellInsteadOfNot.fs # RefCellInsteadOfNot.fs
SOURCE=RefCellInsteadOfNot2.fs # RefCellInsteadOfNot2.fs
SOURCE=UpcastInsteadOfDowncast.fs # UpcastInsteadOfDowncast.fs
Expand Down