packages feed

hls-change-type-signature-plugin 2.0.0.1 → 2.1.0.0

raw patch · 2 files changed

+50/−49 lines, 2 filesdep +containersdep ~ghcidedep ~hls-plugin-apidep ~hls-test-utilsPVP ok

version bump matches the API change (PVP)

Dependencies added: containers

Dependency ranges changed: ghcide, hls-plugin-api, hls-test-utils

API changes (from Hackage documentation)

Files

hls-change-type-signature-plugin.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.4 name:               hls-change-type-signature-plugin-version:            2.0.0.1+version:            2.1.0.0 synopsis:           Change a declarations type signature with a Code Action description:   Please see the README on GitHub at <https://github.com/haskell/plugins/hls-change-type-signature-plugin/README.md>@@ -28,15 +28,15 @@   hs-source-dirs:   src   build-depends:     , base             >=4.12 && < 5-    , ghcide           == 2.0.0.1-    , hls-plugin-api   == 2.0.0.1+    , ghcide           == 2.1.0.0+    , hls-plugin-api   == 2.1.0.0     , lsp-types     , regex-tdfa     , syb     , text     , transformers     , unordered-containers-+    , containers   ghc-options: -Wall   default-language: Haskell2010   default-extensions:@@ -61,7 +61,7 @@     , base                 >=4.12 && < 5     , filepath     , hls-change-type-signature-plugin-    , hls-test-utils       == 2.0.0.1+    , hls-test-utils       == 2.1.0.0     , lsp     , QuickCheck     , regex-tdfa
src/Ide/Plugin/ChangeTypeSignature.hs view
@@ -6,47 +6,47 @@                                       , errorMessageRegexes                                       ) where -import           Control.Monad                  (guard)-import           Control.Monad.IO.Class         (MonadIO (liftIO))-import           Control.Monad.Trans.Except     (ExceptT)-import           Data.Foldable                  (asum)-import qualified Data.HashMap.Strict            as Map-import           Data.Maybe                     (mapMaybe)-import           Data.Text                      (Text)-import qualified Data.Text                      as T-import           Development.IDE                (realSrcSpanToRange)-import           Development.IDE.Core.RuleTypes (GetParsedModule (GetParsedModule))-import           Development.IDE.Core.Service   (IdeState, runAction)-import           Development.IDE.Core.Shake     (use)+import           Control.Monad                    (guard)+import           Control.Monad.IO.Class           (MonadIO)+import           Control.Monad.Trans.Except       (ExceptT)+import           Data.Foldable                    (asum)+import qualified Data.Map                         as Map+import           Data.Maybe                       (mapMaybe)+import           Data.Text                        (Text)+import qualified Data.Text                        as T+import           Development.IDE                  (realSrcSpanToRange)+import           Development.IDE.Core.PluginUtils+import           Development.IDE.Core.RuleTypes   (GetParsedModule (GetParsedModule))+import           Development.IDE.Core.Service     (IdeState) import           Development.IDE.GHC.Compat-import           Development.IDE.GHC.Util       (printOutputable)-import           Generics.SYB                   (extQ, something)-import           Ide.PluginUtils                (getNormalizedFilePath,-                                                 handleMaybeM, pluginResponse)-import           Ide.Types                      (PluginDescriptor (..),-                                                 PluginId (PluginId),-                                                 PluginMethodHandler,-                                                 defaultPluginDescriptor,-                                                 mkPluginHandler)-import           Language.LSP.Types-import           Text.Regex.TDFA                ((=~))+import           Development.IDE.GHC.Util         (printOutputable)+import           Generics.SYB                     (extQ, something)+import           Ide.Plugin.Error                 (PluginError,+                                                   getNormalizedFilePathE)+import           Ide.Types                        (PluginDescriptor (..),+                                                   PluginId (PluginId),+                                                   PluginMethodHandler,+                                                   defaultPluginDescriptor,+                                                   mkPluginHandler)+import           Language.LSP.Protocol.Message+import           Language.LSP.Protocol.Types+import           Text.Regex.TDFA                  ((=~))  descriptor :: PluginId -> PluginDescriptor IdeState-descriptor plId = (defaultPluginDescriptor plId) { pluginHandlers = mkPluginHandler STextDocumentCodeAction (codeActionHandler plId) }+descriptor plId = (defaultPluginDescriptor plId) { pluginHandlers = mkPluginHandler SMethod_TextDocumentCodeAction (codeActionHandler plId) } -codeActionHandler :: PluginId -> PluginMethodHandler IdeState 'TextDocumentCodeAction-codeActionHandler plId ideState _ CodeActionParams {_textDocument = TextDocumentIdentifier uri, _context = CodeActionContext (List diags) _} = pluginResponse $ do-      nfp <- getNormalizedFilePath uri+codeActionHandler :: PluginId -> PluginMethodHandler IdeState 'Method_TextDocumentCodeAction+codeActionHandler plId ideState _ CodeActionParams {_textDocument = TextDocumentIdentifier uri, _context = CodeActionContext diags _ _} = do+      nfp <- getNormalizedFilePathE uri       decls <- getDecls plId ideState nfp       let actions = mapMaybe (generateAction plId uri decls) diags-      pure $ List actions+      pure $ InL actions -getDecls :: MonadIO m => PluginId -> IdeState -> NormalizedFilePath -> ExceptT String m [LHsDecl GhcPs]-getDecls (PluginId changeTypeSignatureId) state = handleMaybeM "Could not get Parsed Module"-    . liftIO-    . fmap (fmap (hsmodDecls . unLoc . pm_parsed_source))-    . runAction (T.unpack changeTypeSignatureId <> ".GetParsedModule") state-    . use GetParsedModule+getDecls :: MonadIO m => PluginId -> IdeState -> NormalizedFilePath -> ExceptT PluginError m [LHsDecl GhcPs]+getDecls (PluginId changeTypeSignatureId) state =+    runActionE (T.unpack changeTypeSignatureId <> ".GetParsedModule") state+    . (fmap (hsmodDecls . unLoc . pm_parsed_source))+    . useE GetParsedModule  -- | Text representing a Declaration's Name type DeclName = Text@@ -146,15 +146,16 @@                                                 else T.strip $ snd $ T.breakOnEnd " :: " sig  changeSigToCodeAction :: PluginId -> Uri -> ChangeSignature -> Command |? CodeAction-changeSigToCodeAction (PluginId changeTypeSignatureId) uri ChangeSignature{..} = InR CodeAction { _title       = mkChangeSigTitle declName actualType-                                                               , _kind        = Just (CodeActionUnknown ("quickfix." <> changeTypeSignatureId))-                                                               , _diagnostics = Just $ List [diagnostic]-                                                               , _isPreferred = Nothing-                                                               , _disabled    = Nothing-                                                               , _edit        = Just $ mkChangeSigEdit uri declSrcSpan (mkNewSignature declName actualType)-                                                               , _command     = Nothing-                                                               , _xdata       = Nothing-                                                               }+changeSigToCodeAction (PluginId changeTypeSignatureId) uri ChangeSignature{..} =+    InR CodeAction { _title       = mkChangeSigTitle declName actualType+                   , _kind        = Just (CodeActionKind_Custom ("quickfix." <> changeTypeSignatureId))+                   , _diagnostics = Just [diagnostic]+                   , _isPreferred = Nothing+                   , _disabled    = Nothing+                   , _edit        = Just $ mkChangeSigEdit uri declSrcSpan (mkNewSignature declName actualType)+                   , _command     = Nothing+                   , _data_       = Nothing+                   }  mkChangeSigTitle :: Text -> Text -> Text mkChangeSigTitle declName actualType = "Change signature for ‘" <> declName <> "’ to: " <> actualType@@ -162,7 +163,7 @@ mkChangeSigEdit :: Uri -> RealSrcSpan -> Text -> WorkspaceEdit mkChangeSigEdit uri ss replacement =         let txtEdit = TextEdit (realSrcSpanToRange ss) replacement-            changes = Just $ Map.singleton uri (List [txtEdit])+            changes = Just $ Map.singleton uri [txtEdit]         in WorkspaceEdit changes Nothing Nothing  mkNewSignature :: Text -> Text -> Text