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

Invalid multiline function type #3043

Open
1 of 4 tasks
axelo opened this issue Feb 1, 2024 · 1 comment
Open
1 of 4 tasks

Invalid multiline function type #3043

axelo opened this issue Feb 1, 2024 · 1 comment

Comments

@axelo
Copy link

axelo commented Feb 1, 2024

Issue created from fantomas-online

Code

type MyCustomTypeWithAPrettyLongDescribingName = MyCustomConstructor1

let private myFunction
    : string
          -> (MyCustomTypeWithAPrettyLongDescribingName -> MyCustomTypeWithAPrettyLongDescribingName -> MyCustomTypeWithAPrettyLongDescribingName)
          -> unit =
    fun a fn -> ()

Result

type MyCustomTypeWithAPrettyLongDescribingName = MyCustomConstructor1

let private myFunction
    : string
          -> (MyCustomTypeWithAPrettyLongDescribingName
              -> MyCustomTypeWithAPrettyLongDescribingName
              -> MyCustomTypeWithAPrettyLongDescribingName)
          -> unit =
    fun a fn -> ()

Gives compiler error

    (5,56) (6, 14) error 10 parse

    Incomplete structured construct at or before this point in binding. Expected ',' or other token.

Problem description

While upgrading from fantomas 4.7 to 6.2 we encountered this formatting issue. We worked around this by extracting the fn type to its own type (arguable making the code more readable :)).

type MyCustomTypeWithAPrettyLongDescribingName = MyCustomConstructor1

type Fn =
    MyCustomTypeWithAPrettyLongDescribingName
        -> MyCustomTypeWithAPrettyLongDescribingName
        -> MyCustomTypeWithAPrettyLongDescribingName

let private myFunction: string -> Fn -> unit = fun a fn -> ()

but the compiler error was unexpected.

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 1/1/1990

Default Fantomas configuration

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.

@nojaf
Copy link
Contributor

nojaf commented Feb 1, 2024

Hello, thanks for reporting this issue.
It seems like some additional indentation is necessary for the function type wrapped in parenthesis.
Are you interested in sending a PR for this?

@nojaf nojaf changed the title Invalid F# code after formatting Invalid multiline function type Sep 14, 2024
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