From fb3c1a132c9990fc3aa4933278d41eafeed08bbc Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Wed, 13 Nov 2019 05:41:32 -0800 Subject: [PATCH] csv: fix parsing of whitespace on line after an if block (fix #1120) --- hledger-lib/Hledger/Read/CsvReader.hs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/hledger-lib/Hledger/Read/CsvReader.hs b/hledger-lib/Hledger/Read/CsvReader.hs index f3d2185f2..e1b2ca6b4 100644 --- a/hledger-lib/Hledger/Read/CsvReader.hs +++ b/hledger-lib/Hledger/Read/CsvReader.hs @@ -615,7 +615,7 @@ conditionalblockp = do lift $ dbgparse 3 "trying conditionalblockp" string "if" >> lift (skipMany spacenonewline) >> optional newline ms <- some recordmatcherp - as <- many (lift (skipSome spacenonewline) >> fieldassignmentp) + as <- many (try $ lift (skipSome spacenonewline) >> fieldassignmentp) when (null as) $ Fail.fail "start of conditional block found, but no assignment rules afterward\n(assignment rules in a conditional block should be indented)\n" return (ms, as) @@ -985,6 +985,10 @@ tests_CsvReader = tests "CsvReader" [ ,test "assignment with empty value" $ parseWithState' defrules rulesp "account1 \nif foo\n account2 foo\n" `is` (Right defrules{rassignments = [("account1","")], rconditionalblocks = [([["foo"]],[("account2","foo")])]}) - - ] + ] + ,tests "conditionalblockp" [ + test "space after conditional" $ -- #1120 + parseWithState' defrules conditionalblockp "if a\n account2 b\n \n" `is` + (Right ([["a"]],[("account2","b")])) + ] ]