Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fsharp_newline_before_multiline_computation_expression = false may cause parse error if CE is called from an expression #3155

Open
1 of 4 tasks
Shuenhoy opened this issue Mar 3, 2025 · 3 comments

Comments

@Shuenhoy
Copy link

Shuenhoy commented Mar 3, 2025

Issue created from fantomas-online

Code

let a = Builder.build ("a long enough str") {
    let a = 1
    return a
}

Result

let a = Builder.build (
    "a long enough str"
) {
    let a = 1
    return a
}

Problem description

Please describe here the Fantomas problem you encountered.
Check out our Contribution Guidelines.

A more complete code that can compile:

module Test.Program

type Builder() =
    member __.Return x = x

    static member build(str) =
        Builder()

let a =
    Builder.build (
        "a long enough str"
    ) {
        let a = 1
        return a
    }

The result formatted will fail to parse.

Extra information

  • The formatted result breaks my code.
  • The formatted result gives compiler warnings.
  • I or my company would be willing to help fix this.
  • I would like a release if this problem is solved.

Options

Fantomas main branch at 2025-02-28T11:18:04Z - 6108fc4

    { config with
                MaxLineLength = 30
                NewlineBeforeMultilineComputationExpression = false }

Did you know that you can ignore files when formatting by using a .fantomasignore file?
PS: It's unlikely that someone else will solve your specific issue, as it's something that you have a personal stake in.

@Shuenhoy Shuenhoy changed the title fsharp_newline_before_multiline_computation_expression = false may cause parse error if CE is called from a expression fsharp_newline_before_multiline_computation_expression = false may cause parse error if CE is called from an expression Mar 3, 2025
@nojaf
Copy link
Contributor

nojaf commented Mar 3, 2025

Hello, thanks for opening this issue.
What are you expectations here? Would you like valid code but potentially not consistent in style?

@Shuenhoy
Copy link
Author

Shuenhoy commented Mar 3, 2025

I think valid code is better than style consistency. In fact, I am not aware of an easy way to conform the style here.

// fallback to `fsharp_newline_before_multiline_computation_expression = true`. It looks OK and at least compiles.
let a = 
    Builder.build ( 
            "a long enough str" 
    ) {
        let a = 1
        return a
    }

// a possible form without newline before CE, but it looks also not consistent in style and seems worse than the first form.
let a = Builder.build ( 
                "a long enough str" 
        ) {
            let a = 1
            return a
        }

@nojaf
Copy link
Contributor

nojaf commented Mar 3, 2025

Perhaps we should change this rule a bit and only never leave the computation expression on the same line if it has a large identifier expression.
Thoughts @josh-degraw @dawedawe?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants