Skip to content

Allow flags to be applied to some field/subtype but not its children #768

Description

@MateuszKubuszok

Basically, implement regional flag from Ducktape.

It would be similar to implementation for current scoped flags (or local flags from Ducktape) which are implemented like

def withSourceFlag[T](
selectorFrom: From => T
): TransformerSourceFlagsDsl.OfTransformerDefinition[From, To, Overrides, Flags, ? <: Path] =
macro TransformerDefinitionMacros.withSourceFlagImpl[From, To, Overrides, Flags]

final class Source[SourcePath <: Path, SourceFlags <: TransformerFlags, Flags <: TransformerFlags]
extends TransformerFlags
final class Target[TargetPath <: Path, TargetFlags <: TransformerFlags, Flags <: TransformerFlags]
extends TransformerFlags

def prepareForRecursiveCall(fromPath: Path, toPath: Path)(implicit
ctx: TransformationContext[?, ?]
): TransformerFlags = {
val (immediate, nested) = scopedUpdates.view
.flatMap { case (path, update) => path.drop(fromPath, toPath).map(_ -> update) }
.partition(_._1.path == Path.Root)
immediate.map(_._2).foldLeft(this)((f, u) => u(f)).copy(scopedUpdates = nested.toList)
}

(separate macro, returning a separate type, handled in Configuration).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    dragons aheadTask which requires handwriting compiletime reflection for Scala2&3 and/or updating the architectureenhancement

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions