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