Skip to content

Commit 4482d67

Browse files
committed
Merge pull request #548 from dsyme/fix-545
Fix 545
2 parents 0cb21b7 + ef28e25 commit 4482d67

File tree

2 files changed

+63
-2
lines changed

2 files changed

+63
-2
lines changed

src/fsharp/tast.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3197,7 +3197,7 @@ and UnionCaseRef =
31973197

31983198
member x.DefinitionRange = x.UnionCase.DefinitionRange
31993199

3200-
member x.SigRange = x.UnionCase.DefinitionRange
3200+
member x.SigRange = x.UnionCase.SigRange
32013201

32023202
member x.Index =
32033203
try
@@ -3227,7 +3227,7 @@ and RecdFieldRef =
32273227

32283228
member x.DefinitionRange = x.RecdField.DefinitionRange
32293229

3230-
member x.SigRange = x.RecdField.DefinitionRange
3230+
member x.SigRange = x.RecdField.SigRange
32313231

32323232
member x.Index =
32333233
let (RFRef(tcref,id)) = x

tests/service/ProjectAnalysisTests.fs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2689,6 +2689,67 @@ let ``Test Project16 sig symbols are equal to impl symbols`` () =
26892689
testFind ("implementation", symbolsImpl) ("implementation", symbolsImpl) // of course this should pass...
26902690
testFind ("signature", symbolsSig) ("signature", symbolsSig) // of course this should pass...
26912691

2692+
[<Test>]
2693+
let ``Test Project16 sym locations`` () =
2694+
2695+
let wholeProjectResults = checker.ParseAndCheckProject(Project16.options) |> Async.RunSynchronously
2696+
2697+
let fmtLoc (mOpt: Range.range option) =
2698+
match mOpt with
2699+
| None -> None
2700+
| Some m ->
2701+
let file = Project16.cleanFileName m.FileName
2702+
if file = "??" then None
2703+
else Some (file, (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn ))
2704+
2705+
let allUsesOfAllSymbols =
2706+
wholeProjectResults.GetAllUsesOfAllSymbols()
2707+
|> Async.RunSynchronously
2708+
|> Array.choose (fun su ->
2709+
match fmtLoc su.Symbol.SignatureLocation, fmtLoc su.Symbol.DeclarationLocation, fmtLoc su.Symbol.ImplementationLocation with
2710+
| Some a, Some b, Some c -> Some (su.Symbol.ToString(), a, b, c)
2711+
| _ -> None)
2712+
2713+
allUsesOfAllSymbols |> shouldEqual
2714+
[|("field Field1", ("sig1", (16, 10), (16, 16)),("sig1", (16, 10), (16, 16)), ("file1", (13, 10), (13, 16)));
2715+
("field Field2", ("sig1", (16, 24), (16, 30)),("sig1", (16, 24), (16, 30)), ("file1", (13, 24), (13, 30)));
2716+
("Case1", ("sig1", (17, 8), (17, 13)), ("sig1", (17, 8), (17, 13)),("file1", (14, 8), (14, 13)));
2717+
("Case2", ("sig1", (17, 16), (17, 21)), ("sig1", (17, 16), (17, 21)),("file1", (14, 16), (14, 21)));
2718+
("C", ("sig1", (4, 5), (4, 6)), ("sig1", (4, 5), (4, 6)),("file1", (4, 5), (4, 6)));
2719+
("C", ("sig1", (4, 5), (4, 6)), ("sig1", (4, 5), (4, 6)),("file1", (4, 5), (4, 6)));
2720+
("member .ctor", ("sig1", (5, 4), (5, 7)), ("sig1", (5, 4), (5, 7)),("file1", (4, 5), (4, 6)));
2721+
("member get_PC", ("sig1", (6, 11), (6, 13)), ("sig1", (6, 11), (6, 13)),("file1", (5, 13), (5, 15)));
2722+
("D", ("sig1", (8, 14), (8, 15)), ("sig1", (8, 14), (8, 15)),("file1", (7, 4), (7, 5)));
2723+
("D", ("sig1", (8, 14), (8, 15)), ("sig1", (8, 14), (8, 15)),("file1", (7, 4), (7, 5)));
2724+
("member .ctor", ("sig1", (9, 4), (9, 7)), ("sig1", (9, 4), (9, 7)),("file1", (7, 4), (7, 5)));
2725+
("member get_PD", ("sig1", (10, 11), (10, 13)),("sig1", (10, 11), (10, 13)), ("file1", (8, 13), (8, 15)));
2726+
("E", ("sig1", (12, 14), (12, 15)), ("sig1", (12, 14), (12, 15)),("file1", (10, 4), (10, 5)));
2727+
("E", ("sig1", (12, 14), (12, 15)), ("sig1", (12, 14), (12, 15)),("file1", (10, 4), (10, 5)));
2728+
("member .ctor", ("sig1", (13, 4), (13, 7)), ("sig1", (13, 4), (13, 7)),("file1", (10, 4), (10, 5)));
2729+
("member get_PE", ("sig1", (14, 11), (14, 13)),("sig1", (14, 11), (14, 13)), ("file1", (11, 13), (11, 15)));
2730+
("F", ("sig1", (16, 4), (16, 5)), ("sig1", (16, 4), (16, 5)),("file1", (13, 4), (13, 5)));
2731+
("G", ("sig1", (17, 4), (17, 5)), ("sig1", (17, 4), (17, 5)),("file1", (14, 4), (14, 5)));
2732+
("Impl", ("sig1", (2, 7), (2, 11)), ("sig1", (2, 7), (2, 11)),("file1", (2, 7), (2, 11)));
2733+
("field Field1", ("sig1", (16, 10), (16, 16)),("file1", (13, 10), (13, 16)), ("file1", (13, 10), (13, 16)));
2734+
("field Field2", ("sig1", (16, 24), (16, 30)),("file1", (13, 24), (13, 30)), ("file1", (13, 24), (13, 30)));
2735+
("Case1", ("sig1", (17, 8), (17, 13)), ("file1", (14, 8), (14, 13)),("file1", (14, 8), (14, 13)));
2736+
("Case2", ("sig1", (17, 16), (17, 21)), ("file1", (14, 16), (14, 21)),("file1", (14, 16), (14, 21)));
2737+
("C", ("sig1", (4, 5), (4, 6)), ("file1", (4, 5), (4, 6)),("file1", (4, 5), (4, 6)));
2738+
("D", ("sig1", (8, 14), (8, 15)), ("file1", (7, 4), (7, 5)),("file1", (7, 4), (7, 5)));
2739+
("E", ("sig1", (12, 14), (12, 15)), ("file1", (10, 4), (10, 5)),("file1", (10, 4), (10, 5)));
2740+
("F", ("sig1", (16, 4), (16, 5)), ("file1", (13, 4), (13, 5)),("file1", (13, 4), (13, 5)));
2741+
("G", ("sig1", (17, 4), (17, 5)), ("file1", (14, 4), (14, 5)),("file1", (14, 4), (14, 5)));
2742+
("member .ctor", ("sig1", (5, 4), (5, 7)), ("file1", (4, 5), (4, 6)),("file1", (4, 5), (4, 6)));
2743+
("member get_PC", ("sig1", (6, 11), (6, 13)), ("file1", (5, 13), (5, 15)),("file1", (5, 13), (5, 15)));
2744+
("member .ctor", ("sig1", (9, 4), (9, 7)), ("file1", (7, 4), (7, 5)),("file1", (7, 4), (7, 5)));
2745+
("member get_PD", ("sig1", (10, 11), (10, 13)),("file1", (8, 13), (8, 15)), ("file1", (8, 13), (8, 15)));
2746+
("member .ctor", ("sig1", (13, 4), (13, 7)), ("file1", (10, 4), (10, 5)),("file1", (10, 4), (10, 5)));
2747+
("member get_PE", ("sig1", (14, 11), (14, 13)),("file1", (11, 13), (11, 15)), ("file1", (11, 13), (11, 15)));
2748+
("val x", ("file1", (5, 11), (5, 12)), ("file1", (5, 11), (5, 12)),("file1", (5, 11), (5, 12)));
2749+
("val x", ("file1", (8, 11), (8, 12)), ("file1", (8, 11), (8, 12)),("file1", (8, 11), (8, 12)));
2750+
("val x", ("file1", (11, 11), (11, 12)), ("file1", (11, 11), (11, 12)),("file1", (11, 11), (11, 12)));
2751+
("Impl", ("sig1", (2, 7), (2, 11)), ("file1", (2, 7), (2, 11)),("file1", (2, 7), (2, 11)))|]
2752+
26922753

26932754

26942755
//-----------------------------------------------------------------------------------------

0 commit comments

Comments
 (0)