Skip to content

Commit bb9c121

Browse files
authored
Merge pull request #2949 from dawedawe/fix_2930_2932_2933
Fix some block comments in Rational
2 parents 646dcc9 + bbecd22 commit bb9c121

6 files changed

Lines changed: 96 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Changed
66
* Update FCS to 'Included get,set in range of AutoProperty', commit d508186f510681d1261291474e3f9f25485999a8
7+
* Update FCS to 'Add a Paren case to SynRationalConst', commit 97a5b6584b54707e3e8541fe758e1aa22132a8fe
78

89
### Added
910
* Initial support for `SynExpr.DotLambda` [#2920](https://github.com/fsprojects/fantomas/pull/2920) (See [dotnet/fsharp#13907](https://github.com/dotnet/fsharp/pull/13907))
@@ -12,6 +13,9 @@
1213
### Fixed
1314
* Comment no longer attached to autoproperty. [#2948](https://github.com/fsprojects/fantomas/issues/2948)
1415
* `begin`/`end` are replaced with parens. [#2368](https://github.com/fsprojects/fantomas/issues/2368)
16+
* Block comment in Rational between lparen and numerator is moved before lparen. [#2930](https://github.com/fsprojects/fantomas/issues/2930)
17+
* Block comment in Rational between / and denominator is moved before /. [#2932](https://github.com/fsprojects/fantomas/issues/2932)
18+
* Block comment in Rational between denominator and rparen is moved behind rparen. [#2933](https://github.com/fsprojects/fantomas/issues/2933)
1519

1620
## 6.1.3 - 2023-08-25
1721

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Some common use cases include:
3939

4040
<!-- Versions -->
4141
<PropertyGroup>
42-
<FCSCommitHash>d508186f510681d1261291474e3f9f25485999a8</FCSCommitHash>
42+
<FCSCommitHash>97a5b6584b54707e3e8541fe758e1aa22132a8fe</FCSCommitHash>
4343
<StreamJsonRpcVersion>2.8.28</StreamJsonRpcVersion>
4444
<FSharpCoreVersion>6.0.1</FSharpCoreVersion>
4545
</PropertyGroup>

src/Fantomas.Core.Tests/SynConstTests.fs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -846,3 +846,48 @@ let ``block comment between ^ and exponent in SynMeasure.Power is lost, 2936`` (
846846
"""
847847
234<m^ (* foo *) 2>
848848
"""
849+
850+
[<Test>]
851+
let ``block comment in Rational between lparen and numerator is moved before lparen, 2930`` () =
852+
formatSourceString
853+
false
854+
"""
855+
234<kg^((* foo *)2/3)>
856+
"""
857+
config
858+
|> prepend newline
859+
|> should
860+
equal
861+
"""
862+
234<kg^( (* foo *) 2/3)>
863+
"""
864+
865+
[<Test>]
866+
let ``block comment in Rational between / and denominator is moved before /, 2932`` () =
867+
formatSourceString
868+
false
869+
"""
870+
234<kg^(2/(* foo *)3)>
871+
"""
872+
config
873+
|> prepend newline
874+
|> should
875+
equal
876+
"""
877+
234<kg^(2/ (* foo *) 3)>
878+
"""
879+
880+
[<Test>]
881+
let ``block comment in Rational between denominator and rparen is moved behind rparen, 2933`` () =
882+
formatSourceString
883+
false
884+
"""
885+
234<kg^(2/3(* foo *))>
886+
"""
887+
config
888+
|> prepend newline
889+
|> should
890+
equal
891+
"""
892+
234<kg^(2/3 (* foo *) )>
893+
"""

src/Fantomas.Core/ASTTransformer.fs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2024,16 +2024,39 @@ let mkSynRationalConst (creationAide: CreationAide) rc =
20242024
| SynRationalConst.Integer(i, range) ->
20252025
stn (creationAide.TextFromSource (fun () -> string i) range) range
20262026
|> RationalConstNode.Integer
2027-
| SynRationalConst.Rational(numerator, numeratorRange, denominator, denominatorRange, range) ->
2027+
2028+
| SynRationalConst.Paren(SynRationalConst.Rational(numerator,
2029+
numeratorRange,
2030+
divRange,
2031+
denominator,
2032+
denominatorRange,
2033+
_),
2034+
range) ->
2035+
let openingParen =
2036+
let r =
2037+
withEnd (Position.mkPos range.Start.Line (range.StartRange.StartColumn + 1)) range.StartRange
2038+
2039+
stn "(" r
2040+
20282041
let n =
20292042
stn (creationAide.TextFromSource (fun () -> string numerator) numeratorRange) numeratorRange
20302043

2044+
let div = stn "/" divRange
2045+
20312046
let d =
20322047
stn (creationAide.TextFromSource (fun () -> string denominator) denominatorRange) denominatorRange
20332048

2034-
RationalConstNode.Rational(RationalNode(n, d, range))
2049+
let closingParen =
2050+
let r =
2051+
withStart (Position.mkPos range.End.Line (range.End.Column - 1)) range.EndRange
2052+
2053+
stn ")" r
2054+
2055+
RationalConstNode.Rational(RationalNode(openingParen, n, div, d, closingParen, range))
2056+
| SynRationalConst.Paren(innerRc, _) -> visit innerRc
20352057
| SynRationalConst.Negate(innerRc, range) ->
20362058
RationalConstNode.Negate(NegateRationalNode(stn "-" range.StartRange, visit innerRc, range))
2059+
| SynRationalConst.Rational _ -> failwith "SynRationalConst.Rational not wrapped in SynRationalConst.Paren"
20372060

20382061
visit rc
20392062

src/Fantomas.Core/CodePrinter.fs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,11 +245,11 @@ let genRational (rat: RationalConstNode) =
245245
| RationalConstNode.Integer i -> genSingleTextNode i
246246
| RationalConstNode.Negate negate -> genSingleTextNode negate.Minus +> genRational negate.Rational
247247
| RationalConstNode.Rational rationalNode ->
248-
genSingleTextNode (SingleTextNode("(", Fantomas.FCS.Text.Range.Zero))
248+
genSingleTextNode rationalNode.OpeningParen
249249
+> genSingleTextNode rationalNode.Numerator
250-
+> genSingleTextNode (SingleTextNode("/", Fantomas.FCS.Text.Range.Zero))
250+
+> genSingleTextNode rationalNode.DivOp
251251
+> genSingleTextNode rationalNode.Denominator
252-
+> genSingleTextNode (SingleTextNode(")", Fantomas.FCS.Text.Range.Zero))
252+
+> genSingleTextNode rationalNode.ClosingParen
253253
|> genNode rationalNode
254254

255255
let genAttributesCore (ats: AttributeNode list) =

src/Fantomas.Core/SyntaxOak.fs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2834,13 +2834,29 @@ type MeasureParenNode(openingParen: SingleTextNode, measure: Measure, closingPar
28342834
member val Measure = measure
28352835
member val ClosingParen = closingParen
28362836

2837-
type RationalNode(numerator: SingleTextNode, denominator: SingleTextNode, range: range) =
2837+
type RationalNode
2838+
(
2839+
openingParen: SingleTextNode,
2840+
numerator: SingleTextNode,
2841+
divOp: SingleTextNode,
2842+
denominator: SingleTextNode,
2843+
closingParen: SingleTextNode,
2844+
range: range
2845+
) =
28382846
inherit NodeBase(range)
28392847

2840-
override val Children: Node array = [| yield numerator; yield denominator |]
2848+
override val Children: Node array =
2849+
[| yield openingParen
2850+
yield numerator
2851+
yield divOp
2852+
yield denominator
2853+
yield closingParen |]
28412854

2855+
member val OpeningParen = openingParen
28422856
member val Numerator = numerator
2857+
member val DivOp = divOp
28432858
member val Denominator = denominator
2859+
member val ClosingParen = closingParen
28442860

28452861
type NegateRationalNode(minus: SingleTextNode, rationalConst: RationalConstNode, range: range) =
28462862
inherit NodeBase(range)

0 commit comments

Comments
 (0)