@@ -23,18 +23,10 @@ sealed trait CliApp[-R, +E, +A] { self =>
2323
2424 final def map [B ](f : A => B ): CliApp [R , E , B ] =
2525 self match {
26- case CliApp .CliAppImpl (name, version, summary, command, execute, footer, config, figFont, configFileResolver) =>
27- CliApp .CliAppImpl (
28- name,
29- version,
30- summary,
31- command,
32- execute.andThen(_.map(f)),
33- footer,
34- config,
35- figFont,
36- configFileResolver
37- )
26+ case impl @ CliApp .CliAppImpl (name, version, summary, command, execute, footer, config, figFont) =>
27+ CliApp
28+ .CliAppImpl (name, version, summary, command, execute.andThen(_.map(f)), footer, config, figFont)
29+ .withConfigFileResolver(impl.configFileResolver)
3830 }
3931
4032 def flatMap [R1 <: R , E1 >: E , B ](f : A => ZIO [R1 , E1 , B ]): CliApp [R1 , E1 , B ]
@@ -57,7 +49,8 @@ object CliApp {
5749 figFont : FigFont = FigFont .Default ,
5850 configFileResolver : ConfigFileResolver = ConfigFileResolver .live
5951 )(execute : Model => ZIO [R , E , A ]): CliApp [R , E , A ] =
60- CliAppImpl (name, version, summary, command, execute, footer, config, figFont, configFileResolver)
52+ CliAppImpl (name, version, summary, command, execute, footer, config, figFont)
53+ .withConfigFileResolver(configFileResolver)
6154
6255 private [cli] case class CliAppImpl [- R , + E , Model , + A ](
6356 name : String ,
@@ -67,9 +60,19 @@ object CliApp {
6760 execute : Model => ZIO [R , E , A ],
6861 footer : HelpDoc = HelpDoc .Empty ,
6962 config : CliConfig = CliConfig .default,
70- figFont : FigFont = FigFont .Default ,
71- configFileResolver : ConfigFileResolver = ConfigFileResolver .live
63+ figFont : FigFont = FigFont .Default
7264 ) extends CliApp [R , E , A ] { self =>
65+
66+ private var _configFileResolver : ConfigFileResolver = ConfigFileResolver .live
67+
68+ def configFileResolver : ConfigFileResolver = _configFileResolver
69+
70+ def withConfigFileResolver (resolver : ConfigFileResolver ): CliAppImpl [R , E , Model , A ] = {
71+ val c = copy()
72+ c._configFileResolver = resolver
73+ c
74+ }
75+
7376 def config (newConfig : CliConfig ): CliApp [R , E , A ] = copy(config = newConfig)
7477
7578 def footer (newFooter : HelpDoc ): CliApp [R , E , A ] =
@@ -155,7 +158,7 @@ object CliApp {
155158 }
156159 )
157160
158- configFileResolver .resolve(self.name).flatMap { case (dotfileArgs, dotfileSources) =>
161+ _configFileResolver .resolve(self.name).flatMap { case (dotfileArgs, dotfileSources) =>
159162 val (mergedArgs, allSources) =
160163 ConfigFileResolver .mergeArgs(dotfileArgs, dotfileSources, filteredArgs)
161164 val diagnosticsEffect =
@@ -175,9 +178,8 @@ object CliApp {
175178 { (app : ZIO [R , E , A ]) => app.flatMap(f) } compose execute,
176179 footer,
177180 config,
178- figFont,
179- configFileResolver
180- )
181+ figFont
182+ ).withConfigFileResolver(_configFileResolver)
181183
182184 override def summary (s : HelpDoc .Span ): CliApp [R , E , A ] =
183185 copy(summary = self.summary + s)
0 commit comments