From e40a1085f6124090f25572c327f0195b541c0884 Mon Sep 17 00:00:00 2001 From: "fable-repo-assist[bot]" <279220273+fable-repo-assist[bot]@users.noreply.github.com> Date: Sat, 25 Apr 2026 11:18:09 +0000 Subject: [PATCH 1/2] feat: add missing StringBuilder.Append overloads for numeric types Add Append overloads for int8, byte, int16, uint16, uint32, int64, uint64, and float32 to match the full set available in .NET's StringBuilder. The Rust target already had all these overloads; this brings TypeScript and Python targets to parity. Closes #2636 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../fable_library/System.Text.fs | 32 +++++++++++++++++++ src/fable-library-ts/System.Text.fs | 32 +++++++++++++++++++ tests/Js/Main/StringTests.fs | 12 +++++++ tests/Python/TestString.fs | 13 ++++++++ 4 files changed, 89 insertions(+) diff --git a/src/fable-library-py/fable_library/System.Text.fs b/src/fable-library-py/fable_library/System.Text.fs index 1fa48be009..debe8a2cf1 100644 --- a/src/fable-library-py/fable_library/System.Text.fs +++ b/src/fable-library-py/fable_library/System.Text.fs @@ -31,10 +31,42 @@ type StringBuilder(value: string, capacity: int) = buf.Add(s) x + member x.Append(o: int8) = + buf.Add(string o) + x + + member x.Append(o: byte) = + buf.Add(string o) + x + + member x.Append(o: int16) = + buf.Add(string o) + x + + member x.Append(o: uint16) = + buf.Add(string o) + x + member x.Append(o: int) = buf.Add(string o) x + member x.Append(o: uint32) = + buf.Add(string o) + x + + member x.Append(o: int64) = + buf.Add(string o) + x + + member x.Append(o: uint64) = + buf.Add(string o) + x + + member x.Append(o: float32) = + buf.Add(string o) + x + member x.Append(o: float) = buf.Add(string o) x diff --git a/src/fable-library-ts/System.Text.fs b/src/fable-library-ts/System.Text.fs index fd1b6f47ea..685cc1df3d 100644 --- a/src/fable-library-ts/System.Text.fs +++ b/src/fable-library-ts/System.Text.fs @@ -28,10 +28,42 @@ type StringBuilder(value: string, capacity: int) = buf.Add(s) x + member x.Append(o: int8) = + buf.Add(string o) + x + + member x.Append(o: byte) = + buf.Add(string o) + x + + member x.Append(o: int16) = + buf.Add(string o) + x + + member x.Append(o: uint16) = + buf.Add(string o) + x + member x.Append(o: int) = buf.Add(string o) x + member x.Append(o: uint32) = + buf.Add(string o) + x + + member x.Append(o: int64) = + buf.Add(string o) + x + + member x.Append(o: uint64) = + buf.Add(string o) + x + + member x.Append(o: float32) = + buf.Add(string o) + x + member x.Append(o: float) = buf.Add(string o) x diff --git a/tests/Js/Main/StringTests.fs b/tests/Js/Main/StringTests.fs index 8f430baf86..220c747093 100644 --- a/tests/Js/Main/StringTests.fs +++ b/tests/Js/Main/StringTests.fs @@ -110,6 +110,18 @@ let tests = testList "Strings" [ let actual = sb.ToString().Replace(",", ".").ToLower() actual |> equal "aaabcd/true5.234xxxx" + testCase "StringBuilder.Append works with numeric type overloads" <| fun () -> + let sb = System.Text.StringBuilder() + sb.Append(1y) |> ignore // int8 + sb.Append(2uy) |> ignore // byte + sb.Append(3s) |> ignore // int16 + sb.Append(4us) |> ignore // uint16 + sb.Append(5u) |> ignore // uint32 + sb.Append(6L) |> ignore // int64 + sb.Append(7UL) |> ignore // uint64 + sb.Append(8.0f) |> ignore // float32 + sb.ToString().Replace(",", ".") |> equal "12345678" + testCase "StringBuilder.AppendFormat works" <| fun () -> let sb = System.Text.StringBuilder() sb.AppendFormat("Hello{0}World{1}", " ", "!") |> ignore diff --git a/tests/Python/TestString.fs b/tests/Python/TestString.fs index 65a4cb0139..d24644b914 100644 --- a/tests/Python/TestString.fs +++ b/tests/Python/TestString.fs @@ -261,6 +261,19 @@ let ``test StringBuilder.Append works with various overloads`` () = let actual = sb.ToString().ToLower() actual |> equal "aaabcd/true5.234xxxx" +[] +let ``test StringBuilder.Append works with numeric type overloads`` () = + let sb = System.Text.StringBuilder() + sb.Append(1y) |> ignore // int8 + sb.Append(2uy) |> ignore // byte + sb.Append(3s) |> ignore // int16 + sb.Append(4us) |> ignore // uint16 + sb.Append(5u) |> ignore // uint32 + sb.Append(6L) |> ignore // int64 + sb.Append(7UL) |> ignore // uint64 + sb.Append(8.0f) |> ignore // float32 + sb.ToString() |> equal "12345678" + [] let ``test StringBuilder.AppendFormat works`` () = let sb = System.Text.StringBuilder() From 7d3128a505e44e435e97a4b51f79baf13b0ac848 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 25 Apr 2026 11:18:13 +0000 Subject: [PATCH 2/2] ci: trigger checks