packages feed

hscope 0.2.2 → 0.3

raw patch · 4 files changed

+35/−25 lines, 4 filesdep +pure-cdbdep −hs-cdb

Dependencies added: pure-cdb

Dependencies removed: hs-cdb

Files

HScope.hs view
@@ -3,9 +3,7 @@  import System.Console.GetOpt import System.Environment (getArgs, getProgName)-import Database.CDB.Write-import Database.CDB.Read-import Database.CDB.Packable+import Database.PureCDB import Language.Haskell.Exts.Annotated import Control.Monad.Trans (liftIO) import Control.Monad (void, when)@@ -20,6 +18,7 @@ import Data.Generics.Uniplate.Data (transformBiM) import System.Directory (doesFileExist) import Data.Data+import Data.Either (rights) import Language.Preprocessor.Cpphs (runCpphs, defaultCpphsOptions,  CpphsOptions(..)             , defaultBoolOptions, BoolOptions(..)) @@ -45,9 +44,6 @@         ity <- fmap toEnum get         Info ity <$> get <*> get <*> get -instance Unpackable Info where-    unpack = either error id . decode- options :: [OptDescr Flag] options = [             Option ['b'] [ "build" ] (NoArg $ Build True) "Build hscope database"@@ -78,8 +74,8 @@     go c (CPPInclude i) = c { cCPPIncludes = i:(cCPPIncludes c) }     go c (OExtension i) = c { cExtensions = i:(cExtensions c) } -addInfo :: Lines -> IType -> Name SrcSpanInfo -> CDBMake-addInfo vec ity n = cdbAdd f $ encode $ Info ity (fileName src) (fst lp) (snd lp)+addInfo :: Lines -> IType -> Name SrcSpanInfo -> WriteCDB IO ()+addInfo vec ity n = addBS (B.pack f) $ encode $ Info ity (fileName src) (fst lp) (snd lp)     where l = startLine src           lp = maybe (error $ "Bad line: " ++ show n ++ ", " ++ show vec) id $ vec V.!? (l - 2)           (src, f) = case n of@@ -89,18 +85,18 @@ traverseAST :: (Data b, Monad m, Data a, Functor m) => (a -> m ()) -> b -> m () traverseAST cb = void . transformBiM go where go v = cb v >> return v -handleDefinitions :: Lines -> Decl SrcSpanInfo -> CDBMake+handleDefinitions :: Lines -> Decl SrcSpanInfo -> WriteCDB IO () handleDefinitions vec = go where     go (PatBind _ (PVar _ n) _ _ _) = addDef n     go (FunBind _ ((Match _ n _ _ _):_)) = addDef n     go _ = return ()     addDef = addInfo vec Definition -handleCalls :: Lines -> QName SrcSpanInfo -> CDBMake+handleCalls :: Lines -> QName SrcSpanInfo -> WriteCDB IO () handleCalls vec (UnQual _ n) = addInfo vec Call n handleCalls _ _ = return () -handleConstructors :: Lines -> ConDecl SrcSpanInfo -> CDBMake+handleConstructors :: Lines -> ConDecl SrcSpanInfo -> WriteCDB IO () handleConstructors vec (ConDecl _ n _) = addInfo vec Definition n handleConstructors vec (RecDecl _ n recs) = do     addInfo vec Definition n@@ -108,7 +104,7 @@     where go (FieldDecl _ ns _) = mapM_ (addInfo vec Definition) ns handleConstructors _ c = error $ "handleConstructors " ++ show c -handleDeclarations :: Lines -> DeclHead SrcSpanInfo -> CDBMake+handleDeclarations :: Lines -> DeclHead SrcSpanInfo -> WriteCDB IO () handleDeclarations vec (DHead _ n _) = addInfo vec Definition n handleDeclarations _ c = error $ "handleDeclarations " ++ show c @@ -141,9 +137,9 @@                             , extensions = exs                             , parseFilename = f } -buildOne :: Config -> FilePath -> CDBMake+buildOne :: Config -> FilePath -> WriteCDB IO () buildOne cfg f = do-    cdbAdd "0_hs_files" f+    addBS (B.pack "0_hs_files") (B.pack f)     (fstr, lns) <- liftIO $ preprocess (cCPPIncludes cfg) f     either (liftIO . putStrLn) (go lns) $ parseCurrentFile f fstr         $ map classifyExtension $ cExtensions cfg@@ -154,23 +150,23 @@                     traverseAST (handleDeclarations lns) modul                     -- liftIO $ putStrLn $ show modul -handleQuery :: CDB -> String -> IO ()+handleQuery :: ReadCDB -> String -> IO () handleQuery cdb ('1':str) = findInfo Definition cdb str handleQuery cdb ('3':str) = findInfo Call cdb str handleQuery cdb ('4':str) = do-    let files = cdbGetAll cdb "0_hs_files"+    files <- fmap (map B.unpack) $ getBS cdb (B.pack "0_hs_files")     lns <- fmap lines $ readProcess "grep" ("-n":"-H":str:files) ""     outputLines $ map go lns     where go l = let (f, rest1) = break (':' ==) l                      (n, rest2) = break (':' ==) $ drop 1 rest1                   in f ++ " <unknown> " ++ n ++ " " ++ drop 1 rest2  handleQuery cdb ('7':str) = do-    let files = cdbGetAll cdb "0_hs_files"+    files <- fmap (map B.unpack) $ getBS cdb $ B.pack "0_hs_files"     outputLines $ map go $ filter (isInfixOf str) files     where go f = f ++ " <unknown> 1 <unknown>" handleQuery _ _ = return () -runLines :: CDB -> IO ()+runLines :: ReadCDB -> IO () runLines cdb = do     putStr ">> "     hFlush stdout@@ -185,8 +181,10 @@     putStrLn $ "cscope: " ++ (show $ length infos) ++ " lines"     mapM_ putStrLn infos -findInfo :: IType -> CDB -> String -> IO ()-findInfo ity cdb str = outputLines $ catMaybes $ map go $ cdbGetAll cdb str+findInfo :: IType -> ReadCDB -> String -> IO ()+findInfo ity cdb str = do+    bses <- getBS cdb $ B.pack str+    outputLines $ catMaybes $ map go $ rights $ map decode bses     where go (Info t file lno line) | t == ity = Just $ file ++ " " ++ str                                         ++ " " ++ show lno ++ " " ++ B.unpack line                                     | otherwise = Nothing@@ -197,7 +195,7 @@     let cfg = parseFlags flags     when (cBuild cfg) $ do         if null rest then putStrLn $ "Please provide files to build the hscope database"-                     else cdbMake (cFile cfg) $ mapM_ (buildOne cfg) rest+                     else makeCDB (mapM_ (buildOne cfg) rest) (cFile cfg)      if null flags then usage else go cfg     where usage = do             pn <- getProgName@@ -205,7 +203,7 @@           go cfg = do             b <- doesFileExist $ cFile cfg             if b then do-                    cdb <- cdbInit $ cFile cfg+                    cdb <- openCDB $ cFile cfg                     maybe (return ()) (handleQuery cdb) $ cQuery cfg                     when (cLine cfg) $ runLines cdb                  else putStrLn $ cFile cfg ++ " does not exist"
+ README.md view
@@ -0,0 +1,6 @@+hscope is a partial cscope line oriented mode reimplementation for Haskell code.++See hscope --help for available options.++Being cscope-compatible gives Vim integration for free. Use :set cscopeprg option+to configure hscope as cscope replacement for haskell files.
hscope.cabal view
@@ -1,5 +1,5 @@ Name:           hscope-Version:        0.2.2+Version:        0.3 License:        BSD3 License-File:   COPYING Category:       source-tools@@ -24,6 +24,7 @@ Stability:      Experimental Extra-Source-Files:     t/files/Unbox.hs+    t/files/CPP3.hs     t/files/Simple.hs     t/files/Setup.lhs     t/files/Arrow.hs@@ -34,12 +35,13 @@     t/files/b/b.h     t/files/a.c     t/files/garrs.hs-    t/files/CPP.hs +    t/files/CPP.hs+    README.md  Executable hscope     Main-Is: HScope.hs     GHC-Options: -Wall-    Build-Depends: base (< 5), hs-cdb, haskell-src-exts, mtl, uniplate, cereal+    Build-Depends: base (< 5), pure-cdb, haskell-src-exts, mtl, uniplate, cereal                              , vector, bytestring, process, directory, cpphs     Default-Language: Haskell2010 
+ t/files/CPP3.hs view
@@ -0,0 +1,4 @@+{-# LANGUAGE CPP #-}++#include "a.h"+