1{-# LANGUAGE OverlappingInstances #-}
3module Pkg.PParser where
5import Text.Trifecta hiding (span, stringLiteral, charLiteral, natural, symbol, char, string, whiteSpace)
9import Idris.AbsSyntaxTree
10import Idris.ParseHelpers
11import Idris.CmdOptions
13import Control.Monad.State.Strict
14import Control.Applicative
16import System.Info (os)
19type PParser = StateT PkgDesc IdrisInnerParser
21data PkgDesc = PkgDesc { pkgname :: String,
24 makefile :: Maybe String,
29 execout :: Maybe String,
34instance TokenParsing PParser where
35 someSpace = many (simpleWhiteSpace <|> singleLineComment <|> multiLineComment) *> pure ()
38defaultPkg = PkgDesc "" [] [] Nothing [] "" [] (sUN "") Nothing []
40parseDesc :: FilePath -> IO PkgDesc
41parseDesc fp = do p <- readFile fp
42 case runparser pPkg defaultPkg fp p of
43 Failure err -> fail (show err)
46pPkg :: PParser PkgDesc
47pPkg = do reserved "package"; p <- identifier
49 put (st { pkgname = p })
56pClause = do reserved "executable"; lchar '=';
59 put (st { execout = Just (if os `elem` ["win32", "mingw32", "cygwin32"]
60 then ((show exec) ++ ".exe")
63 <|> do reserved "main"; lchar '=';
66 put (st { idris_main = main })
67 <|> do reserved "sourcedir"; lchar '=';
70 put (st { sourcedir = src })
71 <|> do reserved "opts"; lchar '=';
74 let args = pureArgParser (words opts)
75 put (st { idris_opts = args })
76 <|> do reserved "modules"; lchar '=';
77 ms <- sepBy1 (iName []) (lchar ',')
79 put (st { modules = modules st ++ ms })
80 <|> do reserved "libs"; lchar '=';
81 ls <- sepBy1 identifier (lchar ',')
83 put (st { libdeps = libdeps st ++ ls })
84 <|> do reserved "objs"; lchar '=';
85 ls <- sepBy1 identifier (lchar ',')
87 put (st { objs = libdeps st ++ ls })
88 <|> do reserved "makefile"; lchar '=';
91 put (st { makefile = Just (show mk) })
92 <|> do reserved "tests"; lchar '=';
93 ts <- sepBy1 (iName []) (lchar ',')
95 put st { idris_tests = idris_tests st ++ ts }
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