default.nix is parsing again, but not all-packages.nix
This commit is contained in:
parent
682f039023
commit
d62b7747b2
|
@ -18,7 +18,7 @@ import Prelude hiding (elem)
|
||||||
|
|
||||||
nixApp :: Parser NExpr
|
nixApp :: Parser NExpr
|
||||||
nixApp = go <$> someTill (whiteSpace *> nixExpr True)
|
nixApp = go <$> someTill (whiteSpace *> nixExpr True)
|
||||||
(try (lookAhead (char ';')))
|
(try (lookAhead (() <$ oneOf "=,;])}" <|> eof)))
|
||||||
where
|
where
|
||||||
go [] = error "some has failed us"
|
go [] = error "some has failed us"
|
||||||
go [x] = x
|
go [x] = x
|
||||||
|
@ -44,34 +44,32 @@ nixExpr = buildExpressionParser table . nixTerm
|
||||||
-- Postfix (pure (Fix . NOper . fun) <* symbol name)
|
-- Postfix (pure (Fix . NOper . fun) <* symbol name)
|
||||||
|
|
||||||
nixTerm :: Bool -> Parser NExpr
|
nixTerm :: Bool -> Parser NExpr
|
||||||
nixTerm allowLambdas = trace "in nixTerm" (return ()) >> choice
|
nixTerm allowLambdas = choice
|
||||||
[ nixInt
|
[ nixInt
|
||||||
, nixBool
|
, nixBool
|
||||||
, nixNull
|
, nixNull
|
||||||
, nixParens
|
, nixParens
|
||||||
, nixList
|
, nixList
|
||||||
, nixPath
|
, nixPath
|
||||||
, maybeSetOrLambda allowLambdas
|
, setLambdaStringOrSym allowLambdas
|
||||||
]
|
]
|
||||||
|
|
||||||
nixInt :: Parser NExpr
|
nixInt :: Parser NExpr
|
||||||
nixInt = mkInt <$> decimal <?> "integer"
|
nixInt = mkInt <$> decimal <?> "integer"
|
||||||
|
|
||||||
nixBool :: Parser NExpr
|
nixBool :: Parser NExpr
|
||||||
nixBool = (string "true" *> pure (mkBool True))
|
nixBool = (try (string "true") *> pure (mkBool True))
|
||||||
<|> (string "false" *> pure (mkBool False))
|
<|> (try (string "false") *> pure (mkBool False))
|
||||||
<?> "bool"
|
<?> "bool"
|
||||||
|
|
||||||
nixNull :: Parser NExpr
|
nixNull :: Parser NExpr
|
||||||
nixNull = string "null" *> pure mkNull <?> "null"
|
nixNull = try (string "null") *> pure mkNull <?> "null"
|
||||||
|
|
||||||
nixParens :: Parser NExpr
|
nixParens :: Parser NExpr
|
||||||
nixParens = parens nixApp <?> "parens"
|
nixParens = parens nixApp <?> "parens"
|
||||||
|
|
||||||
nixList :: Parser NExpr
|
nixList :: Parser NExpr
|
||||||
nixList = do
|
nixList = brackets (Fix . NList <$> many (trace "in nixList" $ nixTerm False)) <?> "list"
|
||||||
trace "in nixList" $ return ()
|
|
||||||
brackets (Fix . NList <$> many (nixTerm False)) <?> "list"
|
|
||||||
|
|
||||||
nixPath :: Parser NExpr
|
nixPath :: Parser NExpr
|
||||||
nixPath = try $ do
|
nixPath = try $ do
|
||||||
|
@ -82,9 +80,9 @@ nixPath = try $ do
|
||||||
where
|
where
|
||||||
isPathChar c = isAlpha c || c `Prelude.elem` ".:/"
|
isPathChar c = isAlpha c || c `Prelude.elem` ".:/"
|
||||||
|
|
||||||
maybeSetOrLambda :: Bool -> Parser NExpr
|
setLambdaStringOrSym :: Bool -> Parser NExpr
|
||||||
maybeSetOrLambda allowLambdas = do
|
setLambdaStringOrSym allowLambdas = do
|
||||||
trace "maybeSetOrLambda" $ return ()
|
trace "setLambdaStringOrSym" $ return ()
|
||||||
x <- try (lookAhead symName)
|
x <- try (lookAhead symName)
|
||||||
<|> try (lookAhead (singleton <$> char '{'))
|
<|> try (lookAhead (singleton <$> char '{'))
|
||||||
<|> return ""
|
<|> return ""
|
||||||
|
@ -92,8 +90,7 @@ maybeSetOrLambda allowLambdas = do
|
||||||
then setOrArgs
|
then setOrArgs
|
||||||
else do
|
else do
|
||||||
trace "might still have a lambda" $ return ()
|
trace "might still have a lambda" $ return ()
|
||||||
y <- try (lookAhead (symName *> whiteSpace *> symbolic ':'
|
y <- try (lookAhead (True <$ (symName *> whiteSpace *> symbolic ':')))
|
||||||
*> return True))
|
|
||||||
<|> return False
|
<|> return False
|
||||||
trace ("results are = " ++ show y) $ return ()
|
trace ("results are = " ++ show y) $ return ()
|
||||||
if y
|
if y
|
||||||
|
@ -124,25 +121,16 @@ stringish
|
||||||
oneChar = mkStr . singleton <$> anyChar
|
oneChar = mkStr . singleton <$> anyChar
|
||||||
|
|
||||||
argExpr :: Parser NExpr
|
argExpr :: Parser NExpr
|
||||||
argExpr = do
|
argExpr = (Fix . NArgSet . Map.fromList <$> argList)
|
||||||
trace "in argExpr" $ return ()
|
<|> ((mkSym <$> symName) <?> "argname")
|
||||||
(Fix . NArgSet . Map.fromList <$> argList)
|
|
||||||
<|> ((mkSym <$> symName) <?> "argname")
|
|
||||||
where
|
where
|
||||||
argList = do
|
argList = braces ((argName <* whiteSpace) `sepBy` symbolic ',')
|
||||||
trace "in argList" $ return ()
|
<?> "arglist"
|
||||||
braces ((argName <* trace "FOO" whiteSpace) `sepBy` trace "BAR" (symbolic ','))
|
argName = (,) <$> (symName <* whiteSpace)
|
||||||
<?> "arglist"
|
<*> optional (symbolic '?' *> nixExpr False)
|
||||||
|
|
||||||
argName = do
|
|
||||||
trace "in argName" $ return ()
|
|
||||||
(,) <$> (symName <* whiteSpace)
|
|
||||||
<*> optional (symbolic '?' *> nixExpr False)
|
|
||||||
|
|
||||||
nvPair :: Parser (NExpr, NExpr)
|
nvPair :: Parser (NExpr, NExpr)
|
||||||
nvPair = do
|
nvPair = (,) <$> keyName <*> (symbolic '=' *> nixApp)
|
||||||
trace "in nvPair" $ return ()
|
|
||||||
(,) <$> keyName <*> (symbolic '=' *> nixApp)
|
|
||||||
|
|
||||||
keyName :: Parser NExpr
|
keyName :: Parser NExpr
|
||||||
keyName = (stringish <|> (mkSym <$> symName)) <* whiteSpace
|
keyName = (stringish <|> (mkSym <$> symName)) <* whiteSpace
|
||||||
|
|
|
@ -69,7 +69,7 @@ import Text.Trifecta as X
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
someTill :: Parser a -> Parser end -> Parser [a]
|
someTill :: Parser a -> Parser end -> Parser [a]
|
||||||
someTill p end = go *> scan
|
someTill p end = go
|
||||||
where
|
where
|
||||||
go = do { x <- p; xs <- scan; return (x:xs) }
|
go = (:) <$> p <*> scan
|
||||||
scan = (end *> return []) <|> go
|
scan = (end *> return []) <|> go
|
||||||
|
|
Loading…
Reference in a new issue