import OccName (pprOccName)
import Data.Maybe
-import Control.Exception
+import Panic
import Data.List
import Control.Monad
import System.IO
is_interpreted <- GHC.moduleIsInterpreted session m
-- should we just skip these?
when (not is_interpreted) $
- throwDyn (CmdLineError ("module '"
+ ghcError (CmdLineError ("module '"
++ GHC.moduleNameString (GHC.moduleName m)
++ "' is not interpreted"))
mbModInfo <- GHC.getModuleInfo session m
tagGroups <- mapM tagFileGroup groups
IO.try (writeFile file $ concat tagGroups)
where
- tagFileGroup [] = throwDyn (CmdLineError "empty tag file group??")
+ tagFileGroup [] = ghcError (CmdLineError "empty tag file group??")
tagFileGroup group@((_,fileName,_,_):_) = do
file <- readFile fileName -- need to get additional info from sources..
let byLine (_,_,l1,_) (_,_,l2,_) = l1 <= l2
sortedGroup = sortLe byLine group
tags = unlines $ perFile sortedGroup 1 0 $ lines file
return $ "\x0c\n" ++ fileName ++ "," ++ show (length tags) ++ "\n" ++ tags
- perFile (tagInfo@(_tag, _file, lNo, _colNo):tags) count pos (line:lines)
- | lNo > count =
- perFile (tagInfo:tags) (count+1) (pos+length line) lines
- perFile (tagInfo@(_tag, _file, lNo, _colNo):tags) count pos lines@(line:_)
- | lNo == count =
- showETag tagInfo line pos : perFile tags count pos lines
+ perFile (tagInfo@(_tag, _file, lNo, _colNo):tags) count pos lines@(line:lines')
+ | lNo > count = perFile (tagInfo:tags) (count+1) (pos+length line) lines'
+ | lNo == count = showETag tagInfo line pos : perFile tags count pos lines
perFile _ _ _ _ = []
-- simple ctags format, for Vim et al