Skip to content

Commit 0a8adb6

Browse files
vasily-kirichenkoKevinRansom
authored andcommitted
Fix FSharpMemberOrFunctionOrValue.IsConstructor property for ctor definition (#3972)
* fix FSharpMemberOrFunctionOrValue.IsConstructor property for ctor definition * add a test
1 parent a7a6586 commit 0a8adb6

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

src/fsharp/symbols/Symbols.fs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1796,6 +1796,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
17961796
member x.IsConstructor =
17971797
match d with
17981798
| C _ -> true
1799+
| V v -> v.IsConstructor
17991800
| _ -> false
18001801

18011802
member x.Data = d

tests/service/EditorTests.fs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,37 @@ type Class1() =
715715
("member .cctor", (10, 5, 10, 11))
716716
("Test", (1, 0, 1, 0))|]
717717

718+
[<Test>]
719+
let ``IsConstructor property should return true for constructors`` () =
720+
let input =
721+
"""
722+
type T(x: int) =
723+
new() = T(0)
724+
let x: T()
725+
"""
726+
let file = "/home/user/Test.fsx"
727+
let _, typeCheckResults = parseAndCheckScript(file, input)
728+
typeCheckResults.GetAllUsesOfAllSymbolsInFile()
729+
|> Async.RunSynchronously
730+
|> Array.map (fun su ->
731+
let r = su.RangeAlternate
732+
let isConstructor =
733+
match su.Symbol with
734+
| :? FSharpMemberOrFunctionOrValue as f -> f.IsConstructor
735+
| _ -> false
736+
su.Symbol.ToString(), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn), isConstructor)
737+
|> Array.distinct
738+
|> shouldEqual
739+
[|("T", (2, 5, 2, 6), false)
740+
("int", (2, 10, 2, 13), false)
741+
("val x", (2, 7, 2, 8), false)
742+
("member .ctor", (2, 5, 2, 6), true)
743+
("member .ctor", (3, 4, 3, 7), true)
744+
("member .ctor", (3, 12, 3, 13), true)
745+
("T", (4, 7, 4, 8), false)
746+
("val x", (4, 4, 4, 5), false)
747+
("Test", (1, 0, 1, 0), false)|]
748+
718749
//-------------------------------------------------------------------------------
719750

720751

0 commit comments

Comments
 (0)