Giter Club home page Giter Club logo

Comments (8)

dungpa avatar dungpa commented on July 19, 2024

It's intentional.

Any expression containing |> is treated as a multiline expression and is broken around |> for aestheticity.

The last two examples consist of one-liner expressions.

from fantomas.

7sharp9 avatar 7sharp9 commented on July 19, 2024

I would only drop a |> down to the next line if the line was too long, or maybe if there was more than two pipes. Does a reverse pipe get formatted the same?

from fantomas.

dungpa avatar dungpa commented on July 19, 2024

@7sharp9 Reverse pipe is treated as one-liner.

Since <| has relatively low precedence, you will not see their consecutive occurrences often.

from fantomas.

 avatar commented on July 19, 2024

It does look like the line breaking is a bit excessive for some quite common uses of |>. For example:

let ``update length 3``() =
    (((len3 |> update 0 "cc"|> lookup 0) = "cc") && ((len3 |> update 1 "bb"|> lookup 1) = "bb") 
    && ((len3 |> update 2 "aa"|> lookup 2) = "aa")) |> should equal true

becomes

let ``update length 3``() = 
    (((len3
       |> update 0 "cc"
       |> lookup 0) = "cc") && ((len3
                                 |> update 1 "bb"
                                 |> lookup 1) = "bb") && ((len3
                                                           |> update 2 "aa"
                                                           |> lookup 2) = "aa"))
    |> should equal true

and

let len7 = empty |> cons "a" |> cons "b" |> cons "c" |> cons "d" |> cons "e" |> cons "f" |> cons "g"

becomes

let len7 = 
    empty
    |> cons "a"
    |> cons "b"
    |> cons "c"
    |> cons "d"
    |> cons "e"
    |> cons "f"
    |> cons "g"

from fantomas.

dungpa avatar dungpa commented on July 19, 2024

These line breakings are indeed excessive.

It would be nice to add a few common patterns to print |> as inline expressions. What are your suggestions?

from fantomas.

s-trooper avatar s-trooper commented on July 19, 2024

Hello, i have more general issue but with same Title.

Hi,
I would like to have an option to disable line breaking and line removing on code formatting.
In my case I need empty lines for readability purposes and disabling auto formating would
give me more freedom to control the codeset, i.e to control my record, pipe and list style
in my own way.

Thank you in advance!

from fantomas.

nojaf avatar nojaf commented on July 19, 2024

I need empty lines for readability purposes

The situation has improved in #434, please create a new issue with additional suggestions if necessary.

from fantomas.

OlegAlexander avatar OlegAlexander commented on July 19, 2024

Hello. I also feel that Fantomas adds too many line breaks by default. Thankfully, I'm able to control this with the Max... settings. However, I can't find a way to control the following examples:

Code:

open System open System.IO

Result:

open System
open System.IO

Code:

type JpgDir = string type TifDir = string

Result:

type JpgDir = string
type TifDir = string

Code:

module A = Array;; module L = List;;

Result:

module A = Array
module L = List

Code:

let trace x = printfn "%A" x; x

Result:

let trace x =
    printfn "%A" x
    x

Code:

let tryParseInt s = try Some (int s) with | :? FormatException -> None

Result:

let tryParseInt s =
    try
        Some(int s)
    with :? FormatException ->
        None

Code:

let boolToInt x = match x with | true -> 1 | false -> 0

let boolToInt' = function | true -> 1 | false -> 0

Result:

let boolToInt x =
    match x with
    | true -> 1
    | false -> 0

let boolToInt' =
    function
    | true -> 1
    | false -> 0

Of these examples--most of which I realize are not idiomatic F#!--the last one with the pattern match is my highest priority. If you'd like, I'll be happy to open a new issue just for the pattern match example. Thank you.

from fantomas.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.