Skip to content

Commit

Permalink
- update FCS to 'Add some more ranges to SynMeasure for tooling suppo…
Browse files Browse the repository at this point in the history
…rt', commit 6ed38fcb360a0015828973b1f32cd2ea6b58c6ad

- fix 2934, 2935, 2936 by using newly provided ranges from the AST
- create minus node of NegateRationalNode in ASTTransformer
  • Loading branch information
dawedawe committed Jul 27, 2023
1 parent 548cbff commit 0ce91b7
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 13 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,15 @@

## [Unreleased]

### Changed
* Update FCS to 'Add some more ranges to SynMeasure for tooling support', commit 6ed38fcb360a0015828973b1f32cd2ea6b58c6ad

### Fixed
* Block comment in Rational between numerator and `/` is lost. [#2931](https://github.com/fsprojects/fantomas/issues/2931)
* Block comment between `^-` and exponent in SynMeasure.Power is lost. [#2937](https://github.com/fsprojects/fantomas/issues/2937)
* Block comment between measure1 and / is moved between / and measure2 in SynMeasure.Divide. [#2934](https://github.com/fsprojects/fantomas/issues/2934)
* Block comment between measure1 and * is moved between * and measure2 in SynMeasure.Product. [#2935](https://github.com/fsprojects/fantomas/issues/2935)
* Block comment between ^ and exponent in SynMeasure.Power is lost. [#2936](https://github.com/fsprojects/fantomas/issues/2936)

## 6.1.2 - 2023-07-23

Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Some common use cases include:

<!-- Versions -->
<PropertyGroup>
<FCSCommitHash>7b5e12842d673b7daa467e0091378bf4acc95e4f</FCSCommitHash>
<FCSCommitHash>6ed38fcb360a0015828973b1f32cd2ea6b58c6ad</FCSCommitHash>
<StreamJsonRpcVersion>2.8.28</StreamJsonRpcVersion>
<FSharpCoreVersion>6.0.1</FSharpCoreVersion>
</PropertyGroup>
Expand Down
45 changes: 45 additions & 0 deletions src/Fantomas.Core.Tests/SynConstTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -801,3 +801,48 @@ let ``block comment between ^- and exponent in SynMeasure.Power is lost, 2937``
"""
234<m^- (* bar *) 2>
"""

[<Test>]
let ``block comment between measure1 and / is moved between / and measure2 in SynMeasure.Divide, 2934`` () =
formatSourceString
false
"""
234<m (* foo *) / s>
"""
config
|> prepend newline
|> should
equal
"""
234<m (* foo *) / s>
"""

[<Test>]
let ``block comment between measure1 and * is moved between * and measure2 in SynMeasure.Product, 2935`` () =
formatSourceString
false
"""
234<m(* foo *)*s>
"""
config
|> prepend newline
|> should
equal
"""
234<m (* foo *) * s>
"""

[<Test>]
let ``block comment between ^ and exponent in SynMeasure.Power is lost, 2936`` () =
formatSourceString
false
"""
234<m^(* foo *)2>
"""
config
|> prepend newline
|> should
equal
"""
234<m^ (* foo *) 2>
"""
15 changes: 8 additions & 7 deletions src/Fantomas.Core/ASTTransformer.fs
Original file line number Diff line number Diff line change
Expand Up @@ -171,16 +171,16 @@ let mkMeasure (creationAide: CreationAide) (measure: SynMeasure) : Measure =
| SynMeasure.Var(typar, _) -> mkSynTypar typar |> Measure.Single
| SynMeasure.Anon m -> stn "_" m |> Measure.Single
| SynMeasure.One m -> stn "1" m |> Measure.Single
| SynMeasure.Product(m1, m2, m) ->
MeasureOperatorNode(mkMeasure creationAide m1, stn "*" Range.Zero, mkMeasure creationAide m2, m)
| SynMeasure.Product(m1, mAsterisk, m2, m) ->
MeasureOperatorNode(mkMeasure creationAide m1, stn "*" mAsterisk, mkMeasure creationAide m2, m)
|> Measure.Operator
| SynMeasure.Divide(m1, m2, m) ->
| SynMeasure.Divide(m1, mSlash, m2, m) ->
let lhs = m1 |> Option.map (mkMeasure creationAide)

MeasureDivideNode(lhs, stn "/" Range.Zero, mkMeasure creationAide m2, m)
MeasureDivideNode(lhs, stn "/" mSlash, mkMeasure creationAide m2, m)
|> Measure.Divide
| SynMeasure.Power(ms, rat, m) ->
MeasurePowerNode(mkMeasure creationAide ms, mkSynRationalConst creationAide rat, m)
| SynMeasure.Power(ms, mCaret, rat, m) ->
MeasurePowerNode(mkMeasure creationAide ms, stn "^" mCaret, mkSynRationalConst creationAide rat, m)
|> Measure.Power
| SynMeasure.Named(lid, _) -> mkLongIdent lid |> Measure.Multiple
| SynMeasure.Paren(measure, StartEndRange 1 (mOpen, m, mClose)) ->
Expand Down Expand Up @@ -2018,7 +2018,8 @@ let mkSynRationalConst (creationAide: CreationAide) rc =
stn (creationAide.TextFromSource (fun () -> string denominator) denominatorRange) denominatorRange

RationalConstNode.Rational(RationalNode(n, d, range))
| SynRationalConst.Negate(innerRc, range) -> RationalConstNode.Negate(NegateRationalNode(visit innerRc, range))
| SynRationalConst.Negate(innerRc, range) ->
RationalConstNode.Negate(NegateRationalNode(stn "-" range.StartRange, visit innerRc, range))

visit rc

Expand Down
4 changes: 3 additions & 1 deletion src/Fantomas.Core/CodePrinter.fs
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,9 @@ let genMeasure (measure: Measure) =
+> sepSpace
+> genMeasure n.RightHandSide
|> genNode n
| Measure.Power n -> genMeasure n.Measure +> !- "^" +> genRational n.Exponent |> genNode n
| Measure.Power n ->
genMeasure n.Measure +> genSingleTextNode n.Caret +> genRational n.Exponent
|> genNode n
| Measure.Seq n -> col sepSpace n.Measures genMeasure |> genNode n
| Measure.Multiple n -> genIdentListNode n
| Measure.Paren n ->
Expand Down
13 changes: 9 additions & 4 deletions src/Fantomas.Core/SyntaxOak.fs
Original file line number Diff line number Diff line change
Expand Up @@ -2776,10 +2776,16 @@ type MeasureDivideNode(lhs: Measure option, operator: SingleTextNode, rhs: Measu
member val Operator = operator
member val RightHandSide = rhs

type MeasurePowerNode(measure: Measure, exponent: RationalConstNode, range) =
type MeasurePowerNode(measure: Measure, caret: SingleTextNode, exponent: RationalConstNode, range) =
inherit NodeBase(range)
override val Children: Node array = [| yield Measure.Node measure; yield RationalConstNode.Node exponent |]

override val Children: Node array =
[| yield Measure.Node measure
yield caret
yield RationalConstNode.Node exponent |]

member val Measure = measure
member val Caret = caret
member val Exponent = exponent

type MeasureSequenceNode(measures: Measure list, range) =
Expand All @@ -2804,9 +2810,8 @@ type RationalNode(numerator: SingleTextNode, denominator: SingleTextNode, range:
member val Numerator = numerator
member val Denominator = denominator

type NegateRationalNode(rationalConst: RationalConstNode, range: range) =
type NegateRationalNode(minus: SingleTextNode, rationalConst: RationalConstNode, range: range) =
inherit NodeBase(range)
let minus = SingleTextNode("-", range.StartRange)
override val Children: Node array = [| yield minus; yield RationalConstNode.Node rationalConst |]

member val Minus = minus
Expand Down

0 comments on commit 0ce91b7

Please sign in to comment.