cdepillabout / pretty-simple

pretty-printer for Haskell data types that have a Show instance
https://hackage.haskell.org/package/pretty-simple
BSD 3-Clause "New" or "Revised" License
243 stars 29 forks source link

Sudden break in the output #115

Closed ulysses4ever closed 2 years ago

ulysses4ever commented 2 years ago

I'm using command-line tool and getting a strange break when trying to print a big record:

[nix-shell:~]$ pretty-simple 
ProjectConfig {projectPackages = [], projectPackagesOptional = [], projectPackagesRepo = [], projectPackagesNamed = [], projectConfigBuildOnly = ProjectConfigBuildOnly {projectConfigVerbosity = Flag (Verbosity {vLevel = Normal, vFlags = fromList [], vQuiet = False}), projectConfigDryRun = Flag False, projectConfigOnlyDeps = Flag False, projectConfigOnlyDownload = Flag False, projectConfigSummaryFile = ["/home/artem/.cabal/logs/build.log"], projectConfigLogFile = NoFlag, projectConfigBuildReports = Flag NoReports, projectConfigReportPlanningFailure = Flag False, projectConfigSymlinkBinDir = NoFlag, projectConfigNumJobs = Flag Nothing, projectConfigKeepGoing = Flag False, projectConfigOfflineMode = Flag False, projectConfigKeepTempFiles = Flag False, projectConfigHttpTransport = NoFlag, projectConfigIgnoreExpiry = NoFlag, projectConfigCacheDir = Flag "/home/artem/.cabal/packages", projectConfigLogsDir = Flag "/home/artem/.cabal/logs", projectConfigClientInstallFlags = ClientInstallFlags {cinstInstallLibs = Flag False, cinstEnvironmentPath = NoFlag, cinstOverwritePolicy = NoFlag, cinstInstallMethod = NoFlag, cinstInstalldir = Flag "/home/artem/.cabal/bin"}}, projectConfigShared = ProjectConfigShared {projectConfigDistDir = NoFlag, projectConfigConfigFile = NoFlag, projectConfigProjectFile = NoFlag, projectConfigIgnoreProject = Flag False, projectConfigHcFlavor = Flag GHC, projectConfigHcPath = NoFlag, projectConfigHcPkg = NoFlag, projectConfigHaddockIndex = Flag "$datadir/doc/$arch-$os-$compiler/index.html", projectConfigPackageDBs = [], projectConfigRemoteRepos = [RemoteRepo {remoteRepoName = RepoName {unRepoName = "hackage.haskell.org"}, remoteRepoURI = http://hackage.haskell.org/, remoteRepoSecure = Just True, remoteRepoRootKeys = ["fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0","1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42","2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3","0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d","51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921"], remoteRepoKeyThreshold = 3, remoteRepoShouldTryHttps = True}], projectConfigLocalNoIndexRepos = [], projectConfigActiveRepos = NoFlag, projectConfigIndexState = NoFlag, projectConfigStoreDir = NoFlag, projectConfigConstraints = [], projectConfigPreferences = [], projectConfigCabalVersion = NoFlag, projectConfigSolver = Flag AlwaysModular, projectConfigAllowOlder = Nothing, projectConfigAllowNewer = Nothing, projectConfigWriteGhcEnvironmentFilesPolicy = NoFlag, projectConfigMaxBackjumps = Flag 4000, projectConfigReorderGoals = Flag (ReorderGoals False), projectConfigCountConflicts = Flag (CountConflicts True), projectConfigFineGrainedConflicts = Flag (FineGrainedConflicts True), projectConfigMinimizeConflictSet = Flag (MinimizeConflictSet False), projectConfigStrongFlags = Flag (StrongFlags False), projectConfigAllowBootLibInstalls = Flag (AllowBootLibInstalls False), projectConfigOnlyConstrained = Flag OnlyConstrainedNone, projectConfigPerComponent = Flag True, projectConfigIndependentGoals = Flag (IndependentGoals False), projectConfigPreferOldest = Flag (PreferOldest False), projectConfigProgPathExtra = ["/home/artem/.cabal/bin"]}, projectConfigProvenance = fromList [], projectConfigAllPackages = PackageConfig {packageConfigProgramPaths = MapLast {getMapLast = fromList []}, packageConfigProgramArgs = MapMappend {getMapMappend = fromList []}, packageConfigProgramPathExtra = ["/home/artem/.cabal/bin"], packageConfigFlagAssignment = fromList [], packageConfigVanillaLib = NoFlag, packageConfigSharedLib = NoFlag, packageConfigStaticLib = NoFlag, packageConfigDynExe = NoFlag, packageConfigFullyStaticExe = NoFlag, packageConfigProf = NoFlag, packageConfigProfLib = NoFlag, packageConfigProfExe = NoFlag, packageConfigProfDetail = NoFlag, packageConfigProfLibDetail = NoFlag, packageConfigConfigureArgs = [], packageConfigOptimization = Flag MaximumOptimisation, packageConfigProgPrefix = NoFlag, packageConfigProgSuffix = NoFlag, packageConfigExtraLibDirs = [], packageConfigExtraLibDirsStatic = [], packageConfigExtraFrameworkDirs = [], packageConfigExtraIncludeDirs = [], packageConfigGHCiLib = NoFlag, packageConfigSplitSections = NoFlag, packageConfigSplitObjs = NoFlag, packageConfigStripExes = NoFlag, packageConfigStripLibs = NoFlag, packageConfigTests = NoFlag, packageConfigBenchmarks = NoFlag, packageConfigCoverage = NoFlag, packageConfigRelocatable = NoFlag, packageConfigDebugInfo = NoFlag, packageConfigDumpBuildInfo = NoFlag, packageConfigRunTests = NoFlag, packageConfigDocumentation = Flag False, packageConfigHaddockHoogle = Flag False, packageConfigHaddockHtml = Flag False, packageConfigHaddockHtmlLocation = NoFlag, packageConfigHaddockForeignLibs = Flag False, packageConfigHaddockExecutables = Flag False, packageConfigHaddockTestSuites = Flag False, packageConfigHaddockBenchmarks = Flag False, packageConfigHaddockInternal = Flag False, packageConfigHaddockCss = NoFlag, packageConfigHaddockLinkedSource = Flag False, packageConfigHaddockQuickJump = Flag False, packageConfigHaddockHscolourCss = NoFlag, packageConfigHaddockContents = NoFlag, packageConfigHaddockIndex = NoFlag, packageConfigHaddockBaseUrl = NoFlag, packageConfigHaddockLib = NoFlag, packageConfigHaddockForHackage = NoFlag, packageConfigTestHumanLog = Flag "$pkgid-$test-suite.log", packageConfigTestMachineLog = Flag "$pkgid.log", packageConfigTestShowDetails = Flag Failures, packageConfigTestKeepTix = Flag False, packageConfigTestWrapper = NoFlag, packageConfigTestFailWhenNoTestSuites = Flag False, packageConfigTestTestOptions = [], packageConfigBenchmarkOptions = []}, projectConfigLocalPackages = PackageConfig {packageConfigProgramPaths = MapLast {getMapLast = fromList []}, packageConfigProgramArgs = MapMappend {getMapMappend = fromList []}, packageConfigProgramPathExtra = [], packageConfigFlagAssignment = fromList [], packageConfigVanillaLib = NoFlag, packageConfigSharedLib = NoFlag, packageConfigStaticLib = NoFlag, packageConfigDynExe = NoFlag, packageConfigFullyStaticExe = NoFlag, packageConfigProf = NoFlag, packageConfigProfLib = NoFlag, packageConfigProfExe = NoFlag, packageConfigProfDetail = NoFlag, packageConfigProfLibDetail = NoFlag, packageConfigConfigureArgs = [], packageConfigOptimization = NoFlag, packageConfigProgPrefix = NoFlag, packageConfigProgSuffix = NoFlag, packageConfigExtraLibDirs = [], packageConfigExtraLibDirsStatic = [], packageConfigExtraFrameworkDirs = [], packageConfigExtraIncludeDirs = [], packageConfigGHCiLib = NoFlag, packageConfigSplitSections = NoFlag, packageConfigSplitObjs = NoFlag, packageConfigStripExes = NoFlag, packageConfigStripLibs = NoFlag, packageConfigTests = NoFlag, packageConfigBenchmarks = NoFlag, packageConfigCoverage = NoFlag, packageConfigRelocatable = NoFlag, packageConfigDebugInfo = NoFlag, packageConfigDumpBuildInfo = NoFlag, packageConfigRunTests = NoFlag, packageConfigDocumentation = NoFlag, packageConfigHaddockHoogle = NoFlag, packageConfigHaddockHtml = NoFlag, packageConfigHaddockHtmlLocation = NoFlag, packageConfigHaddockForeignLibs = NoFlag, packageConfigHaddockExecutables = NoFlag, packageConfigHaddockTestSuites = NoFlag, packageConfigHaddockBenchmarks = NoFlag, packageConfigHaddockInternal = NoFlag, packageConfigHaddockCss = NoFlag, packageConfigHaddockLinkedSource = NoFlag, packageConfigHaddockQuickJump = NoFlag, packageConfigHaddockHscolourCss = NoFlag, packageConfigHaddockContents = NoFlag, packageConfigHaddockIndex = NoFlag, packageConfigHaddockBaseUrl = NoFlag, packageConfigHaddockLib = NoFlag, packageConfigHaddockForHackage = NoFlag, packageConfigTestHumanLog = NoFlag, packageConfigTestMachineLog = NoFlag, packageConfigTestShowDetails = NoFlag, packageConfigTestKeepTix = NoFlag, packageConfigTestWrapper = NoFlag, packageConfigTestFailWhenNoTestSuites = NoFlag, packageConfigTestTestOptions = [], packageConfigBenchmarkOptions = []}, projectConfigSpecificPackage = MapMappend {getMapMappend = fromList []}}
ProjectConfig
    { projectPackages = []
    , projectPackagesOptional = []
    , projectPackagesRepo = []
    , projectPackagesNamed = []
    , projectConfigBuildOnly = ProjectConfigBuildOnly
        { projectConfigVerbosity = Flag
            ( Verbosity
                { vLevel = Normal
                , vFlags = fromList []
                , vQuiet = False
                }
            )
        , projectConfigDryRun = Flag False
        , projectConfigOnlyDeps = Flag False
        , projectConfigOnlyDownload = Flag False
        , projectConfigSummaryFile = [ "/home/artem/.cabal/logs/build.log" ]
        , projectConfigLogFile = NoFlag
        , projectConfigBuildReports = Flag NoReports
        , projectConfigReportPlanningFailure = Flag False
        , projectConfigSymlinkBinDir = NoFlag
        , projectConfigNumJobs = Flag Nothing
        , projectConfigKeepGoing = Flag False
        , projectConfigOfflineMode = Flag False
        , projectConfigKeepTempFiles = Flag False
        , projectConfigHttpTransport = NoFlag
        , projectConfigIgnoreExpiry = NoFlag
        , projectConfigCacheDir = Flag "/home/artem/.cabal/packages"
        , projectConfigLogsDir = Flag "/home/artem/.cabal/logs"
        , projectConfigClientInstallFlags = ClientInstallFlags
            { cinstInstallLibs = Flag False
            , cinstEnvironmentPath = NoFlag
            , cinstOverwritePolicy = NoFlag
            , cinstInstallMethod = NoFlag
            , cinstInstalldir = Flag "/home/artem/.cabal/bin"
            }
        }
    , projectConfigShared = ProjectConfigShared
        { projectConfigDistDir = NoFlag
        , projectConfigConfigFile = NoFlag
        , projectConfigProjectFile = NoFlag
        , projectConfigIgnoreProject = Flag False
        , projectConfigHcFlavor = Flag GHC
        , projectConfigHcPath = NoFlag
        , projectConfigHcPkg = NoFlag
        , projectConfigHaddockIndex = Flag "$datadir/doc/$arch-$os-$compiler/index.html"
        , projectConfigPackageDBs = []
        , projectConfigRemoteRepos =
            [ RemoteRepo
                { remoteRepoName = RepoName
                    { unRepoName = "hackage.haskell.org" }
                , remoteRepoURI = http://hackage.haskell.org/
                , remoteRepoSecure = Just True
                , remoteRepoRootKeys =
                    [ "fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0"
                    , "1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42"
                    , "2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3"
                    , "0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d"
                    , "51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921"
                    ]
                , remoteRepoKeyThreshold = 3
                , remoteRepoShouldTryHttps = True
                }
            ]
        , projectConfigLocalNoIndexRepos = []
        , projectConfigActiveRepos = NoFlag
        , projectConfigIndexState = NoFlag
        , projectConfigStoreDir = NoFlag
        , projectConfigConstraints = []
        , projectConfigPreferences = []
        , projectConfigCabalVersion = NoFlag
        , projectConfigSolver = Flag AlwaysModular
        , projectConfigAllowOlder = Nothing
        , projectConfigAllowNewer = Nothing
        , projectConfigWriteGhcEnvironmentFilesPolicy = NoFlag
        , projectConfigMaxBackjumps = Flag 4000
        , projectConfigReorderGoals = Flag ( ReorderGoals False )
        , projectConfigCountConflicts = Flag ( CountConflicts True )
        , projectConfigFineGrainedConflicts = Flag ( FineGrainedConflicts True )
        , projectConfigMinimizeConflictSet = Flag ( MinimizeConflictSet False )
        , projectConfigStrongFlags = Flag ( StrongFlags False )
        , projectConfigAllowBootLibInstalls = Flag ( AllowBootLibInstalls False )
        , projectConfigOnlyConstrained = Flag OnlyConstrainedNone
        , projectConfigPerComponent = Flag True
        , projectConfigIndependentGoals = Flag ( IndependentGoals False )
        , projectConfigPreferOldest = Flag ( PreferOldest False )
        , projectConfigProgPathExtra = [ "/home/artem/.cabal/bin" ]
        }
    , projectConfigProvenance = fromList []
    , projectConfigAllPackages = PackageConfig
        { packageConfigProgramPaths = MapLast
            { getMapLast = fromList [] }
        , packageConfigProgramArgs = MapMappend
            { getMapMappend = fromList [] }
        , packageConfigProgramPathExtra = [ "/home/artem/.cabal/bin" ]
        , packageConfigFlagAssignment = fromList []
        , packageConfigVanillaLib = NoFlag
        , packageConfigSharedLib = NoFlag
        , packageConfigStaticLib = NoFlag
        , packageConfigDynExe = NoFlag
        , packageConfigFullyStaticExe = NoFlag
        , packageConfigProf = NoFlag
        , packageConfigProfLib = NoFlag
        , packageConfigProfExe = NoFlag
        , packageConfigProfDetail = NoFlag
        , packageConfigProfLibDetail = NoFlag
        , packageConfigConfigureArgs = []
        , packageConfigOptimization = Flag MaximumOptimisation
        , packageConfigProgPrefix = NoFlag
        , packageConfigProgSuffix = NoFlag
        , packageConfigExtraLibDirs = []
        , packageConf
        }
    }

What's up with the last "field" packageConf? It looks like truncated packageConfigExtraLibDirsStatic. And where is the rest?..

georgefst commented 2 years ago

Weird. It's consistently cutting off at 4096 characters, whatever the input. If you need a workaround, I've found that writing to a file and piping from cat works.

Must be something related to Linux terminal buffers. Not my area of expertise unfortunately. @cdepillabout Any ideas?

ulysses4ever commented 2 years ago

Oh, thanks a lot for the diagnosis and workaround! That should work for me.

georgefst commented 2 years ago

Actually, from a brief look at this thread, it looks like maybe this is just a Linux limit, and not something that pretty-simple can do anything about.

ulysses4ever commented 2 years ago

I'm fine with closing if you think that would be best. Thanks again!

georgefst commented 2 years ago

Great, thanks.

If you want something you can copy-paste in to, try https://georgefst.github.io/pretty-simple.

cdepillabout commented 2 years ago

@georgefst Nice diagnosis!