jet / falanx

Generates F# code from protobuf schema for binary and json format

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Fantomas 2.9.1 breaks code generation

vchekan opened this issue · comments

Describe the bug
cc @7sharp9 I am quite sure Fantomas is the culprit, but would like a confirmation from you to make sure there is no stalled package caching issue on my end.

Fantomas has no version constraint and has been locked in my branch to 2.9.1 instead of 2.9 as in master branch. It seems, such change breaks binary code generation. All alignments are off.

To Reproduce
Update paket.dependencies to nuget Fantomas == 2.9.1, do paket update and make sure that paked.lock has been updated fantomas.
Regenerate simplest schema with both json and binary serializers:

syntax = "proto3";

message ItemLevelOrderHistory {
  string client_id = 1;
  string retail_sku_id = 2;
  double category_id = 3;
  string brand = 4;
  string product = 5;
  float order_tss = 6;
}

Observe misaligned and non-compilable fs code (see at the end of the file):

namespace rec amnesiac

open System
open System.Collections.Generic
open Froto.Serialization
open Falanx.Proto.Codec.Binary
open Falanx.Proto.Codec.Binary.Primitives
open Newtonsoft.Json.Linq
open Fleece.Newtonsoft

[<CLIMutable>]
type ItemLevelOrderHistory =
    { mutable clientId : string option
      mutable retailSkuId : string option
      mutable categoryId : float option
      mutable brand : string option
      mutable product : string option
      mutable orderTss : float32 option }

    static member JsonObjCodec =
        fun clientId retailSkuId categoryId brand product orderTss ->
            { clientId = clientId
              retailSkuId = retailSkuId
              categoryId = categoryId
              brand = brand
              product = product
              orderTss = orderTss } : ItemLevelOrderHistory
        |> fun f ->
            Fleece.Newtonsoft.withFields<Option<String> -> Option<String> -> Option<Double> -> Option<String> -> Option<String> -> Option<Single> -> ItemLevelOrderHistory, IReadOnlyDictionary<String, JToken>, String, ItemLevelOrderHistory, String, JToken>
                (f)
        |> fun codec ->
            let decode =
                let _bind_f51abf1077e6456fb4a02f1268668e44, _ = codec in _bind_f51abf1077e6456fb4a02f1268668e44

            let encode =
                let _, _bind_f2bf7da83028415d8f61ab20ed413d52 = codec in _bind_f2bf7da83028415d8f61ab20ed413d52

            Fleece.Newtonsoft.jfieldOpt<ItemLevelOrderHistory, String, Option<String> -> Option<Double> -> Option<String> -> Option<String> -> Option<Single> -> ItemLevelOrderHistory>
                ("clientId") (fun x -> x.clientId) (decode, encode)
        |> fun codec ->
            let decode =
                let _bind_64c47fa0947d41c69a029cf384b7735d, _ = codec in _bind_64c47fa0947d41c69a029cf384b7735d

            let encode =
                let _, _bind_2e85977edcc6489d865d26ec19597bf5 = codec in _bind_2e85977edcc6489d865d26ec19597bf5

            Fleece.Newtonsoft.jfieldOpt<ItemLevelOrderHistory, String, Option<Double> -> Option<String> -> Option<String> -> Option<Single> -> ItemLevelOrderHistory>
                ("retailSkuId") (fun x -> x.retailSkuId) (decode, encode)
        |> fun codec ->
            let decode =
                let _bind_6894c9159daf4018a31a90c9833a8405, _ = codec in _bind_6894c9159daf4018a31a90c9833a8405

            let encode =
                let _, _bind_238da84697cd48cf86466368de0f4600 = codec in _bind_238da84697cd48cf86466368de0f4600

            Fleece.Newtonsoft.jfieldOpt<ItemLevelOrderHistory, Double, Option<String> -> Option<String> -> Option<Single> -> ItemLevelOrderHistory>
                ("categoryId") (fun x -> x.categoryId) (decode, encode)
        |> fun codec ->
            let decode =
                let _bind_74ddc87304bc4e8489d78066f700a51f, _ = codec in _bind_74ddc87304bc4e8489d78066f700a51f

            let encode =
                let _, _bind_ee3a6a24482d429cb3bf441b6ddc632a = codec in _bind_ee3a6a24482d429cb3bf441b6ddc632a

            Fleece.Newtonsoft.jfieldOpt<ItemLevelOrderHistory, String, Option<String> -> Option<Single> -> ItemLevelOrderHistory>
                ("brand") (fun x -> x.brand) (decode, encode)
        |> fun codec ->
            let decode =
                let _bind_77e6ee5133564ebb8e46ba8b43910660, _ = codec in _bind_77e6ee5133564ebb8e46ba8b43910660

            let encode =
                let _, _bind_dea5f0fa500a4123b7af3af31cf39176 = codec in _bind_dea5f0fa500a4123b7af3af31cf39176

            Fleece.Newtonsoft.jfieldOpt<ItemLevelOrderHistory, String, Option<Single> -> ItemLevelOrderHistory>
                ("product") (fun x -> x.product) (decode, encode)
        |> fun codec ->
            let decode =
                let _bind_4f0417a92ab14c8ca420979d5204e65a, _ = codec in _bind_4f0417a92ab14c8ca420979d5204e65a

            let encode =
                let _, _bind_b5af5897c4004ea780dcea10e1cf8438 = codec in _bind_b5af5897c4004ea780dcea10e1cf8438

            Fleece.Newtonsoft.jfieldOpt<ItemLevelOrderHistory, Single, ItemLevelOrderHistory> ("orderTss")
                (fun x -> x.orderTss) (decode, encode)

    static member Serialize(m : ItemLevelOrderHistory, buffer : ZeroCopyBuffer) =
        Primitives.writeOption<String> (Primitives.writeString) (1) (buffer) (m.clientId)
        Primitives.writeOption<String> (Primitives.writeString) (2) (buffer) (m.retailSkuId)
        Primitives.writeOption<Double> (Primitives.writeDouble) (3) (buffer) (m.categoryId)
        Primitives.writeOption<String> (Primitives.writeString) (4) (buffer) (m.brand)
        Primitives.writeOption<String> (Primitives.writeString) (5) (buffer) (m.product)
        Primitives.writeOption<Single> (Primitives.writeFloat) (6) (buffer) (m.orderTss)

    static member Deserialize(buffer : ZeroCopyBuffer) = Primitives.deserialize<ItemLevelOrderHistory> (buffer)
    interface IMessage with
        member x.Serialize(buffer : ZeroCopyBuffer) = ItemLevelOrderHistory.Serialize(x, buffer)

        member x.ReadFrom(buffer : ZeroCopyBuffer) =
            let enumerator : IEnumerator<Froto.Serialization.Encoding.RawField> =
                ZeroCopyBuffer.allFields(buffer).GetEnumerator() in while enumerator.MoveNext() do
                                                                        let current : Froto.Serialization.Encoding.RawField =
                                                                            enumerator.Current in if current.FieldNum = 6 then
                                                                                                      x.orderTss <- (Some
                                                                                                                         (Primitives.readFloat
                                                                                                                              current) : Option<Single>)
                                                                                                  else if current.FieldNum = 5 then
                                                                                                      x.product <- (Some
                                                                                                                        (Primitives.readString
                                                                                                                             current) : Option<String>)
                                                                                                  else if current.FieldNum = 4 then
                                                                                                      x.brand <- (Some
                                                                                                                      (Primitives.readString
                                                                                                                           current) : Option<String>)
                                                                                                  else if current.FieldNum = 3 then
                                                                                                      x.categoryId <- (Some
                                                                                                                           (Primitives.readDouble
                                                                                                                                current) : Option<Double>)
                                                                                                  else if current.FieldNum = 2 then
                                                                                                      x.retailSkuId <- (Some
                                                                                                                            (Primitives.readString
                                                                                                                                 current) : Option<String>)
                                                                                                  else if current.FieldNum = 1 then
                                                                                                      x.clientId <- (Some
                                                                                                                         (Primitives.readString
                                                                                                                              current) : Option<String>)
                                                                                                  else ()
                                                                    enumerator.Dispose()

        member x.SerializedLength() = Primitives.serializedLength<ItemLevelOrderHistory> (x)

Looks dormant in Fantomas, Im guessing this will only be fixed if we do it ourselves.

I think I saw this may be fixed now with latest fantomas, just needs testing.

2.9.2 fixed this, closing