Skip to content

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

@MateuszKubuszok

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).

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