@@ -385,30 +385,58 @@ let _ = List.map (sprintf @"%A
385385let _ = (10, 12) ||> sprintf "%A
386386 %O "
387387let _ = sprintf "\n%-8.1e +567" 1.0
388- let _ = sprintf @"%O \n%-5s " "1" "2" """
388+ let _ = sprintf @"%O \n%-5s " "1" "2"
389+ let _ = sprintf "%%"
390+ let _ = sprintf " %*%" 2
391+ let _ = sprintf " %.*%" 2
392+ let _ = sprintf " %*.1%" 2
393+ let _ = sprintf " %*s" 10 "hello"
394+ let _ = sprintf " %*.*%" 2 3
395+ let _ = sprintf " %*.*f" 2 3 4.5
396+ let _ = sprintf " %.*f" 3 4.5
397+ let _ = sprintf " %*.1f" 3 4.5
398+ let _ = sprintf " %6.*f" 3 4.5
399+ let _ = sprintf " %6.*%" 3
400+ let _ = printf " %a " (fun _ _ -> ()) 2
401+ let _ = printf " %*a" 3 (fun _ _ -> ()) 2
402+ """
389403
390404 let file = " /home/user/Test.fsx"
391405 let untyped , typeCheckResults = parseAndTypeCheckFileInProject( file, input)
392406
393407 typeCheckResults.Errors |> shouldEqual [||]
394- typeCheckResults.GetFormatSpecifierLocations()
395- |> Array.map ( fun range -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn)
396- |> shouldEqual [|( 2 , 45 , 2 , 46 );
397- ( 3 , 23 , 3 , 24 );
398- ( 4 , 38 , 4 , 39 );
399- ( 5 , 29 , 5 , 30 );
400- ( 6 , 17 , 6 , 19 );
401- ( 7 , 17 , 7 , 21 );
402- ( 8 , 17 , 8 , 22 );
403- ( 9 , 18 , 9 , 21 );
404- ( 10 , 18 , 10 , 20 );
405- ( 12 , 12 , 12 , 14 );
406- ( 15 , 12 , 15 , 14 );
407- ( 16 , 28 , 16 , 29 );
408- ( 18 , 30 , 18 , 31 );
409- ( 19 , 30 , 19 , 31 );
410- ( 20 , 19 , 20 , 24 );
411- ( 21 , 18 , 21 , 19 ); ( 21 , 22 , 21 , 25 )|]
408+ typeCheckResults.GetFormatSpecifierLocationsAndArity()
409+ |> Array.map ( fun ( range , numArgs ) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs)
410+ |> shouldEqual [|( 2 , 45 , 2 , 46 , 1 );
411+ ( 3 , 23 , 3 , 24 , 1 );
412+ ( 4 , 38 , 4 , 39 , 1 );
413+ ( 5 , 29 , 5 , 30 , 1 );
414+ ( 6 , 17 , 6 , 19 , 2 );
415+ ( 7 , 17 , 7 , 21 , 1 );
416+ ( 8 , 17 , 8 , 22 , 1 );
417+ ( 9 , 18 , 9 , 21 , 1 );
418+ ( 10 , 18 , 10 , 20 , 1 );
419+ ( 12 , 12 , 12 , 14 , 1 );
420+ ( 15 , 12 , 15 , 14 , 1 );
421+ ( 16 , 28 , 16 , 29 , 1 );
422+ ( 18 , 30 , 18 , 31 , 1 );
423+ ( 19 , 30 , 19 , 31 , 1 );
424+ ( 20 , 19 , 20 , 24 , 1 );
425+ ( 21 , 18 , 21 , 19 , 1 );
426+ ( 21 , 22 , 21 , 25 , 1 );
427+ ( 22 , 17 , 22 , 18 , 0 );
428+ ( 23 , 18 , 23 , 20 , 1 );
429+ ( 24 , 19 , 24 , 22 , 1 );
430+ ( 25 , 20 , 25 , 24 , 1 );
431+ ( 26 , 21 , 26 , 23 , 2 );
432+ ( 27 , 22 , 27 , 26 , 2 );
433+ ( 28 , 23 , 28 , 27 , 3 );
434+ ( 29 , 24 , 29 , 27 , 2 );
435+ ( 30 , 25 , 30 , 29 , 2 );
436+ ( 31 , 26 , 31 , 30 , 2 );
437+ ( 32 , 27 , 32 , 31 , 1 );
438+ ( 33 , 28 , 33 , 29 , 2 );
439+ ( 34 , 29 , 34 , 31 , 3 )|]
412440
413441[<Test>]
414442let ``Printf specifiers for triple - quote strings`` () =
@@ -426,12 +454,13 @@ let _ = List.iter(printfn \"\"\"%-A
426454 let untyped , typeCheckResults = parseAndTypeCheckFileInProject( file, input)
427455
428456 typeCheckResults.Errors |> shouldEqual [||]
429- typeCheckResults.GetFormatSpecifierLocations()
430- |> Array.map ( fun range -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn)
431- |> shouldEqual [|( 2 , 19 , 2 , 21 );
432- ( 4 , 12 , 4 , 14 );
433- ( 6 , 29 , 6 , 31 );
434- ( 7 , 29 , 7 , 30 ); ( 7 , 33 , 7 , 34 )|]
457+ typeCheckResults.GetFormatSpecifierLocationsAndArity()
458+ |> Array.map ( fun ( range , numArgs ) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs)
459+ |> shouldEqual [|( 2 , 19 , 2 , 21 , 1 );
460+ ( 4 , 12 , 4 , 14 , 1 );
461+ ( 6 , 29 , 6 , 31 , 1 );
462+ ( 7 , 29 , 7 , 30 , 1 );
463+ ( 7 , 33 , 7 , 34 , 1 )|]
435464
436465[<Test>]
437466let ``Printf specifiers for user - defined functions`` () =
@@ -446,25 +475,27 @@ let _ = debug "[LanguageService] Type checking fails for '%s' with content=%A an
446475 let untyped , typeCheckResults = parseAndTypeCheckFileInProject( file, input)
447476
448477 typeCheckResults.Errors |> shouldEqual [||]
449- typeCheckResults.GetFormatSpecifierLocations()
450- |> Array.map ( fun range -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn)
451- |> shouldEqual [|( 3 , 24 , 3 , 25 );
452- ( 3 , 29 , 3 , 30 );
453- ( 4 , 58 , 4 , 59 ); ( 4 , 75 , 4 , 76 ); ( 4 , 82 , 4 , 83 ); ( 4 , 108 , 4 , 109 )|]
478+ typeCheckResults.GetFormatSpecifierLocationsAndArity()
479+ |> Array.map ( fun ( range , numArgs ) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs)
480+ |> shouldEqual [|( 3 , 24 , 3 , 25 , 1 );
481+ ( 3 , 29 , 3 , 30 , 1 );
482+ ( 4 , 58 , 4 , 59 , 1 );
483+ ( 4 , 75 , 4 , 76 , 1 );
484+ ( 4 , 82 , 4 , 83 , 1 );
485+ ( 4 , 108 , 4 , 109 , 1 )|]
454486
455487[<Test>]
456488let ``should not report format specifiers for illformed format strings`` () =
457489 let input =
458490 """
459491let _ = sprintf "%.7f %7.1A %7.f %--8.1f"
460- let _ = sprintf "%%A "
461492let _ = sprintf "ABCDE"
462493"""
463494
464495 let file = " /home/user/Test.fsx"
465496 let untyped , typeCheckResults = parseAndTypeCheckFileInProject( file, input)
466- typeCheckResults.GetFormatSpecifierLocations ()
467- |> Array.map ( fun range -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn)
497+ typeCheckResults.GetFormatSpecifierLocationsAndArity ()
498+ |> Array.map ( fun ( range , numArgs ) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs )
468499 |> shouldEqual [||]
469500
470501[<Test>]
0 commit comments