packages feed

opt-env-conf 0.10.0.0 → 0.11.0.0

raw patch · 8 files changed

+55/−35 lines, 8 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- OptEnvConf: someNonEmpty :: Parser a -> Parser (NonEmpty a)
+ OptEnvConf: someNonEmpty :: HasCallStack => Parser a -> Parser (NonEmpty a)
- OptEnvConf.Parser: [ParserMany] :: forall a1. !Parser a1 -> Parser [a1]
+ OptEnvConf.Parser: [ParserMany] :: forall a1. !Maybe SrcLoc -> !Parser a1 -> Parser [a1]
- OptEnvConf.Parser: [ParserSome] :: forall a1. !Parser a1 -> Parser (NonEmpty a1)
+ OptEnvConf.Parser: [ParserSome] :: forall a1. !Maybe SrcLoc -> !Parser a1 -> Parser (NonEmpty a1)
- OptEnvConf.Parser: someNonEmpty :: Parser a -> Parser (NonEmpty a)
+ OptEnvConf.Parser: someNonEmpty :: HasCallStack => Parser a -> Parser (NonEmpty a)

Files

CHANGELOG.md view
@@ -1,5 +1,17 @@ # Changelog +## [0.11.0.0] - 2025-09-29++This is technically a breaking change, but if you don't use any `opt-env-conf`+internals, nothing should break for you.++### Changed++* `ParserMany` and `ParserSome` can now carry source locations.+  This is not likely to happen often because the `Alternative` class does not+  have a `HasCallStack` super class, but could still happen when using+  `someNonEmpty`.+ ## [0.10.0.0] - 2025-09-17  This is technically a breaking change, but if you don't use any `opt-env-conf`
opt-env-conf.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           opt-env-conf-version:        0.10.0.0+version:        0.11.0.0 synopsis:       Settings parsing for Haskell: command-line arguments, environment variables, and configuration values. homepage:       https://github.com/NorfairKing/opt-env-conf#readme bug-reports:    https://github.com/NorfairKing/opt-env-conf/issues
src/OptEnvConf/Completion.hs view
@@ -273,12 +273,12 @@       ParserAlt p1 p2 -> orCompletions p1 p2       ParserSelect p1 p2 -> andCompletions p1 p2       ParserEmpty _ -> pure Nothing-      ParserMany p -> do+      ParserMany _ p -> do         mR <- go p         case mR of           Nothing -> pure Nothing           Just os -> fmap (os ++) <$> go p-      ParserSome p -> do+      ParserSome _ p -> do         mR <- go p         case mR of           Nothing -> pure Nothing
src/OptEnvConf/Doc.hs view
@@ -169,8 +169,8 @@       ParserSelect p1 p2 -> AnyDocsAnd [go p1, go p2]       ParserEmpty _ -> AnyDocsOr []       ParserAlt p1 p2 -> AnyDocsOr [go p1, go p2]-      ParserMany p -> AnyDocsOr [go p, AnyDocsSingle Nothing]-      ParserSome p -> AnyDocsAnd [go p, go (ParserMany p)] -- TODO: is this right?+      ParserMany _ p -> AnyDocsOr [go p, AnyDocsSingle Nothing]+      ParserSome mLoc p -> AnyDocsAnd [go p, go (ParserMany mLoc p)] -- TODO: is this right?       ParserAllOrNothing _ p -> go p       ParserCheck _ _ _ p -> go p       ParserCommands _ mDefault cs -> AnyDocsCommands mDefault $ map commandParserDocs cs
src/OptEnvConf/Lint.hs view
@@ -258,16 +258,16 @@         c2 <- go p2         pure (c1 && c2) -- TODO: is this right?         -- TODO lint if we don't try to parse anything consuming under many.-      ParserMany p -> do+      ParserMany mLoc p -> do         c <- go p         when (not c) $-          mapValidationTFailure (LintError Nothing) $+          mapValidationTFailure (LintError mLoc) $             validationTFailure LintErrorManyInfinite         pure c-      ParserSome p -> do+      ParserSome mLoc p -> do         c <- go p         when (not c) $-          mapValidationTFailure (LintError Nothing) $+          mapValidationTFailure (LintError mLoc) $             validationTFailure LintErrorManyInfinite         pure c       ParserAllOrNothing _ p -> go p
src/OptEnvConf/Nix.hs view
@@ -36,8 +36,8 @@       ParserSelect p1 p2 -> M.unionWith combineOption (go p1) (go p2)       ParserEmpty _ -> M.empty       ParserAlt p1 p2 -> M.unionWith combineOption (go p1) (go p2) -- TODO is this right?-      ParserMany p -> go p-      ParserSome p -> go p+      ParserMany _ p -> go p+      ParserSome _ p -> go p       ParserAllOrNothing _ p -> go p       ParserCheck _ _ _ p -> go p       ParserCommands _ _ cs -> M.unionsWith combineOption $ map goCommand cs
src/OptEnvConf/Parser.hs view
@@ -175,9 +175,11 @@     !(Parser a) ->     Parser a   ParserMany ::+    !(Maybe SrcLoc) ->     !(Parser a) ->     Parser [a]   ParserSome ::+    !(Maybe SrcLoc) ->     !(Parser a) ->     Parser (NonEmpty a)   ParserAllOrNothing ::@@ -245,8 +247,8 @@           ParserSelect pe pf -> isEmpty pe && isEmpty pf           ParserEmpty _ -> True           ParserAlt _ _ -> False-          ParserMany p -> isEmpty p-          ParserSome p -> isEmpty p+          ParserMany _ p -> isEmpty p+          ParserSome _ p -> isEmpty p           ParserAllOrNothing _ p -> isEmpty p           ParserCheck _ _ _ p -> isEmpty p           ParserCommands _ _ cs -> null cs@@ -278,8 +280,8 @@                     ParserCommands (mLoc1 <|> mLoc2) (mDefault1 <|> mDefault2) (cs1 ++ cs2)                   _ -> ParserAlt p1' p2'              in go p1 p2-  many = ParserMany-  some = fmap NE.toList . ParserSome+  many = ParserMany Nothing+  some = fmap NE.toList . ParserSome Nothing  showParserABit :: Parser a -> String showParserABit = ($ "") . showParserPrec 0@@ -311,13 +313,17 @@             . go 11 p1             . showString " "             . go 11 p2-      ParserMany p ->+      ParserMany mLoc p ->         showParen (d > 10) $           showString "Many "+            . showsPrec 11 mLoc+            . showString " "             . go 11 p-      ParserSome p ->+      ParserSome mLoc p ->         showParen (d > 10) $           showString "Some "+            . showsPrec 11 mLoc+            . showString " "             . go 11 p       ParserAllOrNothing mLoc p ->         showParen (d > 10) $@@ -507,8 +513,10 @@       argument : reader str : metavar "STR" : builders  -- | Like 'some' but with a more accurate type-someNonEmpty :: Parser a -> Parser (NonEmpty a)-someNonEmpty = ParserSome+someNonEmpty :: (HasCallStack) => Parser a -> Parser (NonEmpty a)+someNonEmpty = ParserSome mLoc+  where+    mLoc = snd <$> listToMaybe (getCallStack callStack)  -- | Give a parser a default value. --@@ -1106,8 +1114,8 @@       ParserSelect p1 p2 -> ParserSelect (go p1) (go p2)       ParserEmpty _ -> ParserEmpty Nothing       ParserAlt p1 p2 -> ParserAlt (go p1) (go p2)-      ParserMany p -> ParserMany (go p)-      ParserSome p -> ParserSome (go p)+      ParserMany _ p -> ParserMany Nothing (go p)+      ParserSome _ p -> ParserSome Nothing (go p)       ParserAllOrNothing _ p -> ParserAllOrNothing Nothing (go p)       ParserCheck _ forgivable f p -> ParserCheck Nothing forgivable f (go p)       ParserCommands _ mDefault cs -> ParserCommands Nothing mDefault $ map commandEraseSrcLocs cs@@ -1143,8 +1151,8 @@       ParserSelect p1 p2 -> ParserSelect <$> go p1 <*> go p2       ParserEmpty mLoc -> pure $ ParserEmpty mLoc       ParserAlt p1 p2 -> ParserAlt <$> go p1 <*> go p2-      ParserMany p -> ParserMany <$> go p-      ParserSome p -> ParserSome <$> go p+      ParserMany mLoc p -> ParserMany mLoc <$> go p+      ParserSome mLoc p -> ParserSome mLoc <$> go p       ParserAllOrNothing mLoc p -> ParserAllOrNothing mLoc <$> go p       ParserCheck mLoc forgivable f p -> ParserCheck mLoc forgivable f <$> go p       ParserCommands mLoc mDefault cs -> ParserCommands mLoc mDefault <$> traverse (commandTraverseSetting func) cs@@ -1172,8 +1180,8 @@       ParserSelect p1 p2 -> M.union (go p1) (go p2)       ParserEmpty _ -> M.empty       ParserAlt p1 p2 -> M.union (go p1) (go p2)-      ParserMany p -> go p-      ParserSome p -> go p+      ParserMany _ p -> go p+      ParserSome _ p -> go p       ParserAllOrNothing _ p -> go p -- TODO is this right?       ParserCheck _ _ _ p -> go p       ParserCommands _ _ cs -> M.unions $ map (go . commandParser) cs
src/OptEnvConf/Run.hs view
@@ -381,21 +381,21 @@             Nothing -> do               debug ["Left side failed, trying right side."]               ppIndent $ go p2-      ParserMany p' -> do-        debug [syntaxChunk "Many"]+      ParserMany mLoc p' -> do+        debug [syntaxChunk "Many", ": ", mSrcLocChunk mLoc]         ppIndent $ do           eor <- tryPP $ go p'           case eor of             Nothing -> pure []             Just a -> do-              as <- go (ParserMany p')+              as <- go (ParserMany mLoc p')               pure (a : as)-      ParserSome p' -> do-        debug [syntaxChunk "Some"]+      ParserSome mLoc p' -> do+        debug [syntaxChunk "Some", ": ", mSrcLocChunk mLoc]         ppIndent $ do           a <- go p'           debug ["First element of some succeeded, continuing with Many"]-          as <- go (ParserMany p')+          as <- go (ParserMany mLoc p')           pure (a :| as)       ParserAllOrNothing mLoc p' -> do         debug [syntaxChunk "AllOrNothing", ": ", mSrcLocChunk mLoc]@@ -769,11 +769,11 @@                   Nothing -> do                     debug ["Left side failed, trying right side."]                     ppIndent $ go p2-            ParserMany p' -> do-              debug [syntaxChunk "Many"]+            ParserMany mLoc p' -> do+              debug [syntaxChunk "Many", ": ", mSrcLocChunk mLoc]               ppIndent $ go p'-            ParserSome p' -> do-              debug [syntaxChunk "Some"]+            ParserSome mLoc p' -> do+              debug [syntaxChunk "Some", ": ", mSrcLocChunk mLoc]               ppIndent $ go p'             ParserAllOrNothing mLoc p' -> do               debug [syntaxChunk "AllOrNothing", ": ", mSrcLocChunk mLoc]