Skip to content

Commit f4738e0

Browse files
authored
Add space around dots when negative floats are inside Expr.TripleNumberIndexRange (#3106)
1 parent e2aa020 commit f4738e0

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## 6.3.11 - 2024-08-16
4+
5+
### Fixed
6+
* F# Range Operator (\.\.) with negative numbers produces invalid F# code and idempotent. [#3105](https://github.com/fsprojects/fantomas/issues/3105)
7+
38
## 6.3.10 - 2024-07-12
49

510
### Changed

src/Fantomas.Core.Tests/ListTests.fs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2292,3 +2292,17 @@ let fns =
22922292
Functions[Checked false
22932293
OnChange(fun _ -> s |> updateSettings)]
22942294
"""
2295+
2296+
[<Test>]
2297+
let ``negative numbers in range operator, 3105`` () =
2298+
formatSourceString
2299+
"""
2300+
[|-24.0 .. -1.0 .. -30.0|]
2301+
"""
2302+
config
2303+
|> prepend newline
2304+
|> should
2305+
equal
2306+
"""
2307+
[| -24.0 .. -1.0 .. -30.0 |]
2308+
"""

src/Fantomas.Core/CodePrinter.fs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1546,10 +1546,19 @@ let genExpr (e: Expr) =
15461546
|> genNode node
15471547
| Expr.IndexRangeWildcard node -> genSingleTextNode node
15481548
| Expr.TripleNumberIndexRange node ->
1549+
let isNegativeFloat (text: string) =
1550+
text.StartsWith("-", StringComparison.Ordinal) && text.Contains(".")
1551+
1552+
let genDots (before: SingleTextNode) (dots: SingleTextNode) (after: SingleTextNode) =
1553+
if not (isNegativeFloat before.Text) && not (isNegativeFloat after.Text) then
1554+
genSingleTextNode dots
1555+
else
1556+
sepSpace +> genSingleTextNode dots +> sepSpace
1557+
15491558
genSingleTextNode node.Start
1550-
+> genSingleTextNode node.StartDots
1559+
+> genDots node.Start node.StartDots node.Center
15511560
+> genSingleTextNode node.Center
1552-
+> genSingleTextNode node.EndDots
1561+
+> genDots node.Center node.EndDots node.EndDots
15531562
+> genSingleTextNode node.End
15541563
|> genNode node
15551564
| Expr.IndexRange node ->

0 commit comments

Comments
 (0)