@@ -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//-----------------------------------------------------------------------------------------
@@ -4691,7 +4752,9 @@ type A<'XX, 'YY>() =
46914752[<Test>]
46924753let ``Test project38 abstract slot information`` () =
46934754 let printAbstractSignature ( s : FSharpAbstractSignature ) =
4694- let printType ( t : FSharpType ) = ( string t).[ 5 ..]
4755+ let printType ( t : FSharpType ) =
4756+ hash t |> ignore // smoke test to check hash code doesn't loop
4757+ ( string t).[ 5 ..]
46954758 let args =
46964759 ( s.AbstractArguments |> Seq.concat |> Seq.map ( fun a ->
46974760 ( match a.Name with Some n -> n + " :" | _ -> " " ) + printType a.Type) |> String.concat " * " )
0 commit comments