Skip to content

Add configuration options for sorting deriving clauses and types#434

Merged
brandonchinn178 merged 1 commit intofourmolu:mainfrom
michaelpj:mpj/sort-deriving
Nov 4, 2024
Merged

Add configuration options for sorting deriving clauses and types#434
brandonchinn178 merged 1 commit intofourmolu:mainfrom
michaelpj:mpj/sort-deriving

Conversation

@michaelpj
Copy link
Copy Markdown
Contributor

This adds two configuration options for sorting a) types in deriving clauses, and b) deriving clauses themselves.

Fixes tweag/ormolu#968

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Oct 6, 2024

👋 @michaelpj
Thank you for raising your pull request.
Please make sure you have followed our contributing guidelines in DEVELOPER.md. We will review it as soon as possible!

Reviewer: Please verify the following things have been done, if applicable.

  • A file has been added to changelog.d/
  • Docs have been updated in web/site/pages/config/
  • Tests have been added
  • Diff files in compat-tests/ either:
    1. Have NOT been changed, or
    2. Modifies fourmolu.yaml with an appropriate option to keep the same formatting, or
    3. Modifies Haskell files with new formatting

let sortedDeriving = if sortDeriving then sortOn (derivingStrategyKey . fmap unLoc . deriv_clause_strategy . unLoc) dd_derivs else dd_derivs
inci $ sep newline (located' p_hsDerivingClause) sortedDeriving
where
derivingStrategyKey Nothing = ClauseNoStrategy
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I considered just sorting on showOutputable again, but that gives an order that's a bit different to what I've most often seen in the wild, which is what I've replicated here.

Comment thread src/Ormolu/Printer/Meat/Declaration/Data.hs Outdated
Comment thread src/Ormolu/Printer/Meat/Declaration/Data.hs Outdated
Comment thread config/FourmoluConfig/ConfigData.hs
Comment thread web/site/pages/config/sort-deriving-clauses.md
Comment thread web/site/pages/config/sort-derived.md Outdated
@brandonchinn178
Copy link
Copy Markdown
Collaborator

Also some CI failures

@michaelpj
Copy link
Copy Markdown
Contributor Author

CI fixed. I think mostly just up to you to make a call on what you'd like to do wrt defaults etc. Or I'm happy for you to just change it post-merge!

I think I'm not super keen on the "sort unless there are comments" idea, what do you think?

Copy link
Copy Markdown
Collaborator

@brandonchinn178 brandonchinn178 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Update changelogs + finish the last stuff around defaults, and this should be good to go!

Changing the name to sort-derived-types is optional

Comment thread changelog.d/sort-derived.md Outdated
Comment thread web/site/pages/config/sort-derived.md Outdated
Comment thread web/site/pages/config/sort-deriving-clauses.md
Copy link
Copy Markdown
Collaborator

@georgefst georgefst left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately I feel quite strongly that both should be off by default.

Comment thread config/FourmoluConfig/ConfigData.hs
Comment thread web/site/pages/config/sort-deriving-clauses.md
@michaelpj
Copy link
Copy Markdown
Contributor Author

Back to off by default. I added some tests with comments. I was able to get some weird behaviour with sort-deriving-clauses but actually sort-derived-classes mostly seems to do the right thing. I'm not sure of it, and upstream seems wary, so I've left in the cautious wording for now.

@michaelpj
Copy link
Copy Markdown
Contributor Author

I also fixed some more issues in the AST comparison. I can now run this on the whole work codebase without issues.

Copy link
Copy Markdown
Collaborator

@brandonchinn178 brandonchinn178 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me! @georgefst?

Comment thread src/Ormolu/Diff/ParseResult.hs
Comment thread src/Ormolu/Diff/ParseResult.hs Outdated
@georgefst georgefst self-requested a review October 14, 2024 09:22
@brandonchinn178
Copy link
Copy Markdown
Collaborator

@michaelpj Can you fix lints and also rebase? I fixed CI on main

@michaelpj
Copy link
Copy Markdown
Contributor Author

Fixed and rebased.

@michaelpj
Copy link
Copy Markdown
Contributor Author

Not sure what's causing this failure.

@michaelpj
Copy link
Copy Markdown
Contributor Author

Are you both happy with this?

@brandonchinn178
Copy link
Copy Markdown
Collaborator

@michaelpj Yeah, good to go. Sorry, can you try rebasing one more time? That CI failure should be fixed

@michaelpj
Copy link
Copy Markdown
Contributor Author

Rebased on main but it still seems broken?

@brandonchinn178
Copy link
Copy Markdown
Collaborator

Ok sorry, can you try one last time? 🤞

This adds two configuration options for sorting a) types in deriving
clauses, and b) deriving clauses themselves.

Fixes tweag/ormolu#968
@michaelpj
Copy link
Copy Markdown
Contributor Author

That worked!

@brandonchinn178 brandonchinn178 merged commit 7805631 into fourmolu:main Nov 4, 2024
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request 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`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sort identifiers in deriving clauses?

3 participants