Skip to content

Commit 23ef783

Browse files
authored
Merge pull request #1228 from forki/prop
Improve error reporting: property setter in constructor expression
2 parents c2bf93e + 57ca813 commit 23ef783

File tree

4 files changed

+29
-2
lines changed

4 files changed

+29
-2
lines changed

src/fsharp/ConstraintSolver.fs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2006,10 +2006,22 @@ and ReportNoCandidatesError (csenv:ConstraintSolverEnv) (nUnnamedCallerArgs,nNam
20062006

20072007
// One method, incorrect name/arg assignment
20082008
| _,_,_,_,([],[cmeth]) ->
2009-
let msgNum,msgText = FSComp.SR.csRequiredSignatureIs(NicePrint.stringOfMethInfo amap m denv cmeth.Method)
2009+
let minfo = cmeth.Method
2010+
let msgNum,msgText = FSComp.SR.csRequiredSignatureIs(NicePrint.stringOfMethInfo amap m denv minfo)
20102011
let msgNum,msgText,msgRange =
20112012
match cmeth.UnassignedNamedArgs with
2012-
| CallerNamedArg(id,_) :: _ -> (msgNum,FSComp.SR.csMemberHasNoArgumentOrReturnProperty(methodName, id.idText, msgText),id.idRange)
2013+
| CallerNamedArg(id,_) :: _ ->
2014+
if minfo.IsConstructor then
2015+
let typ = minfo.DeclaringEntityRef
2016+
2017+
let predictions =
2018+
typ.AllInstanceFieldsAsList
2019+
|> List.map (fun p -> p.Name.Replace("@",""))
2020+
|> ErrorResolutionHints.FilterPredictions id.idText
2021+
2022+
msgNum,FSComp.SR.csCtorHasNoArgumentOrReturnProperty(methodName, id.idText, msgText, ErrorResolutionHints.FormatPredictions predictions),id.idRange
2023+
else
2024+
msgNum,FSComp.SR.csMemberHasNoArgumentOrReturnProperty(methodName, id.idText, msgText),id.idRange
20132025
| [] -> (msgNum,msgText,m)
20142026
ErrorD (Error ((msgNum,msgText),msgRange))
20152027

src/fsharp/FSComp.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ csGenericConstructRequiresPublicDefaultConstructor,"A generic construct requires
334334
492,csMethodIsNotAStaticMethod,"%s is not a static method"
335335
493,csMethodIsNotAnInstanceMethod,"%s is not an instance method"
336336
csMemberHasNoArgumentOrReturnProperty,"The member or object constructor '%s' has no argument or settable return property '%s'. %s."
337+
csCtorHasNoArgumentOrReturnProperty,"The object constructor '%s' has no argument or settable return property '%s'. %s. %s"
337338
495,csRequiredSignatureIs,"The required signature is %s"
338339
496,csMemberSignatureMismatch,"The member or object constructor '%s' requires %d argument(s). The required signature is '%s'."
339340
497,csMemberSignatureMismatch2,"The member or object constructor '%s' requires %d additional argument(s). The required signature is '%s'."
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// #Warnings
2+
//<Expects status="Error" span="(11,17)" id="FS0495">The object constructor 'MyClass' has no argument or settable return property 'Property'.</Expects>
3+
//<Expects>Maybe you want one of the following:</Expects>
4+
//<Expects>MyProperty</Expects>
5+
6+
type MyClass() =
7+
member val MyProperty = "" with get, set
8+
member val MyProperty2 = "" with get, set
9+
member val ABigProperty = "" with get, set
10+
11+
let c = MyClass(Property = "")
12+
13+
exit 0

tests/fsharpqa/Source/Warnings/env.lst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
SOURCE=ElseBranchHasWrongType.fs # ElseBranchHasWrongType.fs
1414
SOURCE=MissingExpressionAfterLet.fs # MissingExpressionAfterLet.fs
1515
SOURCE=AssignmentOnImmutable.fs # AssignmentOnImmutable.fs
16+
SOURCE=SuggestFieldsInCtor.fs # SuggestFieldsInCtor.fs
1617
SOURCE=RefCellInsteadOfNot.fs # RefCellInsteadOfNot.fs
1718
SOURCE=RefCellInsteadOfNot2.fs # RefCellInsteadOfNot2.fs
1819
SOURCE=UpcastInsteadOfDowncast.fs # UpcastInsteadOfDowncast.fs

0 commit comments

Comments
 (0)