From a7d4c534db9dc6e898e8f7461efe16f7afcd6133 Mon Sep 17 00:00:00 2001 From: Brandon Chinn Date: Thu, 17 Aug 2023 09:10:07 -0700 Subject: [PATCH] Use specific versions of fourmolu for each version of GHC --- .../hls-fourmolu-plugin.cabal | 11 ++- .../src/Ide/Plugin/Fourmolu.hs | 10 +-- .../src/Ide/Plugin/Fourmolu/Shim.hs | 75 ------------------- 3 files changed, 12 insertions(+), 84 deletions(-) delete mode 100644 plugins/hls-fourmolu-plugin/src/Ide/Plugin/Fourmolu/Shim.hs diff --git a/plugins/hls-fourmolu-plugin/hls-fourmolu-plugin.cabal b/plugins/hls-fourmolu-plugin/hls-fourmolu-plugin.cabal index c1b4ed1974d..f94aae99362 100644 --- a/plugins/hls-fourmolu-plugin/hls-fourmolu-plugin.cabal +++ b/plugins/hls-fourmolu-plugin/hls-fourmolu-plugin.cabal @@ -26,13 +26,11 @@ library buildable: True exposed-modules: Ide.Plugin.Fourmolu - , Ide.Plugin.Fourmolu.Shim hs-source-dirs: src ghc-options: -Wall build-depends: , base >=4.12 && <5 , filepath - , fourmolu ^>=0.3 || ^>=0.4 || ^>= 0.6 || ^>= 0.7 || ^>= 0.8 || ^>= 0.9 || ^>= 0.10 || ^>= 0.11 || ^>= 0.12 || ^>= 0.13 , ghc , ghc-boot-th , ghcide == 2.1.0.0 @@ -44,6 +42,15 @@ library , text , transformers + if impl(ghc >= 8.10) && impl(ghc < 9.0) + build-depends: fourmolu ^>= 0.9 + elif impl(ghc >= 9.0) && impl(ghc < 9.2) + build-depends: fourmolu ^>= 0.11 + elif impl(ghc >= 9.2) && impl(ghc < 9.8) + build-depends: fourmolu ^>= 0.13 + else + buildable: false + -- fourmolu 0.9.0 fails to build on Windows CI for reasons unknown if impl(ghc >= 9.2) && os(windows) && impl(ghc < 9.4) build-depends: fourmolu > 0.9.0.0 || < 0.9.0.0 diff --git a/plugins/hls-fourmolu-plugin/src/Ide/Plugin/Fourmolu.hs b/plugins/hls-fourmolu-plugin/src/Ide/Plugin/Fourmolu.hs index 3ae5baf1bc5..fda6313bb92 100644 --- a/plugins/hls-fourmolu-plugin/src/Ide/Plugin/Fourmolu.hs +++ b/plugins/hls-fourmolu-plugin/src/Ide/Plugin/Fourmolu.hs @@ -34,7 +34,6 @@ import Development.IDE.GHC.Compat as Compat hiding (Cpp, Warning, import qualified Development.IDE.GHC.Compat.Util as S import GHC.LanguageExtensions.Type (Extension (Cpp)) import Ide.Plugin.Error -import Ide.Plugin.Fourmolu.Shim import Ide.Plugin.Properties import Ide.PluginUtils (makeDiffTextEdit) import Ide.Types @@ -43,6 +42,7 @@ import Language.LSP.Protocol.Message import Language.LSP.Protocol.Types import Language.LSP.Server hiding (defaultConfig) import Ormolu +import Ormolu.Config import System.Exit import System.FilePath import System.Process.Run (cwd, proc) @@ -79,17 +79,13 @@ provider recorder plId ideState typ contents fp fo = ExceptT $ withIndefinitePro logWith recorder Debug $ LogCompiledInVersion VERSION_fourmolu let format fourmoluConfig = ExceptT $ bimap (PluginInternalError . T.pack . show) (InL . makeDiffTextEdit contents) -#if MIN_VERSION_fourmolu(0,11,0) <$> try @OrmoluException (ormolu config fp' contents) -#else - <$> try @OrmoluException (ormolu config fp' (T.unpack contents)) -#endif where printerOpts = cfgFilePrinterOpts fourmoluConfig config = - addFixityOverrides (cfgFileFixities fourmoluConfig) $ defaultConfig { cfgDynOptions = map DynOption fileOpts + , cfgFixityOverrides = cfgFileFixities fourmoluConfig , cfgRegion = region , cfgDebug = False , cfgPrinterOpts = @@ -112,7 +108,7 @@ provider recorder plId ideState typ contents fp fo = ExceptT $ withIndefinitePro } throwError $ PluginInternalError errorMessage where - errorMessage = "Failed to load " <> T.pack f <> ": " <> T.pack (showParseError err) + errorMessage = "Failed to load " <> T.pack f <> ": " <> T.pack (show err) where fp' = fromNormalizedFilePath fp title = "Formatting " <> T.pack (takeFileName fp') diff --git a/plugins/hls-fourmolu-plugin/src/Ide/Plugin/Fourmolu/Shim.hs b/plugins/hls-fourmolu-plugin/src/Ide/Plugin/Fourmolu/Shim.hs deleted file mode 100644 index a97327cd7ed..00000000000 --- a/plugins/hls-fourmolu-plugin/src/Ide/Plugin/Fourmolu/Shim.hs +++ /dev/null @@ -1,75 +0,0 @@ -{-# LANGUAGE CPP #-} - -module Ide.Plugin.Fourmolu.Shim ( - -- * FourmoluConfig - cfgFilePrinterOpts, - cfgFileFixities, - emptyConfig, - - -- * FixityMap - addFixityOverrides, - - -- * ConfigParseError - showParseError, -) where - -import Ormolu.Config - -#if MIN_VERSION_fourmolu(0,7,0) -import Ormolu.Fixity -#endif - -{-- Backport FourmoluConfig --} - -#if MIN_VERSION_fourmolu(0,7,0) --- these functions are now defined -#else -type FourmoluConfig = PrinterOptsPartial - -cfgFilePrinterOpts :: FourmoluConfig -> PrinterOptsPartial -cfgFilePrinterOpts = id - -cfgFileFixities :: FourmoluConfig -> FixityOverrides -cfgFileFixities _ = mempty -#endif - -#if MIN_VERSION_fourmolu(0,8,1) --- emptyConfig now provided -#elif MIN_VERSION_fourmolu(0,7,0) -emptyConfig :: FourmoluConfig -emptyConfig = - FourmoluConfig - { cfgFilePrinterOpts = mempty - , cfgFileFixities = mempty - } -#else -emptyConfig :: FourmoluConfig -emptyConfig = mempty -#endif - -{-- Backport FixityOverrides --} - -#if MIN_VERSION_fourmolu(0,13,0) -addFixityOverrides :: FixityOverrides -> Config region -> Config region -addFixityOverrides fixities cfg = cfg{cfgFixityOverrides = fixities} -#elif MIN_VERSION_fourmolu(0,7,0) -type FixityOverrides = FixityMap - -addFixityOverrides :: FixityOverrides -> Config region -> Config region -addFixityOverrides fixities cfg = cfg{cfgFixityOverrides = fixities} -#else -type FixityOverrides = () - -addFixityOverrides :: FixityOverrides -> Config region -> Config region -addFixityOverrides _ = id -#endif - -{-- Backport ConfigParseError --} - -#if MIN_VERSION_fourmolu(0,7,0) -showParseError :: Show parseException => parseException -> String -showParseError = show -#else -showParseError :: (pos, String) -> String -showParseError = snd -#endif