Add formatting plugin for cabal files which uses cabal-fmt#2047
Add formatting plugin for cabal files which uses cabal-fmt#2047michaelpj merged 4 commits intohaskell:masterfrom
Conversation
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
thanks you much for this nice plugin |
|
I think that you need to run the test suite explicitly in the test GitHub action: haskell-language-server/.github/workflows/test.yml Lines 200 to 206 in c2bd211 |
e5ed4d8 to
8e06b38
Compare
|
I had to remove stack support as cabal-fmt requires Cabal 3.4 but it seems impossible to make stack use Cabal 3.4 due to stack's design philosophy. |
Ailrun
left a comment
There was a problem hiding this comment.
Could you elaborate the stack issue more? I believe stack works well with extra-deps?
|
Great work! I love the idea to have cabal formatting available in HLS! |
You might be right, I'm going to look into it some more. |
|
You now get a bunch of error messages when opening a cabal file since the client requests certain actions for which we have no plugins for cabal files. |
|
@VeryMilkyJoe hi! i am afraid that the pr has to be rebased on master |
|
@VeryMilkyJoe i did a rebase, i hope it is correct, do you have plans to continue working on this? thanks! |
1c38e53 to
721047e
Compare
e25fcf4 to
2ae9f02
Compare
9dbd1bf to
2790cfa
Compare
cde554f to
631a006
Compare
| ++ ["failed with standard error:" <+> pretty stdErrorOut | not (null stdErrorOut)] | ||
| LogInvalidInvocationInfo -> "Invocation of cabal-fmt with range was called but is not supported." | ||
|
|
||
| descriptor :: Recorder (WithPriority Log) -> PluginId -> PluginDescriptor IdeState |
There was a problem hiding this comment.
Should we provide a configuration option to let users specify the path of cabal-fmt?
There was a problem hiding this comment.
Maybe that's overkill, probably cabal-fmt on path is going to be the thing.
There was a problem hiding this comment.
I think that's a good addition!
| provider :: Recorder (WithPriority Log) -> FormattingHandler IdeState | ||
| provider recorder _ (FormatRange _) _ _ _ = do | ||
| logWith recorder Info LogInvalidInvocationInfo | ||
| pure $ Left (ResponseError InvalidRequest "You cannot format a text-range using cabal-fmt." Nothing) |
There was a problem hiding this comment.
Hmm, do we not have a better way to have a formatting provider that only supports whole buffer formatting? I think some of our others have this limitation too 🤔
There was a problem hiding this comment.
I checked all formatter plugins (stylish-haskell, ormolu, fourmolu, brittany, floskell), everyone seems to handle ranges :/
There was a problem hiding this comment.
I think maybe we could do something clever with dynamic registration to say we only support it in certain circumstances... but that seems hard. This seems okay I guess. Worth a comment, though.
There was a problem hiding this comment.
What kind of comment are you thinking here?
| let fmtDiff = makeDiffTextEdit contents (T.pack out) | ||
| pure $ Right fmtDiff | ||
| Nothing -> do | ||
| pure $ Left (ResponseError InvalidRequest "No installation of cabal-fmt could be found. Please install it into your global environment." Nothing) |
|
I'd be happy to merge this as is and do improvements in follow ups, WDYT @fendor ? |
|
2-3 improvements are still missing, @VeryMilkyJoe is very responsive and will incorporate the requested changes until tomorrow. |
|
There's not any hurry, I just thought you both might like to have it in :) |
631a006 to
d6b6d89
Compare
fendor
left a comment
There was a problem hiding this comment.
LGTM, let's get this going :)
For CI, we want to run the tests with a specific cabal-fmt version, installed automatically by cabal. However, locally, we might want to test with a locally installed cabal-fmt version. This flag allows developers to either let cabal install the build-tool-depends or install a fitting version locally.
This allows formatting of cabal files with hls.
Currently waiting for merges on cabal-fmt and stylish haskell.We gave up on this, also it makes maintenance harder as cabal-fmt supports only one Cabal version at a time.Closes #183 and part of #2964.
Builds on top of #2945