Comments (8)
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.
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.
@7sharp9 Reverse pipe is treated as one-liner.
Since <|
has relatively low precedence, you will not see their consecutive occurrences often.
from fantomas.
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.
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.
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.
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.
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)
- Consider documenting why certain config options exist HOT 4
- formatting code samples in markdown files (fsharp blocks) and <code> elements in xml comments? HOT 1
- VS2022: "fsharp_multiline_bracket_style = stroustrup" Not working HOT 5
- Reformatting code with flexible type syntax remove hash symbol
- Newline inconsistency in object expression HOT 7
- Add doc comments in SyntaxNode.fs giving an example of what each node looks like
- Process is reserved keyword
- Unable to format Fable line (cannot determine if Expr Paren Fantomas.Core.SyntaxOak+ExprParenNode is uppercase or lowercase) HOT 2
- Trivia after mutable keyword is missing HOT 1
- Formatting can depend on cursor position HOT 4
- Misplaced comment in "else if" HOT 3
- Fantomas does not support extended interpolated strings HOT 4
- Many Ifdefs seem to cause parse error HOT 1
- Unmatched '{' error when formatting the code HOT 2
- Using `--check` gives error "todo WhileBang" HOT 9
- Breaks shorthand lambda atomicity for lowercase method invocations
- Consider relaxing ASTTransformer treatment of ranges in record fields HOT 1
- Unable to format F# 8 extended interpolated strings with curly braces HOT 3
- Move editor config to library rather than tool HOT 6
- "Incomplete declaration of a static construct" which the F# compiler accepts HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fantomas.