1module Pkg.PParser where
3import Text.Trifecta hiding (span, stringLiteral, charLiteral, natural, symbol, char, string, whiteSpace)
7import Idris.AbsSyntaxTree
8import Idris.ParseHelpers
12import Control.Monad.State.Strict
13import Control.Applicative
16type PParser = StateT PkgDesc IdrisInnerParser
18data PkgDesc = PkgDesc { pkgname :: String,
21 makefile :: Maybe String,
26 execout :: Maybe String
30defaultPkg = PkgDesc "" [] [] Nothing [] "" [] (sUN "") Nothing
32parseDesc :: FilePath -> IO PkgDesc
33parseDesc fp = do p <- readFile fp
34 case runparser pPkg defaultPkg fp p of
35 Failure err -> fail (show err)
38pPkg :: PParser PkgDesc
39pPkg = do reserved "package"; p <- identifier
41 put (st { pkgname = p })
48pClause = do reserved "executable"; lchar '=';
51 put (st { execout = Just (show exec) })
52 <|> do reserved "main"; lchar '=';
55 put (st { idris_main = main })
56 <|> do reserved "sourcedir"; lchar '=';
59 put (st { sourcedir = src })
60 <|> do reserved "opts"; lchar '=';
63 let args = parseArgs (words opts)
64 put (st { idris_opts = args })
65 <|> do reserved "modules"; lchar '=';
66 ms <- sepBy1 (iName []) (lchar ',')
68 put (st { modules = modules st ++ ms })
69 <|> do reserved "libs"; lchar '=';
70 ls <- sepBy1 identifier (lchar ',')
72 put (st { libdeps = libdeps st ++ ls })
73 <|> do reserved "objs"; lchar '=';
74 ls <- sepBy1 identifier (lchar ',')
76 put (st { objs = libdeps st ++ ls })
77 <|> do reserved "makefile"; lchar '=';
80 put (st { makefile = Just (show mk) })
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list