hls-alternate-number-format-plugin 2.0.0.1 → 2.1.0.0
raw patch · 3 files changed
+51/−49 lines, 3 filesdep ~ghcidedep ~hls-plugin-apidep ~hls-test-utilsPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: ghcide, hls-plugin-api, hls-test-utils, lsp
API changes (from Hackage documentation)
Files
- hls-alternate-number-format-plugin.cabal +5/−5
- src/Ide/Plugin/AlternateNumberFormat.hs +42/−40
- test/Main.hs +4/−4
hls-alternate-number-format-plugin.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: hls-alternate-number-format-plugin-version: 2.0.0.1+version: 2.1.0.0 synopsis: Provide Alternate Number Formats plugin for Haskell Language Server description: Please see the README on GitHub at <https://github.com/haskell/haskell-language-server#readme>@@ -32,13 +32,13 @@ , base >=4.12 && < 5 , containers , extra- , ghcide == 2.0.0.1+ , ghcide == 2.1.0.0 , ghc-boot-th , hls-graph- , hls-plugin-api == 2.0.0.1+ , hls-plugin-api == 2.1.0.0 , hie-compat , lens- , lsp ^>=1.6+ , lsp ^>=2.1.0.0 , mtl , regex-tdfa , syb@@ -64,7 +64,7 @@ , base >=4.12 && < 5 , filepath , hls-alternate-number-format-plugin- , hls-test-utils == 2.0.0.1+ , hls-test-utils == 2.1.0.0 , lsp , QuickCheck , regex-tdfa
src/Ide/Plugin/AlternateNumberFormat.hs view
@@ -4,36 +4,39 @@ {-# LANGUAGE TypeOperators #-} module Ide.Plugin.AlternateNumberFormat (descriptor, Log(..)) where -import Control.Lens ((^.))-import Control.Monad.IO.Class (MonadIO, liftIO)-import Control.Monad.Except (ExceptT)-import qualified Data.HashMap.Strict as HashMap-import Data.Text (Text, unpack)-import qualified Data.Text as T-import Development.IDE (GetParsedModule (GetParsedModule),- IdeState, RuleResult, Rules,- define, realSrcSpanToRange,- runAction, use)-import qualified Development.IDE.Core.Shake as Shake-import Development.IDE.GHC.Compat hiding (getSrcSpan)-import Development.IDE.GHC.Util (getExtensions)-import Development.IDE.Graph.Classes (Hashable, NFData, rnf)-import Development.IDE.Spans.Pragmas (NextPragmaInfo, getFirstPragma,- insertNewPragma)-import Development.IDE.Types.Logger as Logger-import GHC.Generics (Generic)-import Ide.Plugin.Conversion (AlternateFormat,- ExtensionNeeded (NeedsExtension, NoExtension),- alternateFormat)+import Control.Lens ((^.))+import Control.Monad.Except (ExceptT)+import Control.Monad.IO.Class (MonadIO, liftIO)+import qualified Data.Map as Map+import Data.Text (Text, unpack)+import qualified Data.Text as T+import Development.IDE (GetParsedModule (GetParsedModule),+ IdeState, RuleResult, Rules,+ define, realSrcSpanToRange,+ runAction, use)+import Development.IDE.Core.PluginUtils+import qualified Development.IDE.Core.Shake as Shake+import Development.IDE.GHC.Compat hiding (getSrcSpan)+import Development.IDE.GHC.Util (getExtensions)+import Development.IDE.Graph.Classes (Hashable, NFData, rnf)+import Development.IDE.Spans.Pragmas (NextPragmaInfo,+ getFirstPragma,+ insertNewPragma)+import GHC.Generics (Generic)+import Ide.Logger as Logger+import Ide.Plugin.Conversion (AlternateFormat,+ ExtensionNeeded (NeedsExtension, NoExtension),+ alternateFormat)+import Ide.Plugin.Error import Ide.Plugin.Literals-import Ide.Plugin.RangeMap (RangeMap)-import qualified Ide.Plugin.RangeMap as RangeMap-import Ide.PluginUtils (getNormalizedFilePath,- handleMaybeM, pluginResponse)+import Ide.Plugin.RangeMap (RangeMap)+import qualified Ide.Plugin.RangeMap as RangeMap import Ide.Types-import Language.LSP.Types-import qualified Language.LSP.Types.Lens as L+import qualified Language.LSP.Protocol.Lens as L+import Language.LSP.Protocol.Message+import Language.LSP.Protocol.Types + newtype Log = LogShake Shake.Log deriving Show instance Pretty Log where@@ -42,7 +45,7 @@ descriptor :: Recorder (WithPriority Log) -> PluginId -> PluginDescriptor IdeState descriptor recorder pId = (defaultPluginDescriptor pId)- { pluginHandlers = mkPluginHandler STextDocumentCodeAction codeActionHandler+ { pluginHandlers = mkPluginHandler SMethod_TextDocumentCodeAction codeActionHandler , pluginRules = collectLiteralsRule recorder } @@ -79,9 +82,9 @@ litMap = RangeMap.fromList (realSrcSpanToRange . getSrcSpan) <$> lits pure ([], CLR <$> litMap <*> exts) -codeActionHandler :: PluginMethodHandler IdeState 'TextDocumentCodeAction-codeActionHandler state pId (CodeActionParams _ _ docId currRange _) = pluginResponse $ do- nfp <- getNormalizedFilePath (docId ^. L.uri)+codeActionHandler :: PluginMethodHandler IdeState 'Method_TextDocumentCodeAction+codeActionHandler state pId (CodeActionParams _ _ docId currRange _) = do+ nfp <- getNormalizedFilePathE (docId ^. L.uri) CLR{..} <- requestLiterals pId state nfp pragma <- getFirstPragma pId state nfp -- remove any invalid literals (see validTarget comment)@@ -90,18 +93,18 @@ literalPairs = map (\lit -> (lit, alternateFormat lit)) litsInRange -- make a code action for every literal and its' alternates (then flatten the result) actions = concatMap (\(lit, alts) -> map (mkCodeAction nfp lit enabledExtensions pragma) alts) literalPairs- pure $ List actions+ pure $ InL $ actions where mkCodeAction :: NormalizedFilePath -> Literal -> [GhcExtension] -> NextPragmaInfo -> AlternateFormat -> Command |? CodeAction mkCodeAction nfp lit enabled npi af@(alt, ext) = InR CodeAction { _title = mkCodeActionTitle lit af enabled- , _kind = Just $ CodeActionUnknown "quickfix.literals.style"+ , _kind = Just $ CodeActionKind_Custom "quickfix.literals.style" , _diagnostics = Nothing , _isPreferred = Nothing , _disabled = Nothing , _edit = Just $ mkWorkspaceEdit nfp edits , _command = Nothing- , _xdata = Nothing+ , _data_ = Nothing } where edits = [TextEdit (realSrcSpanToRange $ getSrcSpan lit) alt] <> pragmaEdit@@ -112,7 +115,7 @@ mkWorkspaceEdit :: NormalizedFilePath -> [TextEdit] -> WorkspaceEdit mkWorkspaceEdit nfp edits = WorkspaceEdit changes Nothing Nothing where- changes = Just $ HashMap.fromList [(filePathToUri $ fromNormalizedFilePath nfp, List edits)]+ changes = Just $ Map.fromList [(filePathToUri $ fromNormalizedFilePath nfp, edits)] mkCodeActionTitle :: Literal -> AlternateFormat -> [GhcExtension] -> Text mkCodeActionTitle lit (alt, ext) ghcExts@@ -127,8 +130,7 @@ needsExtension :: Extension -> [GhcExtension] -> Bool needsExtension ext ghcExts = ext `notElem` map unExt ghcExts -requestLiterals :: MonadIO m => PluginId -> IdeState -> NormalizedFilePath -> ExceptT String m CollectLiteralsResult-requestLiterals (PluginId pId) state = handleMaybeM "Could not Collect Literals"- . liftIO- . runAction (unpack pId <> ".CollectLiterals") state- . use CollectLiterals+requestLiterals :: MonadIO m => PluginId -> IdeState -> NormalizedFilePath -> ExceptT PluginError m CollectLiteralsResult+requestLiterals (PluginId pId) state =+ runActionE (unpack pId <> ".CollectLiterals") state+ . useE CollectLiterals
test/Main.hs view
@@ -9,8 +9,8 @@ import qualified Data.Text as T import qualified Ide.Plugin.AlternateNumberFormat as AlternateNumberFormat import qualified Ide.Plugin.Conversion as Conversion-import Language.LSP.Types (toEither)-import Language.LSP.Types.Lens (kind)+import Language.LSP.Protocol.Lens (kind)+import Language.LSP.Protocol.Types (toEither) import Properties.Conversion (conversions) import System.FilePath ((<.>), (</>)) import Test.Hls@@ -66,8 +66,8 @@ isAlternateNumberCodeAction CodeAction{_kind} = case _kind of Nothing -> False Just kind -> case kind of- CodeActionUnknown txt -> txt == "quickfix.literals.style"- _ -> False+ CodeActionKind_Custom txt -> txt == "quickfix.literals.style"+ _ -> False -- most helpers derived from explicit-imports-plugin Main Test file