diff --git a/hls-cabal-fmt-plugin.cabal b/hls-cabal-fmt-plugin.cabal
--- a/hls-cabal-fmt-plugin.cabal
+++ b/hls-cabal-fmt-plugin.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               hls-cabal-fmt-plugin
-version:            2.0.0.1
+version:            2.1.0.0
 synopsis:           Integration with the cabal-fmt code formatter
 description:
   Please see the README on GitHub at <https://github.com/haskell/haskell-language-server#readme>
@@ -33,10 +33,11 @@
     , base            >=4.12 && <5
     , directory
     , filepath
-    , 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-types
+    , mtl
     , process
     , text
     , transformers
@@ -55,7 +56,7 @@
     , directory
     , filepath
     , hls-cabal-fmt-plugin
-    , hls-test-utils        == 2.0.0.1
+    , hls-test-utils        == 2.1.0.0
 
   if flag(isolateTests)
     build-tool-depends: cabal-fmt:cabal-fmt ^>=0.1.6
diff --git a/src/Ide/Plugin/CabalFmt.hs b/src/Ide/Plugin/CabalFmt.hs
--- a/src/Ide/Plugin/CabalFmt.hs
+++ b/src/Ide/Plugin/CabalFmt.hs
@@ -4,14 +4,16 @@
 module Ide.Plugin.CabalFmt where
 
 import           Control.Lens
+import           Control.Monad.Except        (throwError)
 import           Control.Monad.IO.Class
-import qualified Data.Text               as T
-import           Development.IDE         hiding (pluginHandlers)
+import qualified Data.Text                   as T
+import           Development.IDE             hiding (pluginHandlers)
+import           Ide.Plugin.Error            (PluginError (PluginInternalError, PluginInvalidParams))
 import           Ide.PluginUtils
 import           Ide.Types
-import           Language.LSP.Types      as J
-import qualified Language.LSP.Types.Lens as J
-import           Prelude                 hiding (log)
+import           Language.LSP.Protocol.Lens  as L
+import           Language.LSP.Protocol.Types
+import           Prelude                     hiding (log)
 import           System.Directory
 import           System.Exit
 import           System.FilePath
@@ -46,14 +48,14 @@
 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)
-provider recorder _ide FormatText contents nfp opts = liftIO $ do
+  throwError $ PluginInvalidParams "You cannot format a text-range using cabal-fmt."
+provider recorder _ide FormatText contents nfp opts = do
   let cabalFmtArgs = [fp, "--indent", show tabularSize]
-  x <- findExecutable "cabal-fmt"
+  x <- liftIO $ findExecutable "cabal-fmt"
   case x of
     Just _ -> do
       (exitCode, out, err) <-
-        readCreateProcessWithExitCode
+        liftIO $ readCreateProcessWithExitCode
           ( proc "cabal-fmt" cabalFmtArgs
           )
             { cwd = Just $ takeDirectory fp
@@ -63,14 +65,14 @@
       case exitCode of
         ExitFailure code -> do
           log Error $ LogProcessInvocationFailure code
-          pure $ Left (ResponseError UnknownErrorCode "Failed to invoke cabal-fmt" Nothing)
+          throwError (PluginInternalError "Failed to invoke cabal-fmt")
         ExitSuccess -> do
           let fmtDiff = makeDiffTextEdit contents (T.pack out)
-          pure $ Right fmtDiff
+          pure $ InL fmtDiff
     Nothing -> do
       log Error LogCabalFmtNotFound
-      pure $ Left (ResponseError InvalidRequest "No installation of cabal-fmt could be found. Please install it into your global environment." Nothing)
+      throwError (PluginInternalError "No installation of cabal-fmt could be found. Please install it into your global environment.")
   where
     fp = fromNormalizedFilePath nfp
-    tabularSize = opts ^. J.tabSize
+    tabularSize = opts ^. L.tabSize
     log = logWith recorder
