module IdInfo where import PrettyPrint(pp) --import HsIdent(getHSName) --import HsModule(ModuleName(..)) import HsTokens import PfePlumbing(refPos) import UniqueNames(optOrigModule) import QualNames(getQualified) import HasBaseName(getBaseName) --import RefsTypes --import PFE0(ModuleFixities) --import FudgetIOMonad1(SrcToken) --import ParsedSyntax(Id) import Maybe(fromMaybe) import MUtils(( # ),mapFst) --idInfo :: Refs -> ModuleFixities Id -> SrcToken -> [String] idInfo refs infixes ((t,(p,s)),optref) = case optref of Just ((r,_),_,defs) {- | s'==s -} -> (occurences,def,showDefs defs ++ infixinfo) where showDefs [] = [s++": "++"not in scope??"] showDefs defs = map showDef defs def = case defs of [o] -> Just o _ -> Nothing occurences = maybe [] (\o->[refPos r|r@(_,_,[o'])<-refs,o'==o]) def showDef (o,t') = {-show r++" "++-}s++": "++shO o++", "++pp t' {- orig (Co t) = ", constructor of "++t orig (Fi t) = ", field of "++t orig (Me t) = ", method of "++t orig V = "" orig T = ", a type" orig Cl = ", a class" -} infixinfo = case defs of [(qn,_)] -> fromMaybe [""] $ do m <- optOrigModule qn is <- mapFst getBaseName # lookup m infixes fixity <- lookup (getBaseName.getQualified$ qn) is return [pp fixity] _ -> [""] --Just (s',r,_,defs) -> ([],Nothing,["?? "++s'++" /= "++s]) _ -> ([],Nothing, if t==TheRest then [] else [show t++" at "++show p]) where shO n = case optOrigModule n of Just m -> pp m++"."++pp (getQualified n) _ -> pp n++" (local)" -- improve!! --shO = either shQ shL --shQ (m,n)=m++"."++n --shL (path,p) = "local at "++show p