Skip to content
New issue

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

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

Already on GitHub? # to your account

AST differs on Haddock comment on infix constructor #758

Closed
amesgen opened this issue Aug 11, 2021 · 2 comments · Fixed by #1118
Closed

AST differs on Haddock comment on infix constructor #758

amesgen opened this issue Aug 11, 2021 · 2 comments · Fixed by #1118
Labels
bug Something isn't working comments Issues related to comment placement

Comments

@amesgen
Copy link
Member

amesgen commented Aug 11, 2021

Describe the bug
This snippet can't be formatted without --unsafe (minimized from Agda):

data A = A :# A -- ^ foo

With --unsafe, it is formatted to

data A
  = -- | foo
    A :# A

In the first case, the Haddock comment is attached to the constructor :#, but in the second case, it is attached to the first argument of :#.

Expected behavior
It could be formatted like this to preserve the AST:

data A
  = A
      -- | foo
      :# A

But this is not really nice from a sylistic perspective (we should not have to break apart an existing single line constructor variant).

Environment
Ormolu 0.2.0.0

Additional context
This changed in GHC 9.0; previously, both snippets had the same AST.

@amesgen amesgen added bug Something isn't working comments Issues related to comment placement labels Aug 11, 2021
@brandonchinn178
Copy link
Collaborator

I opened a GHC ticket for this: https://gitlab.haskell.org/ghc/ghc/-/issues/24221

But aside from that issue, it seems like Ormolu doesn't format a fully documented infix constructor correctly anyway. Here's an example:

data Foo
  = Int -- ^ Docs for left arg
    :*: -- ^ Docs for constructor
    Int -- ^ Docs for right arg

This fails to output valid Haskell:

<input>
@@ -1,4 +1,8 @@
  data Foo
-   = Int -- ^ Docs for left arg
-     :*: -- ^ Docs for constructor
-     Int -- ^ Docs for right arg
+   = -- | Docs for constructor
+
+     -- | Docs for left arg
+     Int
+       :*: -- | Docs for right arg
+       Int
+

  AST of input and AST of formatted code differ.
    at <input>:2:5-7
    at <input>:2:9-30
  Please, consider reporting the bug.
  To format anyway, use --unsafe.

@brandonchinn178
Copy link
Collaborator

FYI GHC 9.10 fixed the issue originally documented. But I'll fix the issue I brought up in the thread

netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Jan 31, 2025
## Fourmolu 0.17.0.0

* Add new `import-grouping` option to group imports with grouping rules specified in configuration ([#403](fourmolu/fourmolu#403))

* Add new `sort-constraints` option to sort constraints alphabetically ([#433](fourmolu/fourmolu#433))

* Add new `sort-derived-classes` option to sort classes in deriving clauses ([#434](fourmolu/fourmolu#434))

* Add new `sort-derived-clauses` option to sort classes deriving clauses ([#434](fourmolu/fourmolu#434))

* Add new `trailing-section-operators` option to disable trailing "section" operators (those that are `infixr 0`, such as `$`) ([#444](fourmolu/fourmolu#444))

* Fix issue where `single-constraint-parens: never` would drop parentheses around implicit parameters ([#446](fourmolu/fourmolu#446))

* Fix indentation for parenthesized expressions that start off the indentation column ([#428](fourmolu/fourmolu#428))

* Allow multiline comments in indented contexts ([#65](fourmolu/fourmolu#65))


## Fourmolu 0.16.2.0

### Upstream changes:

#### Ormolu 0.7.7.0

* Use single-line layout for parens around single-line content. [Issue
  1120](tweag/ormolu#1120).

* Allow function arguments to be on the same line even if the full type
  (with constraints and foralls) are on multiple lines. [PR
  1125](tweag/ormolu#1125).

## Fourmolu 0.16.1.0

### Upstream changes:

#### Ormolu 0.7.6.0

* Fix Haddock comments on infix constructors
  [Issue 758](tweag/ormolu#758).

* Don't require a trailing newline in `.ormolu` files. [Issue
  1122](tweag/ormolu#1122).

* Remove unnecessary indentation from list comprehensions. [Issue
  966](tweag/ormolu#966).

## Fourmolu 0.16.0.0

* Allow specifying path to configuration file with `--config` ([#396](fourmolu/fourmolu#396))

### Upstream changes:

#### Ormolu 0.7.5.0

* Switched to `ghc-lib-parser-9.10`, with the following new syntactic features/behaviors:
  * GHC proposal [#575](https://github.com/ghc-proposals/ghc-proposals/blob/10290a668608d608c3f6c6010be265cf7a02e1fc/proposals/0575-deprecated-instances.rst): deprecated instances.
  * GHC proposal [#281](https://github.com/ghc-proposals/ghc-proposals/blob/10290a668608d608c3f6c6010be265cf7a02e1fc/proposals/0281-visible-forall.rst): visible forall in types of terms.
    Enabled by `RequiredTypeArguments` (enabled by default).
  * `LinearTypes`: `let` and `where` bindings can now be linear, in particular have multiplicity annotations.
  * Using `forall` as an identifier is now a parse error.
  * GHC proposal [#65](https://github.com/ghc-proposals/ghc-proposals/blob/10290a668608d608c3f6c6010be265cf7a02e1fc/proposals/0065-type-infix.rst): namespacing fixity declarations for type names and WARNING/DEPRECATED pragmas.
  * `TypeAbstractions` now supports `@`-binders in lambdas and function equations.
  * Support for the `GHC2024` language.

* Updated to `Cabal-syntax-3.12`.
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Jan 31, 2025
## Ormolu 0.7.7.0

* Use single-line layout for parens around single-line content. [Issue
  1120](tweag/ormolu#1120).

* Allow function arguments to be on the same line even if the full type
  (with constraints and foralls) are on multiple lines. [PR
  1125](tweag/ormolu#1125).

## Ormolu 0.7.6.0

* Fix Haddock comments on infix constructors. [Issue
  758](tweag/ormolu#758).

* Don't require a trailing newline in `.ormolu` files. [Issue
  1122](tweag/ormolu#1122).

* Remove unnecessary indentation from list comprehensions. [Issue
  966](tweag/ormolu#966).

## Ormolu 0.7.5.0

* Switched to `ghc-lib-parser-9.10`, with the following new syntactic features/behaviors:
  * GHC proposal [#575](https://github.com/ghc-proposals/ghc-proposals/blob/10290a668608d608c3f6c6010be265cf7a02e1fc/proposals/0575-deprecated-instances.rst): deprecated instances.
  * GHC proposal [#281](https://github.com/ghc-proposals/ghc-proposals/blob/10290a668608d608c3f6c6010be265cf7a02e1fc/proposals/0281-visible-forall.rst): visible forall in types of terms.
    Enabled by `RequiredTypeArguments` (enabled by default).
  * `LinearTypes`: `let` and `where` bindings can now be linear, in particular have multiplicity annotations.
  * Using `forall` as an identifier is now a parse error.
  * GHC proposal [#65](https://github.com/ghc-proposals/ghc-proposals/blob/10290a668608d608c3f6c6010be265cf7a02e1fc/proposals/0065-type-infix.rst): namespacing fixity declarations for type names and WARNING/DEPRECATED pragmas.
  * `TypeAbstractions` now supports `@`-binders in lambdas and function equations.
  * Support for the `GHC2024` language.

* Updated to `Cabal-syntax-3.12`.
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
bug Something isn't working comments Issues related to comment placement
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants