Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ghc-optparse-applicative for openSUSE:Factory checked in at 2022-02-11 23:09:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ghc-optparse-applicative (Old) and /work/SRC/openSUSE:Factory/.ghc-optparse-applicative.new.1956 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-optparse-applicative" Fri Feb 11 23:09:25 2022 rev:22 rq:953507 version:0.17.0.0 Changes: -------- --- /work/SRC/openSUSE:Factory/ghc-optparse-applicative/ghc-optparse-applicative.changes 2021-12-19 17:35:05.204292419 +0100 +++ /work/SRC/openSUSE:Factory/.ghc-optparse-applicative.new.1956/ghc-optparse-applicative.changes 2022-02-11 23:11:20.731281940 +0100 @@ -1,0 +2,17 @@ +Tue Feb 1 10:27:45 UTC 2022 - Peter Simons <psim...@suse.com> + +- Update optparse-applicative to version 0.17.0.0. + ## Version 0.17.0.0 (1 Feb 2022) + + - Make tabulation width configurable in usage texts. + + - Separate program name and description in ParserHelp type. + + - Add `helperWith` function, which can be easily used to + localize the help flag. + + - Improve usage texts when command names are long. + + - Improve Documentation. + +------------------------------------------------------------------- Old: ---- optparse-applicative-0.16.1.0.tar.gz optparse-applicative.cabal New: ---- optparse-applicative-0.17.0.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ghc-optparse-applicative.spec ++++++ --- /var/tmp/diff_new_pack.COVqhZ/_old 2022-02-11 23:11:21.211283328 +0100 +++ /var/tmp/diff_new_pack.COVqhZ/_new 2022-02-11 23:11:21.219283352 +0100 @@ -1,7 +1,7 @@ # # spec file for package ghc-optparse-applicative # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,13 +19,12 @@ %global pkg_name optparse-applicative %bcond_with tests Name: ghc-%{pkg_name} -Version: 0.16.1.0 +Version: 0.17.0.0 Release: 0 Summary: Utilities and combinators for parsing command line options License: BSD-3-Clause URL: https://hackage.haskell.org/package/%{pkg_name} Source0: https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz -Source1: https://hackage.haskell.org/package/%{pkg_name}-%{version}/revision/2.cabal#/%{pkg_name}.cabal BuildRequires: ghc-Cabal-devel BuildRequires: ghc-ansi-wl-pprint-devel BuildRequires: ghc-process-devel @@ -62,7 +61,6 @@ %prep %autosetup -n %{pkg_name}-%{version} -cp -p %{SOURCE1} %{pkg_name}.cabal %build %ghc_lib_build ++++++ optparse-applicative-0.16.1.0.tar.gz -> optparse-applicative-0.17.0.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/CHANGELOG.md new/optparse-applicative-0.17.0.0/CHANGELOG.md --- old/optparse-applicative-0.16.1.0/CHANGELOG.md 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/CHANGELOG.md 2001-09-09 03:46:40.000000000 +0200 @@ -1,3 +1,16 @@ +## Version 0.17.0.0 (1 Feb 2022) + +- Make tabulation width configurable in usage texts. + +- Separate program name and description in ParserHelp type. + +- Add `helperWith` function, which can be easily used to + localize the help flag. + +- Improve usage texts when command names are long. + +- Improve Documentation. + ## Version 0.16.1.0 (21 Nov 2020) - Guard `process` dependency behind an on by default flag. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/README.md new/optparse-applicative-0.17.0.0/README.md --- old/optparse-applicative-0.16.1.0/README.md 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/README.md 2001-09-09 03:46:40.000000000 +0200 @@ -527,22 +527,6 @@ global options that apply to all of them. Typical examples are version control systems like `git`, or build tools like `cabal`. -A command can be created using the `subparser` builder (or `hsubparser`, -which is identical but for an additional `--help` option on each -command), and commands can be added with the `command` modifier. -For example - -```haskell -subparser - ( command "add" (info addOptions ( progDesc "Add a file to the repository" )) - <> command "commit" (info commitOptions ( progDesc "Record changes to the repository" )) - ) -``` - -Each command takes a full `ParserInfo` structure, which will be -used to extract a description for this command when generating a -help text. - Note that all the parsers appearing in a command need to have the same type. For this reason, it is often best to use a sum type which has the same structure as the command itself. For example, @@ -559,6 +543,22 @@ ... ``` +A command can then be created using the `subparser` builder (or +`hsubparser`, which is identical but for an additional `--help` option +on each command), and commands can be added with the `command` +modifier. For example, + +```haskell +subparser + ( command "add" (info addCommand ( progDesc "Add a file to the repository" )) + <> command "commit" (info commitCommand ( progDesc "Record changes to the repository" )) + ) +``` + +Each command takes a full `ParserInfo` structure, which will be +used to extract a description for this command when generating a +help text. + Alternatively, you can directly return an `IO` action from a parser, and execute it using `join` from `Control.Monad`. @@ -702,6 +702,11 @@ ``` +**Note**. If an option name is a prefix of another option, then it +will never be matched when disambiguation is on. See +[#419](https://github.com/pcapriotti/optparse-applicative/issues/419) +for more details. + ### Customising the help screen optparse-applicative has a number of combinators to help customise @@ -1020,6 +1025,6 @@ [monoid]: http://hackage.haskell.org/package/base/docs/Data-Monoid.html [semigroup]: http://hackage.haskell.org/package/base/docs/Data-Semigroup.html [parsec]: http://hackage.haskell.org/package/parsec - [status]: http://travis-ci.org/pcapriotti/optparse-applicative?branch=master - [status-png]: https://api.travis-ci.org/pcapriotti/optparse-applicative.svg?branch=master + [status]: https://github.com/pcapriotti/optparse-applicative/actions/workflows/haskell-ci.yml + [status-png]: https://github.com/pcapriotti/optparse-applicative/workflows/Haskell-CI/badge.svg [ansi-wl-pprint]: http://hackage.haskell.org/package/ansi-wl-pprint diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/optparse-applicative.cabal new/optparse-applicative-0.17.0.0/optparse-applicative.cabal --- old/optparse-applicative-0.16.1.0/optparse-applicative.cabal 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/optparse-applicative.cabal 2001-09-09 03:46:40.000000000 +0200 @@ -1,5 +1,5 @@ name: optparse-applicative -version: 0.16.1.0 +version: 0.17.0.0 synopsis: Utilities and combinators for parsing command line options description: optparse-applicative is a haskell library for parsing options @@ -36,6 +36,7 @@ tests/helponemptysub.err.txt tests/long_equals.err.txt tests/formatting.err.txt + tests/formatting-long-subcommand.err.txt tests/nested.err.txt tests/optional.err.txt tests/nested_optional.err.txt @@ -54,7 +55,9 @@ GHC==8.2.2, GHC==8.4.4, GHC==8.6.5, - GHC==8.8.1 + GHC==8.8.4, + GHC==8.10.4, + GHC==9.0.1 source-repository head type: git @@ -95,15 +98,15 @@ , Options.Applicative.Internal build-depends: base == 4.* - , transformers >= 0.2 && < 0.6 - , transformers-compat >= 0.3 && < 0.7 + , transformers >= 0.2 && < 0.7 + , transformers-compat >= 0.3 && < 0.8 , ansi-wl-pprint >= 0.6.8 && < 0.7 if flag(process) build-depends: process >= 1.0 && < 1.7 if !impl(ghc >= 8) - build-depends: semigroups >= 0.10 && < 0.20 + build-depends: semigroups >= 0.10 && < 0.21 , fail == 4.9.* test-suite tests @@ -122,6 +125,7 @@ , Examples.Commands , Examples.Formatting , Examples.Hello + , Examples.LongSub build-depends: base , optparse-applicative diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/src/Options/Applicative/Builder.hs new/optparse-applicative-0.17.0.0/src/Options/Applicative/Builder.hs --- old/optparse-applicative-0.16.1.0/src/Options/Applicative/Builder.hs 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/src/Options/Applicative/Builder.hs 2001-09-09 03:46:40.000000000 +0200 @@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-} - module Options.Applicative.Builder ( -- * Parser builders -- @@ -89,6 +88,7 @@ columns, helpLongEquals, helpShowGlobals, + helpIndent, prefs, defaultPrefs, @@ -219,7 +219,7 @@ -- -- /NOTE/: This builder is more flexible than its name and example -- allude. One of the motivating examples for its addition was to --- used `const` to completely replace the usage text of an option. +-- use `const` to completely replace the usage text of an option. style :: ( Doc -> Doc ) -> Mod f a style x = optionMod $ \p -> p { propDescMod = Just x } @@ -273,6 +273,11 @@ -- | Builder for a command parser. The 'command' modifier can be used to -- specify individual commands. +-- +-- By default, sub-parsers allow backtracking to their parent's options when +-- they are completed. To allow full mixing of parent and sub-parser options, +-- turn on 'subparserInline'; otherwise, to disable backtracking completely, +-- use 'noBacktrack'. subparser :: Mod CommandFields a -> Parser a subparser m = mkParser d g rdr where @@ -385,7 +390,7 @@ instance Semigroup (InfoMod a) where m1 <> m2 = InfoMod $ applyInfoMod m2 . applyInfoMod m1 --- | Show a full description in the help text of this parser. +-- | Show a full description in the help text of this parser (default). fullDesc :: InfoMod a fullDesc = InfoMod $ \i -> i { infoFullDesc = True } @@ -517,9 +522,14 @@ helpLongEquals :: PrefsMod helpLongEquals = PrefsMod $ \p -> p { prefHelpLongEquals = True } --- | Show global help information in subparser usage +-- | Show global help information in subparser usage. helpShowGlobals :: PrefsMod -helpShowGlobals = PrefsMod $ \p -> p { prefHelpShowGlobal = True} +helpShowGlobals = PrefsMod $ \p -> p { prefHelpShowGlobal = True } + +-- | Set fill width in help text presentation. +helpIndent :: Int -> PrefsMod +helpIndent w = PrefsMod $ \p -> p { prefTabulateFill = w } + -- | Create a `ParserPrefs` given a modifier @@ -534,7 +544,8 @@ , prefBacktrack = Backtrack , prefColumns = 80 , prefHelpLongEquals = False - , prefHelpShowGlobal = False } + , prefHelpShowGlobal = False + , prefTabulateFill = 24 } -- Convenience shortcuts diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/src/Options/Applicative/Extra.hs new/optparse-applicative-0.17.0.0/src/Options/Applicative/Extra.hs --- old/optparse-applicative-0.16.1.0/src/Options/Applicative/Extra.hs 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/src/Options/Applicative/Extra.hs 2001-09-09 03:46:40.000000000 +0200 @@ -4,6 +4,7 @@ -- -- | This module contains high-level functions to run parsers. helper, + helperWith, hsubparser, execParser, customExecParser, @@ -47,16 +48,32 @@ helper :: Parser (a -> a) helper = + helperWith (mconcat [ + long "help", + short 'h', + help "Show this help text" + ]) + +-- | Like helper, but with a minimal set of modifiers that can be extended +-- as desired. +-- +-- > opts :: ParserInfo Sample +-- > opts = info (sample <**> helperWith (mconcat [ +-- > long "help", +-- > short 'h', +-- > help "Show this help text", +-- > hidden +-- > ])) mempty +helperWith :: Mod OptionFields (a -> a) -> Parser (a -> a) +helperWith modifiers = option helpReader $ mconcat - [ long "help", - short 'h', - help "Show this help text", - value id, + [ value id, metavar "", noGlobal, noArgError (ShowHelpText Nothing), - hidden + hidden, + modifiers ] where helpReader = do @@ -197,9 +214,10 @@ InfoMsg _ -> mempty _ - -> usageHelp $ vcatChunks - [ pure . parserUsage pprefs (infoParser i) . unwords $ progn : names - , fmap (indent 2) . infoProgDesc $ i ] + -> mconcat [ + usageHelp (pure . parserUsage pprefs (infoParser i) . unwords $ progn : names) + , descriptionHelp (infoProgDesc i) + ] error_help = errorHelp $ case msg of ShowHelpText {} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/src/Options/Applicative/Help/Chunk.hs new/optparse-applicative-0.17.0.0/src/Options/Applicative/Help/Chunk.hs --- old/optparse-applicative-0.16.1.0/src/Options/Applicative/Help/Chunk.hs 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/src/Options/Applicative/Help/Chunk.hs 2001-09-09 03:46:40.000000000 +0200 @@ -128,12 +128,9 @@ paragraph = foldr (chunked (</>) . stringChunk) mempty . words -tabulate' :: Int -> [(Doc, Doc)] -> Chunk Doc -tabulate' _ [] = mempty -tabulate' size table = pure $ vcat +-- | Display pairs of strings in a table. +tabulate :: Int -> [(Doc, Doc)] -> Chunk Doc +tabulate _ [] = mempty +tabulate size table = pure $ vcat [ indent 2 (fillBreak size key <+> value) | (key, value) <- table ] - --- | Display pairs of strings in a table. -tabulate :: [(Doc, Doc)] -> Chunk Doc -tabulate = tabulate' 24 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/src/Options/Applicative/Help/Core.hs new/optparse-applicative-0.17.0.0/src/Options/Applicative/Help/Core.hs --- old/optparse-applicative-0.16.1.0/src/Options/Applicative/Help/Core.hs 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/src/Options/Applicative/Help/Core.hs 2001-09-09 03:46:40.000000000 +0200 @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} module Options.Applicative.Help.Core ( cmdDesc, briefDesc, @@ -9,6 +10,7 @@ headerHelp, suggestionsHelp, usageHelp, + descriptionHelp, bodyHelp, footerHelp, globalsHelp, @@ -23,8 +25,12 @@ import Data.List (sort, intersperse, groupBy) import Data.Foldable (any, foldl') import Data.Maybe (maybeToList, catMaybes, fromMaybe) +#if !MIN_VERSION_base(4,8,0) import Data.Monoid (mempty) +#endif +#if !MIN_VERSION_base(4,11,0) import Data.Semigroup (Semigroup (..)) +#endif import Prelude hiding (any) import Options.Applicative.Common @@ -83,14 +89,14 @@ in (modified, wrapping) -- | Generate descriptions for commands. -cmdDesc :: Parser a -> [(Maybe String, Chunk Doc)] -cmdDesc = mapParser desc +cmdDesc :: ParserPrefs -> Parser a -> [(Maybe String, Chunk Doc)] +cmdDesc pprefs = mapParser desc where desc _ opt = case optMain opt of CmdReader gn cmds p -> (,) gn $ - tabulate + tabulate (prefTabulateFill pprefs) [ (string cmd, align (extractChunk d)) | cmd <- reverse cmds, d <- maybeToList . fmap infoProgDesc $ p cmd @@ -188,7 +194,7 @@ -- | Common generator for full descriptions and globals optionsDesc :: Bool -> ParserPrefs -> Parser a -> Chunk Doc -optionsDesc global pprefs = tabulate . catMaybes . mapParser doc +optionsDesc global pprefs = tabulate (prefTabulateFill pprefs) . catMaybes . mapParser doc where doc info opt = do guard . not . isEmpty $ n @@ -220,6 +226,9 @@ usageHelp :: Chunk Doc -> ParserHelp usageHelp chunk = mempty { helpUsage = chunk } +descriptionHelp :: Chunk Doc -> ParserHelp +descriptionHelp chunk = mempty { helpDescription = chunk } + bodyHelp :: Chunk Doc -> ParserHelp bodyHelp chunk = mempty { helpBody = chunk } @@ -234,7 +243,7 @@ : (group_title <$> cs) where def = "Available commands:" - cs = groupBy ((==) `on` fst) $ cmdDesc p + cs = groupBy ((==) `on` fst) $ cmdDesc pprefs p group_title a@((n, _) : _) = with_title (fromMaybe def n) $ @@ -256,11 +265,12 @@ -- | Generate option summary. parserUsage :: ParserPrefs -> Parser a -> String -> Doc parserUsage pprefs p progn = - hsep - [ string "Usage:", - string progn, - align (extractChunk (briefDesc pprefs p)) - ] + group $ + hsep + [ string "Usage:", + string progn, + hangAtIfOver 9 35 (extractChunk (briefDesc pprefs p)) + ] -- | Peek at the structure of the rendered tree within. -- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/src/Options/Applicative/Help/Pretty.hs new/optparse-applicative-0.17.0.0/src/Options/Applicative/Help/Pretty.hs --- old/optparse-applicative-0.16.1.0/src/Options/Applicative/Help/Pretty.hs 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/src/Options/Applicative/Help/Pretty.hs 2001-09-09 03:46:40.000000000 +0200 @@ -1,12 +1,16 @@ +{-# LANGUAGE CPP #-} module Options.Applicative.Help.Pretty ( module Text.PrettyPrint.ANSI.Leijen , (.$.) , groupOrNestLine , altSep + , hangAtIfOver ) where import Control.Applicative +#if !MIN_VERSION_base(4,11,0) import Data.Semigroup ((<>)) +#endif import Text.PrettyPrint.ANSI.Leijen hiding ((<$>), (<>), columns) import Text.PrettyPrint.ANSI.Leijen.Internal (Doc (..), flatten) @@ -21,12 +25,24 @@ -- | Apply the function if we're not at the -- start of our nesting level. ifNotAtRoot :: (Doc -> Doc) -> Doc -> Doc -ifNotAtRoot f doc = +ifNotAtRoot = + ifElseAtRoot id + +-- | Apply the function if we're not at the +-- start of our nesting level. +ifAtRoot :: (Doc -> Doc) -> Doc -> Doc +ifAtRoot = + flip ifElseAtRoot id + +-- | Apply the function if we're not at the +-- start of our nesting level. +ifElseAtRoot :: (Doc -> Doc) -> (Doc -> Doc) -> Doc -> Doc +ifElseAtRoot f g doc = Nesting $ \i -> Column $ \j -> if i == j - then doc - else f doc + then f doc + else g doc -- | Render flattened text on this line, or start @@ -54,3 +70,23 @@ altSep :: Doc -> Doc -> Doc altSep x y = group (x <+> char '|' <> line) <//> y + + +-- | Printer hacks to get nice indentation for long commands +-- and subcommands. +-- +-- If we're starting this section over the desired width +-- ?? (usually 1/3 of the ribbon), then we will make a line +-- break, indent all of the usage, and go. +-- +-- The ifAtRoot is an interesting clause. If this whole +-- operation is put under a `group` then the linebreak +-- will disappear; then item d will therefore not be at +-- the starting column, and it won't be indented more. +hangAtIfOver :: Int -> Int -> Doc -> Doc +hangAtIfOver i j d = + Column $ \k -> + if k <= j then + align d + else + linebreak <> ifAtRoot (indent i) d diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/src/Options/Applicative/Help/Types.hs new/optparse-applicative-0.17.0.0/src/Options/Applicative/Help/Types.hs --- old/optparse-applicative-0.16.1.0/src/Options/Applicative/Help/Types.hs 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/src/Options/Applicative/Help/Types.hs 2001-09-09 03:46:40.000000000 +0200 @@ -14,26 +14,30 @@ , helpSuggestions :: Chunk Doc , helpHeader :: Chunk Doc , helpUsage :: Chunk Doc + , helpDescription :: Chunk Doc , helpBody :: Chunk Doc , helpGlobals :: Chunk Doc - , helpFooter :: Chunk Doc } + , helpFooter :: Chunk Doc + } instance Show ParserHelp where showsPrec _ h = showString (renderHelp 80 h) instance Monoid ParserHelp where - mempty = ParserHelp mempty mempty mempty mempty mempty mempty mempty + mempty = ParserHelp mempty mempty mempty mempty mempty mempty mempty mempty mappend = (<>) instance Semigroup ParserHelp where - (ParserHelp e1 s1 h1 u1 b1 g1 f1) <> (ParserHelp e2 s2 h2 u2 b2 g2 f2) + (ParserHelp e1 s1 h1 u1 d1 b1 g1 f1) <> (ParserHelp e2 s2 h2 u2 d2 b2 g2 f2) = ParserHelp (mappend e1 e2) (mappend s1 s2) (mappend h1 h2) (mappend u1 u2) - (mappend b1 b2) (mappend g1 g2) - (mappend f1 f2) + (mappend d1 d2) (mappend b1 b2) + (mappend g1 g2) (mappend f1 f2) helpText :: ParserHelp -> Doc -helpText (ParserHelp e s h u b g f) = extractChunk . vsepChunks $ [e, s, h, u, b, g, f] +helpText (ParserHelp e s h u d b g f) = + extractChunk $ + vsepChunks [e, s, h, u, fmap (indent 2) d, b, g, f] -- | Convert a help text to 'String'. renderHelp :: Int -> ParserHelp -> String diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/src/Options/Applicative/NonEmpty.hs new/optparse-applicative-0.17.0.0/src/Options/Applicative/NonEmpty.hs --- old/optparse-applicative-0.16.1.0/src/Options/Applicative/NonEmpty.hs 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/src/Options/Applicative/NonEmpty.hs 2001-09-09 03:46:40.000000000 +0200 @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP, Rank2Types, ExistentialQuantification #-} module Options.Applicative.NonEmpty ( some1 ) where diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/src/Options/Applicative/Types.hs new/optparse-applicative-0.17.0.0/src/Options/Applicative/Types.hs --- old/optparse-applicative-0.16.1.0/src/Options/Applicative/Types.hs 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/src/Options/Applicative/Types.hs 2001-09-09 03:46:40.000000000 +0200 @@ -125,7 +125,8 @@ -- single space (default: False) , prefHelpShowGlobal :: Bool -- ^ when displaying subparsers' usage help, -- show parent options under a "global options" - -- section (default: True) + -- section (default: False) + , prefTabulateFill ::Int -- ^ Indentation width for tables } deriving (Eq, Show) data OptName = OptShort !Char diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/tests/Examples/LongSub.hs new/optparse-applicative-0.17.0.0/tests/Examples/LongSub.hs --- old/optparse-applicative-0.16.1.0/tests/Examples/LongSub.hs 1970-01-01 01:00:00.000000000 +0100 +++ new/optparse-applicative-0.17.0.0/tests/Examples/LongSub.hs 2001-09-09 03:46:40.000000000 +0200 @@ -0,0 +1,34 @@ +{-# LANGUAGE CPP #-} +module Examples.LongSub where + +import Data.Monoid +import Options.Applicative + +#if __GLASGOW_HASKELL__ <= 702 +(<>) :: Monoid a => a -> a -> a +(<>) = mappend +#endif + +data Sample + = Hello [String] + | Goodbye + deriving (Eq, Show) + +hello :: Parser Sample +hello = + Hello + <$> many (argument str (metavar "TARGET...")) + <* switch (long "first-flag") + <* switch (long "second-flag") + <* switch (long "third-flag") + <* switch (long "fourth-flag") + +sample :: Parser Sample +sample = hsubparser + ( command "hello-very-long-sub" + (info hello + (progDesc "Print greeting")) + ) + +opts :: ParserInfo Sample +opts = info (sample <**> helper) idm diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/tests/cabal.err.txt new/optparse-applicative-0.17.0.0/tests/cabal.err.txt --- old/optparse-applicative-0.16.1.0/tests/cabal.err.txt 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/tests/cabal.err.txt 2001-09-09 03:46:40.000000000 +0200 @@ -1,4 +1,5 @@ Usage: cabal configure [--enable-tests] [-f|--flags FLAGS] + Prepare to build the package Available options: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/tests/formatting-long-subcommand.err.txt new/optparse-applicative-0.17.0.0/tests/formatting-long-subcommand.err.txt --- old/optparse-applicative-0.16.1.0/tests/formatting-long-subcommand.err.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/optparse-applicative-0.17.0.0/tests/formatting-long-subcommand.err.txt 2001-09-09 03:46:40.000000000 +0200 @@ -0,0 +1,9 @@ +Usage: formatting-long-subcommand hello-very-long-sub + [TARGET...] [--first-flag] + [--second-flag] [--third-flag] + [--fourth-flag] + + Print greeting + +Available options: + -h,--help Show this help text diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/tests/formatting.err.txt new/optparse-applicative-0.17.0.0/tests/formatting.err.txt --- old/optparse-applicative-0.16.1.0/tests/formatting.err.txt 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/tests/formatting.err.txt 2001-09-09 03:46:40.000000000 +0200 @@ -1,4 +1,5 @@ Usage: formatting [-t|--test FOO_BAR_BAZ_LONG_METAVARIABLE] + This is a very long program description. This text should be automatically wrapped to fit the size of the terminal diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/tests/hello.err.txt new/optparse-applicative-0.17.0.0/tests/hello.err.txt --- old/optparse-applicative-0.16.1.0/tests/hello.err.txt 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/tests/hello.err.txt 2001-09-09 03:46:40.000000000 +0200 @@ -1,6 +1,7 @@ hello - a test for optparse-applicative Usage: hello --hello TARGET [-q|--quiet] [--repeat INT] + Print a greeting for TARGET Available options: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.16.1.0/tests/test.hs new/optparse-applicative-0.17.0.0/tests/test.hs --- old/optparse-applicative-0.16.1.0/tests/test.hs 2001-09-09 03:46:40.000000000 +0200 +++ new/optparse-applicative-0.17.0.0/tests/test.hs 2001-09-09 03:46:40.000000000 +0200 @@ -9,6 +9,7 @@ import qualified Examples.Cabal as Cabal import qualified Examples.Alternatives as Alternatives import qualified Examples.Formatting as Formatting +import qualified Examples.LongSub as LongSub import Control.Applicative import Control.Monad @@ -891,6 +892,18 @@ post = run i ["--help", "not-a-command"] in grabHelpMessage pre === grabHelpMessage post + +prop_long_command_line_flow :: Property +prop_long_command_line_flow = once $ + let p = LongSub.sample <**> helper + i = info p + ( progDesc (concat + [ "This is a very long program description. " + , "This text should be automatically wrapped " + , "to fit the size of the terminal" ]) ) + in checkHelpTextWith ExitSuccess (prefs (columns 50)) "formatting-long-subcommand" i ["hello-very-long-sub", "--help"] + + --- deriving instance Arbitrary a => Arbitrary (Chunk a)