packages feed

hls-explicit-imports-plugin 1.0.0.2 → 1.0.0.3

raw patch · 2 files changed

+46/−33 lines, 2 filesdep +ghc-api-compatdep −lsp-typesdep ~ghcidePVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

Dependencies added: ghc-api-compat

Dependencies removed: lsp-types

Dependency ranges changed: ghcide

API changes (from Hackage documentation)

+ Ide.Plugin.ExplicitImports: descriptorForModules :: (ModuleName -> Bool) -> PluginId -> PluginDescriptor IdeState

Files

hls-explicit-imports-plugin.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.2 name:               hls-explicit-imports-plugin-version:            1.0.0.2+version:            1.0.0.3 synopsis:           Explicit imports plugin for Haskell Language Server license:            Apache-2.0 license-file:       LICENSE@@ -8,23 +8,22 @@ maintainer:         pepeiborra@gmail.com category:           Development build-type:         Simple-extra-source-files:-  LICENSE+extra-source-files: LICENSE  library   exposed-modules:    Ide.Plugin.ExplicitImports   hs-source-dirs:     src   build-depends:     , aeson-    , base                  >=4.12    && <5+    , base                  >=4.12 && <5     , containers     , deepseq     , ghc-    , ghcide                ^>=1.3+    , ghc-api-compat+    , ghcide                ^>=1.4+    , hls-graph     , hls-plugin-api        ^>=1.1     , lsp-    , lsp-types-    , hls-graph     , text     , unordered-containers 
src/Ide/Plugin/ExplicitImports.hs view
@@ -1,17 +1,16 @@-{-# LANGUAGE CPP                   #-}-{-# LANGUAGE DeriveAnyClass        #-}-{-# LANGUAGE DeriveGeneric         #-}-{-# LANGUAGE DerivingStrategies    #-}-{-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE NamedFieldPuns        #-}-{-# LANGUAGE OverloadedStrings     #-}-{-# LANGUAGE RecordWildCards       #-}-{-# LANGUAGE ScopedTypeVariables   #-}-{-# LANGUAGE TypeFamilies          #-}+{-# LANGUAGE CPP                #-}+{-# LANGUAGE DeriveAnyClass     #-}+{-# LANGUAGE DeriveGeneric      #-}+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE NamedFieldPuns     #-}+{-# LANGUAGE OverloadedStrings  #-}+{-# LANGUAGE RecordWildCards    #-}+{-# LANGUAGE TypeFamilies       #-}   module Ide.Plugin.ExplicitImports   ( descriptor+  , descriptorForModules   , extractMinimalImports   , within   ) where@@ -26,7 +25,8 @@ import qualified Data.Map.Strict                      as Map import           Data.Maybe                           (catMaybes, fromMaybe) import qualified Data.Text                            as T-import           Development.IDE+import           Development.IDE                      hiding (pluginHandlers,+                                                       pluginRules) import           Development.IDE.Core.PositionMapping import           Development.IDE.GHC.Compat import           Development.IDE.Graph.Classes@@ -35,9 +35,14 @@ import           Ide.Types import           Language.LSP.Server import           Language.LSP.Types+#if MIN_VERSION_ghc(9,0,0)+import           GHC.Builtin.Names                    (pRELUDE)+#else import           PrelNames                            (pRELUDE)+#endif import           RnNames                              (findImportUsage,                                                        getMinimalImports)+import qualified SrcLoc import           TcRnMonad                            (initTcWithGbl) import           TcRnTypes                            (TcGblEnv (tcg_used_gres)) @@ -46,7 +51,14 @@  -- | The "main" function of a plugin descriptor :: PluginId -> PluginDescriptor IdeState-descriptor plId =+descriptor = descriptorForModules (/= moduleName pRELUDE)++descriptorForModules+    :: (ModuleName -> Bool)+      -- ^ Predicate to select modules that will be annotated+    -> PluginId+    -> PluginDescriptor IdeState+descriptorForModules pred plId =   (defaultPluginDescriptor plId)     {       -- This plugin provides a command handler@@ -55,9 +67,9 @@       pluginRules = minimalImportsRule,       pluginHandlers = mconcat         [ -- This plugin provides code lenses-          mkPluginHandler STextDocumentCodeLens lensProvider+          mkPluginHandler STextDocumentCodeLens $ lensProvider pred           -- This plugin provides code actions-        , mkPluginHandler STextDocumentCodeAction codeActionProvider+        , mkPluginHandler STextDocumentCodeAction $ codeActionProvider pred         ]     } @@ -88,8 +100,9 @@ -- the provider should produce one code lens associated to the import statement: -- -- > import Data.List (intercalate, sortBy)-lensProvider :: PluginMethodHandler IdeState TextDocumentCodeLens+lensProvider :: (ModuleName -> Bool) -> PluginMethodHandler IdeState TextDocumentCodeLens lensProvider+  pred   state -- ghcide state, used to retrieve typechecking artifacts   pId -- plugin Id   CodeLensParams {_textDocument = TextDocumentIdentifier {_uri}}@@ -106,7 +119,7 @@               sequence                 [ generateLens pId _uri edit                   | (imp, Just minImport) <- minImports,-                    Just edit <- [mkExplicitEdit posMapping imp minImport]+                    Just edit <- [mkExplicitEdit pred posMapping imp minImport]                 ]             return $ Right (List $ catMaybes commands)           _ ->@@ -116,8 +129,8 @@  -- | If there are any implicit imports, provide one code action to turn them all --   into explicit imports.-codeActionProvider :: PluginMethodHandler IdeState TextDocumentCodeAction-codeActionProvider ideState _pId (CodeActionParams _ _ docId range _context)+codeActionProvider :: (ModuleName -> Bool) -> PluginMethodHandler IdeState TextDocumentCodeAction+codeActionProvider pred ideState _pId (CodeActionParams _ _ docId range _context)   | TextDocumentIdentifier {_uri} <- docId,     Just nfp <- uriToNormalizedFilePath $ toNormalizedUri _uri = liftIO $     do@@ -136,7 +149,7 @@                 [ e                   | (imp, Just explicit) <-                       maybe [] getMinimalImportsResult minImports,-                    Just e <- [mkExplicitEdit zeroMapping imp explicit]+                    Just e <- [mkExplicitEdit pred zeroMapping imp explicit]                 ]               caExplicitImports = InR CodeAction {..}               _title = "Make all imports explicit"@@ -184,12 +197,13 @@   (imports, mbMinImports) <- liftIO $ extractMinimalImports hsc tmr   let importsMap =         Map.fromList-          [ (srcSpanStart l, T.pack (prettyPrint i))-            | L l i <- fromMaybe [] mbMinImports+          [ (SrcLoc.realSrcSpanStart l, T.pack (prettyPrint i))+            | L (OldRealSrcSpan l) i <- fromMaybe [] mbMinImports           ]       res =-        [ (i, Map.lookup (srcSpanStart (getLoc i)) importsMap)+        [ (i, Map.lookup (SrcLoc.realSrcSpanStart l) importsMap)           | i <- imports+          , OldRealSrcSpan l <- [getLoc i]         ]   return ([], MinimalImportsResult res <$ mbMinImports) @@ -220,16 +234,16 @@   return (imports, minimalImports) extractMinimalImports _ _ = return ([], Nothing) -mkExplicitEdit :: PositionMapping -> LImportDecl pass -> T.Text -> Maybe TextEdit-mkExplicitEdit posMapping (L src imp) explicit+mkExplicitEdit :: (ModuleName -> Bool) -> PositionMapping -> LImportDecl pass -> T.Text -> Maybe TextEdit+mkExplicitEdit pred posMapping (L src imp) explicit   -- Explicit import list case   | ImportDecl {ideclHiding = Just (False, _)} <- imp =     Nothing   | not (isQualifiedImport imp),-    RealSrcSpan l <- src,+    OldRealSrcSpan l <- src,     L _ mn <- ideclName imp,     -- (almost) no one wants to see an explicit import list for Prelude-    mn /= moduleName pRELUDE,+    pred mn,     Just rng <- toCurrentRange posMapping $ realSrcSpanToRange l =     Just $ TextEdit rng explicit   | otherwise =