overview.hs helps generate OVERVIEW
This commit is contained in:
		
							parent
							
								
									328d198559
								
							
						
					
					
						commit
						f25c3d8410
					
				
							
								
								
									
										33
									
								
								overview.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								overview.hs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | |||||||
|  | -- overview.hs - update an OVERVIEW file | ||||||
|  | -- | ||||||
|  | -- OVERVIEW begins with a manually updated list of modules; below that we | ||||||
|  | -- generate a list of filename, function, type entries. Useful for getting | ||||||
|  | -- the big picture and refactoring. | ||||||
|  | 
 | ||||||
|  | import System | ||||||
|  | import System.Process | ||||||
|  | import IO | ||||||
|  | import Data.List | ||||||
|  | import Text.Printf | ||||||
|  | 
 | ||||||
|  | main = do | ||||||
|  |   old <- readFile "OVERVIEW" | ||||||
|  |   let preamble = takeWhile ((> 0) . length) $ lines old | ||||||
|  |   putStr $ unlines preamble | ||||||
|  |   let modules = concat $ map ((++ ".hs ") . dropWhile (== ' ')) preamble | ||||||
|  |   let grep = "grep -H '^\\w[^=]*::' " ++ modules | ||||||
|  |   (inp, out, err, pid) <- runInteractiveCommand grep | ||||||
|  |   grepoutput <- hGetContents out | ||||||
|  |   let groups = groupBy (\a b -> samefile a b) $ lines grepoutput | ||||||
|  |   sequence $ map printgroup groups | ||||||
|  |   putStr "\n" | ||||||
|  | 
 | ||||||
|  | printgroup ls = do putStr "\n"; sequence $ map printline ls | ||||||
|  | 
 | ||||||
|  | printline l =  | ||||||
|  |     putStrLn $ printf "%-22s %-40s %s" (file++":") code typedecl | ||||||
|  |     where | ||||||
|  |       (file, rest) = break (== ':') l | ||||||
|  |       (code, typedecl) = break (== ':') $ tail rest | ||||||
|  | 
 | ||||||
|  | samefile a b = ((takeWhile (/= ':') a) ++ ":") `isPrefixOf` b | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user