hiedb 0.4.0.0 → 0.4.1.0
raw patch · 12 files changed
+183/−55 lines, 12 filesdep −ghc-api-compatdep ~algebraic-graphsdep ~ansi-terminaldep ~basePVP ok
version bump matches the API change (PVP)
Dependencies removed: ghc-api-compat
Dependency ranges changed: algebraic-graphs, ansi-terminal, base, terminal-size
API changes (from Hackage documentation)
+ HieDb.Compat: (<+>) :: SDoc -> SDoc -> SDoc
+ HieDb.Compat: IfaceTyCon :: IfExtName -> IfaceTyConInfo -> IfaceTyCon
+ HieDb.Compat: LlvmConfig :: [(String, LlvmTarget)] -> [(Int, String)] -> LlvmConfig
+ HieDb.Compat: NCU :: (forall c. () => (NameCache -> (NameCache, c)) -> IO c) -> NameCacheUpdater
+ HieDb.Compat: RealSrcSpan :: !RealSrcSpan -> SrcSpan
+ HieDb.Compat: UnhelpfulSpan :: !FastString -> SrcSpan
+ HieDb.Compat: [ifaceTyConInfo] :: IfaceTyCon -> IfaceTyConInfo
+ HieDb.Compat: [ifaceTyConName] :: IfaceTyCon -> IfExtName
+ HieDb.Compat: [llvmPasses] :: LlvmConfig -> [(Int, String)]
+ HieDb.Compat: [llvmTargets] :: LlvmConfig -> [(String, LlvmTarget)]
+ HieDb.Compat: [updateNameCache] :: NameCacheUpdater -> forall c. () => (NameCache -> (NameCache, c)) -> IO c
+ HieDb.Compat: data AvailInfo
+ HieDb.Compat: data DynFlags
+ HieDb.Compat: data FastString
+ HieDb.Compat: data Fingerprint
+ HieDb.Compat: data IfaceTyCon
+ HieDb.Compat: data IfaceType
+ HieDb.Compat: data LlvmConfig
+ HieDb.Compat: data Module
+ HieDb.Compat: data ModuleName
+ HieDb.Compat: data Name
+ HieDb.Compat: data NameCache
+ HieDb.Compat: data NameSpace
+ HieDb.Compat: data OccName
+ HieDb.Compat: data RealSrcSpan
+ HieDb.Compat: data SrcSpan
+ HieDb.Compat: dataName :: NameSpace
+ HieDb.Compat: defaultDynFlags :: Settings -> LlvmConfig -> DynFlags
+ HieDb.Compat: flLabel :: FieldLbl a -> FieldLabelString
+ HieDb.Compat: flSelector :: FieldLbl a -> a
+ HieDb.Compat: getFileHash :: FilePath -> IO Fingerprint
+ HieDb.Compat: hang :: SDoc -> Int -> SDoc -> SDoc
+ HieDb.Compat: hiePathToFS :: HiePath -> FastString
+ HieDb.Compat: initNameCache :: UniqSupply -> [Name] -> NameCache
+ HieDb.Compat: initSysTools :: String -> IO Settings
+ HieDb.Compat: isDataConNameSpace :: NameSpace -> Bool
+ HieDb.Compat: isTcClsNameSpace :: NameSpace -> Bool
+ HieDb.Compat: isTvNameSpace :: NameSpace -> Bool
+ HieDb.Compat: isVarNameSpace :: NameSpace -> Bool
+ HieDb.Compat: lookupOrigNameCache :: OrigNameCache -> Module -> OccName -> Maybe Name
+ HieDb.Compat: mkModule :: UnitId -> ModuleName -> Module
+ HieDb.Compat: mkModuleName :: String -> ModuleName
+ HieDb.Compat: mkOccName :: NameSpace -> String -> OccName
+ HieDb.Compat: mkRealSrcLoc :: FastString -> Int -> Int -> RealSrcLoc
+ HieDb.Compat: mkRealSrcSpan :: RealSrcLoc -> RealSrcLoc -> RealSrcSpan
+ HieDb.Compat: mkSplitUniqSupply :: Char -> IO UniqSupply
+ HieDb.Compat: mkVarOccFS :: FastString -> OccName
+ HieDb.Compat: moduleName :: Module -> ModuleName
+ HieDb.Compat: moduleNameString :: ModuleName -> String
+ HieDb.Compat: nameModule :: HasDebugCallStack => Name -> Module
+ HieDb.Compat: nameModule_maybe :: Name -> Maybe Module
+ HieDb.Compat: nameOccName :: Name -> OccName
+ HieDb.Compat: nameSrcSpan :: Name -> SrcSpan
+ HieDb.Compat: newtype NameCacheUpdater
+ HieDb.Compat: nsNames :: NameCache -> OrigNameCache
+ HieDb.Compat: occNameSpace :: OccName -> NameSpace
+ HieDb.Compat: occNameString :: OccName -> String
+ HieDb.Compat: pattern AvailFL :: FieldLabel -> AvailInfo
+ HieDb.Compat: pattern AvailName :: Name -> AvailInfo
+ HieDb.Compat: pattern AvailTC :: Name -> [Name] -> [FieldLabel] -> AvailInfo
+ HieDb.Compat: ppr :: Outputable a => a -> SDoc
+ HieDb.Compat: readHexFingerprint :: String -> Fingerprint
+ HieDb.Compat: showSDoc :: DynFlags -> SDoc -> String
+ HieDb.Compat: srcSpanEndCol :: RealSrcSpan -> Int
+ HieDb.Compat: srcSpanEndLine :: RealSrcSpan -> Int
+ HieDb.Compat: srcSpanStartCol :: RealSrcSpan -> Int
+ HieDb.Compat: srcSpanStartLine :: RealSrcSpan -> Int
+ HieDb.Compat: tcClsName :: NameSpace
+ HieDb.Compat: text :: String -> SDoc
+ HieDb.Compat: tvName :: NameSpace
+ HieDb.Compat: type HiePath = FastString
+ HieDb.Compat: unpackFS :: FastString -> String
+ HieDb.Compat: varName :: NameSpace
Files
- CHANGELOG.md +5/−0
- hiedb.cabal +1/−5
- src/HieDb/Compat.hs +142/−3
- src/HieDb/Create.hs +2/−6
- src/HieDb/Dump.hs +2/−3
- src/HieDb/Html.hs +2/−1
- src/HieDb/Query.hs +1/−3
- src/HieDb/Run.hs +1/−6
- src/HieDb/Types.hs +0/−6
- src/HieDb/Utils.hs +20/−14
- test/Main.hs +4/−4
- test/Test/Orphans.hs +3/−4
CHANGELOG.md view
@@ -1,5 +1,10 @@ # Revision history for hiedb +## 0.4.1.0 -- 2021-06-29++* Support GHC 9.2 (@fendor)+* Remove `ghc-api-compat` dependency (@fendor)+ ## 0.4.0.0 -- 2021-06-29 * Index module exports
hiedb.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: hiedb-version: 0.4.0.0+version: 0.4.1.0 synopsis: Generates a references DB from .hie files description: Tool and library to index and query a collection of `.hie` files bug-reports: https://github.com/wz1000/HieDb/issues@@ -71,8 +71,6 @@ , extra , ansi-terminal , terminal-size- if impl(ghc >= 9.0)- build-depends: ghc-api-compat test-suite hiedb-tests import: common-options@@ -89,5 +87,3 @@ , hspec , process , temporary- if impl(ghc >= 9.0)- build-depends: ghc-api-compat
src/HieDb/Compat.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, PatternSynonyms, ViewPatterns #-} module HieDb.Compat ( nodeInfo' , Unit@@ -7,12 +7,118 @@ , stringToUnit , moduleUnit , unhelpfulSpanFS-+ -- * Types re-exports+ , ModuleName+ , mkModuleName+ , moduleName+ , moduleNameString+ , Fingerprint+ , unpackFS+ , readHexFingerprint+ , getFileHash+ , NameSpace+ , OccName+ , mkOccName+ , nameOccName+ , occNameSpace+ , occNameString+ , mkVarOccFS+ , Name+ , nameSrcSpan+ , NameCacheUpdater(..)+ , NameCache+ , nsNames+ , initNameCache+ , lookupOrigNameCache+ , Module+ , mkModule+ , nameModule_maybe+ , nameModule+ , varName+ , isVarNameSpace+ , dataName+ , isDataConNameSpace+ , tcClsName+ , isTcClsNameSpace+ , tvName+ , isTvNameSpace+ , flLabel+ -- * Dynflags re-exports+ , DynFlags+ , defaultDynFlags+ , LlvmConfig(..)+ -- * AvailInfo+ , Avail.AvailInfo+ , pattern AvailName+ , pattern AvailFL+ , pattern AvailTC+ , flSelector+ -- * SrcSpan+ , SrcSpan(..)+ , RealSrcSpan+ , mkRealSrcLoc+ , mkRealSrcSpan+ , srcSpanStartLine+ , srcSpanStartCol+ , srcSpanEndLine+ , srcSpanEndCol+ , mkSplitUniqSupply+ -- * Systools+ , initSysTools+ -- * Hie Types+ , HiePath+ , hiePathToFS+ -- * Outputable+ , (<+>)+ , ppr+ , showSDoc+ , hang+ , text+ -- * FastString+ , FastString+ -- * IFace+ , IfaceType+ , IfaceTyCon(..) ) where import Compat.HieTypes +#if __GLASGOW_HASKELL__ >= 900+import GHC.Data.FastString as FS+import GHC.Driver.Session+import GHC.Iface.Env+import GHC.Iface.Type+import GHC.SysTools+import qualified GHC.Types.Avail as Avail+import GHC.Types.FieldLabel+import GHC.Types.Name+import GHC.Types.Name.Cache+import GHC.Types.Unique.Supply+import GHC.Unit.Types+import GHC.Unit.Module.Name+import GHC.Utils.Fingerprint+#if __GLASGOW_HASKELL__ >= 902+import GHC.Driver.Ppr (showSDoc)+import GHC.Utils.Outputable (ppr, (<+>), hang, text)+#else+import GHC.Utils.Outputable (showSDoc, ppr, (<+>), hang, text)+#endif+#else+import DynFlags+import FastString+import Fingerprint+import FieldLabel import Module+import Name+import NameCache+import Outputable (showSDoc, ppr, (<+>), hang, text)+import IfaceEnv (NameCacheUpdater(..))+import IfaceType+import UniqSupply+import SrcLoc+import SysTools+import qualified Avail+#endif #if __GLASGOW_HASKELL__ >= 900 import GHC.Types.SrcLoc@@ -53,6 +159,39 @@ unhelpfulSpanFS = id #endif -#if __GLASGOW_HASKELL__ >= 900+#if __GLASGOW_HASKELL__ < 902+type HiePath = FastString+#endif++hiePathToFS :: HiePath -> FastString+#if __GLASGOW_HASKELL__ >= 902+hiePathToFS (LexicalFastString fs) = fs #else+hiePathToFS fs = fs+#endif++{-# COMPLETE AvailTC, AvailName, AvailFL #-}++pattern AvailTC :: Name -> [Name] -> [FieldLabel] -> Avail.AvailInfo+#if __GLASGOW_HASKELL__ >= 902+pattern AvailTC n names pieces <- Avail.AvailTC n ((\gres -> foldr (\gre (names, pieces) -> case gre of+ Avail.NormalGreName name -> (name: names, pieces)+ Avail.FieldGreName label -> (names, label:pieces)) ([], []) gres) -> (names, pieces))+#else+pattern AvailTC n names pieces <- Avail.AvailTC n names pieces+#endif++pattern AvailName :: Name -> Avail.AvailInfo+#if __GLASGOW_HASKELL__ >= 902+pattern AvailName n <- Avail.Avail (Avail.NormalGreName n)+#else+pattern AvailName n <- Avail.Avail n+#endif++pattern AvailFL :: FieldLabel -> Avail.AvailInfo+#if __GLASGOW_HASKELL__ >= 902+pattern AvailFL fl <- Avail.Avail (Avail.FieldGreName fl)+#else+-- pattern synonym that is never populated+pattern AvailFL x <- Avail.Avail ((\_ -> (True, undefined)) -> (False, x)) #endif
src/HieDb/Create.hs view
@@ -12,9 +12,6 @@ import Compat.HieUtils import GHC-import IfaceType-import Name-import GHC.Fingerprint import Control.Exception import Control.Monad@@ -32,10 +29,9 @@ import Database.SQLite.Simple -import HieDb.Compat+import HieDb.Compat as Compat import HieDb.Types import HieDb.Utils-import FastString as FS ( FastString ) sCHEMA_VERSION :: Integer sCHEMA_VERSION = 6@@ -196,7 +192,7 @@ where arr :: A.Array TypeIndex HieTypeFlat arr = hie_types hf- asts :: M.Map FS.FastString (HieAST TypeIndex)+ asts :: M.Map HiePath (HieAST TypeIndex) asts = getAsts $ hie_asts hf addTypesFromAst :: HieAST TypeIndex -> IO () addTypesFromAst ast = do
src/HieDb/Dump.hs view
@@ -7,12 +7,11 @@ import qualified Data.Map.Strict as Map import qualified Data.Text as T import qualified Data.Text.Encoding as T-import qualified Outputable import Compat.HieTypes (HieFile (..)) import Control.Monad.IO.Class (MonadIO, liftIO) import Data.Text (Text)-import DynFlags (DynFlags)+import HieDb.Compat import HieDb.Types (NameCacheMonad) import HieDb.Utils (withHieFile) @@ -25,7 +24,7 @@ dump dynFlags hieFilePath = do withHieFile hieFilePath $ \HieFile{ hie_asts } -> do let (_, astRoot) = Map.findMin $ HieTypes.getAsts hie_asts- liftIO $ putStrLn $ Outputable.showSDoc dynFlags $ HieDebug.ppHie astRoot+ liftIO $ putStrLn $ showSDoc dynFlags $ HieDebug.ppHie astRoot {-| Get lines of original source code from given .hie file -} sourceCode :: (NameCacheMonad m, MonadIO m) => FilePath -> m [Text]
src/HieDb/Html.hs view
@@ -14,7 +14,8 @@ import Data.Text (Text) import qualified Data.Text as T import Lucid-import Module++import HieDb.Compat generate :: FilePath -> ModuleName -> [Text] -> [Span] -> IO () generate fp mn ts sps = renderToFile fp $ doctypehtml_ $ do
src/HieDb/Query.hs view
@@ -12,8 +12,6 @@ import GHC import Compat.HieTypes--- import Module-import Name import System.Directory import System.FilePath@@ -30,7 +28,7 @@ import qualified Data.Text as T import Data.IORef -import Database.SQLite.Simple+import Database.SQLite.Simple import HieDb.Dump (sourceCode) import HieDb.Compat
src/HieDb/Run.hs view
@@ -12,12 +12,7 @@ import GHC import Compat.HieTypes import Compat.HieUtils-import Name-import Outputable ((<+>),hang,showSDoc,ppr,text)-import IfaceType (IfaceType) -import qualified FastString as FS- import qualified Data.Map as M import qualified Data.Text.IO as T@@ -412,7 +407,7 @@ ,Just $ Left $ defSrc row )] Nothing -> do- reportAmbiguousErr opts $ Left $ NameUnhelpfulSpan name (FS.unpackFS $ unhelpfulSpanFS msg)+ reportAmbiguousErr opts $ Left $ NameUnhelpfulSpan name (unpackFS $ unhelpfulSpanFS msg) InfoAtPoint target sp mep -> hieFileCommand conn opts target $ \hf -> do mapM_ (uncurry $ printInfo dynFlags) $ pointCommand hf sp mep $ \ast -> (hieTypeToIface . flip recoverFullType (hie_types hf) <$> nodeInfo' ast, nodeSpan ast)
src/HieDb/Types.hs view
@@ -11,12 +11,6 @@ import Prelude hiding (mod) -import Name-import Module-import NameCache-import Fingerprint--import IfaceEnv (NameCacheUpdater(..)) import Data.IORef import qualified Data.Text as T
src/HieDb/Utils.hs view
@@ -17,17 +17,8 @@ import Compat.HieTypes import qualified Compat.HieTypes as HieTypes import Compat.HieUtils-import Name-import Module-import NameCache-import UniqSupply-import SrcLoc-import DynFlags-import SysTools- import qualified Data.Map as M -import qualified FastString as FS import System.Directory import System.FilePath@@ -47,8 +38,6 @@ import HieDb.Types import HieDb.Compat import Database.SQLite.Simple-import Avail-import DataCon (flLabel) addTypeRef :: HieDb -> FilePath -> A.Array TypeIndex HieTypeFlat -> A.Array TypeIndex (Maybe Int64) -> RealSrcSpan -> TypeIndex -> IO () addTypeRef (getConn -> conn) hf arr ixs sp = go 0@@ -127,13 +116,13 @@ #else RealSrcSpan sp -> Right (sp, mdl) #endif- UnhelpfulSpan msg -> Left $ NameUnhelpfulSpan name (FS.unpackFS $ unhelpfulSpanFS msg)+ UnhelpfulSpan msg -> Left $ NameUnhelpfulSpan name (unpackFS $ unhelpfulSpanFS msg) Nothing -> Left $ NameNotFound occ (Just $ moduleName mdl) (Just $ moduleUnit mdl) pointCommand :: HieFile -> (Int, Int) -> Maybe (Int, Int) -> (HieAST TypeIndex -> a) -> [a] pointCommand hf (sl,sc) mep k = M.elems $ flip M.mapMaybeWithKey (getAsts $ hie_asts hf) $ \fs ast ->- k <$> selectSmallestContaining (sp fs) ast+ k <$> selectSmallestContaining (sp $ hiePathToFS fs) ast where sloc fs = mkRealSrcLoc fs sl sc eloc fs = case mep of@@ -246,7 +235,7 @@ generateExports :: FilePath -> [AvailInfo] -> [ExportRow] generateExports fp = concatMap generateExport where generateExport :: AvailInfo -> [ExportRow]- generateExport (Avail n)+ generateExport (AvailName n) = [ExportRow { exportHieFile = fp , exportName = nameOccName n@@ -257,6 +246,23 @@ , exportParentUnit = Nothing , exportIsDatacon = False }]+ generateExport (AvailFL fl)+ = [ExportRow+ { exportHieFile = fp+ , exportName = n+ , exportMod = m+ , exportUnit = u+ , exportParent = Nothing+ , exportParentMod = Nothing+ , exportParentUnit = Nothing+ , exportIsDatacon = False+ }]+ where+ (n, m, u) = (mkVarOccFS $ flLabel fl+ -- For fields, the module details come from the parent+ ,moduleName $ nameModule $ flSelector fl+ ,moduleUnit $ nameModule $ flSelector fl+ ) generateExport (AvailTC name pieces fields) = ExportRow { exportHieFile = fp
test/Main.hs view
@@ -7,8 +7,7 @@ import HieDb.Run (Command (..), Options (..), runCommand) import HieDb.Types (HieDbErr (..), SourceFile(..), runDbM) import HieDb.Utils (makeNc)-import HieDb.Compat (stringToUnit)-import Module (mkModuleName, moduleNameString)+import HieDb.Compat (stringToUnit, moduleNameString, mkModuleName, getFileHash) import System.Directory (findExecutable, getCurrentDirectory, removeDirectoryRecursive) import System.Exit (ExitCode (..), die) import System.FilePath ((</>))@@ -19,7 +18,6 @@ import Test.Hspec (Expectation, Spec, afterAll_, around, beforeAll_, describe, hspec, it, runIO, shouldBe, shouldEndWith) import Test.Orphans ()-import GHC.Fingerprint import Data.IORef import Data.List (sort) import Data.Maybe (fromMaybe)@@ -216,7 +214,9 @@ runHieDbCli ["point-info", "Module1", "10", "10"] `succeedsWithStdin` unlines [ "Span: test/data/Module1.hs:10:8-11"-#if __GLASGOW_HASKELL__ >= 900+#if __GLASGOW_HASKELL__ >= 902+ , "Constructors: {(XExpr, HsExpr), (HsVar, HsExpr)}"+#elif __GLASGOW_HASKELL__ >= 900 , "Constructors: {(HsVar, HsExpr), (XExpr, HsExpr)}" #else , "Constructors: {(HsVar, HsExpr), (HsWrap, HsExpr)}"
test/Test/Orphans.hs view
@@ -1,14 +1,13 @@-{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE StandaloneDeriving, CPP #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Test.Orphans where import HieDb.Compat import HieDb.Types-import Module (ModuleName, moduleName, moduleNameString)-import Name (Name, nameModule, nameOccName)-import OccName (OccName, occNameString) +#if __GLASGOW_HASKELL__ < 902 instance Show ModuleName where show = moduleNameString+#endif instance Show OccName where show = occNameString instance Show Name where show n =