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

Stroustrup record type definition with access modifiers and members lead to invalid F# code #2511

Closed
1 of 3 tasks
sergey-tihon opened this issue Sep 17, 2022 · 2 comments · Fixed by #2516
Closed
1 of 3 tasks

Comments

@sergey-tihon
Copy link
Member

sergey-tihon commented Sep 17, 2022

Issue created from fantomas-online

Code

type NonEmptyList<'T> =
    private
        { List: 'T list }

    member this.Head = this.List.Head
    member this.Tail = this.List.Tail
    member this.Length = this.List.Length

Result

type NonEmptyList<'T> =
    private {
        List: 'T list
    }

member this.Head = this.List.Head
member this.Tail = this.List.Tail
member this.Length = this.List.Length

Problem description

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

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.

Options

Fantomas master branch at 2022-09-17T05:39:07Z - c1a99d4

    { config with
                MultilineBlockBracketsOnSameColumn = true
                ExperimentalStroustrupStyle = true }

Did you know that you can ignore files when formatting from fantomas-tool or the FAKE targets by using a .fantomasignore file?

@nojaf
Copy link
Contributor

nojaf commented Sep 17, 2022

Hello, I believe this problem was introduced after #2484.
You would need to tighten the condition that there are no members.

Changing ifStroustrupElse (opt (sepSpace) ao' genAccess) (opt (indent +> sepNln) ao' genAccess) to something like:

(fun ctx -> 
    if ctx.Config.ExperimentalStrouStrup && List.isEmpty ms then
        (opt (sepSpace) ao' genAccess) ctx
    else
        (opt (indent +> sepNln) ao' genAccess) ctx)

I haven't tested this code, but that might do the trick.

Are you interested in submitting a PR?

@sergey-tihon
Copy link
Member Author

sergey-tihon commented Sep 17, 2022

@josh-degraw Thank you for opening PR with the fix for this!

@nojaf nojaf changed the title Sharpx.Collections/NonEmptyList.fs lead to invalid F# code Stroustrup record type definition with access modifiers and members lead to invalid F# code Sep 18, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants