hls-ormolu-plugin 2.0.0.1 → 2.1.0.0
raw patch · 3 files changed
+47/−26 lines, 3 filesdep +extradep +mtldep ~ghcidedep ~hls-plugin-apidep ~hls-test-utilsPVP ok
version bump matches the API change (PVP)
Dependencies added: extra, mtl
Dependency ranges changed: ghcide, hls-plugin-api, hls-test-utils, ormolu
API changes (from Hackage documentation)
- Ide.Plugin.Ormolu: descriptor :: PluginId -> PluginDescriptor IdeState
+ Ide.Plugin.Ormolu: descriptor :: Recorder (WithPriority Text) -> PluginId -> PluginDescriptor IdeState
- Ide.Plugin.Ormolu: provider :: FormattingHandler IdeState
+ Ide.Plugin.Ormolu: provider :: Recorder (WithPriority Text) -> FormattingHandler IdeState
Files
- hls-ormolu-plugin.cabal +10/−7
- src/Ide/Plugin/Ormolu.hs +32/−15
- test/Main.hs +5/−4
hls-ormolu-plugin.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: hls-ormolu-plugin-version: 2.0.0.1+version: 2.1.0.0 synopsis: Integration with the Ormolu code formatter description: Please see the README on GitHub at <https://github.com/haskell/haskell-language-server#readme>@@ -23,26 +23,28 @@ location: https://github.com/haskell/haskell-language-server.git library- if impl(ghc >= 9.5)+ if impl(ghc >= 9.7) buildable: False exposed-modules: Ide.Plugin.Ormolu hs-source-dirs: src build-depends: , base >=4.12 && <5+ , extra , filepath , ghc , ghc-boot-th- , ghcide == 2.0.0.1- , hls-plugin-api == 2.0.0.1+ , ghcide == 2.1.0.0+ , hls-plugin-api == 2.1.0.0 , lens , lsp- , ormolu ^>=0.1.2 || ^>= 0.2 || ^>= 0.3 || ^>= 0.5+ , mtl+ , ormolu ^>=0.1.2 || ^>= 0.2 || ^>= 0.3 || ^>= 0.5 || ^>= 0.6 || ^>= 0.7 , text default-language: Haskell2010 test-suite tests- if impl(ghc >= 9.5)+ if impl(ghc >= 9.7) buildable: False type: exitcode-stdio-1.0 default-language: Haskell2010@@ -53,6 +55,7 @@ , base , filepath , hls-ormolu-plugin- , hls-test-utils == 2.0.0.1+ , hls-test-utils == 2.1.0.0 , lsp-types+ , text , ormolu
src/Ide/Plugin/Ormolu.hs view
@@ -2,7 +2,7 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeApplications #-}-+{-# LANGUAGE TypeOperators #-} module Ide.Plugin.Ormolu ( descriptor , provider@@ -11,7 +11,11 @@ import Control.Exception (Handler (..), IOException, SomeException (..), catches)+import Control.Monad.Except (ExceptT (ExceptT), runExceptT,+ throwError)+import Control.Monad.Extra import Control.Monad.IO.Class (liftIO)+import Control.Monad.Trans import Data.Functor ((<&>)) import qualified Data.Text as T import Development.IDE hiding (pluginHandlers)@@ -19,30 +23,35 @@ import qualified Development.IDE.GHC.Compat as D import qualified Development.IDE.GHC.Compat.Util as S import GHC.LanguageExtensions.Type+import Ide.Plugin.Error (PluginError (PluginInternalError)) import Ide.PluginUtils import Ide.Types hiding (Config)+import qualified Ide.Types as Types+import Language.LSP.Protocol.Message+import Language.LSP.Protocol.Types import Language.LSP.Server hiding (defaultConfig)-import Language.LSP.Types import Ormolu import System.FilePath (takeFileName) -- --------------------------------------------------------------------- -descriptor :: PluginId -> PluginDescriptor IdeState-descriptor plId = (defaultPluginDescriptor plId)- { pluginHandlers = mkFormattingHandlers provider+descriptor :: Recorder (WithPriority T.Text) -> PluginId -> PluginDescriptor IdeState+descriptor recorder plId = (defaultPluginDescriptor plId)+ { pluginHandlers = mkFormattingHandlers $ provider recorder } -- --------------------------------------------------------------------- -provider :: FormattingHandler IdeState-provider ideState typ contents fp _ = withIndefiniteProgress title Cancellable $ liftIO $ do- ghc <- runAction "Ormolu" ideState $ use GhcSession fp+provider :: Recorder (WithPriority T.Text) -> FormattingHandler IdeState+provider recorder ideState typ contents fp _ = ExceptT $ withIndefiniteProgress title Cancellable $ runExceptT $ do+ ghc <- liftIO $ runAction "Ormolu" ideState $ use GhcSession fp let df = hsc_dflags . hscEnv <$> ghc fileOpts <- case df of Nothing -> pure [] Just df -> pure $ fromDyn df + logWith recorder Debug $ "Using ormolu-" <> VERSION_ormolu+ let fullRegion = RegionIndices Nothing Nothing rangeRegion s e = RegionIndices (Just $ s + 1) (Just $ e + 1)@@ -55,9 +64,14 @@ CabalNotFound -> Nothing CabalDidNotMention cabalInfo -> Just cabalInfo CabalFound cabalInfo -> Just cabalInfo+#if MIN_VERSION_ormolu(0,7,0)+ (fixityOverrides, moduleReexports) <- getDotOrmoluForSourceFile fp'+ let conf' = refineConfig ModuleSource cabalInfo (Just fixityOverrides) (Just moduleReexports) conf+#else fixityOverrides <- traverse getFixityOverridesForSourceFile cabalInfo let conf' = refineConfig ModuleSource cabalInfo fixityOverrides conf- cont' = cont+#endif+ let cont' = cont #else let conf' = conf cont' = T.unpack cont@@ -69,15 +83,18 @@ ] case typ of- FormatText -> ret <$> fmt contents (mkConf fileOpts fullRegion)- FormatRange (Range (Position sl _) (Position el _)) ->- ret <$> fmt contents (mkConf fileOpts (rangeRegion (fromIntegral sl) (fromIntegral el)))+ FormatText -> do+ res <- liftIO $ fmt contents (mkConf fileOpts fullRegion)+ ret res+ FormatRange (Range (Position sl _) (Position el _)) -> do+ res <- liftIO $ fmt contents (mkConf fileOpts (rangeRegion (fromIntegral sl) (fromIntegral el)))+ ret res where title = T.pack $ "Formatting " <> takeFileName (fromNormalizedFilePath fp) - ret :: Either SomeException T.Text -> Either ResponseError (List TextEdit)- ret (Left err) = Left . responseError . T.pack $ "ormoluCmd: " ++ show err- ret (Right new) = Right $ makeDiffTextEdit contents new+ ret :: Either SomeException T.Text -> ExceptT PluginError (LspM Types.Config) ([TextEdit] |? Null)+ ret (Left err) = throwError $ PluginInternalError . T.pack $ "ormoluCmd: " ++ show err+ ret (Right new) = pure $ InL $ makeDiffTextEdit contents new fromDyn :: D.DynFlags -> [DynOption] fromDyn df =
test/Main.hs view
@@ -4,16 +4,17 @@ ( main ) where -import qualified Ide.Plugin.Ormolu as Ormolu-import Language.LSP.Types+import qualified Data.Text as T+import qualified Ide.Plugin.Ormolu as Ormolu+import Language.LSP.Protocol.Types import System.FilePath import Test.Hls main :: IO () main = defaultTestRunner tests -ormoluPlugin :: PluginTestDescriptor ()-ormoluPlugin = mkPluginTestDescriptor' Ormolu.descriptor "ormolu"+ormoluPlugin :: PluginTestDescriptor T.Text+ormoluPlugin = mkPluginTestDescriptor Ormolu.descriptor "ormolu" tests :: TestTree tests = testGroup "ormolu"