futhark-0.25.37: src/Futhark/CLI/Query.hs
-- | @futhark query@
module Futhark.CLI.Query (main) where
import Futhark.Compiler
import Futhark.Util.Loc
import Futhark.Util.Options
import Language.Futhark.Query
import Language.Futhark.Syntax
import Text.Read (readMaybe)
-- | Run @futhark query@.
main :: String -> [String] -> IO ()
main = mainWithOptions () [] "program line col" $ \args () ->
case args of
[file, line, col] -> do
line' <- readMaybe line
col' <- readMaybe col
Just $ do
(_, imports, _) <- readProgramOrDie file
-- The 'offset' part of the Pos is not used and can be arbitrary.
case atPos imports $ Pos file line' col' 0 of
Nothing -> putStrLn "No information available."
Just (AtName qn def loc) -> do
putStrLn $ "Name: " ++ prettyString qn
putStrLn $ "Position: " ++ locStr (srclocOf loc)
case def of
Nothing -> pure ()
Just (BoundTerm term defloc) -> do
let t = termBindingType term
putStrLn $ "Type: " ++ prettyString t
putStrLn $ "Definition: " ++ locStr (srclocOf defloc)
Just (BoundType defloc) ->
putStrLn $ "Definition: " ++ locStr (srclocOf defloc)
Just (BoundModule defloc) ->
putStrLn $ "Definition: " ++ locStr (srclocOf defloc)
Just (BoundModuleType defloc) ->
putStrLn $ "Definition: " ++ locStr (srclocOf defloc)
_ -> Nothing