packages feed

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 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"