packages feed

hsdev-0.1.0.0: tools/hsinspect.hs

{-# LANGUAGE OverloadedStrings #-}

module Main (
	main
	) where

import HsDev.Project (readProject)
import HsDev.Scan (scanModule)
import HsDev.Symbols.Location (ModuleLocation(..), Cabal(..))

import Tool

main :: IO ()
main = toolMain "hsinspect" [
	jsonCmd ["module"] ["module name"] "inspect installed module" [ghcOpts] inspectModule',
	jsonCmd ["file"] ["source file"] "inspect file" [ghcOpts] inspectFile',
	jsonCmd_ ["cabal"] ["project file"] "inspect .cabal file" inspectCabal']
	where
		ghcOpts = option_ ['g'] "ghc" (req "ghc options") "options to pass to GHC"
		ghcs = askOpts "ghc"

		inspectModule' opts [mname] = scanModule (ghcs opts) (CabalModule Cabal Nothing mname)
		inspectModule' _ _ = toolError "Specify module name"

		inspectFile' opts [fname] = scanModule (ghcs opts) (FileModule fname Nothing)
		inspectFile' _ _ = toolError "Specify source file name"

		inspectCabal' [fcabal] = readProject fcabal
		inspectCabal' _ = toolError "Specify project .cabal file"