@@ -757,16 +757,19 @@
Loading
757 757
758 758
      (implicitTransformerF, implicitTransformer) match {
759 759
        case (Some(localImplicitTreeF), Some(localImplicitTree)) =>
760 -
          c.abort(
761 -
            c.enclosingPosition,
762 -
            s"""Ambiguous implicits while resolving Chimney recursive transformation:
760 +
          if (config.flags.preferPureTransformer)
761 +
            Right(TransformerBodyTree(localImplicitTree.callTransform(srcPrefixTree), isWrapped = false))
762 +
          else
763 +
            c.abort(
764 +
              c.enclosingPosition,
765 +
              s"""Ambiguous implicits while resolving Chimney recursive transformation:
763 766
               |
764 767
               |TransformerF[${config.wrapperType.get}, $From, $To]: $localImplicitTreeF
765 768
               |Transformer[$From, $To]: $localImplicitTree
766 769
               |
767 770
               |Please eliminate ambiguity from implicit scope or use withFieldComputed/withFieldComputedF to decide which one should be used
768 771
               |""".stripMargin
769 -
          )
772 +
            )
770 773
        case (Some(localImplicitTreeF), None) =>
771 774
          Right(TransformerBodyTree(localImplicitTreeF.callTransform(srcPrefixTree), isWrapped = true))
772 775
        case (None, Some(localImplicitTree)) =>

@@ -141,7 +141,8 @@
Loading
141 141
      beanSetters: Boolean = false,
142 142
      beanGetters: Boolean = false,
143 143
      optionDefaultsToNone: Boolean = false,
144 -
      unsafeOption: Boolean = false
144 +
      unsafeOption: Boolean = false,
145 +
      preferPureTransformer: Boolean = false
145 146
  ) {
146 147
    def setFlag(flagTpe: Type, value: Boolean): TransformerFlags = {
147 148
      if (flagTpe =:= FlagsTpes.methodAccessorsT) {
@@ -156,6 +157,8 @@
Loading
156 157
        copy(optionDefaultsToNone = value)
157 158
      } else if (flagTpe =:= FlagsTpes.unsafeOptionT) {
158 159
        copy(unsafeOption = value)
160 +
      } else if (flagTpe =:= FlagsTpes.preferPureTransformerT) {
161 +
        copy(preferPureTransformer = value)
159 162
      } else {
160 163
        // $COVERAGE-OFF$
161 164
        c.abort(c.enclosingPosition, s"Invalid transformer flag type: $flagTpe!")
@@ -178,6 +181,7 @@
Loading
178 181
    val beanGettersT: Type = typeOf[BeanGetters]
179 182
    val optionDefaultsToNoneT: Type = typeOf[OptionDefaultsToNone]
180 183
    val unsafeOptionT: Type = typeOf[UnsafeOption]
184 +
    val preferPureTransformerT: Type = typeOf[PreferPureTransformer]
181 185
  }
182 186
183 187
  def captureTransformerFlags(
Files Coverage
chimney/src/main/scala/io/scalaland/chimney 99.56%
Project Totals (25 files) 99.56%
Sunburst
The inner-most circle is the entire project, moving away from the center are folders then, finally, a single file. The size and color of each slice is representing the number of statements and the coverage, respectively.
Icicle
The top section represents the entire project. Proceeding with folders and finally individual files. The size and color of each slice is representing the number of statements and the coverage, respectively.
Grid
Each block represents a single file in the project. The size and color of each block is represented by the number of statements and the coverage, respectively.
Loading